跳转到主要内容
文档版本:V1.0;修订日期:2024-10-12。

概述

MRDVS 相机 SDK Linux 开发包提供 C/C++、Java(HTTP 服务)、ROS 和 ROS2 示例。示例用于说明 SDK 的基础用法;请基于实际项目补充业务逻辑和异常处理。 建议先完成环境准备、安装脚本和示例目录确认,再按目标语言阅读对应的编译与运行章节。附录提供常用依赖与测试包的安装方法。

系统与环境

兼容的系统与依赖版本

推荐使用以下几种 linux 系统,默认的程序版本见下表:

查看系统与依赖版本

查看系统版本

结果:
查看系统版本相关图示
操作系统发行版本号:5.15.0
  • **主版本号:**5
  • **次版本号:**15【奇数为开发版本,偶数为稳定版本】
  • **修订版本号:**0【修改的次数】
  • **此版本的第 N 次修改:**97
  • 内核版本:#107~20.0.4.1,通常所说的系统版本就是内核版本

查看 CMake 版本

结果:
查看 Cmake 版本相关图示
示例中的 CMake 版本为 3.16.3。

查看 GCC 版本

结果:
查看 Gcc 版本相关图示
版本号在左下角的蓝色框内,此处版本为:9.4.0

查看 OpenCV 版本

结果:
查看 Opencv 版本相关图示
此处版本为 3.2.0

查看 PCL 版本

结果:
查看 Pcl 版本相关图示
此处版本为 1.8.1

查看 ROS 版本

结果:
查看 ROS 版本相关图示
此处版本为 eloquent(Ubuntu18.04 对应的 ros2 版本)
查看 ROS 版本相关图示 2
此处版本为 noetic(Ubuntu20 对应的 ros1 版本)

安装基础开发环境

结果如下:
搭建基础开发环境相关图示

安装 CMake

安装 Cmake相关图示

安装 GCC

安装 Gcc相关图示

安装可选开发依赖

安装 OpenCV(用于显示相机图像)

安装 Opencv【可显示相机图像】相关图示

安装 PCL(用于显示点云)

安装 Pcl【可显示点云】相关图示

准备示例代码

执行安装脚本

  1. 解压 Lanxin-MRDVS 文件并进入该目录。
执行安装脚本相关图示
  1. 在该目录打开终端。
  2. 执行 install.sh。
执行安装脚本相关图示 2
  1. 检查 /opt/ 目录中是否存在安装目录。
执行安装脚本相关图示 3
  1. 若目录存在,表示安装成功。
  2. 若安装失败,请手动将文件添加至 /opt/ 目录。
  3. 执行 set_socket_buffer_size.sh。
执行安装脚本相关图示 4
  1. 安装完成。

示例目录

进入到 Sample 目录下,目录内容如下:
示例代码介绍相关图示
  • C:C 与 C++ 示例。
  • Java:HTTP 服务示例,用于间接调用 SDK。
  • Ros:ROS 示例。
  • Ros2:ROS2 示例。

C 与 C++ 示例

进入 C 目录,目录内容如下:
C 与 C++示例代码相关图示
目录包含 9 个文件夹和 1 个 CMakeLists.txt 文件;每个示例文件夹包含一个 C++ 源文件。 每个 cpp 大致实现的功能如下:
  • application_obstacle:获取相机流数据并开启避障算法,输出算法结果
  • application_pallet:获取相机流数据并开启托盘算法,输出算法结果
  • arm_local_camera:在相机 ARM 端调用 SDK 并获取流数据
  • frame_callback:使用回调方式获取相机流数据
  • multi_cameras:打开多个相机并获取流数据
  • single_camera:打开单个相机并获取流数据
  • single_camera2:通过结构体方式获取帧数据
根据目标功能选择对应示例进行测试和修改。

Java 示例

进入 java 目录,目录内容如下:
Java 示例代码相关图示
目录中包含 2 个文件夹以及一个 postman.json 文件和 README
  • Config:服务器配置。
  • Middleware:服务器主体。
  • LxCamera.postman_collection.json:Postman 集合文件。
  • README:Java 虚拟服务器说明。

ROS 示例

进入 ros 目录中,目录内容如下:
ROS 示例代码相关图示
  • lx_camera_node_ws:标准 ROS 驱动。
  • README.EN:节点编译与创建说明。

ROS2 示例

进入 ros2 目录中,目录内容如下:
ROS2 示例代码相关图示
  • lx_camera_node_ws:标准 ROS2 驱动。
  • README.EN:节点编译与创建说明。

ROS V1 Pro 示例

进入 ros-v1pro 目录中,目录内容如下:
ros-v1pro 示例代码相关图示
  • src:标准 ROS 驱动。
  • README:节点使用说明。
  • README.pdf:节点使用说明。

编译并运行示例

C 与 C++ 示例

进入示例中的 C 文件夹:
C 与 C++示例代码的编译与运行相关图示
在 C 目录中执行:
成功执行后进入 build 文件夹中,应当如下:
C 与 C++示例代码的编译与运行相关图示 2
可执行文件就在 bin 目录中,进入 bin 目录应当如下:
C 与 C++示例代码的编译与运行相关图示 3
除 arm 示例外,其余示例都会编译,可执行文件名与示例文件夹名相同,直接运行即可

Java 示例

Java 示例提供 HTTP 服务与 Postman 集合,不直接提供业务源码。若需通过 HTTP 间接控制相机,可使用该示例。
java 示例运行流程相关图示
运行流程如下:
  • 在 config 目录中修改 Configs.json 的 http_sever_host 与 http_sever_port 字段。
java 示例运行流程相关图示 2
  • 在 middleware 目录中执行 start.sh,启动中转服务器。
java 示例运行流程相关图示 3
  • 使用 Postman 打开 LxCamera.postman_collection.json,向示例端口发送请求。

ROS 示例

在 ROS 目录打开终端并启动 ROS master:
ROS 示例代码的编译与运行相关图示
ROS 示例代码的编译与运行相关图示 2
在新的终端中进入 lx_camera_node_ws 目录并编译:
ROS 示例代码的编译与运行相关图示 3
成功执行后会显示如下:
ROS 示例代码的编译与运行相关图示 4
此时文件夹内 devel 和 build 是编译生成的:
ROS 示例代码的编译与运行相关图示 5
加载环境:
按需运行一个节点: 各节点不能同时启用。

ROS2 示例

