Skip to main content
version:
  name: "V1.0"
  revision_record:
    - revision_date: "2024/10/12"
      modified_by: "林雨"

1. 概述

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

2. 系统与环境

2.1 系统与环境介绍

推荐使用以下几种 linux 系统,默认的程序版本见下表:
系统版本Cmake/GccOpencvPclRosRos2
Ubuntu16.043.5/Gcc-53.2.01.7.2KineticArdent、Bouncy
Ubuntu18.043.18/Gcc-74.5.11.9.1MelodicDashing、Eloquent、Crystal
Ubuntu20.043.22/9.3.04.5.11.12.1NoeticFoxy、Galactic
Ubuntu22.043.22/11.3.04.6.01.12.1NinjemysHumble、lron

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

2.2.1 查看系统版本

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

2.2.2 查看 Cmake 版本

命令:cmake -version 结果:
查看 Cmake 版本相关图示
代表 Cmake 的版本为 3.16.3

2.2.3 查看 Gcc 版本

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

2.2.4 查看 Opencv 版本

命令:pkg-config —modversion opencv 结果:
查看 Opencv 版本相关图示
此处版本为 3.2.0

2.2.5 查看 Pcl 版本

命令:dpkg -l libpcl-dev 结果:
查看 Pcl 版本相关图示
此处版本为 1.8.1

2.2.6 查看 ROS 版本

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

2.3 搭建基础开发环境

在安装之前需要先更新安装列表: 执行命令:sudo apt update 结果如下:
搭建基础开发环境相关图示

2.3.1 安装 Cmake

命令:sudo apt install cmake
安装 Cmake相关图示

2.3.2 安装 Gcc

命令:sudo apt install build-essential
安装 Gcc相关图示

2.4 搭建可选开发环境

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

执行命令:sudo apt-get install libopencv-dev
安装 Opencv【可显示相机图像】相关图示

2.4.2 安装 Pcl【可显示点云】

执行命令:sudo apt-get install libpcl-dev
安装 Pcl【可显示点云】相关图示

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

3.1 执行安装脚本

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

3.2 示例代码介绍

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

3.2.1 C 与 C++示例代码

进入 C 目录,目录内容如下:
C 与 C++示例代码相关图示
含 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 目录,目录内容如下:
Java 示例代码相关图示
目录中包含 2 个文件夹以及一个 postman.json 文件和 README
  • Config:文件夹中存放着服务器相关的配置
  • Middleware:服务器主题
  • LxCamera.postman_collection.json:postman 配置文件
  • README:java 虚拟服务器使用教程

3.2.3 ROS 示例代码

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

3.2.4 ROS2 示例代码

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

3.2.5 ros-v1pro 示例代码

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

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

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

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

4.2 java 示例运行流程

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

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

