前言我们在很早以前就讲过在ROS noetic上配置过Astra S的基础使用教程上手一个RGBD深度相机从原理到实践–ROS noeticAstra S上解读深度测距原理和内外参推导上手一个RGBD深度相机从原理到实践–ROS noeticAstra S中RGB相机的标定和使用最近项目中拿到一个Astra Plus Pro于是就有了本文。本文将使用Astra Plus Pro深度相机进行RTAB-Map算法的配置达到视觉SLAM建图与定位的效果最终达成以下效果1 深度相机Astra Plus Pro配置1-1 RGBDRGB DepthAstra Pro Plus是一款基于结构光Structured Light技术的 RGB-D 深度相机由 Orbbec 公司推出用于获取环境的彩色图像与深度信息。该设备通过 RGB 相机获取彩色图像通过红外结构光系统计算深度信息从而实现每个像素对应真实空间距离的 RGB-D 数据输出。其主要特点如下支持 RGB 彩色图像与深度图同步输出深度范围约为0.6m ~ 8mRGB 分辨率最高可达1920×1080 30fps深度分辨率最高可达640×480 30fps支持输出 RGB 图像、深度图、红外图及点云数据适用于室内机器人、SLAM建图、3D重建等应用场景1-2 OrbbecSDK_ROS2安装与配置首先的当务之急是确认自己的相机版本不同相机型号对应的sdk版本和兼容性不一样务必先确认版本官网https://github.com/orbbec/OrbbecSDK_ROS2/tree/main注意默认拉取仓库时候的分支是v2-main这里我们使用的是Astra Plus Pro只在v1支持所以必须进行切换我们创建一个工作空间然后拉取仓库mkdir-p~/orbbsec_ws/srccd~/orbbsec_ws/srcgitclone https://github.com/orbbec/OrbbecSDK_ROS2.gitgitcheckout main安装依赖sudoaptinstalllibgflags-dev nlohmann-json3-dev\ros-$ROS_DISTRO-image-transport ros-${ROS_DISTRO}-image-transport-plugins ros-${ROS_DISTRO}-compressed-image-transport\ros-$ROS_DISTRO-image-publisher ros-$ROS_DISTRO-camera-info-manager\ros-$ROS_DISTRO-diagnostic-updater ros-$ROS_DISTRO-diagnostic-msgs ros-$ROS_DISTRO-statistics-msgs\ros-$ROS_DISTRO-backward-ros libdw-dev然后我们需要加载udev规则cd~/orbbsec_ws/src/OrbbecSDK_ROS2/orbbec_camera/scriptssudobashinstall_udev_rules.shsudoudevadm control --reload-rulessudoudevadm trigger准备好以后我们就可以直接编译了cd~/orbbsec_ws colcon build --event-handlers console_direct --cmake-args-DCMAKE_BUILD_TYPERelease1-3 驱动根据自己相机的型号找到对应的启动文件../install/setup.bash ros2 launch orbbec_camera astra_pro_plus.launch.py启动后我们可以打开rviz2进行可视化../install/setup.bash rviz21-4 话题说明1-4-1 RGB 彩色图像相关/camera/color/image_raw彩色相机输出的原始RGB图像数据用于视觉SLAM、目标识别与图像处理。/camera/color/camera_info彩色相机内参焦距、主点、畸变系数用于图像几何校正与RGB-D对齐。1-4-2 压缩版本用于传输优化/camera/color/image_raw/compressedJPEG压缩后的彩色图像/camera/color/image_raw/compressedDepth压缩的深度格式一般用于跨网络传输/camera/color/image_raw/theora视频流编码格式较少用于SLAM1-4-3 深度图像相关/camera/depth/image_raw深度相机输出的原始深度图每个像素表示距离信息单位通常为米或毫米用于3D重建与SLAM。/camera/depth/camera_info深度相机内参用于深度图投影到三维空间。1-4-4 深度压缩/传输版本/camera/depth/image_raw/compressed压缩深度图用于网络传输/camera/depth/image_raw/compressedDepth深度压缩编码格式/camera/depth/image_raw/theora视频编码深度流低频使用1-4-5 点云数据3D信息核心/camera/depth/points由深度图 相机内参生成的三维点云数据PointCloud2用于3D环境建图RTAB-Map障碍物检测FAST-LIO2 / Voxel mappingRViz可视化1-4-6 红外IR相机数据/camera/ir/image_raw红外图像数据灰度图用于结构光深度计算/camera/ir/camera_info红外相机内参用于深度计算与标定1-4-7 IR压缩版本/camera/ir/image_raw/compressed/camera/ir/image_raw/compressedDepth/camera/ir/image_raw/theora1-4-8 深度处理与对齐信息/camera/depth_filter_status深度滤波状态信息如降噪、孔洞填补状态/camera/depth_to_color深度图对齐到彩色图的结果/camera/depth_to_ir深度图对齐到红外图的结果2 RTAB-Map2-1 视觉SLAM简述视觉SLAMVisual Simultaneous Localization and Mapping是一种利用相机作为主要传感器同时完成**环境建图Mapping与自身定位Localization**的技术。其核心流程如下通过相机获取连续图像序列提取图像特征如ORB、SIFT等进行帧间匹配估计相机运动视觉里程计构建位姿图Pose Graph通过回环检测修正累计误差输出一致的地图与位姿信息2-2 视觉 SLAM分类视觉 SLAM 大体分为几类特征点法Feature-based直接法Direct半直接法Semi-direct2-2-1 特征点法最经典 / 工程最常用代表算法ORB-SLAM 系列最重要ORB-SLAMORB-SLAM2单目 / 双目 / RGB-DORB-SLAM3支持视觉IMU【10天速通Navigation2】(四) ORB-SLAM3的ROS2 humble编译和配置【10天速通Navigation2】(五) 基于gazebo仿真的复杂地形的ORB-SLAM3配置特点提取特征点ORB / SIFT / FAST做特征匹配PnP求位姿图优化 回环检测2-2-2 直接法Direct SLAM代表算法LSD-SLAMDSODirect Sparse Odometry特点不提特征点直接用像素灰度变化2-2-3 半直接法SVO代表算法SVOSemi-direct Visual Odometry特点少量特征 直接法结合2-3 RTAB-MapReal-Time Appearance-Based Mapping实时外观/视觉建图RTAB-Map 是一种基于**外观信息Appearance-Based与图优化Graph Optimization**的SLAM框架主要用于实时RGB-D SLAM建图与定位。其核心特点包括支持 RGB-D、双目、单目及激光雷达等多种传感器基于图结构Pose Graph进行建图与优化具备回环检测Loop Closure能力可有效减少累计误差采用基于外观特征的地点识别方法提高长期定位稳定性同时支持2D栅格地图与3D点云地图生成值得一说的是RTAB-Map 并不属于视觉SLAM中的单一算法类型特征点法、直接法或半直接法而是一种工程化的图优化视觉SLAM系统。RTAB-Map 实际上是多个SLAM思想的组合前端Tracking基于特征点匹配ORB / SURF / SIFT或结合 RGB-D 深度约束后端Optimization位姿图优化Pose Graph Optimization回环检测Loop Closure2-4 RTAB-Map原理概述RTAB-Map 的核心原理可以概括为基于外观特征的图优化SLAM系统通过“记忆管理 回环检测 位姿图优化”实现长期稳定建图与定位。2-4-1 数据输入层RTAB-Map 接收多种传感器输入典型为 RGB-D 组合RGB图像/camera/color/image_raw深度图像/camera/depth/image_raw相机内参camera_info用于提供环境的视觉信息 三维结构信息。2-4-2 前端视觉里程计Odometry在前端阶段RTAB-Map 估计相机的相对运动提取图像特征点ORB / SURF / SIFT进行帧间匹配结合深度信息恢复3D点计算相机位姿变化motion estimation输出当前帧相对于上一帧的位姿odometry2-4-3 节点生成Keyframe Selection系统不会保存每一帧而是选取“关键帧Keyframes”每个关键帧包含图像信息深度信息位姿信息特征描述子这些关键帧构成图结构的节点Node。2-4-4 回环检测Loop ClosureRTAB-Map 的核心能力之一通过外观特征Appearance-Based检测当前场景是否曾经访问过如果匹配成功则认为发生“回环”作用修正累计误差drift提升地图全局一致性2-4-5位姿图优化Graph Optimization检测到回环后构建位姿图Pose Graph节点 关键帧边 相对位姿约束然后进行全局优化最小化整体误差修正所有节点位置2-4-6 地图生成Mapping优化后的结果用于生成地图2-5 安装RTAB-Mapsudoaptupdatesudoaptinstallros-humble-rtabmap ros-humble-rtabmap-ros2-6 启用建图ros2 launch rtabmap_launch rtabmap.launch.py\rgb_topic:/camera/color/image_raw\depth_topic:/camera/depth/image_raw\camera_info_topic:/camera/color/camera_info\frame_id:camera_color_optical_frame\approx_sync:true\rgbd_sync:true\visual_odometry:true\use_sim_time:false\publish_tf:true\odom_frame_id:odom\base_frame_id:base_link\map_frame_id:map\rviz:true\delete_db_on_start:true参数说明rgb_topicRGB 图像输入depth_topic深度图输入camera_info_topic相机内参frame_id输入帧当前观测坐标系approx_sync是否使用近似时间同步设置为true允许 RGB 和 Depth 时间戳有轻微误差rgbd_sync是否启用 RGB-D 融合同步设置为trueRGB Depth 作为一帧联合处理3D SLAM标准模式visual_odometry是否启用视觉里程计VOuse_sim_time是否使用仿真时间/clockpublish_tf是否发布 TF 变换树发布map-odomodom_frame_id里程计坐标系名称base_frame_id机器人底盘坐标系map_frame_id全局地图坐标系rviz是否自动启动 RViz 可视化delete_db_on_start是否启动时清空数据库2-7 保存地图点击左上角的蓝色圈圈进行保存![[Pasted image 20260627154143.png]]一共了几个选项Global map optimized全局优化地图包含回环检测误差最小Global map not optimized全局未优化原始轨迹有漂移Local map optimized局部优化地图只是一段“窗口地图”Local map not optimized局部未优化当前帧累积的原始局部点云rtabmap.db是一个基于 SQLite 的 SLAM数据库存储“图结构 关键帧 点云 优化信息”的完整工程状态。用来保存整个SLAM过程并支持之后重新加载、优化和导出地图。相比与其他地图格式的优点可回放、可重建最核心优势支持后期优化Re-optimization保存完整SLAM信息不是只存地图额外会存储- 图结构pose graph、关键帧图像RGB/Depth、特征点、回环约束、传感器数据IMU/odom等等支持续建图Incremental Mapping地图默认保存在~/.ros/rtabmap.db![[Pasted image 20260627153836.png]]cd~/.rosls2-8 定位模式在建图保存后我们可以通过database_path:/home/lzh/.ros/rtabmap.db加载刚刚保存的地图同时我们localization:true开启定位模式ros2 launch rtabmap_launch rtabmap.launch.py\database_path:/home/lzh/.ros/rtabmap.db\localization:true\rgb_topic:/camera/color/image_raw\depth_topic:/camera/depth/image_raw\camera_info_topic:/camera/color/camera_info\frame_id:camera_color_optical_frame\approx_sync:true\rgbd_sync:true\visual_odometry:true\rviz:true当然你也可以不指定database_path直接尝试进行定位3 SDK 安装本节为额外内容OrbbecSDK是官方提供的不需要ros2直接使用的sdk3-1 SDK安装https://github.com/orbbec/OrbbecSDK/releases同样注意查看对应的sdk版本支持下载后我们直接解压unzipOrbbecSDK_C_C_v1.10.35_20260128_fa838f5_linux_x64_release.zip3-2 基础使用cdOrbbecSDK_v1.10.35/Example/bin ./HelloOrbbec3-3 深度相机可视化cdOrbbecSDK_v1.10.35/Example/bin ./depth_viewer总结本文使用Astra Plus Pro深度相机进行ROS2的RTAB-Map算法的配置达到视觉SLAM建图与定位的效果如有错误欢迎指出感谢你的观看