进入 ros2 文件夹,文件夹内容如下:
ROS2 示例代码的编译与运行相关图示
ROS2 示例节点使用 colcon 编译。
ROS2 示例代码的编译与运行相关图示 2
安装 ROS PCL 依赖;将命令中的发行版名称替换为当前 ROS2 版本:
进入 lx_camera_node_ws 目录并编译:
根据电脑性能不同,编译通常会需要 30 秒到 120 秒,成功编译后会显示如下:
ROS2 示例代码的编译与运行相关图示 3
部分警告是因为版本兼容问题,无需处理,编译完成后文件夹内容如下:
ROS2 示例代码的编译与运行相关图示 4
加载环境:
按需运行一个节点: 各节点不能同时启用。

ROS V1 Pro 示例

ros-v1pro 是 V1 Pro 相机专用 ROS 驱动。请优先查阅该目录中的 README.pdf。
ros-v1pro 示例代码的编译与运行相关图示
进入 ros-v1pro 目录并编译:
ros-v1pro 示例代码的编译与运行相关图示 2
加载环境:
ros-v1pro 示例代码的编译与运行相关图示 3
按需运行一个节点: 从上往下依次是:运行定位节点,运行建图节点,运行虚拟数据节点,各节点不能同时启用。

示例代码说明

在这个部分中,所有代码与伪代码将会分成几个部分来讲,一般来说一个小节内的都属于同一个文件,除特殊文件做详细解释外,源码文件只解释大致模块,详细的解释在代码中有注释。

C 与 C++

CMakeLists.txt

CMakeLists相关图示
CMakeLists相关图示 2
CMakeLists相关图示 3

5.1.2 application_obstacle 和 application_pallet

application\_obstacle 和 application\_pallet相关图示

5.1.3 arm_local_camera

arm\_local\_camera相关图示

5.1.4 frame_callback

frame\_callback相关图示

5.1.5 multi_cameras

multi\_cameras相关图示

5.1.6 single_camera

single\_camera相关图示
single\_camera相关图示 2

5.1.7 single_camera2

single\_camera2相关图示

5.2 java

Java 示例中提供的仅是一个 HTTP 服务器,因此说明也只是对接口以及消息格式的说明,用 postman 打开示例文件后如下图:
java相关图示
消息都是 post 方式,在发送前,记得修改 IP 为服务器的 ip,但是 url 不要修改,url 为服务器内部写死,响应的消息格式与内容都在 body 中示例中提供的接口如下:
java相关图示 2
1.DcGetApiVersion:获取 SDK 的版本号吗,没有参数输入
java相关图示 3
2.DcSetInfoOutput:设置 SDK 日志输出的路径,参数如下:
  • log_path:日志输出的路径
  • print_level:日志打印的等级
  • enable_screen_print:日志是否在控制台打印
3.DcLog:输出日志到 SDK 日志中,任何输入的内容都会被打印到 SDK 日志中 4.DcGetDeviceList:获取设备列表,没有输入,输入为 JSON 5.DcOpenDevice:打开设备,输入如下:
java相关图示 4
  • open_mode:打开相机的模式
  • param:打开相机的参数
6.DcStartStream:让某一个相机开始推送流数据,输入参数如下:
java相关图示 5
  • handle:相机的句柄,在 DcOpenDevice 中会有返回
7.DcSetCmd:对相机下发命令,输入如下:
java相关图示 6
  • handle:要设置的相机的句柄
  • cmd:指令编号
8.DcGetPtrValue:获取指针数据(图像,参数等),输入如下:
  • handle:要设置的相机的句柄
  • cmd:指令编号
9.DcSetIntValue:设置相机 int 型的参数,输入如下:
java相关图示 7
  • handle:要设置的相机的句柄
  • cmd:指令编号
  • value:要设置的值
10.DcGetIntValue:获取设备 int 型的参数,输入如下:
  • handle:要设置的相机的句柄
  • cmd:指令编号
11.其他相关说明参见下表:

5.3 ROS1 & ROS2

在 ros 说明中,不会讲述驱动源码相关内容,而是讲述 launch 文件中的配置所对应的内容,如何调整配置,如何发送以及订阅消息。提供的 ros 节点中已经包含了大部分功能,所以不建议直接修改驱动源码。如有特殊需要可以先行了解 C++示例中的代码流程后再对驱动源码进行修改。 执行 ros 驱动时,必须确保系统默认路径中 opencv 和 pcl 的版本唯一,否则 ros链接库时会发生错误,可能导致编译失败或者运行崩溃。

5.3.1 ROS1 launch 文件说明

5.3.1.1 所有的 launch 文件
1.在 src/launch 文件夹中有如下文件:
所有的 launch 文件相关图示
  • localization.launch:视觉定位节点的运行文件
  • lx_camera_ros.launch:普通节点的运行文件
  • mapping.launch:视觉定位建图的运行文件
  • obstacle.launch:避障算法的运行文件
  • obstacleV2.launch:避障算法 V2 的运行文件
  • pallet.launch:托盘算法的运行文件
  • sensor_sim.launch:模拟定位数据的运行文件
2.可以通过运行不同的 launch 文件来执行节点的不同功能,所有节点中除localization、mapping 和 sensor 之外,参数内容都是一致的,只是配置有所不同,在以下小节中会详细介绍,对于 localization、mapping 和 sensor 三个 launch 文件的参数详细介绍请看 ros-v1pro 节点中的介绍。
5.3.1.2 相机 ip、流配置、工作模式配置、点云单位等
相机 ip、流配置、工作模式配置、点云单位等相关图示
  • ip:需要连接的相机 IP,若为 0 则默认连接第一个
  • log_path:SDK 日志储存路径,需要填入绝对路径
  • is_xyz:是否推送点云数据
  • is_depth:是否推送深度数据
  • is_amp:是否推送强度图数据
  • is_rgb:是否推送 RGB 图数据
  • lx_work_mode:工作模式
  • lx_application:是否开启算法,0:关闭,1:避障算法,2:托盘算法,3:定位算法,4:避障算法 V2
  • lx_tof_unit:点云单位,1 为米,0 为毫米,使用 rviz 查看时需要修改为 1
5.3.1.3 相机位姿配置
相机位姿配置相关图示
可以配置点云的旋转角度以及平移向量。
  • X:相机距离点云中心的 X 平移量
  • Y:相机距离点云中心的 Y 平移量
  • Z:相机距离点云中心的 Z 平移量
  • Yaw:点云绕 Z 轴旋转的角度
  • Roll:点云绕 X 轴旋转的角度
  • Pitch:点云绕 Y 轴旋转的角度
5.3.1.4 是否使用 launch 配置
是否使用 launch 配置相关图示
可以选择是否使用 launch 文件中的相机参数配置。
  • raw_param:0:使用相机内的配置,1:使用 launch 文件中的配置
