文档版本:V1.0;修订日期:2024-10-12。
概述
MRDVS 相机 SDK Linux 开发包提供 C/C++、Java(HTTP 服务)、ROS 和 ROS2 示例。示例用于说明 SDK 的基础用法;请基于实际项目补充业务逻辑和异常处理。 建议先完成环境准备、安装脚本和示例目录确认,再按目标语言阅读对应的编译与运行章节。附录提供常用依赖与测试包的安装方法。系统与环境
兼容的系统与依赖版本
推荐使用以下几种 linux 系统,默认的程序版本见下表:查看系统与依赖版本
查看系统版本

- **主版本号:**5
- **次版本号:**15【奇数为开发版本,偶数为稳定版本】
- **修订版本号:**0【修改的次数】
- **此版本的第 N 次修改:**97
- 内核版本:#107~20.0.4.1,通常所说的系统版本就是内核版本
查看 CMake 版本

3.16.3。
查看 GCC 版本

查看 OpenCV 版本

查看 PCL 版本

查看 ROS 版本


安装基础开发环境

安装 CMake

安装 GCC

安装可选开发依赖
安装 OpenCV(用于显示相机图像)

安装 PCL(用于显示点云)

准备示例代码
执行安装脚本
- 解压
Lanxin-MRDVS文件并进入该目录。

- 在该目录打开终端。
- 执行
install.sh。

- 检查
/opt/目录中是否存在安装目录。

- 若目录存在,表示安装成功。
- 若安装失败,请手动将文件添加至
/opt/目录。 - 执行
set_socket_buffer_size.sh。

- 安装完成。
示例目录
进入到 Sample 目录下,目录内容如下:
C:C 与 C++ 示例。Java:HTTP 服务示例,用于间接调用 SDK。Ros:ROS 示例。Ros2:ROS2 示例。
C 与 C++ 示例
进入 C 目录,目录内容如下:
CMakeLists.txt 文件;每个示例文件夹包含一个 C++ 源文件。
每个 cpp 大致实现的功能如下:
- application_obstacle:获取相机流数据并开启避障算法,输出算法结果
- application_pallet:获取相机流数据并开启托盘算法,输出算法结果
- arm_local_camera:在相机 ARM 端调用 SDK 并获取流数据
- frame_callback:使用回调方式获取相机流数据
- multi_cameras:打开多个相机并获取流数据
- single_camera:打开单个相机并获取流数据
- single_camera2:通过结构体方式获取帧数据
Java 示例
进入 java 目录,目录内容如下:
Config:服务器配置。Middleware:服务器主体。LxCamera.postman_collection.json:Postman 集合文件。README:Java 虚拟服务器说明。
ROS 示例
进入 ros 目录中,目录内容如下:
lx_camera_node_ws:标准 ROS 驱动。README.EN:节点编译与创建说明。
ROS2 示例
进入 ros2 目录中,目录内容如下:
lx_camera_node_ws:标准 ROS2 驱动。README.EN:节点编译与创建说明。
ROS V1 Pro 示例
进入 ros-v1pro 目录中,目录内容如下:
src:标准 ROS 驱动。README:节点使用说明。README.pdf:节点使用说明。
编译并运行示例
C 与 C++ 示例
进入示例中的 C 文件夹:
C 目录中执行:


Java 示例
Java 示例提供 HTTP 服务与 Postman 集合,不直接提供业务源码。若需通过 HTTP 间接控制相机,可使用该示例。
- 在
config目录中修改Configs.json的http_sever_host与http_sever_port字段。

- 在
middleware目录中执行start.sh,启动中转服务器。

- 使用 Postman 打开
LxCamera.postman_collection.json,向示例端口发送请求。
ROS 示例
在ROS 目录打开终端并启动 ROS master:


lx_camera_node_ws 目录并编译:



各节点不能同时启用。
ROS2 示例
进入 ros2 文件夹,文件夹内容如下:
colcon 编译。

lx_camera_node_ws 目录并编译:


各节点不能同时启用。
ROS V1 Pro 示例
ros-v1pro 是 V1 Pro 相机专用 ROS 驱动。请优先查阅该目录中的 README.pdf。

ros-v1pro 目录并编译:


从上往下依次是:运行定位节点,运行建图节点,运行虚拟数据节点,各节点不能同时启用。
示例代码说明
在这个部分中,所有代码与伪代码将会分成几个部分来讲,一般来说一个小节内的都属于同一个文件,除特殊文件做详细解释外,源码文件只解释大致模块,详细的解释在代码中有注释。C 与 C++
CMakeLists.txt



