机器人
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 上进行机器人开发。