不论此参数设置为 0 还是 1,在此参数之前的所有参数都会被设置,0 和 1 只对此参数之后的参数有效。
5.3.1.5 2D 参数配置
2D 参数配置相关图示
  • lx_2d_binning:0:1x1,1:2x2,2:4x4
  • lx_2d_undistort:2d 反畸变,0:关闭,1:开启
  • lx_2d_undistort_scale:2D 反畸变系数
  • lx_2d_auto_exposure:2D 自动曝光,0:关闭,1:开启
  • lx_2d_auto_exposure_value:2D 自动曝光目标强度
  • lx_2d_exposure:2D 曝光值
  • lx_2d_gain:2D 增益
5.3.1.6 3D 参数配置
3D 参数配置相关图示
  • lx_rgb_to_tof:RGB 对齐
  • lx_3d_binning:0:1x1,1:2x2,2:4x4
  • lx_mulit_mode:多机模式,可以排除多机干扰,0:关闭,1:开启
  • lx_3d_undistort:3d 反畸变,0:关闭,1:开启
  • lx_3d_undistort_scale:3D 反畸变系数
  • lx_hdr:hdr,0:关闭,1:开启
  • lx_3d_auto_exposure:3D 自动曝光,0:关闭,1:开启
  • lx_3d_auto_exposure_value:3D 自动曝光目标强度
  • lx_3d_first_exposure:3D 高积分
  • lx_3d_second_exposure:3D 低积分
  • lx_3d_gain:3D 增益
5.3.1.7 最大最小深度
最大最小深度相关图示
  • lx_min_depth:最小深度
  • lx_max_depth:最大深度

5.3.2 ROS2 launch 文件说明

5.3.2.1 所有的 launch 文件
在 src/launch 文件夹中有如下文件:
所有的 launch 文件相关图示
  • localization.launch.py:视觉定位节点的运行文件
  • lx_camera_ros.launch.py:普通节点的运行文件
  • mapping.launch.py:视觉定位建图的运行文件
  • obstacle.launch.py:避障算法的运行文件
  • obstacleV2.launch.py:避障算法 V2 的运行文件
  • pallet.launch.py:托盘算法的运行文件
  • sensor_sim.launch.py:模拟定位数据的运行文件
可以通过运行不同的 launch 文件来执行节点的不同功能,所有节点中除localization、mapping 和 sensor 之外,参数内容都是一致的,只是配置有所不同,在以下小节中会详细介绍,对于 localization、mapping 和 sensor 三个 launch 文件的参数详细介绍请看 ros-v1pro 节点中的介绍。
5.3.2.2 相机 ip、流配置、工作模式配置、点云单位等
相机 ip、流配置、工作模式配置、点云单位等相关图示
  • ip:需要连接的相机 IP,若为 0 则默认连接第一个
  • log_path:SDK 日志储存路径,需要填入绝对路径
  • is_xyz:是否推送点云数据
  • is_depth:是否推送深度数据
  • is_amp:是否推送强度图数据
  • is_rgb:是否推送 RGB 图数据
  • lx_work_mode:工作模式
  • lx_application:是否开启算法,0:关闭,1:避障算法,2:托盘算法,3:定位算法,4:避障算法 V2
  • lx_tof_unit:点云单位,1 为米,0 为毫米,使用 rviz 查看时需要修改为 1
5.3.2.3 相机位姿配置
相机位姿配置相关图示
可以配置点云的旋转角度以及平移向量。
  • X:相机距离点云中心的 X 平移量
  • Y:相机距离点云中心的 Y 平移量
  • Z:相机距离点云中心的 Z 平移量
  • Yaw:点云绕 Z 轴旋转的角度
  • Roll:点云绕 X 轴旋转的角度
  • Pitch:点云绕 Y 轴旋转的角度
5.3.2.4 是否使用 launch 配置
是否使用 launch 配置相关图示
可以选择是否使用 launch 文件中的相机参数配置。
  • raw_param:0:使用相机内的配置,1:使用 launch 文件中的配置
不论此参数设置为 0 还是 1,在此参数之前的所有参数都会被设置,0 和 1 只对此参数之后的参数有效。
5.3.2.5 2D 参数配置
2D 参数配置相关图示
  • lx_2d_binning:0:1x1,1:2x2,2:4x4
  • lx_2d_undistort:2d 反畸变,0:关闭,1:开启
  • lx_2d_undistort_scale:2D 反畸变系数
  • lx_2d_auto_exposure:2D 自动曝光,0:关闭,1:开启
  • lx_2d_auto_exposure_value:2D 自动曝光目标强度
  • lx_2d_exposure:2D 曝光值
  • lx_2d_gain:2D 增益
5.3.2.6 3D 参数配置
3D 参数配置相关图示
  • lx_rgb_to_tof:RGB 对齐
  • lx_3d_binning:0:1x1,1:2x2,2:4x4
  • lx_mulit_mode:多机模式,可以排除多机干扰,0:关闭,1:开启
  • lx_3d_undistort:3d 反畸变,0:关闭,1:开启
  • lx_3d_undistort_scale:3D 反畸变系数
  • lx_hdr:hdr,0:关闭,1:开启
  • lx_3d_auto_exposure:3D 自动曝光,0:关闭,1:开启
  • lx_3d_auto_exposure_value:3D 自动曝光目标强度
  • lx_3d_first_exposure:3D 高积分
  • lx_3d_second_exposure:3D 低积分
  • lx_3d_gain:3D 增益
5.3.2.7 最大最小深度
最大最小深度相关图示
  • lx_min_depth:最小深度
  • lx_max_depth:最大深度

5.3.3 特有主题说明

因 ROS1 和 ROS2 特有主题类型一致,所以此处 ROS1 为例。在 src/msg 文件夹中有如下文件:
特有主题说明相关图示
5.3.3.1 FrameRate.msg
这个节点输出了帧率信息,消息格式如下:
FrameRate.msg相关图示
  • header:当前数据的帧信息以及时间戳
  • depth:当深度图开启时,输出深度图帧率
  • amp:当强度图开启时,输出强度图帧率
  • rgb:当 rgb 开启时,输出 rgb 帧率
  • temperature:输出相机温度
节点开始运行后(除视觉定位相关的节点以外),可以订阅 LxCamera_FrameRate节点获取相关信息,输出如下:
FrameRate.msg相关图示 2
5.3.3.2 Obstacle.msg
obstacle 输出避障算法结果相关的信息,obstacle 消息格式如下:
Obstacle.msg相关图示
  • header:当前数据的帧信息以及时间戳
  • status:避障返回的状态信息
0:正常避障 -1:未设置地面 -2:未设置输入 -3:范围内无点云 -4:过滤地面后点云为空 -5:半径滤波后点云为空 -6:未得到分割结果 -99:未定义的错误
  • io_output:io 接口输出的避障信息
