3ebe2700b00340d09a1256d3b4a.../install/ros_viz_adapter/share/ros_viz_adapter/README.md

3.6 KiB
Raw Blame History

ros_viz_adapter

通用 ROS 2 可视化发布适配器,不需要用户修改原始话题名称,也不需要 YAML 配置文件。节点自动发现 sensor_msgs/msg/Imagesensor_msgs/msg/PointCloud2,并把结果发布到 /viz 命名空间。

输出

  • RGB直接加载 image_transport/compressed_pub,插件发布 /viz/<source>/rgb/compressed,不创建 raw base topic。
  • 深度:直接加载 image_transport/compressedDepth_pub,插件发布 /viz/<source>/depth/compressedDepth,不创建 raw base topic。
  • 点云:/viz/<source>/points,消息仍为 sensor_msgs/msg/PointCloud2,但只保留 x/y/z,去除 NaN执行体素降采样、最大点数限制和限频。

图像依据 encoding 分类:rgb8/bgr8/rgba8/bgra8/mono8 为 RGB 16UC1/32FC1/mono16/32SC1 为深度。RGB、深度、点云各使用一个独立处理线程 不存在对应数据类型时,不创建该线程。

运行

colcon build --packages-select ros_viz_adapter --symlink-install
ros2 launch ros_viz_adapter adapter.launch.py

点云可视化示例:

ros2 launch ros_viz_adapter adapter.launch.py \
  input_fps_limit:=10 \
  output_fps:=5 \
  voxel_size_m:=0.10 \
  max_points:=50000

参数:

output_namespace      默认 /viz
input_fps_limit       默认 30回调入口丢弃超频帧
output_fps            默认 10处理线程输出上限
jpeg_quality          默认 80范围 1-100
voxel_size_m          默认 0.05
max_points            默认 100000

调参规律: input_fps_limit 越低,适配器接收和处理次数越少; output_fps 越低,平台网络和渲染负载越低; voxel_size_m 越大,点越少、处理越快,但细节损失越明显,=0 可以关闭体素降采样,但通常不建议这么做; max_points 越小,输出消息越小,但点云显示更稀疏; input_fps_limit:=0 或 output_fps:=0 表示不限制频率。

QoS 为 BEST_EFFORT + KEEP_LAST + depth=1。限频降低的是适配器处理、网络和 平台负载;如果还要降低源容器 CPU应同时调整相机/上游发布频率。

在其他项目中接入

同一个 colcon 工作空间

把本包目录放到项目工作空间的 src/ 下,然后正常构建:

cd <workspace>
colcon build --symlink-install
source install/setup.bash
ros2 launch ros_viz_adapter adapter.launch.py

不需要修改原始 RGB、深度或点云节点。适配器会在同一个 ROS domain 中发现传感器话题, 并发布 /viz/...

在项目 launch 中启动

也可以在项目自己的 launch 文件中包含适配器:

from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch_ros.substitutions import FindPackageShare

viz_adapter = IncludeLaunchDescription(
    PythonLaunchDescriptionSource([
        FindPackageShare('ros_viz_adapter'), '/launch/adapter.launch.py'
    ])
)

viz_adapter 放入项目的 LaunchDescription 即可。也可以直接运行:

ros2 run ros_viz_adapter adapter

独立 ROS 容器或 sidecar

适配器容器与用户容器必须使用相同的 ROS_DOMAIN_IDRMW_IMPLEMENTATION 和可互相发现的 ROS 2 网络。适配器容器只需安装本包、compressed_image_transportcompressed_depth_image_transport,不需要复制用户项目代码。代码只加载上述两个 指定插件,不遍历或加载 Theora 插件。

多容器隔离

为避免不同容器输出重名,可以指定不同 namespace

ros2 launch ros_viz_adapter adapter.launch.py \
  output_namespace:=/viz/robot_01