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 结果:
- **主版本号:**5
- **次版本号:**15【奇数为开发版本,偶数为稳定版本】
- **修订版本号:**0【修改的次数】
- **此版本的第 N 次修改:**97
- 内核版本:#107~20.0.4.1,通常所说的系统版本就是内核版本
2.2.2 查看 Cmake 版本
命令:cmake -version 结果:
2.2.3 查看 Gcc 版本
命令:gcc -v 结果:
2.2.4 查看 Opencv 版本
命令:pkg-config —modversion opencv 结果:
2.2.5 查看 Pcl 版本
命令:dpkg -l libpcl-dev 结果:
2.2.6 查看 ROS 版本
命令:rosversion -d 结果:

2.3 搭建基础开发环境
在安装之前需要先更新安装列表: 执行命令:sudo apt update 结果如下:
2.3.1 安装 Cmake
命令:sudo apt install cmake
2.3.2 安装 Gcc
命令:sudo apt install build-essential
2.4 搭建可选开发环境
2.4.1 安装 Opencv【可显示相机图像】
执行命令:sudo apt-get install libopencv-dev
2.4.2 安装 Pcl【可显示点云】
执行命令:sudo apt-get install libpcl-dev
3. 示例代码的介绍与运行准备
3.1 执行安装脚本
1.解压缩 Lanxin-MRDVS 文件,并进入 Lanxin-MRDVS 文件夹



3.2 示例代码介绍
进入到 Sample 目录下,目录内容如下:
- C 文件夹中包含 C 与 C++相关的代码
- Java 文件夹中包含一个 http 服务器,用于间接的调用 sdk
- Ros 文件夹中包含一个 ros 的示例
- Ros2 文件夹中包含一个 ros2 的示例
3.2.1 C 与 C++示例代码
进入 C 目录,目录内容如下:
- application_obstacle:获取相机流数据并开启避障算法,输出算法结果
- application_pallet:获取相机流数据并开启托盘算法,输出算法结果
- arm_local_camera:在相机中【ARM】调用 SDK 并获取流数据
- frame_callback:使用回调方式获取相机流数据
- multi_cameras:打开多个相机并获取流数据
- single_camera:打开单个相机并获取流数据
- single_camera2:通过结构体方式获取帧数据
3.2.2 Java 示例代码
进入 java 目录,目录内容如下:
- Config:文件夹中存放着服务器相关的配置
- Middleware:服务器主题
- LxCamera.postman_collection.json:postman 配置文件
- README:java 虚拟服务器使用教程
3.2.3 ROS 示例代码
进入 ros 目录中,目录内容如下:
- lx_camera_node_ws:文件夹中包含了一个标准的 ros 驱动
- README.EN:用英文说明了如何编译节点以及创建一个新的节点
3.2.4 ROS2 示例代码
进入 ros2 目录中,目录内容如下:
- lx_camera_node_ws:文件夹中包含了一个标准的 ros2 驱动
- README.EN:用英文说明了如何编译节点以及创建一个新的节点
3.2.5 ros-v1pro 示例代码
进入 ros-v1pro 目录中,目录内容如下:
- src:文件夹中包含了一个标准的 ros 驱动
- README:说明了如何使用这个节点
- README.pdf:说明了如何使用这个节点
4. 示例代码的编译与运行
4.1 C 与 C++示例代码的编译与运行
进入示例中的 C 文件夹:
- mkdir build
- cd build
- cmake ..
- make


4.2 java 示例运行流程
Java 与其他示例代码不相同,它不直接提供源码,它提供一个 http 服务器以及一个postman 示例,有需要通过 http 来实现间接控制相机的,可以选择 java 示例,进入 java 文件夹,文件夹内容如下:
- 进入 config 文件夹中,修改 Configs.json 文件中的 http_sever_host 字段和http_sever_port 字段:

- 进入 middleware 文件夹,执行 start.sh 脚本,即可启用中转服务器

- 使用 postman 打开 LxCamera.postman_collection.json 文件,即可向示例端口发送数据
4.3 ROS 示例代码的编译与运行
进入 ROS 文件夹,开启一个控制台,执行:roscore




- 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
4.4 ROS2 示例代码的编译与运行
进入 ros2 文件夹,文件夹内容如下:



- 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
4.5 ros-v1pro 示例代码的编译与运行
ros-v1pro 是 V1PRO 相机专用 ros 驱动,在 ros-v1pro 文件夹中有 README.pdf 对该驱动详细说明,本文档中只对其做简单介绍:


- 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



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:指令编号
| 发 | {"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 文件夹中有如下文件:
- 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”



| 编号 | 类型 | 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”

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| ROS版本 | CPU | 内存 | 带宽 |
|---|---|---|---|
| ros | AMD64【四核】 | 4G | 1000M |
| ROS版本 | CPU | 内存 | 带宽 |
|---|---|---|---|
| ros | AMD64【四核】 | 4G | 1000M |
| ros2 | AMD64【四核】 | 4G | 1000M |
| ROS版本 | CPU | 内存 | 带宽 |
|---|---|---|---|
| ros | AMD64【四核】 | 4G | 1000M |
| ros2 | AMD64【四核】 | 4G | 1000M |
| ROS版本 | CPU | 内存 | 带宽 |
|---|---|---|---|
| ros | AMD64【四核】 | 4G | 1000M |
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
| 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 |
| 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 |
| 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 |
| 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*480、2D 反畸变开启、3D 反畸变关闭、积分 110 - 3000、深度 0 - 8000、TOF 帧率 14、流模式、平滑等级 1、噪声等级 1、时域等级 0,统计指令为 TOP。因测试软环境是 VM 虚拟机,因此实体机所展示的数据与文档中相比有部分波动属于正常现象。对于部分相机,如 S2,会有部分算法在上位机计算,所以导致资源占用量大,属于正常现象。1.部分名词说明如下:
- 单流:指开启 RGB、深度、强度任意一个流
- 双流:指开启 RGB、深度、强度任意两个流
- 三流:指 RGB、深度、强度三个流全部开启
- 四流:指 RGB、深度、强度、点云全部开启
- 开启托盘算法则必须开启深度
- 开启避障算法则必须开启深度
- 开启定位算法则必须开启 RGB
| 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 |
| 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 |
| 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 |
| 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 —version2. 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,将内容拷贝到文件中,拷贝完成后如下:










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欢迎通过下述方式联系我们:
- 尚未购买产品,请点我添加售前工程师/销售企业微信
- 已购买产品的用户,请点我添加售后技术支持企业微信
- 官方网站:www.mrdvs.cn
- Official Website: www.mrdvs.cn
- B站:提供视频教程与应用案例
- Bilibili : Provides video tutorials and application cases
- Github:下载SDK与示例代码
- GitHub: Download SDK and Sample Code
- 邮箱:service@mrdvs.com
- Email: service@mrdvs.com
- :400-025-6680
- 关注官方公众号,获取最新资讯:

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