0:正常 1:警告 2:停障
  • box_number:障碍物数量
  • box:障碍物信息,变长数组,长度由 box_number 决定
节点开始运行后(需开启避障算法),可以订阅 LxCamera_Obstacel 节点获取相关信息,输出如下(图中数据为模拟数据):
Obstacle.msg相关图示 2
5.3.3.3 Obstacle_box.msg
obstacle_box 输出障碍物相关的信息,obstacle_box 消息格式如下:
Obstacle\_box.msg相关图示
  • center:障碍物在点云中的质心
  • rotation:障碍物点云的旋转矩阵
  • translation:障碍物点云的平移向量
  • width:障碍物框的宽
  • height:障碍物框的高
  • depth:障碍物框的深度
开始运行后(需开启避障算法),可以订阅 LxCamera_Obstacel 节点获取相关信息,输出如下:
Obstacle\_box.msg相关图示 2
5.3.3.4 Result.msg
向节点中 servic 发送指令消息后得到的返回值就储存在 Result 中:
Result.msg相关图示
  • ret:执行 SDK 得到的返回值
  • msg:执行 SDK 得到的返回值的说明
5.3.3.5 Pallet.msg
pallet 输出托盘算法结果相关的信息,pallet 消息格式如下:
Pallet.msg相关图示
  • header:当前数据的帧信息以及时间戳
  • status:托盘识别返回的状态信息:
0:检测成功 -1:未检测到地面 -2:未检测到托盘腿 -3:托盘距离过远 -4:未知错误
  • x:托盘距离相机光心的 X 距离
  • y:托盘距离相机光心的 Y 距离
  • yaw:托盘中心相对于相机光心的 theta 夹角
节点开始运行后(需开启托盘算法),可以订阅 LxCamera_Pallet 节点获取相关信息,输出如下:
Pallet.msg相关图示 2

5.3.4 特有服务说明

因 ROS1 和 ROS2 特有服务类型一致,所以此处 ROS1 为例。在 src/srv 文件夹中有如下文件:
特有服务说明相关图示
这些消息皆是用于设置或者获取相机的某些参数值。 【---】之上是发送的数据,【---】之下是返回的数据
5.3.4.1 LxBool.srv
LxBool.srv相关图示
  • cmd:需要获取或者设置的参数编号
  • val:设置时设置的值
  • is_set:是否设置参数,为 true 时会将 val 中的值设置到相机中,为 false 时会从相机中把这个参数的值读取并显示出来
  • val:获取或者设置时返回的相机当先参数的值
  • result:调用 SDK 接口返回的值和信息
5.3.4.2 LxCmd.srv
LxCmd.srv相关图示
  • cmd:需要获取或者设置的参数编号,当为 0 时会返回所有的参数编号
  • result:调用 SDK 接口返回的值和信息,cmd 可能会有多个返回值
5.3.4.3 LxFloat.srv
LxFloat.srv相关图示
  • cmd:需要获取或者设置的参数编号
  • val:设置时设置的值
  • is_set:是否设置参数,为 true 时会将 val 中的值设置到相机中,为 false 时会从相机中把这个参数的值读取并显示出来
  • max_value:该参数可设置的最大值
  • min_value:该参数可设置的最小值
  • cur_value:该参数在相机中的当前值
  • available:该参数是否支持设置
  • result:调用 SDK 接口返回的值和信息
5.3.4.4 LxInt.srv
LxInt.srv相关图示
  • cmd:需要获取或者设置的参数编号
  • val:设置时设置的值
  • is_set:是否设置参数,为 true 时会将 val 中的值设置到相机中,为 false 时会从相机中把这个参数的值读取并显示出来
  • max_value:该参数可设置的最大值
  • min_value:该参数可设置的最小值
  • cur_value:该参数在相机中的当前值
  • available:该参数是否支持设置
  • result:调用 SDK 接口返回的值和信息
5.3.4.5 LxString.srv
LxString.srv相关图示
  • cmd:需要获取或者设置的参数编号
  • val:设置时设置的值
  • is_set:是否设置参数,为 true 时会将 val 中的值设置到相机中,为 false 时会从相机中把这个参数的值读取并显示出来
  • val:获取或者设置时返回的相机当先参数的值
  • result:调用 SDK 接口返回的值和信息

5.3.5 主题订阅方式说明

5.3.5.1 订阅帧率,托盘算法、避障算法输出数据
订阅帧率 在 lx_camera_node_ws 目录下,输入:bash rate.sh
订阅帧率,托盘算法、避障算法输出数据相关图示
lx_camera_node 节点图像正常运行并刷新后可以看到如下信息:
订阅帧率,托盘算法、避障算法输出数据相关图示 2
订阅托盘算法输出 在 lx_camera_node_ws 目录下,输入:bash pallet.sh
订阅帧率,托盘算法、避障算法输出数据相关图示 3
lx_camera_node 节点图像正常运行并刷新后可以看到如下信息:
订阅帧率,托盘算法、避障算法输出数据相关图示 4
订阅避障算法输出 在 lx_camera_node_ws 目录下,输入:bash obstacle.sh
订阅帧率,托盘算法、避障算法输出数据相关图示 5
lx_camera_node 节点图像正常运行并刷新后可以看到如下信息:
订阅帧率,托盘算法、避障算法输出数据相关图示 6
5.3.5.2 订阅图像数据(ROS1)
通过 ros 自带的图像工具可以查看节点输出的图像信息: 控制台输入命令:rqt_image_view 输入命令后会弹出如下窗口:
订阅图像数据(ROS1)相关图示
红色框处可以选择,所有节点中的图像,图中展示的是迈尔微视相机 rgb 图像,还可以选择深度图或者强度图(前提是流已经开启):
订阅图像数据(ROS1)相关图示 2
图中,第一个红框是定位算法节点输出的 RGB 信息,其余三个是普通节点输出的图像信息,amp 为强度图,depth 为深度图,rgb 为 rgb 图。 选择不同的项可以查看不同的图像或者使用 rviz 查看图像数据,控制台输入命令:rviz会弹出如下窗口:
订阅图像数据(ROS1)相关图示 3
点击左下方 Add 按钮后会弹出窗口:
订阅图像数据(ROS1)相关图示 4
选择需要的图像话题并选择其中的 Image 然后点击右下方的 OK,就可以在主界面左侧看到图像数据,如下图显示:
订阅图像数据(ROS1)相关图示 5
5.3.5.3 订阅图像数据(ROS2)
通过 ros2 自带的图像工具可以查看节点输出的图像信息:控制台输入命令:rqt 输入命令后会弹出如下窗口:
订阅图像数据(ROS2)相关图示
选择菜单栏第二项最底下选项的第一个 Image View,选择后会弹出如下界面:
订阅图像数据(ROS2)相关图示 2
红色框处可以选择,所有节点中的图像,图中展示的是迈尔微视相机 rgb 图像,还可以选择深度图或者强度图(前提是流已经开启):
订阅图像数据(ROS2)相关图示 3
图中,第一个红框是定位算法节点输出的 RGB 信息,其余三个是普通节点输出的图像信息,amp 为强度图,depth 为深度图,rgb 为 rgb 图。 选择不同的项可以查看不同的图像或者使用 rviz2 查看图像数据,控制台输入命令:rviz2会弹出如下窗口:
订阅图像数据(ROS2)相关图示 4
点击左下方 Add 按钮后会弹出窗口:
订阅图像数据(ROS2)相关图示 5
选择需要的图像话题并选择其中的 Image 然后点击右下方的 OK,就可以在主界面左侧看到图像数据,如下图显示:
订阅图像数据(ROS2)相关图示 6
部分系统需要在上图【map】处填入【mrdvs】才能看到图像
5.3.5.4 订阅点云数据
通过 ros 或者 ros2 自带的点云工具可以查看节点输出的点云信息: 命令:rviz【ROS1】,rviz2【ROS2】 输入命令后会弹出如下窗口:
订阅点云数据相关图示
点击下方红色框内按钮会弹出如下框:
订阅点云数据相关图示 2
选择第二个页签,会有名为lx_camera_node 的节点,节点中有名为LxCamera_Cloud 的主题,主题中有名为 PointCloud2 的消息,选择后点击 OK 即可,完成后界面如下:
订阅点云数据相关图示 3
(ROS1 界面)
订阅点云数据相关图示 4
(ROS2 界面) 此时点云还不能正常显示,在上方红绿框 map 处填入 mrdvs 就可以看到点云,效果如下:
订阅点云数据相关图示 5
ROS 中默认的点云单位为米,所以使用 rviz 查看时需要将launch文件中的lx_tof_unit 修改为 1【默认即为 1】

