一.使用Intel RealSense Viewer测试相机能否使用,并且校准。
我是在windows系统上使用Intel RealSense Viewer。如果要在ubuntu安装请去另外的博客。
链接: https://pan.baidu.com/s/1be5R-xYT3iHxK2jOB0BUEg?pwd=chy1 提取码: chy1
windows系统上直接安装,相机通过USB连接,支持USB2.0,3.0。
主要用到的圈起来了:1,2分别是开启深度摄像头和色彩摄像头。开启后在2D界面检查画面是否正常。
相机自动标定的简要流程:
- 将相机朝着纹理比较丰富的环境,不一定是平面
- 打开 realsense_viewer
- 将 "Stereo Module" 中的 “Emitter Enabled” 设置为 “Laser”
- 在 “More” 下拉菜单中选择 "On-Chip Calibration"
- 右边弹出选项,选择 "Calibrate"
- 查看 "Health-Check" 的数值, 一般小于 0.25 是可以接受的。
- 如果新的标定参数比之前的好,就 “Apply New” 将新的参数烧入 Firmware 中。
二.ROS2 humble版本的安装(安装了可跳过)
在终端命令行输入小鱼一键安装:
wget http://fishros.com/install -O fishros && . fishros
三.安装RealSense ROS 2驱动
参考官方IntelRealSense/realsense-ros: ROS Wrapper for Intel(R) RealSense(TM) Cameras
sudo apt install ros-humble-librealsense2*
sudo apt install ros-humble-realsense2-*
四.启动 D435的ROS 2驱动
ros2 launch realsense2_camera rs_launch.py depth_module.depth_profile:=640x480x30 align_depth:=true pointcloud.enable:=true
如果检测不到设备请参考Intel RealSense SDK+WSL2+ROS2兼容性问题-CSDN博客
使用源码编译。
其核心作用是将相机的传感器数据(如RGB图像、深度图像等)转换为ROS话题和服务,供其他ROS节点(如SLAM、导航、可视化工具)使用。
参数参考:
ros2 launch realsense2_camera rs_launch.py \
depth_module.depth_profile:=848x480x30 \ # 修改深度分辨率/帧率
rgb_camera.profile:=1280x720x30 \ # 修改RGB分辨率/帧率
pointcloud.enable:=true \ # 启用点云
align_depth:=true # 深度与RGB对齐
彩色相机话题
/camera/camera/color/camera_info
:此话题会发布彩色相机的内参信息,像相机的焦距、主点坐标、畸变系数等。这些信息对图像的校正和三维重建十分关键。/camera/camera/color/image_raw
:该话题发布未经处理的原始彩色图像数据,通常为 RGB 格式。/camera/camera/color/image_raw/compressed
:此话题发布经过压缩处理的彩色图像数据,这样能减少数据传输量,提升传输效率。/camera/camera/color/image_raw/compressedDepth
:该话题用于发布经过压缩的彩色图像和深度图像的组合数据。/camera/camera/color/image_raw/theora
:Theora 是一种开源的视频编码格式,此话题发布使用 Theora 编码的彩色视频流。/camera/camera/color/metadata
:该话题发布彩色相机的元数据,比如相机的型号、序列号、采集时间等。
深度相机话题
/camera/camera/depth/camera_info
:发布深度相机的内参信息,和彩色相机的内参信息类似,不过参数是针对深度相机的。/camera/camera/depth/color/points
:此话题发布经过处理的点云数据,点云里的每个点都有对应的彩色信息。/camera/camera/depth/image_rect_raw
:发布未经处理的原始深度图像数据,深度图像里每个像素的值代表该像素对应的物体到相机的距离。/camera/camera/depth/image_rect_raw/compressed
:发布经过压缩处理的深度图像数据。/camera/camera/depth/image_rect_raw/compressedDepth
:发布经过压缩的深度图像数据,和彩色图像的压缩类似。/camera/camera/depth/image_rect_raw/theora
:发布使用 Theora 编码的深度视频流。/camera/camera/depth/metadata
:发布深度相机的元数据,例如相机的型号、序列号、采集时间等。
相机外参话题
/camera/camera/extrinsics/depth_to_color
:发布深度相机和彩色相机之间的外参信息,也就是两个相机之间的相对位置和姿态关系。/camera/camera/extrinsics/depth_to_depth
:这个话题推测是发布深度相机不同模式或者不同帧之间的外参信息。
机器人交互相关话题
/clicked_point
:当用户在可视化工具(如 RViz)里点击三维场景中的某个点时,这个话题会发布被点击点的坐标信息。/goal_pose
:用于发布机器人的目标位姿信息,机器人导航系统会依据这个目标位姿来规划路径。/initialpose
:用于发布机器人的初始位姿信息,在机器人定位和导航时,需要明确机器人的初始位置和姿态。
ROS 系统相关话题
/parameter_events
:ROS 2 系统会通过这个话题发布参数的变化事件,当某个节点的参数被修改时,就会在这个话题上发布相应的事件消息。/rosout
:该话题会发布 ROS 2 系统的日志信息,包含各个节点的调试信息、警告信息和错误信息等。/tf
:发布机器人各个坐标系之间的变换关系,这些变换关系对于机器人的定位、导航和运动控制非常重要。/tf_static
:发布静态的坐标系变换关系,像机器人的固定部件之间的坐标系变换,这些变换关系在机器人运行过程中一般不会发生变化。
在 rviz2
中显示图像和点云:
1.frame选择camera_link
2.add添加订阅topic 显示点云
视觉SLAM(如RTAB-Map、ORB-SLAM3)订阅 /camera/color/image_raw 和 /camera/depth/image_rect_raw 作为输入。
五. 安装RTAB-Map ROS 2包
sudo apt install ros-humble-rtabmap-ros
启动:
ros2 launch rtabmap_launch rtabmap.launch.py args:="--delete_db_on_start" rgb_topic:=/camera/camera/color/image_raw depth_topic:=/camera/camera/depth/image_rect_raw camera_info_topic:=/camera/camera/color/camera_info frame_id:=camera_link approx_sync:=true qos:=2 Reg/Strategy:=1 Vis/CorType:=1 RGBD/AngularUpdate:=0.1 RGBD/LinearUpdate:=0.1 optimizer:=true depth_scale:=0.001 depth_decimation:=1 depth_erosion:=0
参数参考:
ros2 launch rtabmap_launch rtabmap.launch.py \
args:="--delete_db_on_start" \
rgb_topic:=/camera/camera/color/image_raw \
depth_topic:=/camera/camera/depth/image_rect_raw \ # 使用原始深度图(需手动对齐)
camera_info_topic:=/camera/camera/color/camera_info \
frame_id:=camera_link \
approx_sync:=true \
qos:=2 \
# 以下为关键修复参数(解决对齐和TF问题)
Reg/Strategy:=1 \ # 强制使用RGB-D模式
Vis/CorType:=1 \ # 使用SURF特征点(兼容性更好)
RGBD/AngularUpdate:=0.1 \ # 降低旋转更新阈值
RGBD/LinearUpdate:=0.1 \ # 降低平移更新阈值
optimizer:=true \ # 启用全局优化
# 手动指定对齐参数(因深度未对齐到RGB)
depth_scale:=0.001 \ # 深度单位缩放(米)
depth_decimation:=1 \ # 深度图降采样因子
depth_erosion:=0 # 关闭深度边缘腐蚀
以上完成了RTAB-Map 进行slam建图
高级配置(可选)
1.保存地图数据库
RTAB-Map自动保存地图到 ~/.ros/rtabmap.db
,可手动导出为点云或网格:
# 导出为PLY点云
rtabmap-export -o map.ply ~/.ros/rtabmap.db
# 导出为OBJ网格(需启用网格生成)
rtabmap-export --mesh map.obj ~/.ros/rtabmap.db
2.启用3D地图优化
ros2 launch rtabmap_launch rtabmap.launch.py \
... \
optimizer:=true \ # 启用全局优化
vis:=true \ # 启用可视化优化
mem/stereo:=false # 禁用双目模式(使用RGB-D)
3.调整地图分辨率
ros2 launch rtabmap_launch rtabmap.launch.py \
... \
grid_size:=0.05 \ # 地图体素滤波尺寸(米)
cloud_decimation:=2 # 点云降采样因子(2=每2像素采1个点)
4.增加特征点数量:
ros2 launch ... Vis/CorType:=1 Vis/MaxFeatures=1000
5.启用回环检测增强:
ros2 launch ... RGBD/NeighborLinkRefining=true
六.问题
在开启相机驱动后,已对齐深度和RGB(已经输入了深度与GPB对齐的参数),但是没有输出对应的topic,导致进行slam时,只能手动对齐。