目录
[二、ROS2 vs ROS1核心对比](#二、ROS2 vs ROS1核心对比)
[1. 节点(Node)](#1. 节点(Node))
[2. 话题(Topic)](#2. 话题(Topic))
[3. 服务(Service)](#3. 服务(Service))
[4. 动作(Action)](#4. 动作(Action))
[5. 参数(Parameter)](#5. 参数(Parameter))
[1. 中间件层(Middleware)](#1. 中间件层(Middleware))
[2. DDS(Data Distribution Service)](#2. DDS(Data Distribution Service))
[3. QoS策略(服务质量)](#3. QoS策略(服务质量))
[1. 节点操作](#1. 节点操作)
[2. 话题操作](#2. 话题操作)
[3. 服务操作](#3. 服务操作)
[4. 参数操作](#4. 参数操作)
[5. Launch文件操作](#5. Launch文件操作)
一、顶级架构一句话总结
节点 → DDS通信 → 话题/服务/动作 → 参数 → 工具链 → 机器人应用
ROS2(Robot Operating System 2)是新一代开源机器人操作系统,采用DDS作为通信中间件,去掉了ROS1的Master节点,提供更好的实时性和安全性。
二、ROS2 vs ROS1核心对比
主要区别:
|----------|------------|--------------------------------|
| 特性 | ROS1 | ROS2 |
| 通信中间件 | 自定义TCP/UDP | DDS(Data Distribution Service) |
| Master节点 | 有(单点故障) | 无(去中心化) |
| 实时性 | 有限 | 支持硬实时 |
| 安全性 | 基础 | 支持加密认证 |
| 多机器人 | 复杂 | 原生支持 |
| 跨平台 | Linux为主 | Linux/Windows/macOS |
| Python版本 | Python2/3 | Python3 |
ROS2的优势
-
去中心化架构:没有Master节点,任何节点故障不影响其他节点
-
DDS通信:工业级通信标准,支持QoS(服务质量)配置
-
实时性:支持硬实时操作系统(RTOS)
-
安全性:支持DDS-Security,提供加密和认证
-
多语言支持:C++、Python、Java等
三、ROS2核心概念
1. 节点(Node)
节点是ROS2的基本执行单元,每个节点负责一个特定功能。
python
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
class MinimalNode(Node):
def __init__(self):
super().__init__('minimal_node')
self.get_logger().info('ROS2节点已启动!')
def main(args=None):
rclpy.init(args=args)
node = MinimalNode()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
2. 话题(Topic)
话题是节点间的单向异步通信方式,发布-订阅模式。

3. 服务(Service)
服务是节点间的双向同步通信方式,请求-响应模式。

4. 动作(Action)
动作是节点间的双向异步通信方式,支持反馈和取消。

5. 参数(Parameter)
参数是节点的配置选项,支持运行时修改。
python
class ParamNode(Node):
def __init__(self):
super().__init__('param_node')
# 声明参数
self.declare_parameter('robot_name', 'my_robot')
self.declare_parameter('max_speed', 1.0)
# 获取参数
robot_name = self.get_parameter('robot_name').value
max_speed = self.get_parameter('max_speed').value
self.get_logger().info(f'机器人名称: {robot_name}')
self.get_logger().info(f'最大速度: {max_speed}')
四、ROS2架构详解
1. 中间件层(Middleware)
ROS2使用DDS作为通信中间件:

2. DDS(Data Distribution Service)
DDS是OMG(对象管理组织)定义的工业级通信标准:
-
DCPS(Data-Centric Publish-Subscribe):以数据为中心的发布订阅
-
DDSI-RTPS:DDS互操作协议
-
QoS(Quality of Service):服务质量策略
3. QoS策略(服务质量)
ROS2提供多种QoS策略配置:

python
from rclpy.qos import QoSProfile, ReliabilityPolicy, DurabilityPolicy
# 定义QoS配置
qos_profile = QoSProfile(
reliability=ReliabilityPolicy.BEST_EFFORT,
durability=DurabilityPolicy.VOLATILE,
depth=10
)
# 使用QoS创建发布者
self.publisher = self.create_publisher(
String,
'sensor_data',
qos_profile
)
五、ROS2文件系统结构
工作空间(Workspace):
python
ros2_ws/
├── src/ # 源代码目录
│ ├── package1/ # 功能包1
│ │ ├── CMakeLists.txt # CMake构建文件
│ │ ├── package.xml # 包清单文件
│ │ ├── include/ # 头文件
│ │ ├── src/ # 源文件
│ │ ├── launch/ # launch文件
│ │ ├── msg/ # 自定义消息
│ │ ├── srv/ # 自定义服务
│ │ └── action/ # 自定义动作
│ └── package2/
├── build/ # 编译输出
├── install/ # 安装目录
└── log/ # 日志目录
package.xml(包清单):
python
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>my_package</name>
<version>0.0.1</version>
<description>一个示例ROS2包</description>
<maintainer email="your@email.com">Your Name</maintainer>
<license>Apache-2.0</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<depend>rclcpp</depend>
<depend>std_msgs</depend>
<test_depend>ament_lint_auto</test_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
CMakeLists.txt(构建文件):
python
cmake_minimum_required(VERSION 3.8)
project(my_package)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
add_executable(my_node src/my_node.cpp)
ament_target_dependencies(my_node rclcpp std_msgs)
install(TARGETS
my_node
DESTINATION lib/${PROJECT_NAME}
)
ament_package()
六、ROS2常用命令行工具
1. 节点操作
python
# 运行节点
ros2 run package_name node_name
# 列出所有节点
ros2 node list
# 查看节点信息
ros2 node info /node_name
# 查看节点日志
ros2 node list --show-args
2. 话题操作
python
# 列出所有话题
ros2 topic list
# 查看话题数据
ros2 topic echo /topic_name
# 查看话题信息
ros2 topic info /topic_name
# 发布话题数据
ros2 topic pub /topic_name std_msgs/String "data: 'Hello ROS2'"
# 查看话题频率
ros2 topic hz /topic_name
# 查看话题带宽
ros2 topic bw /topic_name
3. 服务操作
python
# 列出所有服务
ros2 service list
# 查看服务类型
ros2 service type /service_name
# 调用服务
ros2 service call /service_name std_srvs/srv/Trigger
# 查看服务详情
ros2 service find std_srvs/srv/Trigger
4. 参数操作
python
# 列出节点参数
ros2 param list /node_name
# 获取参数值
ros2 param get /node_name param_name
# 设置参数值
ros2 param set /node_name param_name value
# 加载参数文件
ros2 param load /node_name params.yaml
# 保存参数到文件
ros2 param dump /node_name > params.yaml
5. Launch文件操作
python
# 运行launch文件
ros2 launch package_name launch_file.py
# 显示launch文件描述
ros2 launch package_name launch_file.py --show-description
七、ROS2工作空间创建与构建
创建工作空间
python
# 创建工作空间目录
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
# 创建功能包
ros2 pkg create --build-type ament_cmake my_package \
--dependencies rclcpp std_msgs
# 或者创建Python包
ros2 pkg create --build-type ament_python my_py_package \
--dependencies rclpy std_msgs
构建工作空间
python
cd ~/ros2_ws
# 编译所有包
colcon build
# 编译特定包
colcon build --packages-select my_package
# 编译时显示详细信息
colcon build --event-handlers console_direct+
# 并行编译
colcon build --parallel-workers 4
# 源化设置文件
source install/setup.bash
八、调试技巧
日志系统
python
# Python日志级别
self.get_logger().debug('调试信息')
self.get_logger().info('普通信息')
self.get_logger().warn('警告信息')
self.get_logger().error('错误信息')
self.get_logger().fatal('致命错误')
# C++日志级别
RCLCPP_DEBUG(this->get_logger(), "调试信息");
RCLCPP_INFO(this->get_logger(), "普通信息");
RCLCPP_WARN(this->get_logger(), "警告信息");
RCLCPP_ERROR(this->get_logger(), "错误信息");
RCLCPP_FATAL(this->get_logger(), "致命错误");
ROS2图形化工具
python
# 计算图可视化
rqt_graph
# 控制台工具
rqt_console
# 绘图工具
rqt_plot
# 数据可视化
rviz2
# ROS2命令行综合工具
rqt
九、终极总结
ROS2 = 去中心化 + DDS通信 + 实时安全 + 多平台支持
-
核心概念:节点、话题、服务、动作、参数
-
架构特点:去中心化,无Master节点
-
通信中间件:DDS工业标准,支持QoS配置
-
开发工具:ros2命令行、rqt、rviz2
-
构建系统:colcon、ament_cmake、ament_python
-
生态系统:导航、SLAM、感知、控制
掌握ROS2核心概念,开启机器人开发之旅!