跳转到内容

Linux 示例使用手册

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

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

2.2.2 查看 Cmake 版本

命令:cmake -version

结果:

代表 Cmake 的版本为 3.16.3

2.2.3 查看 Gcc 版本

命令:gcc -v

结果:

版本号在左下角的蓝色框内,此处版本为:9.4.0

2.2.4 查看 Opencv 版本

命令:pkg-config --modversion opencv

结果:

此处版本为 3.2.0

2.2.5 查看 Pcl 版本

命令:dpkg -l libpcl-dev

结果:

此处版本为 1.8.1

2.2.6 查看 ROS 版本

命令:rosversion -d

结果:

此处版本为 eloquent(Ubuntu18.04 对应的 ros2 版本)

此处版本为 noetic(Ubuntu20 对应的 ros1 版本)

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 文件夹
  1. 右键打开控制台
  2. 执行 install.sh 脚本
  1. 进入/opt/目录检查是否安装成功
  1. 若是能找到文件夹,则是安装成功
  2. 若是安装失败,则需要手动添加到 opt 目录下
  3. 执行 set_socket_buffer_size.sh 脚本
  1. 至此安装脚本全部执行完成!

3.2 示例代码介绍

进入到 Sample 目录下,目录内容如下:

  • C 文件夹中包含 C 与 C++相关的代码
  • Java 文件夹中包含一个 http 服务器,用于间接的调用 sdk
  • Ros 文件夹中包含一个 ros 的示例
  • Ros2 文件夹中包含一个 ros2 的示例

3.2.1 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 目录,目录内容如下:

目录中包含 2 个文件夹以及一个 postman.json 文件和 README

  • 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 文件夹:

在 C 文件夹中打开一个终端,依次执行以下命令:

  • mkdir build
  • cd build
  • cmake ..
  • make

成功执行后进入 build 文件夹中,应当如下:

可执行文件就在 bin 目录中,进入 bin 目录应当如下:

除 arm 示例外,其余示例都会编译,可执行文件名与示例文件夹名相同,直接运行即可

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

右键再开启一个控制台,进入 lx_camera_node_ws 文件夹执行 catkin_make

成功执行后会显示如下:

此时文件夹内 devel 和 build 是编译生成的:

执行 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 文件夹,文件夹内容如下:

示例 ros 节点采用 colcon 编译方式

首先需要安装编译工具,执行:sudo apt install python3-colcon-common-extensions

然后安装 ros-pcl 依赖包:sudo apt-get install ros-foxy-pcl*【红色字体部分需要替换为对应的 ros2 版本】

安装完成后进入 lx_camera_node_ws 目录编译项目,执行:colcon build

根据电脑性能不同,编译通常会需要 30 秒到 120 秒,成功编译后会显示如下:

部分警告是因为版本兼容问题,无需处理,编译完成后文件夹内容如下:

执行 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 文件夹中右键打开控制台,使用 catkin_make 编译,编译完成后显示如下:

进行环境配置:source devel/setup.bash

最后运行节点:

  • 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 打开示例文件后如下图:

消息都是 post 方式,在发送前,记得修改 IP 为服务器的 ip,但是 url 不要修改,url 为服务器内部写死,响应的消息格式与内容都在 body 中示例中提供的接口如下:

  1. DcGetApiVersion:获取 SDK 的版本号吗,没有参数输入
  1. DcSetInfoOutput:设置 SDK 日志输出的路径,参数如下:
  • log_path:日志输出的路径
  • print_level:日志打印的等级
  • enable_screen_print:日志是否在控制台打印
  1. DcLog:输出日志到 SDK 日志中,任何输入的内容都会被打印到 SDK 日志中
  2. DcGetDeviceList:获取设备列表,没有输入,输入为 JSON
  3. DcOpenDevice:打开设备,输入如下:
  • open_mode:打开相机的模式
  • param:打开相机的参数
  1. DcStartStream:让某一个相机开始推送流数据,输入参数如下:
  • handle:相机的句柄,在 DcOpenDevice 中会有返回
  1. DcSetCmd:对相机下发命令,输入如下:
  • handle:要设置的相机的句柄
  • cmd:指令编号
  1. DcGetPtrValue:获取指针数据(图像,参数等),输入如下:
  • handle:要设置的相机的句柄
  • cmd:指令编号
  1. DcSetIntValue:设置相机 int 型的参数,输入如下:
  • 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" :174539057817

