ROS 2 平台
ROS 2(Robot Operating System 2)是机器人操作系统的第二代版本。它是一个开源的机器人软件框架,旨在为机器人开发提供工具和库,以简化机器人应用的创建和管理。ROS 2 是由 Open Robotics 开发和维护的,继承了 ROS 1 的许多优点,同时在架构和功能上进行了改进,以满足现代机器人系统的需求。
搭建 ROS 2 开发环境
根据 Ubuntu 版本,安装对应的 ROS 2 开发平台。
Ubuntu20.04:ROS 2 Foxy
Ubuntu22.04:ROS 2 Humble
安装依赖。
sudo apt install python3-colcon-common-extensions sudo apt install ros-foxy-camera-info-manager sudo apt install ros-foxy-image-publisher sudo apt install ros-foxy-diagnostic-updater
sudo apt install python3-colcon-common-extensions sudo apt install ros-humble-camera-info-manager sudo apt install ros-humble-image-publisher sudo apt install ros-humble-diagnostic-updater
下载 Camport ROS 2 SDK
创建工作目录
mkdir -p ~/ros2_ws/src cd ~/ros2_ws/src/
下载 Camport ROS 2
选择以下任意方式,下载 Camport ROS 2 SDK:
使用 git 指令获取本地副本:打开终端,切换到需存放 SDK 的工作目录下,输入 git clone 命令克隆远程仓库。
git clone https://gitee.com/percipioxyz/camport_ros2.git选择以下任意方式,下载 Camport ROS 2 SDK:
使用 git 指令获取本地副本:打开终端,切换到需存放 SDK 的工作目录下,输入 git clone 命令克隆远程仓库。
git clone https://github.com/percipioxyz/camport_ros2.git
Camport ROS 2 SDK 的目录如下图所示:

Camport ROS 2 SDK 目录
README.md
:简述了 ROS 2 编译过程。src/percipio_camera/CMakeLists.txt
:Cmake 编译系统的规则文件。src/percipio_camera/camport3
:包含 Percipio SDK 的库文件和头文件。src/percipio_camera/include
:包含头文件。src/percipio_camera/launch
:包含 ROS 2 的启动文件,用于启动节点和配置参数,其中percipio_camera.launch.py
用于启动单相机,multi_cam.launch.py
用于启动多相机。此外,包内包含的多个 Python 脚本可分别用于订阅节点并显示图像数据、发送软触发信号、离线检测等,详情请参见 订阅相机节点。src/percipio_camera/package.xml
:描述功能包清单的文件,包括功能包的名称、版本号、作者信息、许可信息、编译依赖等。src/percipio_camera/src
:包含主要的源代码文件,包括节点实现、相机驱动等。
配置环境变量
source /opt/ros/foxy/setup.bash
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source /opt/ros/humble/setup.bash
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
构建工程
cd ~/ros2_ws/src/camport_ros2/
colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Release
sudo echo "source ./install/setup.bash" >> ~/.bashrc
source ~/.bashrc
小技巧
colcon build 说明:
--event-handlers console_direct+
:这个选项指定了事件处理程序。console_direct+ 表示直接在控制台输出构建事件的详细信息。这样可以更清楚地看到构建过程中的每一步和可能的错误信息。--cmake-args -DCMAKE_BUILD_TYPE=Release
:这个选项传递了额外的 CMake 参数。在这种情况下,-DCMAKE_BUILD_TYPE=Release 设置了 CMake 的构建类型为 Release。这意味着构建将进行优化,适合发布版本,而不是调试版本。
编译后生成以下文件夹:
build
:中间文件和目标文件。install
:可执行文件、库文件、头文件和其他资源文件。log
:包含编译和运行时生成的日志文件。
修改参数配置
ROS 2 支持通过以下两种方式修改相机参数。
方法一
在 launch 文件( percipio_camera.launch.py
/ multi_cam.launch.py
)中配置相机启动时加载的参数。该方法仅适用于设置 launch 文件中包含的参数,具体步骤如下:
进入 “camport_ros2/install/percipio_camera/share/percipio_camera/launch” 路径。
修改参数配置。
如使用单台相机,打开
percipio_camera.launch.py
文件,并根据需要修改参数配置,可配参数的说明见下表。
指定相机 SN 号
DeclareLaunchArgument('serial_number', default_value='"207000106930"'),指定相机 IP 地址
DeclareLaunchArgument('device_ip', default_value='192.168.120.112'),备注
如果不通过 SN 或 IP 去指定相机,默认打开找到的第一台相机。
如使用多台相机,打开
multi_cam.launch.py
文件,并根据需要修改参数配置,可配参数的说明见下表。
multi_cam.launch.py
文件默认是配置两台相机,如需配置更多相机,请仿照 launch 1、launch2 的内容添加 launch x (x=3,4……n)。备注
xxx_qos 可配值说明:
SYSTEM_DEFAULT:使用系统的默认 QoS 设置,这些设置通常由底层的 DDS(Data Distribution Service)实现定义。效果取决于具体的 DDS 实现。
DEFAULT:提供可靠的消息传递,适用于大多数通用的通信需求。最多保留 10 条最新消息。
PARAMETER_EVENTS:专门用于参数事件的 QoS 设置,确保参数变化事件能够可靠传递。最多保留 1000 条最新消息。
SERVICES_DEFAULT:服务通信的默认 QoS 设置,确保服务请求和响应能够可靠传递。保留所有服务请求和响应消息。
PARAMETERS:专门用于参数的 QoS 设置,确保参数设置和获取的可靠性。最多保留 1000 条最新消息。
SENSOR_DATA:传感器数据的 QoS 设置,适用于高频率、低延迟的数据流传输。最多保留 5 条最新消息。
TL460-S1-E1 相机支持两种 bayer 格式的彩色图像输出:CSI_BAYER8RGGB 和 CSI_BAYER12RGGB。如通过修改
percipio.launch
文件指定相机出 bayer 格式的彩色图像,默认输出为 CSI_BAYER8RGGB,且无法通过修改该文件切换至 CSI_BAYER12RGGB。当通过
percipio.launch
文件配置了相机不支持的图像格式或分辨率时,相机将输出默认配置的图像。
方法二
通过 Percipio Viewer 软件或 Camport SDK 设置相机参数。
GigE2.0 相机(除 PMD 系列与 GM 系列以外的相机)
通过 Percipio Viewer 或 Camport SDK 3.X.X 将参数保存至相机 Storage 区,ROS 启动时将自动加载 storage 区的参数配置并开始采集图像。
GigE2.1 相机(PMD 系列与 GM 系列相机)
通过 Camport SDK 4.X.X 或新版 Percipio Viewer 设置相机默认加载目标 User Set 属性组,相机上电后将自动加载该 User Set 属性组的参数配置。
启动相机节点
ros2 launch percipio_camera percipio_camera.launch.py
ros2 launch percipio_camera multi_cam.launch.py
若相机节点正常启动,终端会打印相机 IP、SN、深度图及彩色图格式与分辨率等信息。
备注
运行过程中,请勿关闭该服务终端。
订阅相机节点
“src/percipio_camera/launch” 路径包含以下基于 Python 的相机节点订阅示例脚本:
depth.py
:使能指定相机采集指定图像格式和分辨率的深度图像。在
percipio.launch
文件中,将 color_enable 置为 true 并保存。启动相机节点后,另开一个终端,切换到 “src/percipio_camera/launch” 路径下。输入python3 depth.py
并运行,弹出的窗口将实时显示指定相机的 depth 图像。如下图所示:depth.py 运行结果
备注
若 depth_registration_enbale 为 true,则输出映射到彩色图空间的深度图;若 depth_registration_enbale 为 false,则输出原始深度图。
color.py
:使能指定相机采集到指定图像格式和分辨率的彩色图像。在
percipio.launch
文件中,将 color_enable 置为 true 并保存。启动相机节点后,另开一个终端,切换到 “src/percipio_camera/launch” 路径下。输入python3 color.py
并运行,弹出的窗口将实时显示指定相机的 color 图像。如下图所示:color.py 运行结果
cloud.py
:使能指定相机采集到指定图像格式和分辨率的点云并保存。在
percipio.launch
文件中,将 depth_enable 与 point_cloud_enable 置为 true,并将 depth_registration_enbale 与 color_point_cloud_enable 置为 false。启动相机节点后,另开一个终端,切换到 “src/percipio_camera/launch” 路径下。输入python3 cloud.py
并运行,弹出的窗口将实时显示指定相机的原始点云。同时,该终端将打印点云保存路径与点云点数。如下图所示:cloud.py 运行结果
registered_cloud.py
:使能指定相机采集指定图像格式和分辨率的彩色点云并保存。在
percipio.launch
文件中,将 color_enable、depth_enable、depth_registration_enbale 与 color_point_cloud_enable 均置为 true 并保存,启动相机节点。然后另开一个终端,切换到 “src/percipio_camera/launch” 路径下。运行python3 registered_cloud.py
,弹出的窗口将实时显示指定相机的彩色点云。同时,该终端将打印点云保存路径与点云点数。如下图所示:registered_cloud.py 运行结果
offline_detect.py
:订阅 “/camera/device_event” 话题,监听相机的离线、超时或重连完成,并在收到消息时打印日志。send_trigger.py
: 订阅 “/camera/trigger_event” 话题,按照设定的频率发送软触发信号(需相机处于软触发模式才会生效)。