5.3.6 服务通讯方式说明

在 ROS1 中所有的命令都可以用 Tab 键补全,但是在 ROS2 中只有主题能被补全,消息部分需要手动输入。 ROS1 输入数据时按照补全格式输入即可,ROS2 中输入数据时需要按照 yaml 文件的格式来输入。 节点运行之后,在 lx_camera_node_ws 文件夹下打开一个终端,在终端中配置环境,输入命令:source devel/setup.bash
5.3.6.1 获取所有参数编号列表(Lx_Cmd)
ros1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxCmd “cmd: 0”
获取所有参数编号列表(Lx\_Cmd)相关图示
可以看到输出:
获取所有参数编号列表(Lx\_Cmd)相关图示 2
ret 是参数的编号,msg 中说明了参数的类型和描述,例如:1001,这个参数是int 类型,参数用于获取和修改第一曝光值。 ros2 在终端输入:ros2 service call /LxCamera_LxCmd lx_camera_ros/srv/LxCmd ‘cmd: 0’
获取所有参数编号列表(Lx\_Cmd)相关图示 3
可以看到如下输出:
获取所有参数编号列表(Lx\_Cmd)相关图示 4
因在 ROS2 中查看参数详细不太方便,所以在下表中同样列出了所有参数的编号、类型以及说明: 部分参数需要先停流才能设置,或者设置有先后顺序,具体需求请跟技术支持人员对接。
5.3.6.2 获取 Int 参数(Lx_Int)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxInt “cmd: 1001 val: 0 is_set: false”
获取 Int 参数(Lx\_Int)相关图示
可以看到输出:
获取 Int 参数(Lx\_Int)相关图示 2
红框内的就是返回值,图中获取的是高积分时间,根据返回结果可以看到,最大值是 3600,最小值是 1,当前值是 1010,是否支持设置是支持,接口调用返回值是 0,返回值信息是成功。
ROS2 在 终 端 输 入 : ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt ‘{cmd: 1001,val: 0,is_set: false}’
获取 Int 参数(Lx\_Int)相关图示 3
可以看到输出:
获取 Int 参数(Lx\_Int)相关图示 4
图中获取的是高积分时间,根据返回结果可以看到,最大值是 3600,最小值是 1,当前值是 1010,是否支持设置是支持,接口调用返回值是 0,返回值信息是成功。
5.3.6.3 设置 Int 参数(Lx_Int)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxInt “cmd: 1001 val: 2000 is_set: true”
设置 Int 参数(Lx\_Int)相关图示
可以看到输出:
设置 Int 参数(Lx\_Int)相关图示 2
红框内的就是返回值,图中设置的是高积分时间,根据返回结果可以看到,最大值是 3600,最小值是 1,当前值已经修改为 2000,是否支持设置是支持,接口调用返回值是 0,返回值信息是成功。
ROS2 在 终 端 输 入 : ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt ‘{cmd: 1001,val: 3000,is_set: true}’
设置 Int 参数(Lx\_Int)相关图示 3
可以看到输出:
设置 Int 参数(Lx\_Int)相关图示 4
图中获取的是高积分时间,根据返回结果可以看到,最大值是 3600,最小值是 1,当前值已经修改为 3000,是否支持设置是支持,接口调用返回值是 0,返回值信息是成功。
5.3.6.4 获取 Float 参数(Lx_Float)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxFloat “cmd: 2007 val: 0.0 is_set: false”
获取 Float 参数(Lx\_Float)相关图示
可以看到输出:
获取 Float 参数(Lx\_Float)相关图示 2
红框内的就是返回值,图中获取的是相机温度,根据返回结果可以看到,最大值是 120,最小值是**-40**,当前值是 49.6875,是否支持设置是不支持,接口调用返回值是 0,返回值信息是成功。
ROS2 在终端输入:ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat ‘{cmd: 2007,val: 0,is_set: false}’
获取 Float 参数(Lx\_Float)相关图示 3
可以看到输出:
获取 Float 参数(Lx\_Float)相关图示 4
图中获取的是相机温度,根据返回结果可以看到,最大值是 120,最小值是**-40**,当前值是 50.4375,是否支持设置是不支持,接口调用返回值是 0,返回值信息是成功。
5.3.6.5 设置 Float 参数(Lx_Float)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxFloat “cmd: 2007 val: 5.0 is_set: true”
设置 Float 参数(Lx\_Float)相关图示
可以看到输出:
设置 Float 参数(Lx\_Float)相关图示 2
红框内的就是返回值,图中设置的是相机温度,根据返回结果可以看到,最大值是 120,最小值是**-40**,当前值是 50.9375,是否支持设置是不支持,接口调用返回值是**-2**,返回值信息是不支持,此处设置的值是 5,当前值和设置值不一致是因为该参数不支持设置。
ROS2 在终端输入:ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat ‘{cmd: 2007,val: 5.0,is_set: true}’
设置 Float 参数(Lx\_Float)相关图示 3
可以看到输出:
设置 Float 参数(Lx\_Float)相关图示 4
图中设置的是相机温度,根据返回结果可以看到,最大值是 120,最小值是**-40**,当前值是 51.125,是否支持设置是不支持,接口调用返回值是**-2**,返回值信息是不支持,此处设置的值是 5,当前值和设置值不一致是因为该参数不支持设置。
5.3.6.6 获取 Bool 参数(Lx_Bool)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxBool “cmd: 3012 val: false is_set: false”
获取 Bool 参数(Lx\_Bool)相关图示
可以看到输出:
获取 Bool 参数(Lx\_Bool)相关图示 2
红框内的就是返回值,图中获取的是 2D 自动曝光,根据返回结果可以看到,当前值是 false,接口调用返回值是 0,返回值信息是成功。
ROS2 在终端输入:ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool ‘{cmd: 3012,val: false,is_set: false}’
获取 Bool 参数(Lx\_Bool)相关图示 3
可以看到输出:
获取 Bool 参数(Lx\_Bool)相关图示 4
图中获取的是 2D 自动曝光,根据返回结果可以看到,当前值是 false,接口调用返回值是 0,返回值信息是成功。
5.3.6.7 设置 Bool 参数(Lx_Bool)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxBool “cmd: 3012 val: true is_set: true”
设置 Bool 参数(Lx\_Bool)相关图示
可以看到输出:
设置 Bool 参数(Lx\_Bool)相关图示 2
红框内的就是返回值,图中设置的是 2D 自动曝光,根据返回结果可以看到,当前值是 true,接口调用返回值是 0,返回值信息是成功,当前值和设置值一致。
ROS2 在终端输入: ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool ‘{cmd: 3012,val: true,is_set: true}’
设置 Bool 参数(Lx\_Bool)相关图示 3
可以看到输出:
设置 Bool 参数(Lx\_Bool)相关图示 4
图中设置的是 2D 自动曝光,根据返回结果可以看到,当前值是 true,接口调用返回值是 0,返回值信息是成功,当前值和设置值一致。
5.3.6.8 获取 String 参数(Lx_String)
ROS1 在终端输入: rosservice call /lx_camera_node/LxCamera_LxString “cmd: 4001 val: ” is_set: false”
获取 String 参数(Lx\_String)相关图示
可以看到输出:
获取 String 参数(Lx\_String)相关图示 2
红框内的就是返回值,图中获取的是设备版本号,根据返回结果可以看到,当前值是 V1.1.33_231201,接口调用返回值是 0,返回值信息是成功。
ROS2 在终端输入:ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString ‘{cmd: 4001,val: ”,is_set: false}’
获取 String 参数(Lx\_String)相关图示 3
可以看到输出:
获取 String 参数(Lx\_String)相关图示 4
图中获取的是设备版本号,根据返回结果可以看到,当前值是 V1.1.33_231201,接口调用返回值是 0,返回值信息是成功。
5.3.6.9 设置 String 参数(Lx_String)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxString “cmd: 4001 val: ‘put:\“123\”’ is_set: true”
设置 String 参数(Lx\_String)相关图示
可以看到输出:
设置 String 参数(Lx\_String)相关图示 2
红框内的就是返回值,图中设置的是设备版本号,根据返回结果可以看到,当前值是 V1.1.33_231201,接口调用返回值是**-2**,返回值信息是不支持,当前值和设置值不一致,因为该参数不支持设置。
ROS2 在终端输入:ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString ‘{cmd: 4001,val: “put:\“123\"",is_set: true}’
设置 String 参数(Lx\_String)相关图示 3
可以看到输出:
设置 String 参数(Lx\_String)相关图示 4
图中设置的是设备版本号,根据返回结果可以看到,当前值是 V1.1.33_231201,接口调用返回值是**-2**,返回值信息是不支持,当前值和设置值不一致,因为该参数不支持设置。 在设置 String 类型的值时,对于单引号和双引号一定要加转义符,除了 ROS2 中一开始的双引号和 ROS1 中一开始的单引号,例如要输入字符串【PUT”123”】就必须加入转义符变成:【PUT\”123\”】。