5.1.2 application_obstacle 和 application_pallet

5.1.3 arm_local_camera

5.1.4 frame_callback

5.1.5 multi_cameras

5.1.6 single_camera


5.1.7 single_camera2

5.2 java
Java 示例中提供的仅是一个 HTTP 服务器,因此说明也只是对接口以及消息格式的说明,用 postman 打开示例文件后如下图:


- log_path:日志输出的路径
- print_level:日志打印的等级
- enable_screen_print:日志是否在控制台打印

- open_mode:打开相机的模式
- param:打开相机的参数

- handle:相机的句柄,在 DcOpenDevice 中会有返回

- handle:要设置的相机的句柄
- cmd:指令编号
- handle:要设置的相机的句柄
- cmd:指令编号

- handle:要设置的相机的句柄
- cmd:指令编号
- value:要设置的值
- handle:要设置的相机的句柄
- cmd:指令编号
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 文件夹中有如下文件:
- localization.launch:视觉定位节点的运行文件
- lx_camera_ros.launch:普通节点的运行文件
- mapping.launch:视觉定位建图的运行文件
- obstacle.launch:避障算法的运行文件
- obstacleV2.launch:避障算法 V2 的运行文件
- pallet.launch:托盘算法的运行文件
- sensor_sim.launch:模拟定位数据的运行文件
5.3.1.2 相机 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 配置

- raw_param:0:使用相机内的配置,1:使用 launch 文件中的配置
5.3.1.5 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 参数配置

- 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 文件夹中有如下文件:
- 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:模拟定位数据的运行文件
5.3.2.2 相机 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 配置

- raw_param:0:使用相机内的配置,1:使用 launch 文件中的配置
5.3.2.5 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 参数配置

- 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
这个节点输出了帧率信息,消息格式如下:
- header:当前数据的帧信息以及时间戳
- depth:当深度图开启时,输出深度图帧率
- amp:当强度图开启时,输出强度图帧率
- rgb:当 rgb 开启时,输出 rgb 帧率
- temperature:输出相机温度

5.3.3.2 Obstacle.msg
obstacle 输出避障算法结果相关的信息,obstacle 消息格式如下:
- header:当前数据的帧信息以及时间戳
- status:避障返回的状态信息
- io_output:io 接口输出的避障信息
- box_number:障碍物数量
- box:障碍物信息,变长数组,长度由 box_number 决定

5.3.3.3 Obstacle_box.msg
obstacle_box 输出障碍物相关的信息,obstacle_box 消息格式如下:
- center:障碍物在点云中的质心
- rotation:障碍物点云的旋转矩阵
- translation:障碍物点云的平移向量
- width:障碍物框的宽
- height:障碍物框的高
- depth:障碍物框的深度

5.3.3.4 Result.msg
向节点中 servic 发送指令消息后得到的返回值就储存在 Result 中:
- ret:执行 SDK 得到的返回值
- msg:执行 SDK 得到的返回值的说明
5.3.3.5 Pallet.msg
pallet 输出托盘算法结果相关的信息,pallet 消息格式如下:
- header:当前数据的帧信息以及时间戳
- status:托盘识别返回的状态信息:
- x:托盘距离相机光心的 X 距离
- y:托盘距离相机光心的 Y 距离
- yaw:托盘中心相对于相机光心的 theta 夹角

5.3.4 特有服务说明
因 ROS1 和 ROS2 特有服务类型一致,所以此处 ROS1 为例。在 src/srv 文件夹中有如下文件:
5.3.4.1 LxBool.srv

- cmd:需要获取或者设置的参数编号
- val:设置时设置的值
- is_set:是否设置参数,为 true 时会将 val 中的值设置到相机中,为 false 时会从相机中把这个参数的值读取并显示出来
- val:获取或者设置时返回的相机当先参数的值
- result:调用 SDK 接口返回的值和信息
5.3.4.2 LxCmd.srv

- cmd:需要获取或者设置的参数编号,当为 0 时会返回所有的参数编号
- result:调用 SDK 接口返回的值和信息,cmd 可能会有多个返回值
5.3.4.3 LxFloat.srv

- cmd:需要获取或者设置的参数编号
- val:设置时设置的值
- is_set:是否设置参数,为 true 时会将 val 中的值设置到相机中,为 false 时会从相机中把这个参数的值读取并显示出来
- max_value:该参数可设置的最大值
- min_value:该参数可设置的最小值
- cur_value:该参数在相机中的当前值
- available:该参数是否支持设置
- result:调用 SDK 接口返回的值和信息
5.3.4.4 LxInt.srv

- cmd:需要获取或者设置的参数编号
- val:设置时设置的值
- is_set:是否设置参数,为 true 时会将 val 中的值设置到相机中,为 false 时会从相机中把这个参数的值读取并显示出来
- max_value:该参数可设置的最大值
- min_value:该参数可设置的最小值
- cur_value:该参数在相机中的当前值
- available:该参数是否支持设置
- result:调用 SDK 接口返回的值和信息
5.3.4.5 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





5.3.5.2 订阅图像数据(ROS1)
通过 ros 自带的图像工具可以查看节点输出的图像信息: 控制台输入命令:rqt_image_view 输入命令后会弹出如下窗口:




5.3.5.3 订阅图像数据(ROS2)
通过 ros2 自带的图像工具可以查看节点输出的图像信息:控制台输入命令:rqt 输入命令后会弹出如下窗口:





5.3.5.4 订阅点云数据
通过 ros 或者 ros2 自带的点云工具可以查看节点输出的点云信息: 命令:rviz【ROS1】,rviz2【ROS2】 输入命令后会弹出如下窗口:




5.3.6 服务通讯方式说明
在 ROS1 中所有的命令都可以用 Tab 键补全,但是在 ROS2 中只有主题能被补全,消息部分需要手动输入。 ROS1 输入数据时按照补全格式输入即可,ROS2 中输入数据时需要按照 yaml 文件的格式来输入。 节点运行之后,在 lx_camera_node_ws 文件夹下打开一个终端,在终端中配置环境,输入命令:source devel/setup.bash5.3.6.1 获取所有参数编号列表(Lx_Cmd)
ros1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxCmd “cmd: 0”



部分参数需要先停流才能设置,或者设置有先后顺序,具体需求请跟技术支持人员对接。
5.3.6.2 获取 Int 参数(Lx_Int)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxInt “cmd: 1001 val: 0 is_set: false”

ROS2 在 终 端 输 入 : ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt ‘{cmd: 1001,val: 0,is_set: false}’


5.3.6.3 设置 Int 参数(Lx_Int)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxInt “cmd: 1001 val: 2000 is_set: true”

ROS2 在 终 端 输 入 : ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt ‘{cmd: 1001,val: 3000,is_set: true}’


5.3.6.4 获取 Float 参数(Lx_Float)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxFloat “cmd: 2007 val: 0.0 is_set: false”

ROS2 在终端输入:ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat ‘{cmd: 2007,val: 0,is_set: false}’


5.3.6.5 设置 Float 参数(Lx_Float)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxFloat “cmd: 2007 val: 5.0 is_set: true”

ROS2 在终端输入:ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat ‘{cmd: 2007,val: 5.0,is_set: true}’


5.3.6.6 获取 Bool 参数(Lx_Bool)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxBool “cmd: 3012 val: false is_set: false”

ROS2 在终端输入:ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool ‘{cmd: 3012,val: false,is_set: false}’


5.3.6.7 设置 Bool 参数(Lx_Bool)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxBool “cmd: 3012 val: true is_set: true”

ROS2 在终端输入: ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool ‘{cmd: 3012,val: true,is_set: true}’


5.3.6.8 获取 String 参数(Lx_String)
ROS1 在终端输入: rosservice call /lx_camera_node/LxCamera_LxString “cmd: 4001 val: ” is_set: false”

ROS2 在终端输入:ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString ‘{cmd: 4001,val: ”,is_set: false}’


5.3.6.9 设置 String 参数(Lx_String)
ROS1 在终端输入:rosservice call /lx_camera_node/LxCamera_LxString “cmd: 4001 val: ‘put:\“123\”’ is_set: true”

ROS2 在终端输入:ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString ‘{cmd: 4001,val: “put:\“123\"",is_set: true}’


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、深度、强度、点云全部开启
- 开启托盘算法则必须开启深度
- 开启避障算法则必须开启深度
- 开启定位算法则必须开启 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、深度、强度、点云全部开启
- 开启托盘算法则必须开启深度
- 开启避障算法则必须开启深度
- 开启定位算法则必须开启 RGB
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
- cd opencv
- mkdir build && cd build
- sudocmake-DCMAKE_BUILD_TYPE=Release-D
- CMAKE_INSTALL_PREFIX=/usr/local ..
- sudo make -j4
- 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.04. 安装 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 已经正确安装:
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 已经正确安装:


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,如下图(注意看路径):





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,将内容拷贝到文件中,拷贝完成后如下:









