Linux 示例使用手册

type
status
date
slug
summary
tags
category
icon
password

1. 概述

【迈尔微视自研相机 Linux 开发包】提供了多种示例程序,包括:C、JAVA(http 服务器)、ros 和 ros2。示例代码提供 SDK 的使用方法,以及一些基本的功能、方法,但具体功能的实现仍需要手动修改。本文主要介绍各个示例程序的用法、需要搭建的环境、以及一些注意事项。以下会用少量的篇幅介绍 JAVA、C、C++相关的代码功能介绍,用中量篇幅介绍环境相关的问题,用大量篇幅介绍 ROS 与 ROS2 相关的用法、环境、注意事项等。
推荐优先顺序阅读第一至第三部分,在顺序阅读第一至第三部分之后,对于不同的需求,可以直接跳转到相关部分阅读,各个章节互相独立,不影响查阅。
最后,本文提供一些相关应用与环境的安装方法与注意事项,如有需要可以查阅附录。

2. 系统与环境

2.1 系统与环境介绍

推荐使用以下几种 linux 系统,默认的程序版本见下表:
系统版本
Cmake/Gcc
Opencv
Pcl
Ros
Ros2
Ubuntu16.04
3.5/Gcc-5
3.2.0
1.7.2
Kinetic
Ardent、Bouncy
Ubuntu18.04
3.18/Gcc-7
4.5.1
1.9.1
Melodic
Dashing、Eloquent、Crystal
Ubuntu20.04
3.22/9.3.0
4.5.1
1.12.1
Noetic
Foxy、Galactic
Ubuntu22.04
3.22/11.3.0
4.6.0
1.12.1
Ninjemys
Humble、lron

2.2 查看系统版本与应用版本

2.2.1 查看系统版本

命令:uname -a
结果:
notion image
操作系统发行版本号:5.15.0
  • 主版本号:5
  • 次版本号:15【奇数为开发版本,偶数为稳定版本】
  • 修订版本号:0【修改的次数】
  • 此版本的第 N 次修改:97
  • 内核版本:#107~20.0.4.1,通常所说的系统版本就是内核版本

2.2.2 查看 Cmake 版本

命令:cmake -version
结果:
notion image
代表 Cmake 的版本为 3.16.3

2.2.3 查看 Gcc 版本

命令:gcc -v
结果:
notion image
版本号在左下角的蓝色框内,此处版本为:9.4.0

2.2.4 查看 Opencv 版本

命令:pkg-config --modversion opencv
结果:
notion image
此处版本为 3.2.0

2.2.5 查看 Pcl 版本

命令:dpkg -l libpcl-dev
结果:
notion image
此处版本为 1.8.1

2.2.6 查看 ROS 版本

命令:rosversion -d
结果:
notion image
此处版本为 eloquent(Ubuntu18.04 对应的 ros2 版本)
notion image
此处版本为 noetic(Ubuntu20 对应的 ros1 版本)

2.3 搭建基础开发环境

在安装之前需要先更新安装列表:
执行命令:sudo apt update
结果如下:
notion image

2.3.1 安装 Cmake

命令:sudo apt install cmake
notion image

2.3.2 安装 Gcc

命令:sudo apt install build-essential
notion image

2.4 搭建可选开发环境

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

执行命令:sudo apt-get install libopencv-dev
notion image

2.4.2 安装 Pcl【可显示点云】

执行命令:sudo apt-get install libpcl-dev
notion image

3. 示例代码的介绍与运行准备

3.1 执行安装脚本

  1. 解压缩 Lanxin-MRDVS 文件,并进入 Lanxin-MRDVS 文件夹
notion image
  1. 右键打开控制台
  1. 执行 install.sh 脚本
notion image
  1. 进入/opt/目录检查是否安装成功
notion image
  1. 若是能找到文件夹,则是安装成功
  1. 若是安装失败,则需要手动添加到 opt 目录下
  1. 执行 set_socket_buffer_size.sh 脚本
notion image
  1. 至此安装脚本全部执行完成!

3.2 示例代码介绍

进入到 Sample 目录下,目录内容如下:
notion image
  • C 文件夹中包含 C 与 C++相关的代码
  • Java 文件夹中包含一个 http 服务器,用于间接的调用 sdk
  • Ros 文件夹中包含一个 ros 的示例
  • Ros2 文件夹中包含一个 ros2 的示例

3.2.1 C 与 C++示例代码

进入 C 目录,目录内容如下:
notion image
含 9 个文件夹与 1 个 Cmakelist 文件,每个文件夹中包含一个 cpp 文件
每个 cpp 大致实现的功能如下:
  • application_obstacle:获取相机流数据并开启避障算法,输出算法结果
  • application_pallet:获取相机流数据并开启托盘算法,输出算法结果
  • arm_local_camera:在相机中【ARM】调用 SDK 并获取流数据
  • frame_callback:使用回调方式获取相机流数据
  • multi_cameras:打开多个相机并获取流数据
  • single_camera:打开单个相机并获取流数据
  • single_camera2:通过结构体方式获取帧数据
可以根据不同需要选择不同的示例代码进行测试和修改

3.2.2 Java 示例代码

进入 java 目录,目录内容如下:
notion image
目录中包含 2 个文件夹以及一个 postman.json 文件和 README
  • Config:文件夹中存放着服务器相关的配置
  • Middleware:服务器主题
  • LxCamera.postman_collection.json:postman 配置文件
  • README:java 虚拟服务器使用教程

3.2.3 ROS 示例代码

进入 ros 目录中,目录内容如下:
notion image
  • lx_camera_node_ws:文件夹中包含了一个标准的 ros 驱动
  • README.EN:用英文说明了如何编译节点以及创建一个新的节点

3.2.4 ROS2 示例代码

进入 ros2 目录中,目录内容如下:
notion image
  • lx_camera_node_ws:文件夹中包含了一个标准的 ros2 驱动
  • README.EN:用英文说明了如何编译节点以及创建一个新的节点

