跳到主要内容
版本:V2.0.7.x

8.10 深度相机


启动奥比相机方法-ROS2

天工行者相机通过 systemd 服务启动,按部位分别挂在对应的 Orin 板上。请勿在 x86 上启动相机服务。

  • 大模型Orin(192.168.41.2):启动头部深度相机。

    sudo systemctl start orbbec_head.service
  • 导航Orin(192.168.41.3):启动腰部和背部深度相机。

    # 腰部相机:导航 Orin(192.168.41.3)
    sudo systemctl start orbbec_waist.service

    #背部相机:导航 Orin(192.168.41.3)
    sudo systemctl start orbbec_back.service
注意

请谨慎在x86系统订阅相机数据,这会占用大量通信带宽,严重时会影响ros2通信从而导致机器人失控

查看节点

启动后,使用 ros2 node list 查看节点,每个相机对应 camera_container 和以部位命名的两个节点,例如:

/ob_camera_head/camera_container
/ob_camera_head/ob_camera_head
/ob_camera_waist/camera_container
/ob_camera_waist/ob_camera_waist
/ob_camera_back/camera_container
/ob_camera_back/ob_camera_back

使用 ros2 node info <节点> 查看指定节点的详细信息,例如:

ros2 node info /ob_camera_head/ob_camera_head

默认发布的话题

三组相机的默认话题如下(head/waist/back 三组结构一致):

# 头部相机
/ob_camera_head/color/camera_info: sensor_msgs/msg/CameraInfo
/ob_camera_head/color/image_raw: sensor_msgs/msg/Image
/ob_camera_head/color/image_raw/compressed: sensor_msgs/msg/CompressedImage
/ob_camera_head/color/image_raw/theora: theora_image_transport/msg/Packet
/ob_camera_head/color/metadata: orbbec_camera_msgs/msg/Metadata
/ob_camera_head/depth/camera_info: sensor_msgs/msg/CameraInfo
/ob_camera_head/depth/image_raw: sensor_msgs/msg/Image
/ob_camera_head/depth/image_raw/compressedDepth: sensor_msgs/msg/CompressedImage
/ob_camera_head/depth/metadata: orbbec_camera_msgs/msg/Metadata
/ob_camera_head/depth_filter_status: std_msgs/msg/String
/ob_camera_head/device_status: std_msgs/msg/String

# 腰部相机
/ob_camera_waist/color/camera_info: sensor_msgs/msg/CameraInfo
/ob_camera_waist/color/image_raw: sensor_msgs/msg/Image
/ob_camera_waist/color/metadata: orbbec_camera_msgs/msg/Metadata
/ob_camera_waist/depth/camera_info: sensor_msgs/msg/CameraInfo
/ob_camera_waist/depth/image_raw: sensor_msgs/msg/Image
/ob_camera_waist/depth/metadata: orbbec_camera_msgs/msg/Metadata
/ob_camera_waist/depth_filter_status: std_msgs/msg/String
/ob_camera_waist/device_status: std_msgs/msg/String

# 背部相机
/ob_camera_back/color/camera_info: sensor_msgs/msg/CameraInfo
/ob_camera_back/color/image_raw: sensor_msgs/msg/Image
/ob_camera_back/color/metadata: orbbec_camera_msgs/msg/Metadata
/ob_camera_back/depth/camera_info: sensor_msgs/msg/CameraInfo
/ob_camera_back/depth/image_raw: sensor_msgs/msg/Image
/ob_camera_back/depth/metadata: orbbec_camera_msgs/msg/Metadata
/ob_camera_back/depth_filter_status: std_msgs/msg/String
/ob_camera_back/device_status: std_msgs/msg/String
信息

点云话题 /ob_camera_head/depth/points/ob_camera_waist/depth/points/ob_camera_back/depth/pointssensor_msgs/msg/PointCloud2)在有订阅者时才会发布,未出现在话题列表属正常现象。

默认提供的服务

每组相机提供的服务一致,以下以头部相机为例(/ob_camera_waist/ob_camera_back 同理替换前缀):

