第二节:ROS 2 零基础入门:手把手教学,4周从小白到项目实战!
摘要 本文为零基础读者提供ROS 2入门教程,包含环境配置、安装指南和第一个程序开发。教程推荐使用Ubuntu 22.04系统,详细介绍了ROS 2安装步骤(约2小时完成),并通过创建Python包和简单节点(如定时输出消息)帮助新手快速上手。主要内容包括:操作系统选择建议、ROS 2安装命令、工作空间创建方法、Python节点编写示例等。学习路线设计为每天1-2小时,4周完成基础学习。教程强调无
摘要
本文是为机器人操作系统(ROS 2)的绝对新手准备的保姆级教程。无需任何ROS或机器人背景,我将带你从环境配置、安装、第一个程序,到经典Turtlesim项目实战,并提供清晰的4周学习路线图。只需每天1-2小时,你就能开启ROS 2开发之旅!
📝 写给完全新手的你
别担心!ROS 2 刚开始可能看起来复杂,但我会带你从零开始,一步一步学会。就像学骑自行车,先学会推车,再学会骑,最后才能玩花样。
🚀 第0步:心理准备
- ✅ 你不需要是编程专家
- ✅ 你不需要是机器人专家
- ✅ 你只需要:耐心 + 好奇心
- ⏰ 每天学习1-2小时,4周后你就能做有趣的项目了!
🖥️ 第一步:准备你的电脑(1天)
1.1 选择操作系统(三选一)
推荐选择①:最容易成功
⬤ Ubuntu 22.04 LTS (⭐最推荐,90%的ROS用户用这个)
⬤ Windows 10/11 (需要WSL2,稍复杂)
⬤ macOS (可能遇到兼容性问题)
1.2 安装Ubuntu(如果你用Windows/macOS)
方案A:Windows用户 - 安装WSL2
# 以管理员身份打开PowerShell,运行:
wsl --install -d Ubuntu-22.04
# 安装完成后,重启电脑
方案B:macOS用户
# 安装Homebrew(如果还没装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装Ubuntu虚拟机软件(如UTM)
方案C:直接安装Ubuntu(推荐)
- 下载Ubuntu 22.04:官网下载
- 制作启动U盘(用Rufus或balenaEtcher)
- 安装到电脑(可以双系统)
📦 第二步:安装ROS 2(2小时)
2.1 跟着我一步步执行
打开终端(快捷键 Ctrl+Alt+T),逐行复制粘贴:
# 1. 设置语言(防止乱码)
sudo apt update
sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
# 2. 添加ROS 2软件源(就像在手机里添加应用商店)
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
# 3. 告诉电脑去哪里下载ROS 2
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 4. 安装ROS 2(这步需要一些时间,去喝杯水吧)
sudo apt update
sudo apt upgrade -y
echo "开始安装ROS 2,大约需要15-30分钟..."
sudo apt install ros-humble-desktop python3-argcomplete -y
# 5. 设置环境变量(告诉系统ROS 2在哪里)
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
# 6. 验证安装(如果看到版本号,恭喜你!)
ros2 --version
# 应该显示:ros2 版本 humble
2.2 安装成功了吗?做个简单测试
# 在终端输入:
ros2 run demo_nodes_cpp talker
你应该看到:
[INFO] [1678888888.888888]: Publishing: 'Hello World: 1'
[INFO] [1678888889.888888]: Publishing: 'Hello World: 2'
...

按 Ctrl+C 停止。如果看到这些,恭喜!安装成功!
🎮 第三步:你的第一个ROS 2程序(2小时)
3.1 创建你的工作空间(就像建一个工作室)
# 1. 创建一个专门放ROS项目的文件夹
mkdir -p ~/ros2_learning/src # -p表示创建多级目录
cd ~/ros2_learning
# 2. 看看你创建了什么
ls -la
# 你会看到:src/ 目录
3.2 创建第一个ROS包(就像创建一个项目)
# 1. 进入src目录
cd ~/ros2_learning/src
# 2. 创建Python包(--build-type ament_python表示这是Python项目)
ros2 pkg create my_first_ros2_package --build-type ament_python --dependencies rclpy
# 3. 看看创建了什么
ls my_first_ros2_package/
你会看到:
my_first_ros2_package/
├── package.xml # 项目信息(名字、版本等)
├── setup.py # 安装配置
├── setup.cfg # 更多配置
└── my_first_ros2_package/ # 真正的代码在这里
└── __init__.py


