ROS2 Demo 使用
本页说明 RoboBaton_4P_ROS2_demo 运行和 topic 检查方式。当前 ROS2 路径已完成构建、安装包、板端相机/IMU topic 和 compressed 图像验证。
Important
ROS2 与 non-ROS RTSP 是两条独立使用路径。ROS2 demo 不提供 RTSP;non-ROS /root/demo 运行包和 ROS2 /root/ros2_demo install 包不要混用目录、头文件或 .so。
功能边界
ROS2包名为robobaton_4p_ros2_demo,版本1.1.0。主要产物:
节点:
robobaton_sensors_nodeIMU 频率检查工具:
robobaton_imu_rate_monitorLaunch:
launch/robobaton_sensors.launch.py默认配置:
config/robobaton_sensors.yaml安装环境脚本:install 根目录的
robobaton_ros2_env.bash,用于统一加载 ROS2 underlay、本包 overlay、FastDDS SHM profile 和日志缓冲设置。
已开放能力:
四路 raw 图像:
sensor_msgs/msg/Image,编码nv12。四路 compressed 图像:
sensor_msgs/msg/CompressedImage,JPEG payload;有 compressed 订阅者时才把有效 NV12 行复制到 X5 media-codec 内部输入 buffer,并以MEDIA_CODEC_ID_JPEG执行硬件单帧压缩。四路
sensor_msgs/msg/CameraInfo。IMU:
sensor_msgs/msg/Imu。温度:
sensor_msgs/msg/Temperature。
当前不提供 RTSP、相机/IMU 硬同步、TF 外参、相机内参或畸变标定。CameraInfo 只发布当前帧宽高,标定字段为空;IMU orientation 不可用。
物理相机丝印到 ROS2 prefix 的映射为 CAM1 -> /robobaton/cam0、CAM2 -> /robobaton/cam1、CAM3 -> /robobaton/cam2、CAM4 -> /robobaton/cam3;完整 RTSP 端口映射见 硬件连接与安全。
Topics
Topic |
消息类型 |
编码/用途 |
QoS |
|---|---|---|---|
|
|
cam0 raw NV12 |
Reliable,keep last 8 |
|
|
cam1 raw NV12 |
Reliable,keep last 8 |
|
|
cam2 raw NV12 |
Reliable,keep last 8 |
|
|
cam3 raw NV12 |
Reliable,keep last 8 |
|
|
cam0 JPEG compressed transport |
跟随 raw QoS,Reliable,keep last 8 |
|
|
cam1 JPEG compressed transport |
跟随 raw QoS,Reliable,keep last 8 |
|
|
cam2 JPEG compressed transport |
跟随 raw QoS,Reliable,keep last 8 |
|
|
cam3 JPEG compressed transport |
跟随 raw QoS,Reliable,keep last 8 |
|
|
cam0 宽高信息,标定字段为空 |
Reliable + Transient Local,keep last 1 |
|
|
cam1 宽高信息,标定字段为空 |
Reliable + Transient Local,keep last 1 |
|
|
cam2 宽高信息,标定字段为空 |
Reliable + Transient Local,keep last 1 |
|
|
cam3 宽高信息,标定字段为空 |
Reliable + Transient Local,keep last 1 |
|
|
ICM-42688 gyro/accel |
|
|
|
ICM-42688 温度 |
|
安全部署
ROS2 install 包部署到 /root/ros2_demo/install,不改动 non-ROS /root/demo。部署必须使用完整 archive checksum 校验传输内容,解包后再用 runtime abi_manifest.sha256 校验可执行文件、插件和相关动态库。checksum 或 abi_manifest.sha256 失败时不得切换,保留旧 /root/ros2_demo。
切换前确认旧 ROS2 节点已退出,保持 cam-service 运行;切换时备份旧 /root/ros2_demo,失败时按最近备份回滚。完整上传、校验、切换和回滚命令见 部署、升级与回滚。
运行
X5 板端推荐加载 install 根目录环境脚本。脚本默认加载 /opt/ros/humble/setup.bash,再加载本包 overlay,并设置 FastDDS SHM profile 和 RCUTILS_LOGGING_BUFFERED_STREAM=0:
source /root/ros2_demo/install/robobaton_ros2_env.bash
ros2 launch robobaton_4p_ros2_demo robobaton_sensors.launch.py
只想运行一次命令时,可以直接执行脚本作为 wrapper:
/root/ros2_demo/install/robobaton_ros2_env.bash ros2 topic list --no-daemon --include-hidden-topics
板端 ROS2 underlay 路径不同时,先设置 ROBOBATON_ROS_UNDERLAY=/path/to/setup.bash。确需 POSIX sh 时,必须显式提供 install 前缀:
. /opt/ros/humble/setup.sh
COLCON_CURRENT_PREFIX=/root/ros2_demo/install \
. /root/ros2_demo/install/setup.sh
IMU-only:
ros2 run robobaton_4p_ros2_demo robobaton_sensors_node --ros-args \
-p enable_camera:=false -p enable_imu:=true
单颗相机 smoke:
ros2 run robobaton_4p_ros2_demo robobaton_sensors_node --ros-args \
-p enable_camera:=true -p enable_imu:=false -p camera.camera_mask:=1
默认联合运行:
ros2 launch robobaton_4p_ros2_demo robobaton_sensors.launch.py
快速检查
查看 graph 时优先绕过可能过期的 daemon:
/root/ros2_demo/install/robobaton_ros2_env.bash ros2 topic list --no-daemon --include-hidden-topics
/root/ros2_demo/install/robobaton_ros2_env.bash ros2 node list --no-daemon
如果必须使用普通 ros2 topic list,先在已加载环境下重启 daemon:
/root/ros2_demo/install/robobaton_ros2_env.bash --restart-daemon
/root/ros2_demo/install/robobaton_ros2_env.bash ros2 topic list --include-hidden-topics
IMU频率优先用包内 C++ monitor:
/root/ros2_demo/install/robobaton_ros2_env.bash ros2 run robobaton_4p_ros2_demo robobaton_imu_rate_monitor
默认订阅 /robobaton/imu/data,每秒输出 ROB2_IMU_RATE ... hz=...。启动后的第一行可能包含 DDS 匹配和半个统计窗口,判断稳定频率时看后续连续多行。
常用覆盖参数:
/root/ros2_demo/install/robobaton_ros2_env.bash ros2 run robobaton_4p_ros2_demo robobaton_imu_rate_monitor --ros-args \
-p topic:=/robobaton/imu/data -p report_period_ms:=1000 -p qos_depth:=100
raw、compressed 和 CameraInfo 检查:
/root/ros2_demo/install/robobaton_ros2_env.bash ros2 topic hz /robobaton/cam0/image_raw
/root/ros2_demo/install/robobaton_ros2_env.bash ros2 topic hz /robobaton/cam0/image_raw/compressed
/root/ros2_demo/install/robobaton_ros2_env.bash ros2 topic echo /robobaton/cam0/camera_info --once
/root/ros2_demo/install/robobaton_ros2_env.bash ros2 topic echo /robobaton/imu/temperature --once
FastDDS SHM 和环境变量检查:
/root/ros2_demo/install/robobaton_ros2_env.bash --check
只有在已停止 launch、ros2 daemon stop 且确认没有 robobaton_sensors_node、ros2 launch、ros2 run 进程时,才允许清理遗留 FastDDS SHM 文件:
/root/ros2_demo/install/robobaton_ros2_env.bash --clean-shm
ros2 topic hz可用于交互诊断;正式证据统一使用包内C++ monitor,避免不同客户端实现造成统计口径漂移。
YAML 参数
参数 |
默认值 |
边界/语义 |
|---|---|---|
|
|
是否启动相机 publisher。 |
|
|
是否启动 IMU publisher。 |
|
|
bit0..bit3 对应软件 cam0..cam3,即物理 CAM1..CAM4;只支持单颗或完整四路,不支持 2/3 路。 |
|
|
仅支持 |
|
|
支持 |
|
|
帧组放行上限,单位 ns。 |
|
|
帧组等待超时,单位 ms。 |
|
|
每路 ROS 发布队列容量,必须大于 0。 |
|
|
支持 |
|
|
是否发布 CameraInfo。 |
|
|
当前只支持 |
|
|
是否注册 raw 与 compressed image_transport 发布插件。 |
|
|
JPEG quality,范围 |
|
|
生成 |
|
|
只有 |
|
|
只接受 |
|
|
当前只支持该模式。 |
|
|
当前固定为 |
|
|
IMU frame_id;完整加速度符号约定见数据合同。 |
|
|
是否发布 |
数据语义
raw Image 使用 NV12。Image.step 保留底层 DMA buffer 的 stride;data.size() 使用底层 Y/UV buffer size,可能大于紧凑 width * height * 3 / 2。订阅端必须按 step 和 data.size() 处理对齐,不要假设紧凑布局。
compressed topic 是标准 CompressedImage JPEG payload。插件只在有 /image_raw/compressed 订阅者时执行压缩:它按 Image.step 和 data.size() 校验 NV12 布局,把有效 Y/UV 行复制到 X5 media-codec 输入 buffer,并通过 MEDIA_CODEC_ID_JPEG 生成 JPEG,保留原始消息的 header。
header.stamp 不是发布时刻。在 V1 已验证的 software_gpio 模式下,节点启动时冻结 CLOCK_REALTIME - CLOCK_MONOTONIC_RAW offset,并把相机 SC132 raw timestamp 映射到 system realtime/ROS stamp。显式 none 诊断模式保留底层 SC132 时间域,不声明为 V1 wall/realtime 合同。IMU sample_timestamp_ns 会通过同一个冻结 offset 映射到 system realtime/ROS 时间戳;IMU 不使用 host_timestamp_ns 作为消息时间。
CameraInfo 只带当前帧宽高,畸变模型和标定矩阵为空。IMU orientation 不可用,消息设置 orientation_covariance[0] = -1.0;gyro/accel 协方差当前不伪造。robobaton_imu_link 只标识 IMU 消息来源;它不建立到相机、base、optical frame 或其他坐标系的变换,也不声明 TF 或外参。