6**. ROS 推荐硬件配置与资源占用**

6.1 推荐硬件配置

在推荐硬件配置中,会根据 CUP 的内核数量、CPU 占用率、内存大小进行分析,此处给出的配置皆为推荐配置,不是最低配置,如果硬件配置低于推荐配置,则可以通过减少流输出、关闭点云计算、算法下移等操作来实现稳定运行。**在运行所需配置高于现有配置时,可能导致 ROS 核心崩溃甚至 Ubuntu 系统崩溃。**详细的使用情况会在本章第二、第三小节中给出,请根据情况选择最合适的运行环境和流配置。此处所有数据均测试于 VM 虚拟机,测试相机为 M4PRO。 Ubuntu16.04 Ubuntu18.04 Ubuntu20.04 Ubuntu22.04

6.2 CPU 详情

在CPU详情中会展示该节点在不同运行情况下所占用的 CPU 资源数量,测试基于 AMD64【8 核】,8G 内存硬件环境下,测试相机为 M4PRO,测试算法为托盘算法,2D 宽高为 1280*960,3D 宽高为 640*480、2D 反畸变开启、3D 反畸变关闭、积分 110 - 3000、深度 0 - 8000、TOF 帧率 14、流模式、平滑等级 1、噪声等级 1、时域等级 0,统计指令为 TOP。因测试软环境是 VM 虚拟机,因此实体机所展示的数据与文档中相比有部分波动属于正常现象。对于部分相机,如 S2,会有部分算法在上位机计算,所以导致资源占用量大,属于正常现象。
1.部分名词说明如下:
  • 单流:指开启 RGB、深度、强度任意一个流
  • 双流:指开启 RGB、深度、强度任意两个流
  • 三流:指 RGB、深度、强度三个流全部开启
  • 四流:指 RGB、深度、强度、点云全部开启
2.算法于部分流属于绑定关系,绑定关系如下:
  • 开启托盘算法则必须开启深度
  • 开启避障算法则必须开启深度
  • 开启定位算法则必须开启 RGB

表格中浅蓝色背景为开启点云的运行配置,无色背景为不开启点云的运行配置。以下所有测试数据默认为算法下移,因此对于 S2 系列相机来说,所有测试数值可能偏小【S2 系列相机部分算法强制上移】。 Ubuntu16.04 Ubuntu18.04 Ubuntu20.04 Ubuntu22.04

6.3 内存详情

