WSL2 + Orbbec Gemini 336L + RTAB-Map ROS2 RGB-D SLAM 教程
WSL2 Orbbec Gemini 336L RTAB-Map ROS2 RGB-D SLAM 教程本文记录在 Windows WSL2 Ubuntu ROS2 Jazzy 环境中使用奥比中光 Gemini 336L 相机启动 RTAB-Map运行 RGB-D SLAM并在 RViz2 / rtabmap_viz 中查看建图结果的完整流程。1. 整体流程当前系统链路是Orbbec Gemini 336L - usbipd-win 透传到 WSL2 - OrbbecSDK_ROS2 发布 RGB / Depth / PointCloud / TF - RTAB-Map 订阅 RGB Depth CameraInfo - RGB-D Odometry 图优化 回环检测 - RViz2 / rtabmap_viz 显示地图、点云、TF、轨迹这套流程跑的是RTAB-Map RGB-D SLAM注意当前命令使用的是相机驱动发布的 RGB 图像和 Depth 深度图不是直接使用左右目图像也没有使用 IMU。2. 前提环境已安装WSL2 Ubuntu ROS2 Jazzy OrbbecSDK_ROS2 RTAB-Map ROS2相机已经通过usbipd-win透传到 WSL2并且在 WSL 中可以被识别lsusb正常输出应包含Bus 002 Device 002: ID 2bc5:0807 Orbbec 3D Technology International, Inc Orbbec Gemini 336L其中2bc5:0807是 Gemini 336L 的 USB VID/PID。3. 启动前检查 USB 权限根据lsusb中的 Bus 和 Device检查 USB 设备文件权限。例如相机是Bus 002 Device 002对应路径是/dev/bus/usb/002/002查看权限ls-l/dev/bus/usb/002/002如果后面启动相机时报openUsbDevice failed Failed to initialize device usbEnumerator openUsbDevice failed! status:113可以临时放开权限sudochmod666/dev/bus/usb/002/002注意相机 reset、拔插、重新 attach 后Device 号可能变化。比如变成Bus 002 Device 003就要改成sudochmod666/dev/bus/usb/002/0034. 启动 Orbbec 相机驱动打开第一个 WSL 终端source/opt/ros/jazzy/setup.bashsource~/ros2_ws/install/setup.bash ros2 launch orbbec_camera gemini_330_series.launch.pyGemini 336L 属于 Gemini 330 系列所以使用gemini_330_series.launch.py启动过程中如果出现Device reset complete startDevice called Connecting to the default device随后没有错误并且相机开始发布话题就说明驱动基本正常。5. 检查相机 ROS2 话题打开第二个 WSL 终端source/opt/ros/jazzy/setup.bashsource~/ros2_ws/install/setup.bash ros2 topic list当前已经确认可以看到这些话题/camera/color/camera_info /camera/color/image_raw /camera/color/metadata /camera/depth/camera_info /camera/depth/image_raw /camera/depth/metadata /camera/depth/points /camera/depth_filter_status /camera/depth_filters/status /camera/device_status /diagnostics /parameter_events /rosout /tf /tf_static其中 RTAB-Map 最重要的是/camera/color/image_raw /camera/color/camera_info /camera/depth/image_raw /camera/depth/camera_info /tf /tf_static点云查看常用/camera/depth/points6. 检查话题类型和频率查看 RGB 图像类型ros2 topic info /camera/color/image_raw正常应为sensor_msgs/msg/Image查看深度图类型ros2 topic info /camera/depth/image_raw正常应为sensor_msgs/msg/Image查看点云类型ros2 topic info /camera/depth/points正常应为sensor_msgs/msg/PointCloud2查看发布频率ros2 topic hz /camera/color/image_raw ros2 topic hz /camera/depth/image_raw如果频率稳定说明相机数据流正常。7. 查看相机坐标系 frame_idRTAB-Map 和 RViz2 都依赖坐标系。可以查看图像消息中的frame_idros2 topicecho/camera/color/image_raw--once关注header:frame_id:xxx也可以查看深度图ros2 topicecho/camera/depth/image_raw--once如果后面 RTAB-Map 报 TF 错误通常需要根据这里的frame_id调整启动参数。8. 安装 RTAB-Map ROS2如果还没有安装 RTAB-Mapsource/opt/ros/jazzy/setup.bashsudoaptupdatesudoaptinstallros-jazzy-rtabmap-ros确认安装成功ros2 pkg list|greprtabmap常见包包括rtabmap_launch rtabmap_odom rtabmap_slam rtabmap_sync rtabmap_viz查看 RTAB-Map launch 参数ros2 launch rtabmap_launch rtabmap.launch.py --show-args9. 启动 RTAB-Map RGB-D SLAM保持第一个终端中的 Orbbec 相机驱动继续运行。打开新的 WSL 终端source/opt/ros/jazzy/setup.bashsource~/ros2_ws/install/setup.bash运行 RTAB-Mapros2 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_link\approx_sync:true\rtabmap_args:--delete_db_on_start\rviz:true这条命令的含义rgb_topic 彩色图像输入 depth_topic 深度图输入 camera_info_topic 彩色相机内参输入 frame_id RTAB-Map 使用的参考坐标系 approx_sync 允许 RGB、Depth、CameraInfo 近似时间同步 --delete_db_on_start 每次启动删除旧地图数据库重新建图 rviz:true 自动启动 RViz2这条命令启动的是RGB-D SLAM不是 stereo-inertial SLAM。当前没有使用 IMU。10. 如果需要 QoS 兼容如果 RTAB-Map 没有收到图像或深度可能是 QoS 不匹配。可以增加qos:2完整命令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_link\approx_sync:true\qos:2\rtabmap_args:--delete_db_on_start\rviz:true11. 两个可视化界面分别是什么启动后通常会出现两个界面RTAB-Map 自带界面 rtabmap_viz RViz2rtabmap_viz窗口标题类似RTAB-Map* [ROS]它主要用于查看 RTAB-Map 内部状态当前 RGB 图像 当前深度图 Odometry 状态 回环检测 地图节点 ID 3D Map RTAB-Map 数据库状态界面中常见区域Loop closure detection Odometry 3D Map如果看到New ID 53说明 RTAB-Map 已经创建了地图节点。RViz2RViz2 是 ROS2 的通用可视化工具。它可以查看TF 点云 地图 轨迹 相机云 RTAB-Map 输出的 map graph常见 DisplayGrid MapCloud MapGraph TF Map Odom Local Map Camera Cloud两者区别rtabmap_viz 看 RTAB-Map 内部状态 RViz2 看 ROS2 系统输出结果12. RViz2 中查看点云如果只想看 Orbbec 相机点云可以单独启动rviz2在 RViz2 中设置Global Options - Fixed FrameFixed Frame 可以先设置成点云消息里的frame_id。查看点云 frameros2 topicecho/camera/depth/points--once关注header:frame_id:xxx然后在 RViz2 中Add - By display type - PointCloud2 Topic - /camera/depth/points如果看不到点云可以把 PointCloud2 的Reliability Policy改成Best Effort13. Fixed Frame 是什么Fixed Frame是 RViz2 的世界参考坐标系。可以理解为RViz2 以哪个坐标系作为固定不动的世界例如点云消息的坐标系是camera_depth_optical_frame如果 RViz2 的 Fixed Frame 设置为camera_depth_optical_frame点云可以直接显示。如果 Fixed Frame 设置为mapRViz2 需要 TF 中存在map - camera_depth_optical_frame否则会报No transform from camera_depth_optical_frame to mapRTAB-Map 正常运行后常见 TF 链路是map - odom - camera_link - camera optical frame此时 RViz2 的 Fixed Frame 通常设置为map14. 移动相机时的注意事项为了让 RTAB-Map 更稳定移动慢一点 不要快速甩动相机 尽量看有纹理的区域 避免纯白墙、玻璃、强反光、黑色大面积物体 保持画面有重叠 平移和小角度旋转结合适合测试的场景桌子 椅子 书架 地图海报 门框 键盘 墙角不适合一开始测试的场景纯白墙 玻璃 镜面 黑色衣服 强反光桌面 快速移动的人15. 怎么判断 SLAM 正在正常运行观察 rtabmap_vizNew ID 是否持续增加 Odometry 是否有图像更新 3D Map 是否逐渐扩展观察 RViz2点云地图是否变大 TF 坐标轴是否平滑移动 MapGraph 是否增加节点 Fixed Frame 状态是否 OK观察终端是否有 Odometry lost 是否有 TF error 是否有 sync warning 是否持续收到 RGB / Depth 数据如果节点增加、地图变大、没有频繁丢失里程计说明 RTAB-Map 正在正常跑 SLAM。16. 常见问题RTAB-Map 没有画面或没建图检查相机话题是否存在ros2 topic list检查频率ros2 topic hz /camera/color/image_raw ros2 topic hz /camera/depth/image_raw尝试加 QoSqos:2RViz2 报 Fixed Frame / TF 错误查看点云或图像的frame_idros2 topicecho/camera/depth/points--onceros2 topicecho/camera/color/image_raw--once将 RViz2 的 Fixed Frame 设成消息中的frame_id或者确保 TF 中存在从map到该 frame 的变换。深度图中有黑色区域黑色区域通常表示无效深度 低置信度深度 双目匹配失败常见原因物体太近或太远 低纹理 黑色/反光/透明表面 边缘遮挡 光照不足少量黑洞是正常现象。运行一段时间后里程计丢失常见原因移动太快 画面模糊 纹理太少 深度空洞太多 光照变化太大 相机对着纯墙或反光面解决方式放慢移动 增加环境纹理 改善光照 避免强反光 保持相机稳定17. 推荐终端布局建议至少开三个终端终端 1相机驱动source/opt/ros/jazzy/setup.bashsource~/ros2_ws/install/setup.bash ros2 launch orbbec_camera gemini_330_series.launch.py终端 2RTAB-Mapsource/opt/ros/jazzy/setup.bashsource~/ros2_ws/install/setup.bash 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_link\approx_sync:true\qos:2\rtabmap_args:--delete_db_on_start\rviz:true终端 3检查话题source/opt/ros/jazzy/setup.bashsource~/ros2_ws/install/setup.bash ros2 topic list ros2 topic hz /camera/color/image_raw ros2 topic hz /camera/depth/image_raw18. 后续方向当前已经跑通RGB-D SLAM后续可以继续学习保存 RTAB-Map 数据库 rosbag 录制和回放 接入 IMU 接入激光雷达 导出点云/PLY 接 Nav2 导航 多 session 建图建议下一步优先学习ros2 bag record / play RTAB-Map 数据库保存和复盘 RViz2 中查看 MapGraph / TF / PointCloud2