3.2.5 ros-v1pro 示例代码

进入 ros-v1pro 目录中,目录内容如下:
notion image
  • src:文件夹中包含了一个标准的 ros 驱动
  • README:说明了如何使用这个节点
  • README.pdf:说明了如何使用这个节点

4. 示例代码的编译与运行

4.1 C 与 C++示例代码的编译与运行

进入示例中的 C 文件夹:
notion image
在 C 文件夹中打开一个终端,依次执行以下命令:
  • mkdir build
  • cd build
  • cmake ..
  • make
成功执行后进入 build 文件夹中,应当如下:
notion image
可执行文件就在 bin 目录中,进入 bin 目录应当如下:
notion image
除 arm 示例外,其余示例都会编译,可执行文件名与示例文件夹名相同,直接运行即可

4.2 java 示例运行流程

Java 与其他示例代码不相同,它不直接提供源码,它提供一个 http 服务器以及一个postman 示例,有需要通过 http 来实现间接控制相机的,可以选择 java 示例,进入 java 文件夹,文件夹内容如下:
notion image
运行流程如下:
  • 进入 config 文件夹中,修改 Configs.json 文件中的 http_sever_host 字段和http_sever_port 字段:
notion image
  • 进入 middleware 文件夹,执行 start.sh 脚本,即可启用中转服务器
notion image
  • 使用 postman 打开 LxCamera.postman_collection.json 文件,即可向示例端口发送数据

4.3 ROS 示例代码的编译与运行

进入 ROS 文件夹,开启一个控制台,执行:roscore
notion image
notion image
右键再开启一个控制台,进入 lx_camera_node_ws 文件夹执行 catkin_make
notion image
成功执行后会显示如下:
notion image
此时文件夹内 devel 和 build 是编译生成的:
notion image
执行 source devel/setup.bash 配置环境后使用 roslaunch 运行节点,命令如下:
  • roslaunch lx_camera_ros lx_camera_ros.launch
  • roslaunch lx_camera_ros obstacleV2.launch
  • roslaunch lx_camera_ros obstacle.launch
  • roslaunch lx_camera_ros pallet.launch
从上往下依次是:运行普通节点、运行避障算法 2 节点、运行避障算法节点、运行托盘算法节点,各节点不能同时启用。

4.4 ROS2 示例代码的编译与运行

进入 ros2 文件夹,文件夹内容如下:
notion image
示例 ros 节点采用 colcon 编译方式
首先需要安装编译工具,执行:sudo apt install python3-colcon-common-extensions
notion image
然后安装 ros-pcl 依赖包:sudo apt-get install ros-foxy-pcl*【红色字体部分需要替换为对应的 ros2 版本】
安装完成后进入 lx_camera_node_ws 目录编译项目,执行:colcon build
根据电脑性能不同,编译通常会需要 30 秒到 120 秒,成功编译后会显示如下:
notion image
部分警告是因为版本兼容问题,无需处理,编译完成后文件夹内容如下:
notion image
执行 source install/setup.bash 配置环境后使用 ros2 launch 运行节点,命令如下:
  • ros2 launch lx_camera_ros lx_camera_ros_launch.py
  • ros2 launch lx_camera_ros obstacleV2.launch.py
  • ros2 launch lx_camera_ros obstacle.launch.py
  • ros2 launch lx_camera_ros pallet.launch.py
从上往下依次是:运行普通节点、运行避障算法 2 节点、运行避障算法节点、运行托盘算法节点,各节点不能同时启用。

4.5 ros-v1pro 示例代码的编译与运行

ros-v1pro 是 V1PRO 相机专用 ros 驱动,在 ros-v1pro 文件夹中有 README.pdf 对该驱动详细说明,本文档中只对其做简单介绍:
notion image
进入 ros-v1pro 文件夹中右键打开控制台,使用 catkin_make 编译,编译完成后显示如下:
notion image
进行环境配置:source devel/setup.bash
notion image
最后运行节点:
  • roslaunch lx_camera_ros localization.launch
  • roslaunch lx_camera_ros mapping.launch
  • roslaunch lx_camera_ros sensor_sim.launch
从上往下依次是:运行定位节点,运行建图节点,运行虚拟数据节点,各节点不能同时启用。

5. 示例代码解释与说明

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

5.1 C 与 C++

5.1.1 CMakeLists

notion image
notion image
notion image

5.1.2 application_obstacle 和 application_pallet

notion image

5.1.3 arm_local_camera

notion image

5.1.4 frame_callback

notion image

5.1.5 multi_cameras

notion image

5.1.6 single_camera

notion image
notion image

5.1.7 single_camera2

notion image

5.2 java

Java 示例中提供的仅是一个 HTTP 服务器,因此说明也只是对接口以及消息格式的说明,用 postman 打开示例文件后如下图:
notion image
消息都是 post 方式,在发送前,记得修改 IP 为服务器的 ip,但是 url 不要修改,url 为服务器内部写死,响应的消息格式与内容都在 body 中示例中提供的接口如下:
notion image
  1. DcGetApiVersion:获取 SDK 的版本号吗,没有参数输入
notion image
  1. DcSetInfoOutput:设置 SDK 日志输出的路径,参数如下:
  • log_path:日志输出的路径
  • print_level:日志打印的等级
  • enable_screen_print:日志是否在控制台打印
  1. DcLog:输出日志到 SDK 日志中,任何输入的内容都会被打印到 SDK 日志中
  1. DcGetDeviceList:获取设备列表,没有输入,输入为 JSON
  1. DcOpenDevice:打开设备,输入如下:
notion image
  • open_mode:打开相机的模式
  • param:打开相机的参数
  1. DcStartStream:让某一个相机开始推送流数据,输入参数如下:
notion image
7. DcSetCmd:对相机下发命令,输入如下:
notion image
  • handle:要设置的相机的句柄
  • cmd:指令编号
