Skip to main content
一台 TurtleBot3 Burger 搭载 Qualcomm Dragonwing 单板计算机,顶部装有 360 度 LiDAR,摆放在工作台上,旁边是 AprilTag 校准垫
Dragonwing · Qualcomm
机器人
Rami Mouro·2026 年 6 月 26 日·← 全部文章

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 或控制器版本不同,请在设置步骤中相应调整型号变量。

你将完成的任务

  1. 在 Dragonwing 设备上安装 ROS 2 Jazzy。
  2. 构建 TurtleBot3 工作空间并接好串口设备。
  3. 启动机器人并用键盘驾驶它。
  4. 使用 Cartographer SLAM 构建你所在空间的地图并保存。
  5. 把地图交给 Nav2,让机器人自主前往目标点。
  6. 在 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 仓库:
然后安装桌面套件和构建工具:
最后,将 ROS 追加到 ~/.bashrc,使每个新 shell 都会加载它:

设置 TurtleBot3

ROS 就绪后,就该为机器人安装软件并告诉它使用的是哪些硬件了。

插入并检查硬件

Burger 通过两个 USB 连接与 SBC 通信: 继续之前先确认两个设备都已被枚举:

构建 TurtleBot3 工作空间

克隆 Jazzy 版本的三个 TurtleBot3 软件包并用 colcon 构建。完整的上游说明见 ROBOTIS TurtleBot3 文档。

告诉 ROS 你的机器人型号

TurtleBot3 软件栈通过环境变量进行配置。将它们追加到 ~/.bashrc,使每个终端都能加载:
以下是每个变量的作用:

授予串口权限

你的用户需要访问串口的权限,并且必须让 ModemManager 远离 OpenCR 的 CDC ACM 设备。将自己加入 dialout 组,禁用 ModemManager,并安装 TurtleBot3 udev 规则:
完成此步骤后注销并重新登录(或重启),使 dialout 组成员身份生效。如果在注销前需要在同一会话中继续工作,请参阅故障排除中的串口权限临时解决方案。

启动机器人

启动 bringup。这会启动 OpenCR 驱动、LiDAR 驱动和差速驱动控制器:
正常的 bringup 日志类似这样:

用键盘驾驶

保持 bringup 运行并打开第二个终端。TurtleBot3 teleop 节点是驾驶机器人的推荐方式,包括在建图过程中:
使用 W/A/S/D/X 按键移动,关闭窗口前按 S 或 X 停止。

使用 Cartographer SLAM 构建地图

现在到了有趣的部分。让机器人边行驶边使用 Cartographer 构建空间的占据栅格地图。 保持 bringup 在自己的终端中运行,然后启动 Cartographer:
如果没有连接显示器,RViz 会启动失败,这没有关系。在你驾驶机器人时,Cartographer 和 /map 话题会继续以无头方式工作。 现在通过键盘遥控或发布速度指令来驾驶机器人四处移动。覆盖的空间越多,生成的地图就越好。 当你对覆盖范围满意时,保存地图:
这会写出两个文件:
  • ~/my_map.pgm 是占据栅格图像。
  • ~/my_map.yaml 是地图元数据(分辨率、原点)。
地图保存后停止 Cartographer。

使用 Nav2 自主行驶

有了保存好的地图,把它交给 Nav2,让机器人自主导航。(bringup 仍需保持运行。)
在 RViz 中,设置 2D Pose Estimate(2D 位姿估计),让 Nav2 知道机器人在地图上的位置,然后发送导航目标,观看它规划路径并行驶到目标。 没有显示器?你可以通过将目标作为 ROS 2 action 发送,以无头方式完成同样的操作:

在 RViz 中观察

RViz 是查看地图和机器人规划路径最简单的方式。有两种运行方式:在开发板自己的屏幕上,或者在网络上的另一台机器上。

通过 SSH 在开发板屏幕上运行

GNOME 桌面使用 Wayland,但 RViz2 的 Ogre 渲染器需要 GLX(X11)。GNOME 会自动运行 XWayland,但认证文件(XAUTHORITY)带有一个随机后缀,每次重启都会变化。最干净的解决办法是在 ~/.bashrc 中添加一个小助手函数来帮你找到它:
启动 RViz 之前,在任意 SSH 会话中运行 export-display:
它会打印解析出的环境变量:
综合起来,在连接的屏幕上用 RViz 建图的流程如下:
如果你是直接在 GNOME 桌面上打开终端而不是通过 SSH,DISPLAY 和 XAUTHORITY 已经设置好了。无需 export-display,直接正常运行 RViz 即可。

从网络上的另一台机器

要在同一网络上的笔记本或工作站上运行 RViz:
  1. 在两台机器上设置相同的 domain ID:
  2. 在远程机器上安装 ROS 2 Jazzy。
  3. 在远程机器上打开 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 上进行机器人开发。