3.3 创建你的第一个节点(节点 = 小程序)
# 1. 进入包目录
cd my_first_ros2_package/my_first_ros2_package
# 2. 创建一个Python文件
touch my_first_node.py
chmod +x my_first_node.py # 让它可执行
# 3. 用文本编辑器打开它
# vim my_first_node.py
复制粘贴以下代码到 my_first_node.py:
#!/usr/bin/env python3
# 上面这行告诉系统这是Python3程序
import rclpy # ROS 2的Python库
from rclpy.node import Node # 节点基类
import time
class MyFirstNode(Node):
"""
我的第一个ROS 2节点
这个节点会每隔1秒说一次"你好,ROS 2!"
"""
def __init__(self):
# 调用父类的初始化,给节点起名字
super().__init__('my_first_node')
# 打印欢迎信息
self.get_logger().info('🎉 我的第一个ROS 2节点启动啦!')
# 创建一个定时器,每秒调用一次say_hello函数
self.create_timer(1.0, self.say_hello)
# 计数器
self.counter = 0
def say_hello(self):
"""定时器回调函数:说你好"""
self.counter += 1
self.get_logger().info(f'👋 你好,ROS 2!这是第 {self.counter} 次问候')
# 当说到第10次时,多说一句
if self.counter == 10:
self.get_logger().info('🎯 太棒了!我已经说了10次你好!')
def main(args=None):
"""
主函数:程序的入口点
"""
# 1. 初始化ROS 2
rclpy.init(args=args)
try:
# 2. 创建节点实例
node = MyFirstNode()
# 3. 让节点保持运行(直到被停止)
rclpy.spin(node)
except KeyboardInterrupt:
# 当用户按Ctrl+C时
print('\n🛑 用户停止了程序')
finally:
# 4. 清理资源
if 'node' in locals():
node.destroy_node()
rclpy.shutdown()
print('🧹 程序已清理完毕')
# 这是Python的标准写法,表示如果直接运行这个文件,就执行main()
if __name__ == '__main__':
main()
3.4 让系统认识你的程序
需要修改两个文件:
1. 修改 setup.py:
cd ~/ros2_learning/src/my_first_ros2_package
vim setup.py
找到这一部分,添加 'my_first_node = my_first_ros2_package.my_first_node:main',:
entry_points={
'console_scripts': [
'my_first_node = my_first_ros2_package.my_first_node:main',
],
},
2. 修改 setup.cfg:
vim setup.cfg
确保内容是这样的:
[develop]
script_dir=$base/lib/my_first_ros2_package
[install]
install_scripts=$base/lib/my_first_ros2_package
🏗️ 第四步:构建和运行(1小时)
4.1 构建你的包(就像编译程序)
# 1. 回到工作空间根目录
cd ~/ros2_learning
# 2. 构建包(第一次需要一些时间)
colcon build --packages-select my_first_ros2_package

4.2 设置环境变量(告诉系统去哪里找你的程序)
# 每次打开新终端都需要运行(或者加到.bashrc里)
source ~/ros2_learning/install/setup.bash
4.3 运行你的第一个节点!
# 运行你的节点
ros2 run my_first_ros2_package my_first_node
🎉 你应该看到:
[INFO] [1678888888.888888] [my_first_node]: 🎉 我的第一个ROS 2节点启动啦!
[INFO] [1678888889.888888] [my_first_node]: 👋 你好,ROS 2!这是第 1 次问候
[INFO] [1678888890.888888] [my_first_node]: 👋 你好,ROS 2!这是第 2 次问候
...

按 Ctrl+C 停止程序。
4.4 看看系统里有什么
在新的终端窗口运行:
# 1. 先设置环境
source ~/ros2_learning/install/setup.bash
# 2. 看看所有正在运行的节点
ros2 node list
# 你应该看到:/my_first_node
# 3. 看看节点的详细信息
ros2 node info /my_first_node
# 4. 按q退出查看


🎪 第五步:玩转小海龟(Turtlesim)经典教程(2小时)
Turtlesim 是ROS的"Hello World",是一个可爱的小乌龟仿真器。
5.1 启动小海龟
# 打开终端1:运行小海龟仿真器
ros2 run turtlesim turtlesim_node
你会看到一个窗口,里面有一只小乌龟🐢。
5.2 控制小海龟
# 打开终端2:运行键盘控制
ros2 run turtlesim turtle_teleop_key
现在你可以:
- 按键盘方向键 ↑ ↓ ← → 控制乌龟移动
- 按
G和B改变背景颜色 - 按
R重置乌龟位置
5.3 查看通信情况
# 打开终端3:查看所有话题
ros2 topic list
# 你会看到:/turtle1/cmd_vel 等
# 查看乌龟位置
ros2 topic echo /turtle1/pose
# 查看按键发送的指令
ros2 topic echo /turtle1/cmd_vel
5.4 画一个正方形
# 打开终端4:创建一个画正方形的节点
cd ~/ros2_learning/src
ros2 pkg create draw_square --build-type ament_python --dependencies rclpy geometry_msgs
创建文件 draw_square/draw_square/draw_square.py:
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
import time
class DrawSquare(Node):
def __init__(self):
super().__init__('draw_square')
# 创建发布者,发布到乌龟控制话题
self.publisher = self.create_publisher(Twist, '/turtle1/cmd_vel', 10)
# 等待发布者建立连接
time.sleep(1)
self.get_logger().info('开始画正方形...')
self.draw_square()
def draw_square(self):
"""画一个正方形"""
for i in range(4):
# 向前走
self.move_forward(2.0, 1.0) # 线速度2.0,走1秒
# 停止一下
self.stop(0.5)
# 右转90度
self.turn_right(1.5, 1.0) # 角速度1.5,转1秒
# 停止一下
self.stop(0.5)
self.get_logger().info('正方形完成!')
def move_forward(self, speed, duration):
"""向前移动"""
msg = Twist()
msg.linear.x = speed # 线速度
msg.angular.z = 0.0 # 角速度
self.publisher.publish(msg)
time.sleep(duration)
def turn_right(self, speed, duration):
"""右转"""
msg = Twist()
msg.linear.x = 0.0
msg.angular.z = -speed # 负值表示右转
self.publisher.publish(msg)
time.sleep(duration)
def stop(self, duration):
"""停止"""
msg = Twist()
msg.linear.x = 0.0
msg.angular.z = 0.0
self.publisher.publish(msg)
time.sleep(duration)
def main():
rclpy.init()
node = DrawSquare()
rclpy.shutdown()
if __name__ == '__main__':
main()
需要修改两个文件:
1. 修改 setup.py:
cd ~/ros2_learning/src/draw_square
vim setup.py
找到这一部分,添加 'draw_square = draw_square.draw_square:main',:
entry_points={
'console_scripts': [
'draw_square = draw_square.draw_square:main',
],
},