在内存详情中会展示该节点在不同运行情况下所占用内存资源数量,测试基于AMD64【8 核】,8G 内存硬件环境下,测试相机为 M4PRO,测试算法为托盘算法,2D 宽高为 1280*960,3D 宽高为 640*480、2D 反畸变开启、3D 反畸变关闭、积分 110 - 3000、深度 0 - 8000、TOF 帧率 14、流模式、平滑等级 1、噪声等级 1、时域等级 0,统计指令为 TOP。因测试软环境是 VM 虚拟机,因此实体机所展示的数据与文档中相比有部分波动属于正常现象。对于部分相机,如 S2,会有部分算法在上位机计算,所以导致资源占用量大,属于正常现象。
1.部分名词说明如下:
  • 单流:指开启 RGB、深度、强度任意一个流
  • 双流:指开启 RGB、深度、强度任意两个流
  • 三流:指 RGB、深度、强度三个流全部开启
  • 四流:指 RGB、深度、强度、点云全部开启
2.算法于部分流属于绑定关系,绑定关系如下:
  • 开启托盘算法则必须开启深度
  • 开启避障算法则必须开启深度
  • 开启定位算法则必须开启 RGB
3.表格中浅蓝色背景为开启点云的运行配置,无色背景为不开启点云的运行配置。以下所有测试数据默认为算法下移,因此对于 S2 系列相机来说,所有测试数值可能偏小【S2 系列相机部分算法强制上移】。 Ubuntu16.04 Ubuntu18.04 Ubuntu20.04
Ubuntu22.04

附录:

本附录中提供一些工具的安装方法,使用其中方法时,至少需要有一定的 linux基础知识,而且不保证每台电脑都能通过本文档附录中展示的方法成功安装,每台电脑的环境不一样,遇到的问题可能也不一致,如果遇到本附录中没有展示的问题,请自行搜索解决办法。

1. Cmake 指定版本安装方法

前往官网下载指定版本 cmake: CMake 下载。解压下载的包:tar -zxvf cmake-XXX.tar.gz。进入解压后的目录,执行编译和配置: ./bootstrap make sudo make install 查看 Cmake 版本查看是否安装成功: cmake —version

2. Opencv 指定版本安装方法

1.下载所需版本的 opencv:Releases-OpenCV
Opencv 指定版本安装方法相关图示
2.环境配置,依次执行以下命令: sudo apt-get install build-essential sudo apt-getinstallcmake gitlibgtk2.0-devpkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev 3.新建 opencv 文件夹,将下载的源码解压到 opencv 文件夹中 4.依次执行以下命令:
  1.   cd opencv
  2.   mkdir build && cd build
  3.   sudocmake-DCMAKE_BUILD_TYPE=Release-D
  4.   CMAKE_INSTALL_PREFIX=/usr/local ..
  5.   sudo make -j4
  6.   sudo make install等待安装完成即可

3. Pcl 指定版本安装方法

1.查看支持的 pcl 版本: apt-cache madison libpcl-dev 2.安装指定的 pcl 版本(其中 1.10.0 需要替换为所需的版本号): sudo apt-get install libpcl-dev=1.10.0

4. 安装 ROS

Ubuntu16.04 1.添加软件源,设置秘钥: sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’ sudoapt-keyadv—keyserver’hkp://keyserver.ubuntu.com:80’—recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 2.添加秘钥: curl -sSL ‘http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654’ | sudo apt-key add - 3.更新源: sudo apt-get update 4.安装完整的 ros: sudo apt-get install ros-kinetic-desktop-full 5.配置环境变量: echo “source /opt/ros/kinetic/setup.bash” >> ~/.bashrc source ~/.bashrc 6.补全 ROS 相关的工具: sudoaptinstallpython-rosinstallpython-rosinstall-generatorpython-wstool build-essential 7.到此 ROS1 全部安装完成,运行一下 ROS 自带的示例,查看安装是否正确: 打开一个终端输入:roscore 再打开一个终端输入:rosrun turtlesim turtlesim_node 再打开一个终端:rosrun turtlesim turtle_teleop_key 在第三个终端可以通过方向键控制小海龟 如果能正常运行如下图,则说明 ros 已经正确安装: 安装 ROS相关图示
Ubuntu18.04 1.设置软件源: sudo sh -c ’. /etc/lsb-release && echo “deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main” > /etc/apt/sources.list.d/ros-latest.list’ 2.设置公钥: sudoapt-keyadv—keyserver’hkp://keyserver.ubuntu.com:80’—recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 3.更新软件列表: sudo apt update 4.安装 Ubuntu18.04 版本的 ROS1: sudo apt install ros-melodic-desktop-full 5.设置环境变量: echo “source /opt/ros/melodic/setup.bash” >> ~/.bashrc source ~/.bashrc如果是 zsh: echo “source /opt/ros/melodic/setup.bash” >> ~/.zshrc source ~/.zshrc 6.补全 ROS 相关的工具: sudoaptinstallpython-rosdeppython-rosinstallpython-rosinstall-generator python-wstool build-essential 7.到此 ROS1 全部安装完成,运行一下 ROS 自带的示例,查看安装是否正确: 打开一个终端输入:roscore 再打开一个终端输入:rosrun turtlesim turtlesim_node 再打开一个终端:rosrun turtlesim turtle_teleop_key 在第三个终端可以通过方向键控制小海龟 如果能正常运行如下图,则说明 ros 已经正确安装:
安装 ROS相关图示 2
Ubuntu20.04 1.配置公钥: sudoapt-keyadv—keyserver’hkp://keyserver.ubuntu.com:80’—recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 2.如果显示无法连接服务器或超时,请先更新软件源列表: sudo apt-get update sudo apt-get upgrade 3.配置公钥后,再次更新软件列表: sudo apt-get update安装 ros: sudo apt install ros-noetic-desktop-full 4.设置环境变量: echo “source /opt/ros/noetic/setup.bash” >> ~/.bashrc source ~/.bashrc 5.安装 ROS 工具: sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential 6.到此 ROS1 全部安装完成,运行一下 ROS 自带的示例,查看安装是否正确: 打开一个终端输入:roscore 再打开一个终端输入:rosrun turtlesim turtlesim_node 再打开一个终端:rosrun turtlesim turtle_teleop_key 在第三个终端可以通过方向键控制小海龟 如果能正常运行如下图,则说明 ros 已经正确安装:
安装 ROS相关图示 3
Ubuntu22.04 不推荐在 Ubuntu22.04 中安装 ros1,官方并不支持,如果要安装会遇到非常多的依赖问题。

5. Ros 如何创建一个新的测试包