095,

"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 文件夹中有如下文件:
  • 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、流配置、工作模式配置、点云单位等
  • 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 文件中的相机参数配置。

  • raw_param:0:使用相机内的配置,1:使用 launch 文件中的配置

不论此参数设置为 0 还是 1,在此参数之前的所有参数都会被设置,0 和 1 只对此参数之后的参数有效。

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:模拟定位数据的运行文件

可以通过运行不同的 launch 文件来执行节点的不同功能,所有节点中除localization、mapping 和 sensor 之外,参数内容都是一致的,只是配置有所不同,在以下小节中会详细介绍,对于 localization、mapping 和 sensor 三个 launch 文件的参数详细介绍请看 ros-v1pro 节点中的介绍。

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 配置

可以选择是否使用 launch 文件中的相机参数配置。

  • raw_param:0:使用相机内的配置,1:使用 launch 文件中的配置

不论此参数设置为 0 还是 1,在此参数之前的所有参数都会被设置,0 和 1 只对此参数之后的参数有效。

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:输出相机温度

节点开始运行后(除视觉定位相关的节点以外),可以订阅 LxCamera_FrameRate节点获取相关信息,输出如下:

5.3.3.2 Obstacle.msg

obstacle 输出避障算法结果相关的信息,obstacle 消息格式如下:

  • header:当前数据的帧信息以及时间戳
  • status:避障返回的状态信息

0:正常避障

-1:未设置地面

-2:未设置输入

-3:范围内无点云

-4:过滤地面后点云为空

-5:半径滤波后点云为空

-6:未得到分割结果

-99:未定义的错误

  • io_output:io 接口输出的避障信息

0:正常

1:警告

2:停障

  • box_number:障碍物数量
  • box:障碍物信息,变长数组,长度由 box_number 决定

节点开始运行后(需开启避障算法),可以订阅 LxCamera_Obstacel 节点获取相关信息,输出如下(图中数据为模拟数据):

5.3.3.3 Obstacle_box.msg

obstacle_box 输出障碍物相关的信息,obstacle_box 消息格式如下:

  • center:障碍物在点云中的质心
  • rotation:障碍物点云的旋转矩阵
  • translation:障碍物点云的平移向量
  • width:障碍物框的宽
  • height:障碍物框的高
  • depth:障碍物框的深度

开始运行后(需开启避障算法),可以订阅 LxCamera_Obstacel 节点获取相关信息,输出如下:

5.3.3.4 Result.msg

向节点中 servic 发送指令消息后得到的返回值就储存在 Result 中:

  • ret:执行 SDK 得到的返回值
  • msg:执行 SDK 得到的返回值的说明
5.3.3.5 Pallet.msg

pallet 输出托盘算法结果相关的信息,pallet 消息格式如下:

  • header:当前数据的帧信息以及时间戳
  • status:托盘识别返回的状态信息:

0:检测成功

-1:未检测到地面

-2:未检测到托盘腿

-3:托盘距离过远

-4:未知错误

  • x:托盘距离相机光心的 X 距离
  • y:托盘距离相机光心的 Y 距离
  • yaw:托盘中心相对于相机光心的 theta 夹角

节点开始运行后(需开启托盘算法),可以订阅 LxCamera_Pallet 节点获取相关信息,输出如下:

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

lx_camera_node 节点图像正常运行并刷新后可以看到如下信息:

订阅托盘算法输出

在 lx_camera_node_ws 目录下,输入:bash pallet.sh