进入 ROS 文件夹,开启一个控制台,执行:roscore
ROS 示例代码的编译与运行相关图示
ROS 示例代码的编译与运行相关图示 2
右键再开启一个控制台,进入 lx_camera_node_ws 文件夹执行 catkin_make
ROS 示例代码的编译与运行相关图示 3
成功执行后会显示如下:
ROS 示例代码的编译与运行相关图示 4
此时文件夹内 devel 和 build 是编译生成的:
ROS 示例代码的编译与运行相关图示 5
执行 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 文件夹,文件夹内容如下:
ROS2 示例代码的编译与运行相关图示
示例 ros 节点采用 colcon 编译方式 首先需要安装编译工具,执行:sudo apt install python3-colcon-common-extensions
ROS2 示例代码的编译与运行相关图示 2
然后安装 ros-pcl 依赖包:sudo apt-get install ros-foxy-pcl*【红色字体部分需要替换为对应的 ros2 版本】 安装完成后进入 lx_camera_node_ws 目录编译项目,执行:colcon build 根据电脑性能不同,编译通常会需要 30 秒到 120 秒,成功编译后会显示如下:
ROS2 示例代码的编译与运行相关图示 3
部分警告是因为版本兼容问题,无需处理,编译完成后文件夹内容如下:
ROS2 示例代码的编译与运行相关图示 4
执行 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 对该驱动详细说明,本文档中只对其做简单介绍:
ros-v1pro 示例代码的编译与运行相关图示
进入 ros-v1pro 文件夹中右键打开控制台,使用 catkin_make 编译,编译完成后显示如下:
ros-v1pro 示例代码的编译与运行相关图示 2
进行环境配置:source devel/setup.bash
ros-v1pro 示例代码的编译与运行相关图示 3
最后运行节点:
  • 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

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.其他相关说明参见下表:
{"log_path" : "./", "print_level" : 2, "enable_screen_print" : 0 }{"errCode" : 0 }
{"open_mode" : 0, "param" : "0"<br />}{"algor_ver" : "VER_1.0.2.230315", "dev_type" : "M4 camera", "errCode" : 0,<br />"firmware_ver" : "V1.0.0.3_230315",<br />"handle" : 174539057817095, "id" : "f13141144bb1",<br />"ip" : "192.168.100.16:3956",<br />"mac" : "9e:be:0a:8a:66:07",<br />"name" :"camera_M4_192.168.100.16_3956",<br />"sn" : "9a5ed62d22b34bb1"<br />}
{"handle" :174539057817<br />095,<br />"cmd" : 6001<br />}{"errCode" : 0,<br />"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 文件夹中有如下文件:
所有的 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 中查看参数详细不太方便,所以在下表中同样列出了所有参数的编号、类型以及说明:
编号类型ROS中说明详细说明
1001INTFIRST_EXPOSURE默认高积分曝光值
1002INTSECOND_EXPOSURE默认低积分曝光值
1003INTTHIRD_EXPOSURE默认中积分曝光值
1004INTFOURTH_EXPOSURE第四个积分
1005INTGAIN增益
1011INTMIN_DEPTH最小深度值
1012INTMAX_DEPTH最大深度值
1013INTMIN_AMPLITUDE有效信号最小强度值
1014INTMAX_AMPLITUDE有效信号最大强度值
1016INTCODE_MODE编码模式
1018INTWORK_MODE工作模式
1019INTLINK_SPEED网卡网速
1021INT3D_IMAGE_WIDTH3D 图像分辨率宽度
1022INT3D_IMAGE_HEIGHT3D 图像分辨率高度
1023INT3D_IMAGE_OFFSET_XROI 水平偏移像素
1024INT3D_IMAGE_OFFSET_YROI 垂直偏移像素
1025INT3D_BINNING_MODE3D 图像 binnin
1026INT3D_DEPTH_DATA_TYPE深度图像数据格式
1031INT3D_AMPLITUDE_CHANNEL3D 强度图像通道数
1032INT3D_AMPLITUDE_GET_TYPE获取强度图像的方式
1033INT3D_AMPLITUDE_EXPOSURE3D 手动曝光值
1034INT3D_AMPLITUDE_INTENSITY3D 自动目标亮
1035INT3D_AMPLITUDE_DATA_TYPE强度图像数据格式
1036INT3D_AUTO_EXPOSURE_LEVEL3D 自动曝光等级
1041INT2D_IMAGE_WIDTH2D 图像分辨率宽度
1042INT2D_IMAGE_HEIGHT2D 图像分辨率高
1043INT2D_IMAGE_OFFSET_X2D 图像 ROI 水平偏移
1044INT2D_IMAGE_OFFSET_Y2D 图像 ROI 垂直偏
1045INT2D_BINNING_MODE2D 图像 binnin
1046INT2D_IMAGE_CHANNEL2D 图像通道数
1047INT2D_IMAGE_DATA_TYPE2D 图像数据格式
1051INT2D_MANUAL_EXPOSURE2D 手动曝光时的曝光值
1052INT2D_MANUAL_GAIN2D 手动曝光时的增益
1053INT2D_ENCODE_TYPE2D 图像压缩格式
1054INT2D_AUTO_EXPOSURE_LEVEL2D 图像自动曝光等
1061INTTOF_GLOBAL_OFFSETTOF 深度数据偏移
1062INT3D_UNDISTORT_SCALETOF 图像反畸变系数
1065INTALGORITHM_MODE设置内置应用算法
1066INTMODBUS_ADDRmodbus 地址
1067INTHEART_TIME与设备间心跳时间
1068INTGVSP_PACKET_SIZEGVSP 单包数据分包大
1069INTTRIGGER_MODE触发模式
1070INTCALCULATE_UP算法上下移
1072INTCAN_BAUD_RATEcan 的波特率值
1073INTMAX_3D_AUTO_EXPOSURE3d 自动曝光上限
1074INTCUSTOM_PARAM_GROUP用户自定义参数组
2001FLOATFILTER_LEVEL滤波等级
2002FLOATEST_OUT_EXPOSURE是否评估过曝数据
2003FLOATLIGHT_INTENSITY光强度
2004FLOAT3D_DEPTH_FPS深度图当前帧率
2005FLOAT3D_AMPLITUDE_FPS强度图当前帧率
2006FLOAT2D_IMAGE_FPSRGB 图当前帧率
2007FLOATDEVICE_TEMPERATURE相机当前温度
3001BOOLCONNECT_STATE当前连接状态
3002BOOLENABLE_3D_DEPTH_STREAM开启/关闭深度数据流
3003BOOLENABLE_3D_AMP_STREAM开启/关闭强度数据流
3006BOOLENABLE_3D_AUTO_EXPOSURE3D 自动曝光使能
3007BOOLENABLE_3D_UNDISTORT3D 反畸变使能
3008BOOLENABLE_ANTI_FLICKER抗频闪使能
3011BOOLENABLE_2D_STREAM开启/关闭 2D 数据流
3012BOOLENABLE_2D_AUTO_EXPOSURE2D 自动曝光使能
3015BOOLENABLE_2D_UNDISTORT2D 图像反畸变使
3016BOOLENABLE_2D_TO_DEPTH2D3D 图像对齐使
3017BOOLENABLE_BACKGROUND_AMP强度背景光使能
3018BOOLENABLE_MULTI_MACHINE多机模式使能
3019BOOLENABLE_MULTI_EXPOSURE_HDRHDR
3020BOOLENABLE_SYNC_FRAME是否开启强制帧同步
4001STRINGDEVICE_VERSION设备版本号
4002STRINGDEVICE_LOG_NAME日志文件名
4003STRINGFIRMWARE_NAME固件文件名
4004STRINGFILTER_PARAMS滤波算法参数
4005STRINGALGORITHM_PARAMS内置算法参数
4006STRINGALGORITHM_VERSION内置算法版本号
4007STRINGDEVICE_OS_VERSION设备系统镜像版本号
0CMDGET_PARAM_LIST获取所有参数编号
1CMDSTART_STREAM设备启流
2CMDSTOP_STREAM设备停流
5001CMDGET_NEW_FRAME更新当前最新数据
5002CMDRETURN_VERSION回退上一版本
5003CMDRESTART_DEVICE重启相机
5004CMDWHITE_BALANCE自动白平衡
5007CMDRESET_PARAM恢复默认参数
部分参数需要先停流才能设置,或者设置有先后顺序,具体需求请跟技术支持人员对接。
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
ROS版本CPU内存带宽
rosAMD64【四核】4G1000M
Ubuntu18.04
ROS版本CPU内存带宽
rosAMD64【四核】4G1000M
ros2AMD64【四核】4G1000M
Ubuntu20.04
ROS版本CPU内存带宽
rosAMD64【四核】4G1000M
ros2AMD64【四核】4G1000M
Ubuntu22.04
ROS版本CPU内存带宽
rosAMD64【四核】4G1000M

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、深度、强度、点云全部开启
2.算法于部分流属于绑定关系,绑定关系如下:
  • 开启托盘算法则必须开启深度
  • 开启避障算法则必须开启深度
  • 开启定位算法则必须开启 RGB

表格中浅蓝色背景为开启点云的运行配置,无色背景为不开启点云的运行配置。以下所有测试数据默认为算法下移,因此对于 S2 系列相机来说,所有测试数值可能偏小【S2 系列相机部分算法强制上移】。 Ubuntu16.04
ROS1
运行配置均值%区间%
单流10.590.0~26.7
双流14.130.0~60.0
三流16.560.0~37.5
四流108.2593.8~162.5
点云+深度105.1393.8~153.3
算法+深度5.440.0~43.0
算法+深度+点云104.3993.8~120.0
算法+深度+RGB13.156.2~40.0
算法+深度+RGB+点云105.9693.8~146.7
算法+深度+强度+RGB+点云109.2993.8~162.5
Ubuntu18.04
ROS1
运行配置均值%区间%
单流10.310.0~27.5
双流12.815.9~27.8
三流16.235.9~37.5
四流105.9588.2~131.2
点云+深度103.5588.2~156.2
算法+深度56.320.0~43.8
算法+深度+点云104.0778.3~43.8
算法+深度+RGB15.225.9~70.6
算法+深度+RGB+点云104.5693.8~125.0
算法+深度+强度+RGB+点云105.5261.5~204.8
ROS2
运行配置均值%区间%
单流19.195.9~88.2
双流23.176.2~109.1
三流30.599.1~125.0
四流108.4444.4~158.6
点云+深度102.1937.5~143.9
算法+深度6.440.0~26.7
算法+深度+点云104.4579.2~176.5
算法+深度+RGB14.825.9~50.0
算法+深度+RGB+点云106.8994.1~137.5
算法+深度+强度+RGB+点云108.4194.1~162.5
Ubuntu20.04
ROS1
运行配置均值%区间%
单流11.460.0~50.0
双流14.626.2~66.7
三流18.466.2~50.0
四流43.6425.0~143.8
点云+深度28.3712.5~75.0
算法+深度6.530.0~43.8
算法+深度+点云29.2813.3~100
算法+深度+RGB13.790.0~50.0
算法+深度+RGB+点云40.6425.0~81.2
算法+深度+强度+RGB+点云44.4425.0~75.0
ROS2
运行配置均值%区间%
单流8.070.0~20.0
双流11.250.0~33.3
三流16.186.2~62.5
四流33.770.0~86.7
点云+深度27.4512.5~81.2
算法+深度6.130.0~68.8
算法+深度+点云31.1112.5~56.2
算法+深度+RGB11.750.0~68.8
算法+深度+RGB+点云38.046.2~75.0
算法+深度+强度+RGB+点云40.8518.8~106.2
Ubuntu22.04
ROS1
运行配置均值%区间%
单流8.050.0~23.5
双流11.990.0~75.0
三流18.080.0~100
四流50.066.2~200
点云+深度33.920.0~106.2
算法+深度7.700.0~43.8
算法+深度+点云36.206.2~131.2
算法+深度+RGB14.466.2~37.5
算法+深度+RGB+点云39.0718.8~94.1
算法+深度+强度+RGB+点云45.6112.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、深度、强度、点云全部开启
2.算法于部分流属于绑定关系,绑定关系如下:
  • 开启托盘算法则必须开启深度
  • 开启避障算法则必须开启深度
  • 开启定位算法则必须开启 RGB
3.表格中浅蓝色背景为开启点云的运行配置,无色背景为不开启点云的运行配置。以下所有测试数据默认为算法下移,因此对于 S2 系列相机来说,所有测试数值可能偏小【S2 系列相机部分算法强制上移】。 Ubuntu16.04
ROS1
运行配置均值%区间%
单流0.600.6~0.7
双流0.610.6~0.8
三流0.660.6~0.8
四流0.790.7~0.9
点云+深度0.600.5~0.7
算法+深度0.500.5~0.5
算法+深度+点云0.600.5~0.7
算法+深度+RGB0.620.6~0.8
算法+深度+RGB+点云0.710.6~0.9
算法+深度+强度+RGB+点云0.790.7~0.9
Ubuntu18.04
ROS1
运行配置均值%区间%
单流1.011.1~1.2
双流1.101.1~1.2
三流1.101.1~1.2
四流1.191.1~1.3
点云+深度1.090.9~1.2
算法+深度0.900.9~1.0
算法+深度+点云1.090.9~1.2
算法+深度+RGB1.101.1~1.2
算法+深度+RGB+点云1.191.1~1.3
算法+深度+强度+RGB+点云1.201.1~1.4
ROS2
运行配置均值%区间%
单流1.191.1~1.2
双流1.271.1~1.3
三流1.291.2~1.3
四流1.571.3~1.6
点云+深度1.201.1~1.3
算法+深度0.900.9~0.9
算法+深度+点云1.101.0~1.2
算法+深度+RGB1.101.1~1.2
算法+深度+RGB+点云1.301.3~1.4
算法+深度+强度+RGB+点云1.411.3~1.6
Ubuntu20.04
ROS1
运行配置均值%区间%
单流1.211.2~1.4
双流1.301.3~1.4
三流1.301.3~1.4
四流1.331.3~1.5
点云+深度1.211.2~1.4
算法+深度1.191.1~1.2
算法+深度+点云1.221.2~1.4
算法+深度+RGB1.301.3~1.4
算法+深度+RGB+点云1.321.3~1.5
算法+深度+强度+RGB+点云1.331.3~1.5

ROS2
运行配置均值%区间%
单流1.201.2~1.3
双流1.201.2~1.3
三流1.301.3~1.4
四流1.641.4~1.7
点云+深度1.361.1~1.4
算法+深度1.101.1~1.1
算法+深度+点云1.191.1~1.3
算法+深度+RGB1.401.4~1.4
算法+深度+RGB+点云1.581.4~1.7
算法+深度+强度+RGB+点云1.601.5~1.7
Ubuntu22.04
ROS1
运行配置均值%区间%
单流1.281.1~1.3
双流1.291.2~1.3
三流1.201.2~1.3
四流1.491.4~1.6
点云+深度1.111.1~1.2
算法+深度1.001.0~1.0
算法+深度+点云1.111.1~1.2
算法+深度+RGB1.201.2~1.3
算法+深度+RGB+点云1.551.3~1.6
算法+深度+强度+RGB+点云1.511.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
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 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key-o /usr/share/keyrings/ros-archive-keyring.gpg 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

欢迎通过下述方式联系我们:
Ros2 如何创建一个新的测试包相关图示

感谢您的访问,并希望知识库能成为您深入了解迈尔微视产品和方案的得力助手!