相关新闻

编译器内建函数:性能优化与硬件操作实战指南

编译器内建函数:性能优化与硬件操作实战指南

1. 编译器内建函数深度解析在嵌入式开发和系统级编程中,我们经常需要直接操作硬件或执行特殊指令。这时候编译器提供的内建函数(Intrinsic Functions)就成为了连接高级语言与底层硬件的桥梁。不同于标准库函数,内建函数直接映射到…

2026/10/26 21:48:56 阅读更多 →
Unity进阶:C#内存管理、设计模式与性能优化实战指南

Unity进阶:C#内存管理、设计模式与性能优化实战指南

1. 项目概述:为什么Unity开发者需要持续补充C#知识 如果你是一名Unity开发者,并且已经能熟练地拖拽组件、编写简单的脚本让角色移动,那么恭喜你,你已经成功入门了。但接下来,你可能会遇到一些“诡异”的时刻&#xff1…

2026/10/23 22:34:04 阅读更多 →
【单片机毕业设计】基于 51 单片机的多路超声测距可视化报警装置设计 基于单片机与 LCD1602 的双路距离检测预警系统实现(023001)

【单片机毕业设计】基于 51 单片机的多路超声测距可视化报警装置设计 基于单片机与 LCD1602 的双路距离检测预警系统实现(023001)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/25 6:46:12 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →