机器人
TurtleBot3 Burger 是 ROS 2 领域经典的”hello world”机器人:一款小型差速驱动平台,配备 360 度 LiDAR,恰好足以完成真正的自主导航。在本文中,我们将它安装到 Qualcomm Dragonwing SBC 上,从零安装 ROS 2 Jazzy,启动机器人,使用 Cartographer 为房间构建地图,然后让 Nav2 驱动机器人自主到达目标点。 这里的一切都直接运行在开发板上。Dragonwing SBC 就是机器人的计算单元,因此整个流程无需笔记本电脑参与——除非你想在 RViz 中观看地图逐步生成。
本教程面向配备预刷写 OpenCR 控制器和 LDS-02 LiDAR 的 TurtleBot3 Burger,运行 Ubuntu 上的 ROS 2 Jazzy。如果你的 LiDAR 或控制器版本不同,请在设置步骤中相应调整型号变量。
你将完成的内容
- 在 Dragonwing 设备上安装 ROS 2 Jazzy。
- 构建 TurtleBot3 工作区并连接串口设备。
- 启动机器人并用键盘驾驶它。
- 使用 Cartographer SLAM 为你的空间构建并保存地图。
- 将地图交给 Nav2,让机器人自主前往目标点。
- 在 RViz 中查看全部过程——在开发板自身的屏幕上或从另一台机器上。
前提条件
开始之前,请确保你具备:- 一台已完成首次设置的 Dragonwing 设备:
- 通过 SSH 或直接连接的显示器、键盘和鼠标访问设备的能力。上述设置指南涵盖了联网、串口控制台、显示和 SSH 访问。
- 一台 OpenCR 板已预刷写并配备 LDS-02 LiDAR 的 TurtleBot3 Burger。
- SBC 上有两个空闲的 USB 端口:一个连接 OpenCR 控制器,一个连接 LiDAR。
安装 ROS 2 Jazzy
这是在全新开发板上的一次性步骤。它遵循 Ubuntu 上 ROS 2 Jazzy 的标准安装流程,因此如果设备上已经有 ROS 2 Jazzy,可以直接跳到设置 TurtleBot3。以下命令与 ROS 2 Jazzy 官方安装指南完全一致。 首先,添加 ROS 2 apt 软件源:~/.bashrc 中,使每个新 shell 都自动加载:
设置 TurtleBot3
ROS 就绪后,接下来为机器人安装软件并告诉它自己的硬件配置。插入并检查硬件
Burger 通过两条 USB 连接与 SBC 通信:
继续之前,先确认两台设备都已被枚举:
构建 TurtleBot3 工作区
克隆 Jazzy 版本的三个 TurtleBot3 软件包,并用 colcon 构建。完整的上游说明见 ROBOTIS TurtleBot3 文档。告诉 ROS 你的机器人信息
TurtleBot3 软件栈通过环境变量进行配置。将它们追加到~/.bashrc,使每个终端都能加载:
授予串口权限
你的用户需要具备串口访问权限,并且ModemManager 不能干扰 OpenCR 的 CDC ACM 设备。将自己加入 dialout 组,禁用 ModemManager,并安装 TurtleBot3 udev 规则:
启动机器人
启动 bringup。这会启动 OpenCR 驱动、LiDAR 驱动和差速驱动控制器:用键盘驾驶
保持 bringup 运行,另开一个终端。TurtleBot3 teleop 节点是驾驶机器人的推荐方式,包括在建图过程中:W/A/S/D/X 键移动,关闭窗口前按 S 或 X 停车。
使用 Cartographer SLAM 构建地图
接下来是有趣的部分。让机器人边行驶边使用 Cartographer 构建空间的占据栅格地图。 让 bringup 在其自己的终端中保持运行,然后启动 Cartographer:/map 话题会在你驾驶的同时以无头模式继续工作。
现在用键盘遥控或发布速度指令驾驶机器人四处移动。覆盖的空间越多,最终的地图效果越好。
对覆盖范围满意后,保存地图:
~/my_map.pgm是占据栅格图像。~/my_map.yaml是地图元数据(分辨率、原点)。
使用 Nav2 自主行驶
有了保存好的地图,把它交给 Nav2,让机器人自主导航。(bringup 仍需保持运行。)在 RViz 中查看
RViz 是查看地图和机器人规划路径最简单的方式。有两种运行方式:在开发板自身的屏幕上,或从网络中的另一台机器上。通过 SSH 在开发板屏幕上运行
GNOME 桌面使用 Wayland,但 RViz2 的 Ogre 渲染器需要 GLX(X11)。GNOME 会自动运行 XWayland,但认证文件(XAUTHORITY)带有随机后缀,且每次重启都会变化。最干净的解决办法是在 ~/.bashrc 中添加一个小的辅助函数来自动查找它:
export-display:
从网络中的另一台机器运行
要在同一网络中的笔记本电脑或工作站上运行 RViz:- 在两台机器上设置相同的 domain ID:
- 在远程机器上安装 ROS 2 Jazzy。
- 在远程机器上打开 RViz:
添加 Map 显示并将话题设置为
/map。ROS 2 会通过网络自动发现地图数据,无需额外配置。
故障排查
初次上手时有几个常见的坑。以下是最常见的问题及其解决方法。/dev/ttyACM0 权限被拒绝
你在被加入 dialout 组后还没有注销。在注销之前,可以使用这个包装命令:
LiDAR 扫描为空或 Cartographer 卡住
Queue waiting for data: (0, scan) 通常意味着设置了错误的 LDS 型号。
LDS_MODEL=LDS-01,请修正:
package 'ld08_driver' not found
cmd_vel 指令无效
ROS 2 Jazzy 将 cmd_vel 话题的类型从 geometry_msgs/Twist 改为了 geometry_msgs/TwistStamped。如果你直接发布 Twist(例如来自自定义节点或旧版教程),需要添加 header 字段:
turtlebot3_teleop teleop_keyboard 节点已经正确处理了这一点,因此只有自定义发布者会受影响。
地图保存悄然失败
请始终显式传入-t /map:
apt 被后台进程锁定
后续步骤
现在你拥有了一台能够建图并自主行驶的机器人,全部运行在 Dragonwing 开发板上。接下来你可以:- 在机器人的摄像头上运行硬件加速的 AI。NPU 上的深度估计教程构建了一个在 Hexagon HTP NPU 上运行量化模型的 ROS 2 节点。
- 探索 QRB ROS 生态系统,了解零拷贝传输、参考示例、Gazebo 仿真和基准测试。
- 从机器人工作流概览开始,全面了解在 Dragonwing 上进行机器人开发的完整图景。


