ROS2 机器人 少年创客营:Day 1
🤖 ROS2 机器人 少年创客营:Day 1
主题:唤醒海龟 —— 第一次与机器人“对话”
👋 欢迎加入“银河机器人联盟”,见习指挥官!
在你正式制造钢铁巨人之前,我们需要一位虚拟导师。
它是一只住在电脑屏幕里的海龟,名叫turtlesim。它虽然简单,却拥有机器人最核心的灵魂:接收指令 -> 执行动作。今天目标:
- 理解什么是 ROS 2(机器人的操作系统)。
- 学会使用 终端命令行(机器人的遥控器)。
- 手动指挥海龟走出一个完美的正方形!🔲
🗺️ 今日探险地图 (Checklist)
- 🧠 概念解锁:理解“节点 (Node)”和“话题 (Topic)”的乐高比喻。
- 🐢 唤醒仪式:启动
turtlesim仿真器。 - 🎮 手动驾驶:使用命令行发送速度指令,让海龟动起来。
- 📏 数据监听:实时查看海龟的坐标位置。
- 👁️ 透视眼:使用
rqt_graph可视化数据流动。 - 🏆 终极挑战:不写代码,仅用命令行指挥海龟画出一个正方形。
🧠 特别篇:到底什么是 ROS 2?
在开始敲代码之前,我们必须先搞清楚这个听起来很酷的名字。
❌ 误区
很多人以为 ROS 2 像 Windows 或 macOS 一样,可以直接安装在电脑上当系统用。
✅ 真相
ROS 2 不是一个独立的操作系统,它更像是一个运行在 Linux (如 Ubuntu) 之上的**“超级工具箱”或“中间件”**。
💡 生动比喻:智能手机
如果把机器人比作一部智能手机:
- Linux/Ubuntu = 手机的硬件和底层系统(屏幕、电池、基础电路)。
- ROS 2 = 手机里的 Android/iOS 系统 + 应用商店。
- 它提供了通用的功能(怎么让轮子转、怎么读取摄像头、怎么规划路线)。
- 它让不同的“APP”(比如导航程序、机械臂控制程序)可以互相聊天、协同工作。
🌟 为什么要发明 ROS 2?
想象一下,如果你要造一个机器人:
- 没有 ROS 2 时:你需要自己写代码去驱动电机、自己写算法去处理摄像头图像、自己写逻辑去避障。每换一个传感器,代码都要重写!这就像每次买新手机都要重新发明轮子一样痛苦。😫
- 有了 ROS 2 后:
- 别人已经写好了“驱动电机的模块”,你直接拿来用。
- 别人写好了“识别苹果的模块”,你也直接拿来用。
- 你只需要像拼乐高积木一样,把这些模块拼在一起,就能创造出一个复杂的机器人!🧱✨
🚀 ROS 2 的核心超能力
- 分布式:机器人的“眼睛”(摄像头)可以在一个芯片上,“大脑”在另一个芯片上,“腿”在第三个芯片上。ROS 2 让它们像在一个房间里对话一样简单,哪怕它们相隔万里(只要在网络中)。
- 语言无关:你可以用 Python 写“大脑”,用 C++ 写“腿”,它们依然能完美配合。
- 生态丰富:全球有成千上万的工程师在为 ROS 2 贡献代码,你站在巨人的肩膀上!
总结:ROS 2 是机器人界的通用语言和乐高平台。学会了它,你就拥有了控制几乎所有先进机器人的钥匙!
🛠️ 第一关:指挥中心检查 (环境验证)
既然 ROS 2 是我们的“工具箱”,首先要确认工具箱是否已打开。
🔍 神秘的咒语检查
在终端输入:
printenv ROS_DISTRO
- 如果你看到:
jazzy(或者humble,foxy)- 🎉 恭喜! 你的 ROS 2 环境已激活,工具箱准备就绪!
- 如果什么都没显示:
- 你需要加载环境:
source /opt/ros/jazzy/setup.bash(根据你的版本替换jazzy)。
- 你需要加载环境:
💡 极客小贴士 (WSL 用户)
不想每次都输入暗号?把它写进“自动启动脚本” (~/.bashrc):
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
source ~/.bashrc
🐢 第二关:召唤小海龟 (启动仿真器)
让我们用 ROS 2 工具箱里的第一个工具:Turtlesim(海龟仿真器)。
🪄 启动魔法
在终端输入:
ros2 run turtlesim turtlesim_node
✨ 奇迹发生:
- 弹出一个浅蓝色的窗口,中间有一只可爱的海龟。
- 终端显示
[INFO] ... Starting turtlesim with node name /turtlesim。
🧠 原理解析:
ros2 run:告诉系统“我要运行一个程序”。turtlesim:包名 (Package),就像 APP 的名字。turtlesim_node:节点名 (Node),就像 APP 里的具体功能进程。- 节点 (Node) 是 ROS 2 中最小的执行单元。今天的海龟就是一个节点。
⚠️ 紧急救援:
- 如果报错
could not connect to display(WSL 用户):- 确保 Windows 是 Win 10 22H2+ 或 Win 11。
- 更新 WSL:
wsl --update。 - 重启 WSL:
wsl --shutdown,然后重开终端。
- 注意:不要关闭这个终端窗口,否则海龟会消失!它是海龟的“生命维持系统”。
📡 第三关:给海龟发“微信” (核心实战)
ROS 2 的核心是通信。节点之间不直接打电话,而是通过话题 (Topic) 发消息。
1. 寻找正确的“微信号”
打开第二个终端,查看海龟监听了哪些话题:
ros2 topic list
🔍 发现秘密:
- 找到
/turtle1/cmd_vel。 - 这是海龟的“速度指令接收器”。别漏掉
/turtle1/这个房间号(命名空间)!
2. 发送第一条运动指令
我们要向 /turtle1/cmd_vel 发送一条 Twist (速度) 消息。
✅ 指挥官的正确指令:
ros2 topic pub -r 10 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0}, angular: {z: 0.0}}"
🔍 命令拆解:
-r 10:每秒发 10 次(持续推动)。如果不加这个,海龟只会动一下就停。geometry_msgs/msg/Twist:消息类型。Twist表示速度(线速度 + 角速度)。{linear: {x: 2.0}...}:具体数据。linear.x = 2.0:向前冲,速度 2.0 米/秒。angular.z = 0.0:不旋转。
👀 观察现象:
- 海龟开始向前移动!
- 停止方法:在终端按
Ctrl + C,海龟就会停下。
🎮 自由驾驶练习场
修改数字,观察海龟反应:
| 动作 | 命令参数 (linear.x, angular.z) | 现象预测 |
|---|---|---|
| 直线冲刺 | x: 5.0, z: 0.0 | 快速向前飞! |
| 原地旋转 | x: 0.0, z: 2.0 | 快速自旋! |
| 画圆圈 | x: 2.0, z: 2.0 | 边跑边转,画个圆! |
| 倒车 | x: -2.0, z: 0.0 | 倒退着走! |
👁️ 第四关:开启“透视眼” (可视化架构)
数据是怎么流动的?ROS 2 提供了一个神器:rqt_graph。
1. 启动透视工具
保持海龟和发布命令的终端运行,打开第三个终端:
ros2 run rqt_graph rqt_graph
(如果没有安装,运行 sudo apt install ros-jazzy-rqt-graph)
2. 解读神秘图谱
你会看到一个动态的流程图:
- 🟣 椭圆 (
/turtlesim):订阅者 (Subscriber)。它在监听话题。 - 🟦 矩形 (
/turtle1/cmd_vel):话题 (Topic)。数据传输的管道。 - 🟢 椭圆 (临时出现):发布者 (Publisher)。当你运行
pub命令时,它临时出现并发送数据。 - ➡️ 箭头:数据流向。
🧠 核心知识:发布/订阅模型
就像 YouTube:
- 发布者 = UP主(上传视频到话题)。
- 话题 = 频道。
- 订阅者 = 观众(订阅频道,一有新视频就收到)。
- UP 主不需要认识观众,观众也不需要认识 UP 主,大家通过“频道”连接。这就是 ROS 2 的解耦魔法!
🧪 第五关:进阶黑客任务 (可选)
任务 A:实时监控海龟坐标
想知道海龟在哪?
ros2 topic echo /turtle1/pose
- 看着
x,y,theta实时变化,这是海龟在向你汇报位置! - 按
Ctrl + C停止。
任务 B:克隆海龟大军!
想要两只海龟?
ros2 run turtlesim turtlesim_node --ros-args -r __ns:=/turtle2
- 思考:现在有两个房间了 (
/turtle1和/turtle2)。 - 挑战:你能同时让两只海龟向相反方向跑吗?
- 提示:分别向
/turtle1/cmd_vel和/turtle2/cmd_vel发消息。
- 提示:分别向
🏆 Day 1 终极挑战:画个正方形吧!🔲
真正的创客不仅要会跑命令,还要会规划路径。
任务:手动组合命令,让海龟走出一个正方形。
💡 线索:
- 走直线:
x=2.0, z=0.0(坚持约 2 秒,然后Ctrl+C) - 停一下:
x=0.0, z=0.0(休息 0.5 秒,可选) - 转 90 度:
x=0.0, z=1.57(坚持约 1 秒。因为 1.57 rad≈90∘1.57 \text{ rad} \approx 90^\circ1.57 rad≈90∘) - 重复:重复上述动作 4 次!
(觉得手动输入太累?而且很难完美控制时间?别担心,这正是我们明天要解决的问题!)
📝 探险家日志 (总结清单)
| 概念 | 比喻 | 关键指令 |
|---|---|---|
| ROS 2 | 机器人的“安卓系统” + “乐高平台” | - |
| 节点 (Node) | 独立的“小程序”或“功能模块” | ros2 run ... |
| 话题 (Topic) | 微信群 / YouTube 频道 | ros2 topic list |
| 消息 (Message) | 群里发的具体内容 (如速度指令) | ros2 topic pub ... |
| 发布/订阅 | UP 主与观众的关系 | rqt_graph 查看 |
🔮 明日预告 (Day 2)
指挥官,你是不是觉得手动按
Ctrl+C太累了?而且很难画出完美的正方形?明天,我们将赋予你**“编程魔法”**!
- Python 入门:如何用代码代替你的手?
- 工作空间:建立你自己的代码基地。
- 发布者节点:编写第一个 Python 脚本,让海龟自动画出完美的正方形,甚至五角星!
准备好从“手动遥控”进化到“自动编程”了吗?明天见!
© 2026 ROS 2 少年创客营 | 每一个伟大的机器人,都始于第一行代码和第一只海龟
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)