8. DcGetPtrValue:获取指针数据(图像,参数等),输入如下:
  • handle:要设置的相机的句柄
  • cmd:指令编号
  1. DcSetIntValue:设置相机 int 型的参数,输入如下:
notion image
  • handle:要设置的相机的句柄
  • cmd:指令编号
  • value:要设置的值
  1. DcGetIntValue:获取设备 int 型的参数,输入如下:
  • handle:要设置的相机的句柄
  • cmd:指令编号
  1. 其他相关说明参见下表:
{"log_path" : "./", "print_level" : 2, "enable_screen_print" : 0 }
{"errCode" : 0 }
{"open_mode" : 0, "param" : "0"}
{"algor_ver" : "VER_1.0.2.230315", "dev_type" : "M4 camera", "errCode" : 0,"firmware_ver" : "V1.0.0.3_230315","handle" : 174539057817095, "id" : "f13141144bb1","ip" : "192.168.100.16:3956","mac" : "9e:be:0a:8a:66:07","name" :"camera_M4_192.168.100.16_3956","sn" : "9a5ed62d22b34bb1"}
{"handle" :174539057817095,"cmd" : 6001}
{"errCode" : 0,"value" :"\u0011\u0001\u0014\u0001...” }

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 文件夹中有如下文件:
notion image
  • localization.launch:视觉定位节点的运行文件
  • lx_camera_ros.launch:普通节点的运行文件
  • mapping.launch:视觉定位建图的运行文件
  • obstacle.launch:避障算法的运行文件
  • obstacleV2.launch:避障算法 V2 的运行文件
  • pallet.launch:托盘算法的运行文件
  • sensor_sim.launch:模拟定位数据的运行文件
  1. 可以通过运行不同的 launch 文件来执行节点的不同功能,所有节点中除localization、mapping 和 sensor 之外,参数内容都是一致的,只是配置有所不同,在以下小节中会详细介绍,对于 localization、mapping 和 sensor 三个 launch 文件的参数详细介绍请看 ros-v1pro 节点中的介绍。

5.3.1.2 相机 ip、流配置、工作模式配置、点云单位等

notion image
  • 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 相机位姿配置

notion image
可以配置点云的旋转角度以及平移向量。
  • X:相机距离点云中心的 X 平移量
  • Y:相机距离点云中心的 Y 平移量
  • Z:相机距离点云中心的 Z 平移量
  • Yaw:点云绕 Z 轴旋转的角度
  • Roll:点云绕 X 轴旋转的角度
  • Pitch:点云绕 Y 轴旋转的角度

5.3.1.4 是否使用 launch 配置

notion image
可以选择是否使用 launch 文件中的相机参数配置。
  • raw_param:0:使用相机内的配置,1:使用 launch 文件中的配置
不论此参数设置为 0 还是 1,在此参数之前的所有参数都会被设置,0 和 1 只对此参数之后的参数有效。

5.3.1.5 2D 参数配置

notion image
  • 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 参数配置

notion image
  • 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 最大最小深度

notion image
  • lx_min_depth:最小深度
  • lx_max_depth:最大深度

5.3.2 ROS2 launch 文件说明

5.3.2.1 所有的 launch 文件

在 src/launch 文件夹中有如下文件:
notion image
  • 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、流配置、工作模式配置、点云单位等

notion image
  • 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 相机位姿配置

notion image
可以配置点云的旋转角度以及平移向量。
  • X:相机距离点云中心的 X 平移量
  • Y:相机距离点云中心的 Y 平移量
  • Z:相机距离点云中心的 Z 平移量
  • Yaw:点云绕 Z 轴旋转的角度
  • Roll:点云绕 X 轴旋转的角度
  • Pitch:点云绕 Y 轴旋转的角度

5.3.2.4 是否使用 launch 配置

notion image
可以选择是否使用 launch 文件中的相机参数配置。
  • raw_param:0:使用相机内的配置,1:使用 launch 文件中的配置
不论此参数设置为 0 还是 1,在此参数之前的所有参数都会被设置,0 和 1 只对此参数之后的参数有效。

5.3.2.5 2D 参数配置

notion image
  • 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 参数配置

notion image
  • 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 最大最小深度

notion image
  • lx_min_depth:最小深度
  • lx_max_depth:最大深度

5.3.3 特有主题说明

因 ROS1 和 ROS2 特有主题类型一致,所以此处 ROS1 为例。在 src/msg 文件夹中有如下文件:
notion image

5.3.3.1 FrameRate.msg

这个节点输出了帧率信息,消息格式如下:
notion image
  • header:当前数据的帧信息以及时间戳
  • depth:当深度图开启时,输出深度图帧率
  • amp:当强度图开启时,输出强度图帧率
  • rgb:当 rgb 开启时,输出 rgb 帧率
  • temperature:输出相机温度
节点开始运行后(除视觉定位相关的节点以外),可以订阅 LxCamera_FrameRate节点获取相关信息,输出如下:
notion image

5.3.3.2 Obstacle.msg

obstacle 输出避障算法结果相关的信息,obstacle 消息格式如下:
notion image
  • header:当前数据的帧信息以及时间戳
  • status:避障返回的状态信息
0:正常避障
-1:未设置地面
  • 2:未设置输入
-3:范围内无点云
  • 4:过滤地面后点云为空
-5:半径滤波后点云为空
  • 6:未得到分割结果
  • 99:未定义的错误
  • io_output:io 接口输出的避障信息
0:正常
1:警告
2:停障
  • box_number:障碍物数量
  • box:障碍物信息,变长数组,长度由 box_number 决定
节点开始运行后(需开启避障算法),可以订阅 LxCamera_Obstacel 节点获取相关信息,输出如下(图中数据为模拟数据):
notion image

5.3.3.3 Obstacle_box.msg

obstacle_box 输出障碍物相关的信息,obstacle_box 消息格式如下:
notion image
  • center:障碍物在点云中的质心
  • rotation:障碍物点云的旋转矩阵
  • translation:障碍物点云的平移向量
  • width:障碍物框的宽
  • height:障碍物框的高
  • depth:障碍物框的深度
开始运行后(需开启避障算法),可以订阅 LxCamera_Obstacel 节点获取相关信息,输出如下:
notion image

5.3.3.4 Result.msg

向节点中 servic 发送指令消息后得到的返回值就储存在 Result 中:
notion image
  • ret:执行 SDK 得到的返回值
  • msg:执行 SDK 得到的返回值的说明

5.3.3.5 Pallet.msg

pallet 输出托盘算法结果相关的信息,pallet 消息格式如下:
notion image
  • header:当前数据的帧信息以及时间戳
  • status:托盘识别返回的状态信息:
0:检测成功
  • 1:未检测到地面
-2:未检测到托盘腿
  • 3:托盘距离过远
  • 4:未知错误
  • x:托盘距离相机光心的 X 距离
  • y:托盘距离相机光心的 Y 距离
  • yaw:托盘中心相对于相机光心的 theta 夹角
节点开始运行后(需开启托盘算法),可以订阅 LxCamera_Pallet 节点获取相关信息,输出如下:
notion image

5.3.4 特有服务说明

因 ROS1 和 ROS2 特有服务类型一致,所以此处 ROS1 为例。在 src/srv 文件夹中有如下文件:
notion image
这些消息皆是用于设置或者获取相机的某些参数值。
【---】之上是发送的数据,【---】之下是返回的数据

5.3.4.1 LxBool.srv

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

5.3.4.2 LxCmd.srv

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

5.3.4.3 LxFloat.srv

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

5.3.4.4 LxInt.srv

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

5.3.4.5 LxString.srv

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

5.3.5 主题订阅方式说明

5.3.5.1 订阅帧率,托盘算法、避障算法输出数据

订阅帧率
在 lx_camera_node_ws 目录下,输入:bash rate.sh
notion image
lx_camera_node 节点图像正常运行并刷新后可以看到如下信息:
notion image
订阅托盘算法输出
在 lx_camera_node_ws 目录下,输入:bash pallet.sh
notion image
lx_camera_node 节点图像正常运行并刷新后可以看到如下信息:
notion image
订阅避障算法输出
在 lx_camera_node_ws 目录下,输入:bash obstacle.sh
notion image
lx_camera_node 节点图像正常运行并刷新后可以看到如下信息:
notion image

5.3.5.2 订阅图像数据(ROS1)

通过 ros 自带的图像工具可以查看节点输出的图像信息:
控制台输入命令:rqt_image_view
输入命令后会弹出如下窗口:
notion image
红色框处可以选择,所有节点中的图像,图中展示的是迈尔微视相机 rgb 图像,还可以选择深度图或者强度图(前提是流已经开启):
notion image
图中,第一个红框是定位算法节点输出的 RGB 信息,其余三个是普通节点输出的图像信息,amp 为强度图,depth 为深度图,rgb 为 rgb 图。
选择不同的项可以查看不同的图像或者使用 rviz 查看图像数据,控制台输入命令:rviz会弹出如下窗口:
notion image
点击左下方 Add 按钮后会弹出窗口:
notion image
选择需要的图像话题并选择其中的 Image 然后点击右下方的 OK,就可以在主界面左侧看到图像数据,如下图显示:
notion image

5.3.5.3 订阅图像数据(ROS2)

通过 ros2 自带的图像工具可以查看节点输出的图像信息:控制台输入命令:rqt
输入命令后会弹出如下窗口:
notion image
选择菜单栏第二项最底下选项的第一个 Image View,选择后会弹出如下界面:
notion image
红色框处可以选择,所有节点中的图像,图中展示的是迈尔微视相机 rgb 图像,还可以选择深度图或者强度图(前提是流已经开启):
notion image
图中,第一个红框是定位算法节点输出的 RGB 信息,其余三个是普通节点输出的图像信息,amp 为强度图,depth 为深度图,rgb 为 rgb 图。
选择不同的项可以查看不同的图像或者使用 rviz2 查看图像数据,控制台输入命令:rviz2会弹出如下窗口:
notion image
点击左下方 Add 按钮后会弹出窗口:
notion image
选择需要的图像话题并选择其中的 Image 然后点击右下方的 OK,就可以在主界面左侧看到图像数据,如下图显示:
notion image
部分系统需要在上图【map】处填入【mrdvs】才能看到图像

5.3.5.4 订阅点云数据

通过 ros 或者 ros2 自带的点云工具可以查看节点输出的点云信息:
命令:rviz【ROS1】,rviz2【ROS2】
输入命令后会弹出如下窗口:
notion image
点击下方红色框内按钮会弹出如下框:
notion image
选择第二个页签,会有名为lx_camera_node 的节点,节点中有名为LxCamera_Cloud 的主题,主题中有名为 PointCloud2 的消息,选择后点击 OK 即可,完成后界面如下:
notion image
(ROS1 界面)
notion image
(ROS2 界面)
此时点云还不能正常显示,在上方红绿框 map 处填入 mrdvs 就可以看到点云,效果如下:
notion image
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"
notion image
可以看到输出:
notion image
ret 是参数的编号,msg 中说明了参数的类型和描述,例如:1001,这个参数是int 类型,参数用于获取和修改第一曝光值。
ros2
在终端输入:ros2 service call /LxCamera_LxCmd lx_camera_ros/srv/LxCmd 'cmd: 0'
notion image
可以看到如下输出:
notion image
因在 ROS2 中查看参数详细不太方便,所以在下表中同样列出了所有参数的编号、类型以及说明:
编号
类型
ROS中说明
详细说明
1001
INT
FIRST_EXPOSURE
默认高积分曝光值
1002
INT
SECOND_EXPOSURE
默认低积分曝光值
1003
INT
THIRD_EXPOSURE
默认中积分曝光值
1004
INT
FOURTH_EXPOSURE
第四个积分
1005
INT
GAIN
增益
1011
INT
MIN_DEPTH
最小深度值
1012
INT
MAX_DEPTH
最大深度值
1013
INT
MIN_AMPLITUDE
有效信号最小强度值
1014
INT
MAX_AMPLITUDE
有效信号最大强度值
1016
INT
CODE_MODE
编码模式
1018
INT
WORK_MODE
工作模式
1019
INT
LINK_SPEED
网卡网速
1021
INT
3D_IMAGE_WIDTH
3D 图像分辨率宽度
1022
INT
3D_IMAGE_HEIGHT
3D 图像分辨率高度
1023
INT
3D_IMAGE_OFFSET_X
ROI 水平偏移像素
1024
INT
3D_IMAGE_OFFSET_Y
ROI 垂直偏移像素
1025
INT
3D_BINNING_MODE
3D 图像 binnin
1026
INT
3D_DEPTH_DATA_TYPE
深度图像数据格式
1031
INT
3D_AMPLITUDE_CHANNEL
3D 强度图像通道数
1032
INT
3D_AMPLITUDE_GET_TYPE
获取强度图像的方式
1033
INT
3D_AMPLITUDE_EXPOSURE
3D 手动曝光值
1034
INT
3D_AMPLITUDE_INTENSITY
3D 自动目标亮
1035
INT
3D_AMPLITUDE_DATA_TYPE
强度图像数据格式
1036
INT
3D_AUTO_EXPOSURE_LEVEL
3D 自动曝光等级
1041
INT
2D_IMAGE_WIDTH
2D 图像分辨率宽度
1042
INT
2D_IMAGE_HEIGHT
2D 图像分辨率高
1043
INT
2D_IMAGE_OFFSET_X
2D 图像 ROI 水平偏移
1044
INT
2D_IMAGE_OFFSET_Y
2D 图像 ROI 垂直偏
1045
INT
2D_BINNING_MODE
2D 图像 binnin
1046
INT
2D_IMAGE_CHANNEL
2D 图像通道数
1047
INT
2D_IMAGE_DATA_TYPE
2D 图像数据格式
1051
INT
2D_MANUAL_EXPOSURE
2D 手动曝光时的曝光值
1052
INT
2D_MANUAL_GAIN
2D 手动曝光时的增益
1053
INT
2D_ENCODE_TYPE
2D 图像压缩格式
1054
INT
2D_AUTO_EXPOSURE_LEVEL
2D 图像自动曝光等
1061
INT
TOF_GLOBAL_OFFSET
TOF 深度数据偏移
1062
INT
3D_UNDISTORT_SCALE
TOF 图像反畸变系数
1065
INT
ALGORITHM_MODE
设置内置应用算法
1066
INT
MODBUS_ADDR
modbus 地址
1067
INT
HEART_TIME
与设备间心跳时间
1068
INT
GVSP_PACKET_SIZE
GVSP 单包数据分包大
1069
INT
TRIGGER_MODE
触发模式
1070
INT
CALCULATE_UP
算法上下移
1072
INT
CAN_BAUD_RATE
can 的波特率值
1073
INT
MAX_3D_AUTO_EXPOSURE
3d 自动曝光上限
1074
INT
CUSTOM_PARAM_GROUP
用户自定义参数组
2001
FLOAT
FILTER_LEVEL
滤波等级
2002
FLOAT
EST_OUT_EXPOSURE
是否评估过曝数据
2003
FLOAT
LIGHT_INTENSITY
光强度
2004
FLOAT
3D_DEPTH_FPS
深度图当前帧率
2005
FLOAT
3D_AMPLITUDE_FPS
强度图当前帧率
2006
FLOAT
2D_IMAGE_FPS
RGB 图当前帧率
2007
FLOAT
DEVICE_TEMPERATURE
相机当前温度
3001
BOOL
CONNECT_STATE
当前连接状态
3002
BOOL
ENABLE_3D_DEPTH_STREAM
开启/关闭深度数据流
3003
BOOL
ENABLE_3D_AMP_STREAM
开启/关闭强度数据流
3006
BOOL
ENABLE_3D_AUTO_EXPOSURE
3D 自动曝光使能
3007
BOOL
ENABLE_3D_UNDISTORT
3D 反畸变使能
3008
BOOL
ENABLE_ANTI_FLICKER
抗频闪使能
3011
BOOL
ENABLE_2D_STREAM
开启/关闭 2D 数据流
3012
BOOL
ENABLE_2D_AUTO_EXPOSURE
2D 自动曝光使能
3015
BOOL
ENABLE_2D_UNDISTORT
2D 图像反畸变使
3016
BOOL
ENABLE_2D_TO_DEPTH
2D3D 图像对齐使
3017
BOOL
ENABLE_BACKGROUND_AMP
强度背景光使能
3018
BOOL
ENABLE_MULTI_MACHINE
多机模式使能
3019
BOOL
ENABLE_MULTI_EXPOSURE_HDR
HDR
3020
BOOL
ENABLE_SYNC_FRAME
是否开启强制帧同步
4001
STRING
DEVICE_VERSION
设备版本号
4002
STRING
DEVICE_LOG_NAME
日志文件名
4003
STRING
FIRMWARE_NAME
固件文件名
4004
STRING
FILTER_PARAMS
滤波算法参数
4005
STRING
ALGORITHM_PARAMS
内置算法参数
4006
STRING
ALGORITHM_VERSION
内置算法版本号
4007
STRING
DEVICE_OS_VERSION
设备系统镜像版本号
0
CMD
GET_PARAM_LIST
获取所有参数编号
1
CMD
START_STREAM
设备启流
2
CMD
STOP_STREAM
设备停流
5001
CMD
GET_NEW_FRAME
更新当前最新数据
5002
CMD
RETURN_VERSION
回退上一版本
5003
CMD
RESTART_DEVICE
重启相机
5004
CMD
WHITE_BALANCE
自动白平衡
5007
CMD
RESET_PARAM
恢复默认参数
部分参数需要先停流才能设置,或者设置有先后顺序,具体需求请跟技术支持人员对接。

5.3.6.2 获取 Int 参数(Lx_Int)

ROS1
在终端输入:rosservice call /lx_camera_node/LxCamera_LxInt "cmd: 1001
val: 0
is_set: false"
notion image
可以看到输出:
notion image
红框内的就是返回值,图中获取的是高积分时间,根据返回结果可以看到,最大值是 3600,最小值是 1,当前值是 1010,是否支持设置是支持,接口调用返回值是 0,返回值信息是成功
ROS2
在 终 端 输 入 : ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt '{cmd: 1001,val: 0,is_set: false}'
notion image
可以看到输出:
notion image
图中获取的是高积分时间,根据返回结果可以看到,最大值是 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"
notion image
可以看到输出:
notion image
红框内的就是返回值,图中设置的是高积分时间,根据返回结果可以看到,最大值是 3600,最小值是 1,当前值已经修改为 2000,是否支持设置是支持,接口调用返回值是 0,返回值信息是成功
ROS2
在 终 端 输 入 : ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt '{cmd: 1001,val: 3000,is_set: true}'
notion image
可以看到输出:
notion image
图中获取的是高积分时间,根据返回结果可以看到,最大值是 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"
notion image
可以看到输出:
notion image
红框内的就是返回值,图中获取的是相机温度,根据返回结果可以看到,最大值是 120,最小值是-40,当前值是 49.6875,是否支持设置是不支持,接口调用返回值是 0,返回值信息是成功
ROS2
在终端输入:ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat '{cmd: 2007,val: 0,is_set: false}'
notion image
可以看到输出:
notion image
图中获取的是相机温度,根据返回结果可以看到,最大值是 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"
notion image
可以看到输出:
notion image
红框内的就是返回值,图中设置的是相机温度,根据返回结果可以看到,最大值是 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}'
notion image
可以看到输出:
notion image
图中设置的是相机温度,根据返回结果可以看到,最大值是 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"
notion image
可以看到输出:
notion image
红框内的就是返回值,图中获取的是 2D 自动曝光,根据返回结果可以看到,当前值是 false,接口调用返回值是 0,返回值信息是成功
ROS2
在终端输入:ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool '{cmd: 3012,val: false,is_set: false}'
notion image
可以看到输出:
notion image
图中获取的是 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"
notion image
可以看到输出:
notion image
红框内的就是返回值,图中设置的是 2D 自动曝光,根据返回结果可以看到,当前值是 true,接口调用返回值是 0,返回值信息是成功,当前值和设置值一致。
ROS2
在终端输入: ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool '{cmd: 3012,val: true,is_set: true}'
notion image
可以看到输出:
notion image
图中设置的是 2D 自动曝光,根据返回结果可以看到,当前值是 true,接口调用返回值是 0,返回值信息是成功,当前值和设置值一致。

5.3.6.8 获取 String 参数(Lx_String)

ROS1
在终端输入: rosservice call /lx_camera_node/LxCamera_LxString "cmd: 4001
val: ''
is_set: false"
notion image
可以看到输出:
notion image
红框内的就是返回值,图中获取的是设备版本号,根据返回结果可以看到,当前值是 V1.1.33_231201,接口调用返回值是 0,返回值信息是成功
ROS2
在终端输入:ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString '{cmd: 4001,val: '',is_set: false}'
notion image
可以看到输出:
notion image
图中获取的是设备版本号,根据返回结果可以看到,当前值是 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"
notion image
可以看到输出:
notion image
红框内的就是返回值,图中设置的是设备版本号,根据返回结果可以看到,当前值是 V1.1.33_231201,接口调用返回值是-2,返回值信息是不支持,当前值和设置值不一致,因为该参数不支持设置。
ROS2
在终端输入:ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString '{cmd: 4001,val: "put:\"123\"",is_set: true}'
notion image
可以看到输出:
notion image
图中设置的是设备版本号,根据返回结果可以看到,当前值是 V1.1.33_231201,接口调用返回值是-2,返回值信息是不支持,当前值和设置值不一致,因为该参数不支持设置。
在设置 String 类型的值时,对于单引号和双引号一定要加转义符,除了 ROS2 中一开始的双引号和 ROS1 中一开始的单引号,例如要输入字符串【PUT”123”】就必须加入转义符变成:【PUT\”123\”】。

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

6.1 推荐硬件配置

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

6.2 CPU 详情

在CPU详情中会展示该节点在不同运行情况下所占用的 CPU 资源数量,测试基于 AMD64【8 核】,8G 内存硬件环境下,测试相机为 M4PRO,测试算法为托盘算法2D 宽高为 1280*960,3D 宽高为 640*4802D 反畸变开启、3D 反畸变关闭、积分 110 - 3000、深度 0 - 8000、TOF 帧率 14、流模式、平滑等级 1、噪声等级 1、时域等级 0,统计指令为 TOP。因测试软环境是 VM 虚拟机,因此实体机所展示的数据与文档中相比有部分波动属于正常现象。对于部分相机,如 S2,会有部分算法在上位机计算,所以导致资源占用量大,属于正常现象。
  1. 部分名词说明如下:
  • 单流:指开启 RGB、深度、强度任意一个流
  • 双流:指开启 RGB、深度、强度任意两个流
  • 三流:指 RGB、深度、强度三个流全部开启
  • 四流:指 RGB、深度、强度、点云全部开启
  1. 算法于部分流属于绑定关系,绑定关系如下:
  • 开启托盘算法则必须开启深度
  • 开启避障算法则必须开启深度
  • 开启定位算法则必须开启 RGB
表格中浅蓝色背景为开启点云的运行配置,无色背景为不开启点云的运行配置。以下所有测试数据默认为算法下移,因此对于 S2 系列相机来说,所有测试数值可能偏小【S2 系列相机部分算法强制上移】。
Ubuntu16.04
ROS1
运行配置
均值%
区间%
单流
10.59
0.0~26.7
双流
14.13
0.0~60.0
三流
16.56
0.0~37.5
四流
108.25
93.8~162.5
点云+深度
105.13
93.8~153.3
算法+深度
5.44
0.0~43.0
算法+深度+点云
104.39
93.8~120.0
算法+深度+RGB
13.15
6.2~40.0
算法+深度+RGB+点云
105.96
93.8~146.7
算法+深度+强度+RGB+点云
109.29
93.8~162.5
Ubuntu18.04
ROS1
运行配置
均值%
区间%
单流
10.31
0.0~27.5
双流
12.81
5.9~27.8
三流
16.23
5.9~37.5
四流
105.95
88.2~131.2
点云+深度
103.55
88.2~156.2
算法+深度
56.32
0.0~43.8
算法+深度+点云
104.07
78.3~43.8
算法+深度+RGB
15.22
5.9~70.6
算法+深度+RGB+点云
104.56
93.8~125.0
算法+深度+强度+RGB+点云
105.52
61.5~204.8
ROS2
运行配置
均值%
区间%
单流
19.19
5.9~88.2
双流
23.17
6.2~109.1
三流
30.59
9.1~125.0
四流
108.44
44.4~158.6
点云+深度
102.19
37.5~143.9
算法+深度
6.44
0.0~26.7
算法+深度+点云
104.45
79.2~176.5
算法+深度+RGB
14.82
5.9~50.0
算法+深度+RGB+点云
106.89
94.1~137.5
算法+深度+强度+RGB+点云
108.41
94.1~162.5
Ubuntu20.04
ROS1
运行配置
均值%
区间%
单流
11.46
0.0~50.0
双流
14.62
6.2~66.7
三流
18.46
6.2~50.0
四流
43.64
25.0~143.8
点云+深度
28.37
12.5~75.0
算法+深度
6.53
0.0~43.8
算法+深度+点云
29.28
13.3~100
算法+深度+RGB
13.79
0.0~50.0
算法+深度+RGB+点云
40.64
25.0~81.2
算法+深度+强度+RGB+点云
44.44
25.0~75.0
ROS2
运行配置
均值%
区间%
单流
8.07
0.0~20.0
双流
11.25
0.0~33.3
三流
16.18
6.2~62.5
四流
33.77
0.0~86.7
点云+深度
27.45
12.5~81.2
算法+深度
6.13
0.0~68.8
算法+深度+点云
31.11
12.5~56.2
算法+深度+RGB
11.75
0.0~68.8
算法+深度+RGB+点云
38.04
6.2~75.0
算法+深度+强度+RGB+点云
40.85
18.8~106.2
Ubuntu22.04
ROS1
运行配置
均值%
区间%
单流
8.05
0.0~23.5
双流
11.99
0.0~75.0
三流
18.08
0.0~100
四流
50.06
6.2~200
点云+深度
33.92
0.0~106.2
算法+深度
7.70
0.0~43.8
算法+深度+点云
36.20
6.2~131.2
算法+深度+RGB
14.46
6.2~37.5
算法+深度+RGB+点云
39.07
18.8~94.1
算法+深度+强度+RGB+点云
45.61
12.5~93.8

6.3 内存详情

在内存详情中会展示该节点在不同运行情况下所占用内存资源数量,测试基于AMD64【8 核】,8G 内存硬件环境下,测试相机为 M4PRO,测试算法为托盘算法2D 宽高为 1280*960,3D 宽高为 640*4802D 反畸变开启、3D 反畸变关闭、积分 110 - 3000、深度 0 - 8000、TOF 帧率 14、流模式、平滑等级 1、噪声等级 1、时域等级 0,统计指令为 TOP。因测试软环境是 VM 虚拟机,因此实体机所展示的数据与文档中相比有部分波动属于正常现象。对于部分相机,如 S2,会有部分算法在上位机计算,所以导致资源占用量大,属于正常现象。
  1. 部分名词说明如下:
  • 单流:指开启 RGB、深度、强度任意一个流
  • 双流:指开启 RGB、深度、强度任意两个流
  • 三流:指 RGB、深度、强度三个流全部开启
  • 四流:指 RGB、深度、强度、点云全部开启
  1. 算法于部分流属于绑定关系,绑定关系如下:
  • 开启托盘算法则必须开启深度
  • 开启避障算法则必须开启深度
  • 开启定位算法则必须开启 RGB
  1. 表格中浅蓝色背景为开启点云的运行配置,无色背景为不开启点云的运行配置。以下所有测试数据默认为算法下移,因此对于 S2 系列相机来说,所有测试数值可能偏小【S2 系列相机部分算法强制上移】。