lx_camera_node 节点图像正常运行并刷新后可以看到如下信息:

订阅避障算法输出

在 lx_camera_node_ws 目录下,输入:bash obstacle.sh

lx_camera_node 节点图像正常运行并刷新后可以看到如下信息:

5.3.5.2 订阅图像数据(ROS1)

通过 ros 自带的图像工具可以查看节点输出的图像信息:

控制台输入命令:rqt_image_view

输入命令后会弹出如下窗口:

红色框处可以选择,所有节点中的图像,图中展示的是迈尔微视相机 rgb 图像,还可以选择深度图或者强度图(前提是流已经开启):

图中,第一个红框是定位算法节点输出的 RGB 信息,其余三个是普通节点输出的图像信息,amp 为强度图,depth 为深度图,rgb 为 rgb 图。

选择不同的项可以查看不同的图像或者使用 rviz 查看图像数据,控制台输入命令:rviz会弹出如下窗口:

点击左下方 Add 按钮后会弹出窗口:

选择需要的图像话题并选择其中的 Image 然后点击右下方的 OK,就可以在主界面左侧看到图像数据,如下图显示:

5.3.5.3 订阅图像数据(ROS2)

通过 ros2 自带的图像工具可以查看节点输出的图像信息:控制台输入命令:rqt

输入命令后会弹出如下窗口:

选择菜单栏第二项最底下选项的第一个 Image View,选择后会弹出如下界面:

红色框处可以选择,所有节点中的图像,图中展示的是迈尔微视相机 rgb 图像,还可以选择深度图或者强度图(前提是流已经开启):

图中,第一个红框是定位算法节点输出的 RGB 信息,其余三个是普通节点输出的图像信息,amp 为强度图,depth 为深度图,rgb 为 rgb 图。

选择不同的项可以查看不同的图像或者使用 rviz2 查看图像数据,控制台输入命令:rviz2会弹出如下窗口:

点击左下方 Add 按钮后会弹出窗口:

选择需要的图像话题并选择其中的 Image 然后点击右下方的 OK,就可以在主界面左侧看到图像数据,如下图显示:

部分系统需要在上图【map】处填入【mrdvs】才能看到图像

5.3.5.4 订阅点云数据

通过 ros 或者 ros2 自带的点云工具可以查看节点输出的点云信息:

命令:rviz【ROS1】,rviz2【ROS2】

输入命令后会弹出如下窗口:

点击下方红色框内按钮会弹出如下框:

选择第二个页签,会有名为lx_camera_node 的节点,节点中有名为LxCamera_Cloud 的主题,主题中有名为 PointCloud2 的消息,选择后点击 OK 即可,完成后界面如下:

(ROS1 界面)

(ROS2 界面)

此时点云还不能正常显示,在上方红绿框 map 处填入 mrdvs 就可以看到点云,效果如下:

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"

可以看到输出:

ret 是参数的编号,msg 中说明了参数的类型和描述,例如:1001,这个参数是int 类型,参数用于获取和修改第一曝光值。

ros2

在终端输入:ros2 service call /LxCamera_LxCmd lx_camera_ros/srv/LxCmd 'cmd: 0'

可以看到如下输出:

因在 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"

可以看到输出:

红框内的就是返回值,图中获取的是高积分时间,根据返回结果可以看到,最大值是 3600,最小值是 1,当前值是 1010,是否支持设置是支持,接口调用返回值是 0,返回值信息是成功

ROS2

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

可以看到输出:

图中获取的是高积分时间,根据返回结果可以看到,最大值是 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"

可以看到输出:

红框内的就是返回值,图中设置的是高积分时间,根据返回结果可以看到,最大值是 3600,最小值是 1,当前值已经修改为 2000,是否支持设置是支持,接口调用返回值是 0,返回值信息是成功

ROS2

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

可以看到输出:

图中获取的是高积分时间,根据返回结果可以看到,最大值是 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"

可以看到输出:

红框内的就是返回值,图中获取的是相机温度,根据返回结果可以看到,最大值是 120,最小值是-40,当前值是 49.6875,是否支持设置是不支持,接口调用返回值是 0,返回值信息是成功

ROS2

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

可以看到输出:

图中获取的是相机温度,根据返回结果可以看到,最大值是 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"

可以看到输出:

红框内的就是返回值,图中设置的是相机温度,根据返回结果可以看到,最大值是 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}'

可以看到输出:

图中设置的是相机温度,根据返回结果可以看到,最大值是 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"

可以看到输出:

红框内的就是返回值,图中获取的是 2D 自动曝光,根据返回结果可以看到,当前值是 false,接口调用返回值是 0,返回值信息是成功

ROS2

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

可以看到输出:

图中获取的是 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"

可以看到输出:

红框内的就是返回值,图中设置的是 2D 自动曝光,根据返回结果可以看到,当前值是 true,接口调用返回值是 0,返回值信息是成功,当前值和设置值一致。

ROS2

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

可以看到输出:

图中设置的是 2D 自动曝光,根据返回结果可以看到,当前值是 true,接口调用返回值是 0,返回值信息是成功,当前值和设置值一致。

5.3.6.8 获取 String 参数(Lx_String)

ROS1

在终端输入: rosservice call /lx_camera_node/LxCamera_LxString "cmd: 4001

val: ''

is_set: false"

可以看到输出:

红框内的就是返回值,图中获取的是设备版本号,根据返回结果可以看到,当前值是 V1.1.33_231201,接口调用返回值是 0,返回值信息是成功

ROS2

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

可以看到输出:

图中获取的是设备版本号,根据返回结果可以看到,当前值是 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"

可以看到输出:

红框内的就是返回值,图中设置的是设备版本号,根据返回结果可以看到,当前值是 V1.1.33_231201,接口调用返回值是-2,返回值信息是不支持,当前值和设置值不一致,因为该参数不支持设置。

ROS2

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

可以看到输出:

图中设置的是设备版本号,根据返回结果可以看到,当前值是 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
  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 文件夹中
  2. 依次执行以下命令:

    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

  1. 安装完整的 ros:

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 已经正确安装:

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 已经正确安装:

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 已经正确安装:

Ubuntu22.04

不推荐在 Ubuntu22.04 中安装 ros1,官方并不支持,如果要安装会遇到非常多的依赖问题。

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

  1. 新建一个文件夹 ws,在 ws 文件夹中新建 src 文件夹,进入 src 文件夹执行:

catkin_create_pkg example std_msgs rospy roscpp

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

source devel/setup.bash

  1. 然后执行程序,就可以看到输出了:

rosrun example example

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,将内容拷贝到文件中,拷贝完成后如下:
  1. 然后重新执行第三步:sudo apt-key add ros.asc
  2. 继续执行:

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. 终端输出如下则证明安装成功:

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. 如果此步骤报错如下:
  1. 则使用 VPN 翻墙然后打开浏览器,输入网址,并复制其中内容,然后新建 ros.asc,将内容拷贝到文件中,拷贝完成后如下:
  1. 然后重新执行第三步:sudo apt-key add ros.asc
  2. 继续执行:

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. 终端输出如下则证明安装成功:

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:拒绝连接”

sudo vi /etc/hosts

  1. 增加下面的解析

185.199.108.133raw.githubusercontent.com

  1. 添加后的文件如下:

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
  2. 接着配置环境变量:

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. 终端输出如下则证明安装成功:

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:拒绝连接”

sudo vi /etc/hosts增加下面的解析

185.199.108.133raw.githubusercontent.com

添加后的文件如下:

  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
  2. 接着配置环境变量:

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. 终端输出如下则证明安装成功:

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

VX公众号&官网

迈尔微视官方网站:www.mrdvs.cn

本文归浙江迈尔微视科技有限公司版权©所有


返回主页