2. 修改 setup.cfg:
vim setup.cfg
确保内容是这样的:
[develop]
script_dir=$base/lib/draw_square
[install]
install_scripts=$base/lib/draw_square
构建并运行:
cd ~/ros2_learning
colcon build --packages-select draw_square
source install/setup.bash
ros2 run draw_square draw_square
看!小乌龟会画一个正方形!
📚 第六步:学习路线图(4周计划)
第1周:熟悉基础(每天1-2小时)
周一:安装ROS 2(跟着上面的步骤)
周二:创建第一个节点(my_first_node)
周三:玩转Turtlesim(画正方形)
周四:学习话题(Topic)概念
周五:创建发布者和订阅者
周六:复习+做练习
周日:休息
第2周:通信机制
周一:服务(Service)通信
周二:动作(Action)通信
周三:参数(Parameter)管理
周四:使用launch文件启动多个节点
周五:自定义消息类型
周六:小项目:遥控小车
周日:休息
第3周:实用工具
周一:RViz2可视化工具
周二:TF2坐标变换
周三:rosbag2数据记录
周四:Gazebo仿真环境
周五:调试技巧和命令行工具
周六:项目:让小车在Gazebo中跑起来
周日:休息
第4周:实际项目
周一:SLAM基础(建地图)
周二:导航基础(路径规划)
周三:摄像头图像处理
周四:综合项目:自主导航小车
周五:代码优化和调试
周六:展示你的项目
周日:庆祝!
❓ 常见问题解答
Q1:我卡住了,哪里出错了?
# 1. 检查ROS 2安装
ros2 doctor
# 2. 检查环境变量
echo $ROS_DISTRO # 应该显示:humble
# 3. 检查Python版本
python3 --version # 应该显示:3.8或更高
Q2:我修改了代码,但运行还是旧版本?
# 需要重新构建
cd ~/ros2_learning
colcon build --packages-select 你的包名
source install/setup.bash
Q3:命令记不住怎么办?
完全正常!我刚开始也记不住。创建一个小抄:
# 常用命令小抄
ros2 node list # 查看所有节点
ros2 topic list # 查看所有话题
ros2 service list # 查看所有服务
ros2 run 包名 节点名 # 运行节点
ros2 pkg create ... # 创建包
colcon build # 构建包
🎁 给你的小练习
练习1:改进问候程序
修改 my_first_node.py,让它:
- 问候语随机选择(“你好”、“嗨”、"Hello"等)
- 每隔5次问候,说一下当前时间
练习2:让小乌龟画个圆
创建新节点,让小乌龟画一个完美的圆形
练习3:双龟赛跑
创建两个乌龟,让它们比赛谁先到终点
💪 下一步行动
- 今天:完成第1-4步,运行你的第一个节点
- 明天:玩转Turtlesim,画正方形
- 本周内:完成第1周的学习计划
记住:每个人都是从零开始的。遇到问题是正常的,解决一个,你就进步一点。
希望这篇详细的ROS 2入门指南能帮助你顺利开启机器人开发之旅!如果在学习过程中遇到任何问题,欢迎在评论区留言交流,我会尽力解答。学习ROS 2就像学习一门新的语言,需要时间和实践,但一旦掌握,你将能创造出令人惊叹的机器人应用!
祝学习顺利,期待看到你的第一个ROS 2项目!🚀
Happy Coding!
你的机器人学习伙伴
#ROS2 #机器人编程 #入门教程 #Python
本文为原创内容,版权归作者所有,转载需注明出处。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)