Ubuntu16.04
ROS1
运行配置
均值%
区间%
单流
0.60
0.6~0.7
双流
0.61
0.6~0.8
三流
0.66
0.6~0.8
四流
0.79
0.7~0.9
点云+深度
0.60
0.5~0.7
算法+深度
0.50
0.5~0.5
算法+深度+点云
0.60
0.5~0.7
算法+深度+RGB
0.62
0.6~0.8
算法+深度+RGB+点云
0.71
0.6~0.9
算法+深度+强度+RGB+点云
0.79
0.7~0.9
Ubuntu18.04
ROS1
运行配置
均值%
区间%
单流
1.01
1.1~1.2
双流
1.10
1.1~1.2
三流
1.10
1.1~1.2
四流
1.19
1.1~1.3
点云+深度
1.09
0.9~1.2
算法+深度
0.90
0.9~1.0
算法+深度+点云
1.09
0.9~1.2
算法+深度+RGB
1.10
1.1~1.2
算法+深度+RGB+点云
1.19
1.1~1.3
算法+深度+强度+RGB+点云
1.20
1.1~1.4
ROS2
运行配置
均值%
区间%
单流
1.19
1.1~1.2
双流
1.27
1.1~1.3
三流
1.29
1.2~1.3
四流
1.57
1.3~1.6
点云+深度
1.20
1.1~1.3
算法+深度
0.90
0.9~0.9
算法+深度+点云
1.10
1.0~1.2
算法+深度+RGB
1.10
1.1~1.2
算法+深度+RGB+点云
1.30
1.3~1.4
算法+深度+强度+RGB+点云
1.41
1.3~1.6
Ubuntu20.04
ROS1
运行配置
均值%
区间%
单流
1.21
1.2~1.4
双流
1.30
1.3~1.4
三流
1.30
1.3~1.4
四流
1.33
1.3~1.5
点云+深度
1.21
1.2~1.4
算法+深度
1.19
1.1~1.2
算法+深度+点云
1.22
1.2~1.4
算法+深度+RGB
1.30
1.3~1.4
算法+深度+RGB+点云
1.32
1.3~1.5
算法+深度+强度+RGB+点云
1.33
1.3~1.5
ROS2
运行配置
均值%
区间%
单流
1.20
1.2~1.3
双流
1.20
1.2~1.3
三流
1.30
1.3~1.4
四流
1.64
1.4~1.7
点云+深度
1.36
1.1~1.4
算法+深度
1.10
1.1~1.1
算法+深度+点云
1.19
1.1~1.3
算法+深度+RGB
1.40
1.4~1.4
算法+深度+RGB+点云
1.58
1.4~1.7
算法+深度+强度+RGB+点云
1.60
1.5~1.7
Ubuntu22.04
ROS1
运行配置
均值%
区间%
单流
1.28
1.1~1.3
双流
1.29
1.2~1.3
三流
1.20
1.2~1.3
四流
1.49
1.4~1.6
点云+深度
1.11
1.1~1.2
算法+深度
1.00
1.0~1.0
算法+深度+点云
1.11
1.1~1.2
算法+深度+RGB
1.20
1.2~1.3
算法+深度+RGB+点云
1.55
1.3~1.6
算法+深度+强度+RGB+点云
1.51
1.3~1.7