1.新建一个文件夹 ws,在 ws 文件夹中新建 src 文件夹,进入 src 文件夹执行: catkin_create_pkg example std_msgs rospy roscpp 2.这样就新建了一个名为 example 的包,包依赖于 std_msgs rospy roscpp 3.然后编译这个新建包:catkin_make这是一个空的包,不会有任何可执行程序,它只是一个包 4.接下来演示如何创造一个可以输出’Hellow world’的包 5.在刚刚那个包的基础上,我们进入 src 文件夹(包里的 src),并新建一个 main.cpp,如下图(注意看路径):
Ros 如何创建一个新的测试包相关图示
6.在 main.cpp 中,我们输入一些代码:
Ros 如何创建一个新的测试包相关图示 2
7.然后我们改一下外面的 CMakeLists.txt,我们在最底下加入一行:add_executable(example src/main.cpp)
Ros 如何创建一个新的测试包相关图示 3
8.然后返回到 ws 目录中编译,执行命令:catkin_make
Ros 如何创建一个新的测试包相关图示 4
9.看到这些,就说明编译成功了 10.接下来我们配置环境: source devel/setup.bash
Ros 如何创建一个新的测试包相关图示 5
11.然后执行程序,就可以看到输出了: rosrun example example
Ros 如何创建一个新的测试包相关图示 6

6. 安装 ROS2

Ubuntu16.04 1.添加秘钥: sudo apt-get update && sudo apt-get install curl curl http://repo.ros2.org/repos.key | sudo apt-key add - 2.添加权限: sudo apt update && sudo apt install curl gnupg2 lsb-release curl-shttps://raw.githubusercontent.com/ros/rosdistro/master/ros.asc|sudo apt-key add - 3.如果此步骤报错,则使用 VPN 翻墙然后打开浏览器,输入网址,并复制其中内容,然后新建 ros.asc,将内容拷贝到文件中,拷贝完成后如下:
安装 ROS2相关图示
4.然后重新执行第三步:sudo apt-key add ros.asc 5.继续执行: sudo sh -c ‘echo “deb [arch=amd64] http://packages.ros.org/ros2/ubuntu bionic main” > /etc/apt/sources.list.d/ros2-latest.list’ 6.安装 ROS2: sudo apt update sudo apt install ros-ardent-desktop 7.配制环境变量: source /opt/ros/ardent/setup.bash 8.安装功能包: sudo apt-get update sudo apt-get install ros-ardent-ros1-bridge sudo apt-get install ros-ardent-turtlebot2-* 9.尝试运行示例 程序,打开一个终端运行: source ~/.bashrc ros2 run demo_nodes_cpp talker 10.再打开一个中断运行: source~/.bashrc ros2 run demo_nodes_cpp talker 11.终端输出如下则证明安装成功:
安装 ROS2相关图示 2
Ubuntu18.04: 1.添加软件源 sudo apt update && sudo apt install curl gnupg2 lsb-release curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc sudo apt-key add ros.asc 2.如果此步骤报错如下:
安装 ROS2相关图示 3
3.则使用 VPN 翻墙然后打开浏览器,输入网址,并复制其中内容,然后新建 ros.asc,将内容拷贝到文件中,拷贝完成后如下:
安装 ROS2相关图示 4
4.然后重新执行第三步:sudo apt-key add ros.asc 5.继续执行: sudo sh -c ‘echo “deb [arch=amd64] http://packages.ros.org/ros2/ubuntu bionic main” > /etc/apt/sources.list.d/ros2-latest.list’ 6.完成后开始下载 ros2,其中红色字体需要替换为不同的版本(查看上表): sudo apt update sudo apt install ros-eloquent-desktop 7.等待安装完成后继续安装 python 库,执行:sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete 接着配置环境变量: echo “source /opt/ros/eloquent/setup.bash” >> ~/.bashrc source ~/.bashrc 8.尝试运行示例程序,打开一个终端运行: source ~/.bashrc ros2 run demo_nodes_cpp talker 9.再打开一个中断运行: source ~/.bashrc ros2 run demo_nodes_py listener 10.终端输出如下则证明安装成功:
安装 ROS2相关图示 5
Ubuntu20.04 1.添加软件源 sudo apt update && sudo apt install curl gnupg2 lsb-release
2.如果遇到报错“ailed to connect to raw.githubusercontent.com port 443 after 13 ms:拒绝连接”
安装 ROS2相关图示 6
sudo vi /etc/hosts 3.增加下面的解析 185.199.108.133raw.githubusercontent.com 4.添加后的文件如下:
安装 ROS2相关图示 7
echo”deb[arch=(source/etc/os-release&&echo$UBUNTU_CODENAME) main” | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null 5.继续执行: sudo sh -c ‘echo “deb [arch=amd64] http://packages.ros.org/ros2/ubuntu bionicmain” > /etc/apt/sources.list.d/ros2-latest.list’ 6.完成后开始下载 ros2: sudo apt update sudo apt install ros-foxy-desktop 7.等待安装完成后继续安装 python 库,执行:sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete 8.接着配置环境变量: echo “source /opt/ros/foxy/setup.bash” >> ~/.bashrc source ~/.bashrc 9.尝试运行示例程序,打开一个终端运行: source ~/.bashrc ros2 run demo_nodes_cpp talker 10.再打开一个中断运行: source ~/.bashrc ros2 run demo_nodes_py listener 11.终端输出如下则证明安装成功:
安装 ROS2相关图示 8
Ubuntu22.04 1.添加软件源 sudo apt update && sudo apt install curl gnupg lsb-release sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpgecho”deb[arch=(source/etc/os-release&&echo$UBUNTU_CODENAME) main” | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null 2.如果遇到报错“ailed to connect to raw.githubusercontent.com port 443 after 13 ms:拒绝连接”
安装 ROS2相关图示 9
sudo vi /etc/hosts增加下面的解析 185.199.108.133raw.githubusercontent.com 添加后的文件如下:
安装 ROS2相关图示 10
3.完成后开始下载 ros2:sudo apt update sudo apt install ros-humble-desktop 4.等待安装完成后继续安装 python 库,执行:sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete 5.接着配置环境变量: echo “source /opt/ros/humble/setup.bash” >> ~/.bashrc source ~/.bashrc 6.尝试运行示例程序,打开一个终端运行: source ~/.bashrc ros2 run demo_nodes_cpp talker 7.再打开一个中断运行: source ~/.bashrc ros2 run demo_nodes_py listener 8.终端输出如下则证明安装成功:
安装 ROS2相关图示 11

7. Ros2 如何创建一个新的测试包

1.执行命令: mkdir example_ws && cd example_ws ros2 pkg create —build-type ament_cmake —node-name example_n example_p colcon build source install/setup.bash ros2 run example_p example_n 2.就能新建一个名为example_p 的包和一个名为 example_n 的节点,运行后会输出:hello world example_p package