/ob_camera_head/get_auto_white_balance: orbbec_camera_msgs/srv/GetInt32
/ob_camera_head/get_color_exposure: orbbec_camera_msgs/srv/GetInt32
/ob_camera_head/get_color_gain: orbbec_camera_msgs/srv/GetInt32
/ob_camera_head/get_depth_exposure: orbbec_camera_msgs/srv/GetInt32
/ob_camera_head/get_depth_gain: orbbec_camera_msgs/srv/GetInt32
/ob_camera_head/get_device_info: orbbec_camera_msgs/srv/GetDeviceInfo
/ob_camera_head/get_ldp_status: orbbec_camera_msgs/srv/GetBool
/ob_camera_head/get_lrm_measure_distance: orbbec_camera_msgs/srv/GetInt32
/ob_camera_head/get_ptp_config: orbbec_camera_msgs/srv/GetPTPConfig
/ob_camera_head/get_sdk_version: orbbec_camera_msgs/srv/GetString
/ob_camera_head/get_streams_enable: orbbec_camera_msgs/srv/GetStreamsEnable
/ob_camera_head/get_user_calib_params: orbbec_camera_msgs/srv/GetString
/ob_camera_head/get_white_balance: orbbec_camera_msgs/srv/GetInt32
/ob_camera_head/read_customer_data: orbbec_camera_msgs/srv/GetString
/ob_camera_head/reboot_device: std_srvs/srv/Empty
/ob_camera_head/save_images: std_srvs/srv/Empty
/ob_camera_head/save_point_cloud: std_srvs/srv/Empty
/ob_camera_head/send_software_trigger: std_srvs/srv/Empty
/ob_camera_head/set_auto_white_balance: std_srvs/srv/SetBool
/ob_camera_head/set_color_ae_roi: orbbec_camera_msgs/srv/SetArrays
/ob_camera_head/set_color_auto_exposure: std_srvs/srv/SetBool
/ob_camera_head/set_color_exposure: orbbec_camera_msgs/srv/SetInt32
/ob_camera_head/set_color_flip: std_srvs/srv/SetBool
/ob_camera_head/set_color_gain: orbbec_camera_msgs/srv/SetInt32
/ob_camera_head/set_color_mirror: std_srvs/srv/SetBool
/ob_camera_head/set_color_rotation: orbbec_camera_msgs/srv/SetInt32
/ob_camera_head/set_depth_ae_roi: orbbec_camera_msgs/srv/SetArrays
/ob_camera_head/set_depth_auto_exposure: std_srvs/srv/SetBool
/ob_camera_head/set_depth_exposure: orbbec_camera_msgs/srv/SetInt32
/ob_camera_head/set_depth_flip: std_srvs/srv/SetBool
/ob_camera_head/set_depth_gain: orbbec_camera_msgs/srv/SetInt32
/ob_camera_head/set_depth_mirror: std_srvs/srv/SetBool
/ob_camera_head/set_depth_rotation: orbbec_camera_msgs/srv/SetInt32
/ob_camera_head/set_fan_work_mode: orbbec_camera_msgs/srv/SetInt32
/ob_camera_head/set_filter: orbbec_camera_msgs/srv/SetFilter
/ob_camera_head/set_floor_enable: std_srvs/srv/SetBool
/ob_camera_head/set_ir_long_exposure: std_srvs/srv/SetBool
/ob_camera_head/set_laser_enable: std_srvs/srv/SetBool
/ob_camera_head/set_ldp_enable: std_srvs/srv/SetBool
/ob_camera_head/set_ptp_config: orbbec_camera_msgs/srv/SetPTPConfig
/ob_camera_head/set_reset_timestamp: std_srvs/srv/SetBool
/ob_camera_head/set_streams_enable: orbbec_camera_msgs/srv/SetStreamsEnable
/ob_camera_head/set_sync_hosttime: std_srvs/srv/SetBool
/ob_camera_head/set_sync_interleaverlaser: orbbec_camera_msgs/srv/SetInt32
/ob_camera_head/set_user_calib_params: orbbec_camera_msgs/srv/SetString
/ob_camera_head/set_white_balance: orbbec_camera_msgs/srv/SetInt32
/ob_camera_head/switch_ir: orbbec_camera_msgs/srv/SetString
/ob_camera_head/toggle_color: std_srvs/srv/SetBool
/ob_camera_head/toggle_depth: std_srvs/srv/SetBool
/ob_camera_head/write_customer_data: orbbec_camera_msgs/srv/SetString
/ob_camera_head/describe_parameters: rcl_interfaces/srv/DescribeParameters
/ob_camera_head/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/ob_camera_head/get_parameters: rcl_interfaces/srv/GetParameters
/ob_camera_head/list_parameters: rcl_interfaces/srv/ListParameters
/ob_camera_head/set_parameters: rcl_interfaces/srv/SetParameters
/ob_camera_head/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
信息

旧版 /camera/... 话题与 /camera/camera 节点已在 v2.0.7 中被 /ob_camera_head|waist|back/... 取代,不再使用。

查看相机画面

可用rviz2查看相机的实时画面。

注意

传输相机实时彩色画面会占用大量带宽,最好使用网线直连,要不然会非常卡顿。

这里假设你打开的是192.168.41.2上的相机。

  1. 使用 mobaXterm(使用免费版本即可) 连接 192.168.41.2 ,并点击mobaXterm 右上角的 X server,确保 X server 是运行状态(确保标注的区域内显示 X server is running):

  2. 在 mobaXterm 的命令行输入 rviz2 命令:

  3. 在弹出的 rviz 窗口上选择要查看的相机话题:

  4. 可在 rviz 窗口右下角看到相机的实时画面:

    信息

    rviz 窗口各区域之间有个小小的三角形,可以展开和收起对应的区域,你可把无关区域先收起来,然后光标在左下角画面边缘扫过,光标变成可拖动状态时,按下鼠标左键尝试拖动放大。

信息

也可使用 ros2 run rqt_image_view rqt_image_view 命令查看相机画面。

问题排查

如果启动相机服务的时候,输出里包含如下错误:

Failed to initialize device unexpected isp firmware version, please update your camera firmware before streaming data.

而且:

  1. 服务一直无法启动,rviz2也看不到画面,用 ros2 topic list 可以看到相机话题,但是实际没有数据。

  2. 不启动相机服务,直接用 mobaXterm 连接到Orin板上用 OrbbecViewer 命令(在你输入 rviz2 的命令行输入 OrbbecViewer 命令即可)查看相机,是可以正常打开相机画面的:

    OrbbecViewer 弹出窗口的右上角有个提示:ISP固件需要升级:

则有可能是相机固件版本不对。

可尝试按如下方式升级到特定的版本:

  1. 依然按上述方式打开 OrbbecViewer ,然后按如下顺序操作(注意先只操作到数字3处,然后需要选择固件文件):

  2. 选择固件文件:

  3. 点击步骤1图片里数字4处的按钮,进行升级,等待升级完成,再重新尝试启动相机服务。