从零部署Orbbec Gemini2:ROS2 Humble环境下的驱动配置与多话题数据解析
1. 环境准备与驱动安装最近在做一个机器人项目需要用到Orbbec Gemini2原DaBai DCL深度相机。折腾了两天才把ROS2驱动搞定这里把完整过程记录下来希望能帮到同样在配置这款相机的朋友。1.1 系统要求检查首先确认你的Ubuntu版本是22.04这是ROS2 Humble的官方支持版本。我一开始用20.04试了半天才发现不兼容白白浪费半天时间。检查方法很简单lsb_release -a输出应该显示Ubuntu 22.04。如果还没安装系统建议直接去官网下载22.04 LTS版本长期支持更稳定。1.2 ROS2 Humble安装官方推荐使用二进制包安装ROS2 Humble比源码编译省事很多。执行以下命令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 - sudo sh -c echo deb [arch$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main /etc/apt/sources.list.d/ros2.list sudo apt update sudo apt install ros-humble-desktop安装完成后别忘记配置环境变量source /opt/ros/humble/setup.bash echo source /opt/ros/humble/setup.bash ~/.bashrc1.3 硬件连接验证插上Gemini2相机后先检查系统是否识别到设备lsusb | grep Orbbec正常应该能看到类似这样的输出Bus 004 Device 002: ID 2bc5:0701 Orbbec 3D Technology International, Inc Orbbec(R) DaBai DCL(TM)如果没显示可能是USB供电不足建议换到USB3.0接口蓝色接口。我遇到过插在USB2.0上设备能识别但数据传输不稳定的情况。2. 驱动编译与相机启动2.1 获取特定版本驱动官方最新驱动(2.2.3)目前不支持Gemini2需要手动下载旧版。我测试过1.9.6版本最稳定mkdir -p ~/orbbec_ws/src cd ~/orbbec_ws/src git clone -b v1.9.6 https://github.com/orbbec/OrbbecSDK_ROS2这里有个坑要注意如果直接克隆master分支编译会通过但运行时可能报Failed to setup devices错误。2.2 编译驱动创建工作空间并编译cd ~/orbbec_ws rosdep install --from-paths src --ignore-src -r -y colcon build编译过程大概需要5-10分钟取决于你的机器性能。我第一次编译时卡在99%好久后来发现是内存不足加了swap分区才解决。2.3 启动相机节点编译成功后启动相机source install/setup.bash ros2 launch orbbec_camera dabai_dcl.py正常启动会看到大量日志输出重点关注这几行[INFO] [camera.camera]: Device Dabai DCL connected [INFO] [camera.camera]: Serial number: xxxxx [INFO] [camera.camera]: Firmware version: x.x.x如果出现ERROR提示大概率是USB带宽不足可以尝试关闭其他USB设备或降低相机分辨率。3. 话题数据解析3.1 查看可用话题启动成功后新开终端查看发布的话题ros2 topic listGemini2会发布以下主要话题/camera/color/image_rawRGB图像/camera/depth/image_raw深度图/camera/ir/image_raw红外图像/camera/gyro_accel/sampleIMU数据3.2 深度数据解析深度数据以毫米为单位可以通过rviz2可视化ros2 run rviz2 rviz2在rviz中添加Image显示选择/camera/depth/image_raw话题。正常应该能看到灰度图颜色越亮表示距离越近。如果想获取具体距离值可以用Python脚本订阅话题import rclpy from sensor_msgs.msg import Image import numpy as np def depth_callback(msg): depth_data np.frombuffer(msg.data, dtypenp.uint16).reshape(msg.height, msg.width) print(f中心点距离{depth_data[msg.height//2, msg.width//2]}mm) rclpy.init() node rclpy.create_node(depth_subscriber) sub node.create_subscription(Image, /camera/depth/image_raw, depth_callback, 10) rclpy.spin(node)3.3 IMU数据处理IMU数据包含加速度计和陀螺仪信息消息格式如下ros2 topic echo /camera/gyro_accel/sample输出示例header: stamp: sec: 123456 nanosec: 789012345 frame_id: imu_link accel: x: 0.12 y: 0.05 z: 9.81 gyro: x: 0.01 y: -0.02 z: 0.00注意Z轴加速度约9.81m/s²是重力加速度实际应用时需要减去这个基准值。4. 常见问题排查4.1 设备连接失败如果启动时报Failed to setup devices按以下步骤排查检查USB连接是否松动尝试更换USB接口优先使用主板原生USB3.0确认使用的驱动版本是1.9.6检查相机固件版本是否需要升级4.2 图像数据异常遇到图像花屏或数据不全时降低分辨率测试修改launch文件中的width/height参数关闭其他占用USB带宽的设备检查环境光线红外相机在完全黑暗环境下效果最好4.3 坐标系对齐问题深度图和彩色图默认使用硬件对齐D2C模式如果需要软件对齐可以修改launch文件中的align_mode参数。我在实际使用中发现硬件对齐的延迟更低但边缘会有轻微错位根据应用场景选择合适的模式。最后提醒一点长时间使用时相机发热比较明显建议加装散热片或保持环境通风。我连续测试4小时后出现过一次相机自动关机的情况后来加了小风扇就再没出现过问题。