本课程面向已经具备基本 ROS 2 使用经验的开发者。你将把奥比中光相机接入 ROS 2,检查图像与相机参数话题,并在 RViz2 中查看深度点云。
课程目标
- 建立独立的 ROS 2 工作空间。
- 获取并构建 OrbbecSDK ROS 2 Wrapper。
- 启动与相机型号匹配的 Launch 文件。
- 检查图像、CameraInfo 与点云话题。
- 在 RViz2 中完成点云显示与坐标系排查。
一、环境准备
请准备已经安装 ROS 2 的 Ubuntu 环境,并确认基础命令可用:
ros2 --help
colcon --help
连接相机后,先关闭可能占用设备的查看器或其他采集程序。一个物理相机通常不应同时被多个进程独占访问。
二、创建工作空间并获取驱动
mkdir -p ~/orbbec_ros2_ws/src
cd ~/orbbec_ros2_ws/src
git clone https://github.com/orbbec/OrbbecSDK_ROS2.git
进入仓库后,请阅读当前版本的 README,确认支持的 ROS 2 发行版、依赖安装方式和相机型号。仓库更新后,包名与启动参数可能发生变化,应以当前文档为准。
三、安装依赖并构建
cd ~/orbbec_ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install
source install/setup.bash
建议将最后一条 source 命令放在新的终端中执行。调试期间不要急于写入 shell 启动文件,以免不同工作空间相互覆盖。
四、选择正确的 Launch 文件
OrbbecSDK ROS 2 Wrapper 为不同产品系列提供对应的启动配置。先列出仓库中的 Launch 文件,再选择与设备型号匹配的文件:
find ~/orbbec_ros2_ws/src -path "*launch*" -name "*.launch.py" | sort
启动形式通常如下:
source ~/orbbec_ros2_ws/install/setup.bash
ros2 launch orbbec_camera <与相机型号匹配的启动文件>.launch.py
不要直接套用其他型号的 Launch 文件。 即使节点能够启动,也可能因为数据流配置不受支持而没有图像。
五、检查节点与话题
打开另一个终端,加载同一个工作空间:
source ~/orbbec_ros2_ws/install/setup.bash
ros2 node list
ros2 topic list
重点检查以下类型的话题是否存在:
- 彩色图像:通常包含
color与image。 - 深度图像:通常包含
depth与image。 - 相机参数:通常以
camera_info结尾。 - 点云:通常包含
points或point_cloud。
不同版本和 Launch 配置的话题名称可能不同,请以 ros2 topic list 的实际输出为准。
六、检查数据是否持续发布
找到实际深度话题后,查看发布频率:
ros2 topic hz <深度图像话题>
再查看消息类型:
ros2 topic type <深度图像话题>
ros2 topic info <深度图像话题>
如果话题存在但频率为零,检查相机是否正常连接、数据流组合是否受支持,以及终端中的驱动日志。
七、使用 RViz2 查看点云
- 运行
rviz2。 - 点击 Add,添加 PointCloud2 显示项。
- 在 Topic 中选择实际点云话题。
- 将 Fixed Frame 设置为点云消息使用的坐标系。
- 根据距离范围调整 Point Size 与 Style。
如果 RViz2 提示找不到坐标变换,先检查点云消息的 frame_id,再确认 Fixed Frame 是否选择正确。可使用以下命令查看消息头:
ros2 topic echo <点云话题> --once
八、常见问题
构建时找不到依赖
先确认 ROS 2 环境已经加载,再运行 rosdep update 和依赖安装命令。若仓库 README 指定了额外依赖,应按对应发行版安装。
节点启动后找不到设备
检查数据线、USB 权限与设备占用情况。关闭官方查看器或之前遗留的相机节点后重试。
有深度图但没有点云
检查 Launch 参数中是否启用了点云,以及彩色与深度数据流组合是否满足当前点云模式的要求。
点云方向或位置异常
检查 Fixed Frame、相机坐标系及 TF 树。机器人系统中还需要发布相机到机器人基座的外参变换。
课后练习
- 记录相机启动后的节点、图像话题和点云话题名称。
- 测量深度图与点云的实际发布频率。
- 将相机固定,对同一静态场景连续观察一分钟,记录异常帧。
- 尝试将相机坐标系连接到机器人基座坐标系,并在 RViz2 中验证方向。