附录:

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

1. Cmake 指定版本安装方法

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

2. Opencv 指定版本安装方法

  1. 下载所需版本的 opencv:Releases OpenCV
notion image
  1. 环境配置,依次执行以下命令:
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
  1. 新建 opencv 文件夹,将下载的源码解压到 opencv 文件夹中
  1. 依次执行以下命令:
    1. 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
  1. 安装指定的 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
  1. 添加秘钥:
curl -sSL
'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -
  1. 更新源:
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
  1. 配置环境变量:
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  1. 补全 ROS 相关的工具:
sudoaptinstallpython-rosinstallpython-rosinstall-generatorpython-wstool
build-essential
  1. 到此 ROS1 全部安装完成,运行一下 ROS 自带的示例,查看安装是否正确:
打开一个终端输入:roscore
再打开一个终端输入:rosrun turtlesim turtlesim_node
再打开一个终端:rosrun turtlesim turtle_teleop_key
在第三个终端可以通过方向键控制小海龟
如果能正常运行如下图,则说明 ros 已经正确安装:
notion image
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'
  1. 设置公钥:
sudoapt-keyadv--keyserver'hkp://keyserver.ubuntu.com:80'--recv-key
C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  1. 更新软件列表:
sudo apt update
  1. 安装 Ubuntu18.04 版本的 ROS1:
sudo apt install ros-melodic-desktop-full
  1. 设置环境变量:
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc如果是 zsh:
echo "source /opt/ros/melodic/setup.bash" >> ~/.zshrc
source ~/.zshrc
  1. 补全 ROS 相关的工具:
sudoaptinstallpython-rosdeppython-rosinstallpython-rosinstall-generator
python-wstool build-essential
  1. 到此 ROS1 全部安装完成,运行一下 ROS 自带的示例,查看安装是否正确:
打开一个终端输入:roscore
再打开一个终端输入:rosrun turtlesim turtlesim_node
再打开一个终端:rosrun turtlesim turtle_teleop_key
在第三个终端可以通过方向键控制小海龟
如果能正常运行如下图,则说明 ros 已经正确安装:
notion image
Ubuntu20.04
  1. 配置公钥:
sudoapt-keyadv--keyserver'hkp://keyserver.ubuntu.com:80'--recv-key
C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  1. 如果显示无法连接服务器或超时,请先更新软件源列表:
sudo apt-get update
sudo apt-get upgrade
  1. 配置公钥后,再次更新软件列表:
sudo apt-get update安装 ros:
sudo apt install ros-noetic-desktop-full
  1. 设置环境变量:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  1. 安装 ROS 工具:
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool
build-essential
  1. 到此 ROS1 全部安装完成,运行一下 ROS 自带的示例,查看安装是否正确:
打开一个终端输入:roscore
再打开一个终端输入:rosrun turtlesim turtlesim_node
再打开一个终端:rosrun turtlesim turtle_teleop_key
在第三个终端可以通过方向键控制小海龟
如果能正常运行如下图,则说明 ros 已经正确安装:
notion image
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
  1. 然后编译这个新建包:catkin_make这是一个空的包,不会有任何可执行程序,它只是一个包
  1. 接下来演示如何创造一个可以输出’Hellow world’的包
  1. 在刚刚那个包的基础上,我们进入 src 文件夹(包里的 src),并新建一个 main.cpp,如下图(注意看路径):
notion image
  1. 在 main.cpp 中,我们输入一些代码:
notion image
  1. 然后我们改一下外面的 CMakeLists.txt,我们在最底下加入一行:add_executable(example src/main.cpp)
notion image
  1. 然后返回到 ws 目录中编译,执行命令:catkin_make
notion image
  1. 看到这些,就说明编译成功了
  1. 接下来我们配置环境:
source devel/setup.bash
notion image
  1. 然后执行程序,就可以看到输出了:
rosrun example example
notion image

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

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
  1. 就能新建一个名为example_p 的包和一个名为 example_n 的节点,运行后会输出:hello world example_p package

Loading...
目录