ROS2 入门指南:从零认识机器人开发框架

ROS2 入门指南:从零认识机器人开发框架

前言

随着机器人、自动驾驶、无人机以及具身智能(Embodied AI)的发展,ROS2(Robot Operating System 2) 已逐渐成为机器人软件开发的重要基础设施。

如果你来自:

  • 嵌入式开发(BSP/Linux Driver)
  • C++开发
  • 自动驾驶
  • AI/深度学习
  • 软件工程

学习 ROS2 都会是一个不错的技术扩展方向。

本文将介绍:

✅ 什么是 ROS2
✅ ROS2 为什么出现
✅ ROS2 核心概念
✅ ROS2 通信机制
✅ 开发环境
✅ 第一个 ROS2 示例
✅ 后续学习路线

适合:零基础入门


1. 什么是 ROS2?

ROS2(Robot Operating System 2)并不是一个真正的操作系统,而是:

一套用于机器人开发的软件框架和工具链。

它提供:

  • 节点通信
  • 消息传输
  • 硬件抽象
  • 可视化工具
  • 仿真工具
  • 调试工具

类似于:

1
2
3
Android → 手机开发平台

ROS2 → 机器人开发平台

机器人系统通常包含:

1
2
3
4
5
6
7
摄像头
雷达
GPS
控制器
算法模块
路径规划
电机控制

ROS2 可以帮助这些模块互相通信。


2. 为什么需要 ROS2?

ROS1 曾经是机器人领域主流,但存在问题:

问题 ROS2 改进
实时性差 支持实时系统
单机通信 支持分布式
安全机制弱 增加安全通信
多机器人困难 更适合复杂系统
Linux绑定 支持 Windows/macOS

ROS2 最大变化:

采用 DDS(Data Distribution Service) 作为通信中间件。

因此:

1
2
3
4
5
ROS1:
Node <-> ROS Master

ROS2:
Node <-> DDS

ROS2 不再依赖 Master。


3. ROS2 架构

整体结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
Application Layer


ROS2 API (rclcpp / rclpy)


RCL Layer


DDS Middleware


Operating System

常见 DDS:

  • Fast DDS
  • Cyclone DDS
  • Connext DDS

4. ROS2 核心概念

学习 ROS2 首先要理解几个核心对象。


4.1 Node(节点)

节点是:

完成某个独立功能的软件模块

例如:

1
2
3
4
Camera Node
Lidar Node
Motor Node
Localization Node

一个机器人:

1
2
3
4
5
Robot
├── Camera Node
├── Mapping Node
├── Control Node
└── Navigation Node

查看节点:

1
ros2 node list

4.2 Topic(话题)

用于:

发布 / 订阅 通信

类似:

1
Publisher ---> Topic ---> Subscriber

例如:

摄像头发布图像:

1
2
3
4
5
6
7
Camera


/camera/image


AI Detection

查看:

1
ros2 topic list

监听:

1
ros2 topic echo /topic_name

4.3 Message(消息)

Topic 传输数据格式:

例如:

1
2
3
4
5
sensor_msgs/Image

geometry_msgs/Twist

nav_msgs/Odometry

速度控制:

1
2
3
linear.x

angular.z

4.4 Service(服务)

适合:

请求 → 响应

类似:

1
2
3
4
5
6
7
Client
│ Request

Server
│ Response

Client

适用于:

  • 查询状态
  • 修改参数
  • 开关控制

查看:

1
ros2 service list

4.5 Action(动作)

适合:

耗时任务

例如:

机器人导航:

1
2
3
4
5
6
7
8
9
发送目标



执行中反馈



完成

常见:

  • 导航
  • 机械臂运动
  • 路径规划

5. ROS2 工作空间

创建:

1
2
3
mkdir -p ~/ros2_ws/src

cd ~/ros2_ws

编译:

1
colcon build

加载环境:

1
source install/setup.bash

目录:

1
2
3
4
5
6
ros2_ws/

├── src/
├── build/
├── install/
└── log/

6. 安装 ROS2(Ubuntu 示例)

推荐:

Ubuntu 22.04

安装:

1
2
3
sudo apt update

sudo apt install ros-humble-desktop

配置:

1
2
3
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc

source ~/.bashrc

验证:

1
ros2 --version

7. 创建第一个 ROS2 Package

进入:

1
cd ~/ros2_ws/src

创建:

Python:

1
2
ros2 pkg create my_pkg \
--build-type ament_python

C++:

1
2
ros2 pkg create my_cpp_pkg \
--build-type ament_cmake

编译:

1
2
3
cd ~/ros2_ws

colcon build

加载:

1
source install/setup.bash

8. 第一个 Publisher 示例

创建:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import rclpy
from rclpy.node import Node

from std_msgs.msg import String


class Publisher(Node):

def __init__(self):

super().__init__("publisher")

self.pub = self.create_publisher(
String,
"hello",
10
)

self.timer = self.create_timer(
1.0,
self.publish
)

def publish(self):

msg = String()

msg.data="hello ros2"

self.pub.publish(msg)


def main():

rclpy.init()

node=Publisher()

rclpy.spin(node)

node.destroy_node()

rclpy.shutdown()

运行:

1
ros2 run package_name node_name

监听:

1
ros2 topic echo /hello

输出:

1
2
3
4
5
hello ros2

hello ros2

hello ros2

9. ROS2 常用工具

RViz2

可视化:

启动:

1
rviz2

查看:

  • 雷达
  • 地图
  • TF
  • Camera

Gazebo

机器人仿真:

支持:

  • 物理环境
  • 传感器
  • 机器人模型

rosbag2

录制:

1
ros2 bag record

回放:

1
ros2 bag play

TF2

坐标转换:

例如:

1
2
3
4
5
6
7
map

└── odom

└── base_link

└── camera_link

10. ROS2 学习路线推荐

建议顺序:

第一阶段

基础:

  • Linux
  • Git
  • Python
  • C++

时间:

2 周


第二阶段

ROS2:

学习:

  • Node
  • Topic
  • Service
  • Action
  • Parameter

时间:

2 周


第三阶段

进阶:

学习:

  • DDS
  • QoS
  • TF2
  • 生命周期节点

时间:

3 周


第四阶段

项目:

建议做:

① 雷达避障
② SLAM 建图
③ 导航系统
④ 机械臂控制
⑤ 自动驾驶 Demo


总结

ROS2 是机器人开发的重要基础设施。

理解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Node


Topic



Service



Action



DDS

基本就完成了入门。

下一篇建议学习:

ROS2 通信机制详解:Topic、Service、Action 区别与使用场景


参考资料

官方文档:

https://docs.ros.org/

ROS2 Tutorials:

https://docs.ros.org/en/humble/Tutorials.html


持续更新:

《ROS2 入门到实战》系列