目录
[一、ROS 核心基础知识点](#一、ROS 核心基础知识点)
[1. 核心概念](#1. 核心概念)
[2. 通信方式对比](#2. 通信方式对比)
[二、ROS 必备命令行](#二、ROS 必备命令行)
[1. 启动类命令](#1. 启动类命令)
[2. 工作空间 & 编译命令](#2. 工作空间 & 编译命令)
[3. 节点相关命令](#3. 节点相关命令)
[4. 话题相关命令](#4. 话题相关命令)
[5. 服务相关命令](#5. 服务相关命令)
[6. 参数服务器命令](#6. 参数服务器命令)
[7. 消息 / 服务查看命令](#7. 消息 / 服务查看命令)
[8. 录制与回放数据(Bag 包)](#8. 录制与回放数据(Bag 包))
[9. 功能包相关命令](#9. 功能包相关命令)
[10. 可视化与调试命令](#10. 可视化与调试命令)
[三、ROS 开发常用文件](#三、ROS 开发常用文件)
[四、ROS 坐标系与 TF](#四、ROS 坐标系与 TF)
[六、ROS1/ROS2 命令对照](#六、ROS1/ROS2 命令对照)
[1、环境 & 编译](#1、环境 & 编译)
[3、节点调试 node](#3、节点调试 node)
[4、话题调试 topic](#4、话题调试 topic)
[5、服务调试 service](#5、服务调试 service)
[6、参数 param](#6、参数 param)
[7、消息 / 接口查看 msg/srv](#7、消息 / 接口查看 msg/srv)
[8、Bag 数据录制回放](#8、Bag 数据录制回放)
[10、TF 坐标变换](#10、TF 坐标变换)
[12、ROS2 独有常用命令(ROS1 没有)](#12、ROS2 独有常用命令(ROS1 没有))
前言
这是 ROS1(Noetic/Melodic) 最常用、工程必用的全套知识点和命令,覆盖入门到开发,以及 ROS1与 ROS2之间的对比。
一、ROS 核心基础知识点
1. 核心概念
-
节点 (Node)
- 最小执行单元,一个功能一个节点(如摄像头、激光雷达、控制、导航)
- 节点之间松耦合,方便调试、复用
-
话题 (Topic)
- 异步通信,发布 / 订阅(Publisher/Subscriber)模式
- 适合连续数据:图像、激光、里程计、IMU
- 一对多、多对多通信
-
服务 (Service)
- 同步通信,请求 / 响应(Request/Response)模式
- 适合一次性指令:开关、查询、触发动作
- 一对一通信
-
消息 (Message)
- 话题 / 服务的数据格式(
.msg/.srv) - 标准类型:
std_msgs/String、sensor_msgs/Image等
- 话题 / 服务的数据格式(
-
功能包 (Package)
- ROS 软件组织单元,代码、配置、launch 都放在包里
- 依赖:
CMakeLists.txt+package.xml
-
工作空间 (Workspace)
-
存放功能包的目录,结构固定:
catkin_ws/
├── src/ # 放功能包
├── build/
├── devel/
└── install/
-
ROS Master
- 节点管理器(
roscore启动) - 所有节点必须先注册到 Master 才能通信
2. 通信方式对比
| 方式 | 通信模型 | 同步 / 异步 | 典型用途 |
|---|---|---|---|
| 话题 Topic | 发布 - 订阅 | 异步 | 传感器数据、连续流 |
| 服务 Service | 请求 - 响应 | 同步 | 指令调用、单次查询 |
| 动作 Action | 目标 - 反馈 - 结果 | 异步可抢占 | 长时任务(导航、抓取) |
| 参数 Parameter | 全局字典 | 读写 | 配置参数(速度、阈值) |
二、ROS 必备命令行
1. 启动类命令
# 启动 ROS 核心(必须第一个运行)
roscore
# 启动 launch 文件(自动启动多个节点+配置参数)
roslaunch 包名 launch文件名.launch
# 直接启动单个节点
rosrun 包名 节点名
2. 工作空间 & 编译命令
# 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
# 刷新环境(每次编译后必须执行)
source devel/setup.bash
# 永久生效(写入配置文件)
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
3. 节点相关命令
# 查看所有运行节点
rosnode list
# 查看节点信息(发布/订阅话题、服务)
rosnode info /节点名
# 杀死节点
rosnode kill /节点名
# 杀死所有节点
rosnode kill -a
4. 话题相关命令
# 查看所有话题
rostopic list
# 查看话题数据类型
rostopic type /话题名
# 实时打印话题内容
rostopic echo /话题名
# 发布一条消息到话题
rostopic pub /话题名 消息类型 "数据内容" -r 频率
# 例子:发布速度指令(循环 10Hz)
rostopic pub /cmd_vel geometry_msgs/Twist "linear: {x: 0.2}" -r 10
# 查看话题发布频率
rostopic hz /话题名
# 查看话题带宽
rostopic bw /话题名
5. 服务相关命令
# 查看所有服务
rosservice list
# 调用服务
rosservice call /服务名 "参数"
# 例子:清空代价地图(导航常用)
rosservice call /clear_costmaps "{}"
# 查看服务类型
rosservice type /服务名
6. 参数服务器命令
# 查看所有参数
rosparam list
# 查看参数值
rosparam get /参数名
# 设置参数值
rosparam set /参数名 值
# 保存参数到文件
rosparam dump params.yaml
# 从文件加载参数
rosparam load params.yaml
7. 消息 / 服务查看命令
# 查看消息格式
rosmsg show 消息类型
rosmsg show sensor_msgs/Image
# 查看服务格式
rossrv show 服务类型
8. 录制与回放数据(Bag 包)
# 录制所有话题
rosbag record -a
# 录制指定话题
rosbag record /话题1 /话题2
# 回放 bag
rosbag play 文件名.bag
# 回放时暂停、加速、循环
rosbag play -r 2 xxx.bag # 2倍速
rosbag play --loop xxx.bag # 循环播放
rosbag play --pause xxx.bag # 启动暂停
# 查看 bag 信息
rosbag info xxx.bag
9. 功能包相关命令
# 搜索功能包
rospack find 包名
# 进入功能包目录
roscd 包名
# 编辑功能包内文件
rosed 包名 文件名
10. 可视化与调试命令
# 2D 可视化(查看图像、激光、TF、路径)
rqt_image_view
rqt_plot
# 全能可视化工具
rqt
# 3D 可视化(机器人模型、点云、地图)
rviz
# 计算图(查看节点-话题连接关系)
rqt_graph
三、ROS 开发常用文件
-
CMakeLists.txt
- 编译规则:依赖、消息生成、可执行文件、链接库
-
package.xml
- 包信息:名称、版本、依赖库
-
launch 文件
- 启动节点、设置参数、加载配置、配置 RViz
- 格式:
.launch(XML 语法)
-
URDF/Xacro
- 机器人模型描述文件(关节、连杆、坐标系)
-
Msg/Srv 文件
- 自定义消息 / 服务格式
四、ROS 坐标系与 TF
# 查看 TF 树
rosrun rqt_tf_tree rqt_tf_tree
# 查看两个坐标系关系
rosrun tf tf_echo base_link map
五、最实用的一套开发流程
- 打开终端:
roscore - 打开机器人 / 仿真:
roslaunch xxx xxx.launch - 查看节点:
rosnode list - 查看话题:
rostopic list - 打印数据:
rostopic echo /xxx - 可视化:
rviz/rqt_graph - 控制机器人:
rostopic pub /cmd_vel ... - 录制数据:
rosbag record -a
六、ROS1/ROS2 命令对照
核心规律:ROS1 分散指令 → ROS2 统一 ros2 + 子命令;ROS2无 roscore,DDS 自动发现节点
1、环境 & 编译
| 功能 | ROS1 | ROS2 |
|---|---|---|
| 启动核心 | roscore(必启) |
不需要,取消 Master |
| 编译工作区 | catkin_make |
colcon build单包编译:colcon build --packages-select pkg_name |
| 刷新环境 | source devel/setup.bash |
source install/setup.bash |
| 永久配置环境 | echo "source xxx" >> ~/.bashrc 通用 |
同上 |
2、运行节点
| 功能 | ROS1 | ROS2 |
|---|---|---|
| 运行单个节点 | rosrun pkg exe |
ros2 run pkg exe调试日志:ros2 run pkg exe --ros-args --log-level debug |
| 批量启动 launch | roslaunch pkg xxx.launch |
ros2 launch pkg xxx.launch.py |
3、节点调试 node
| 功能 | ROS1 | ROS2 |
|---|---|---|
| 查看所有节点 | rosnode list |
ros2 node list |
| 查看节点发布订阅 | rosnode info /node_name |
ros2 node info /node_name |
| 杀死节点 | rosnode kill /node |
ros2 node kill /node |
4、话题调试 topic
| 功能 | ROS1 | ROS2 |
|---|---|---|
| 列出话题 | rostopic list |
ros2 topic list附带消息类型:ros2 topic list -t |
| 打印话题数据 | rostopic echo /topic |
ros2 topic echo /topic |
| 循环发布消息 | rostopic pub /cmd_vel geometry_msgs/Twist "{linear:{x:0.1}}" -r 10 |
ros2 topic pub -r 10 /cmd_vel geometry_msgs/msg/Twist "{linear:{x:0.1}}" |
| 统计话题频率 | rostopic hz /topic |
ros2 topic hz /topic |
| 查看话题消息类型 | rostopic type /topic |
ros2 topic type /topic |
5、服务调试 service
| 功能 | ROS1 | ROS2 |
|---|---|---|
| 列出所有服务 | rosservice list |
ros2 service list |
| 调用服务 | rosservice call /service "{}" |
ros2 service call /service pkg/srv/SrvType "{}" |
| 查看服务类型 | rosservice type /service |
ros2 service type /service |
6、参数 param
| 功能 | ROS1 | ROS2 |
|---|---|---|
| 列举参数 | rosparam list |
ros2 param list |
| 获取参数 | rosparam get /param |
ros2 param get /param |
| 设置参数 | rosparam set /param 10 |
ros2 param set /param 10 |
| 参数存入 yaml | rosparam dump params.yaml |
ros2 param dump --output params.yaml /node_name |
| 从 yaml 加载 | rosparam load params.yaml |
ros2 param load params.yaml /node_name |
7、消息 / 接口查看 msg/srv
| 功能 | ROS1 | ROS2 |
|---|---|---|
| 查看消息定义 | rosmsg show std_msgs/String |
ros2 interface show std_msgs/msg/String |
| 查看服务定义 | rossrv show std_srvs/SetBool |
ros2 interface show std_srvs/srv/SetBool |
8、Bag 数据录制回放
| 功能 | ROS1 | ROS2 |
|---|---|---|
| 录制全部话题 | rosbag record -a |
ros2 bag record -o bag_name /topic1 /topic2 |
| 录制指定话题 | rosbag record /t1 /t2 |
ros2 bag record /t1 /t2 |
| 查看 bag 信息 | rosbag info xxx.bag |
ros2 bag info xxx.db3 |
| 回放 bag | rosbag play xxx.bag |
ros2 bag play xxx.db3倍速:-r 2 循环:--loop |
*ROS2 bag 默认后缀.db3
9、功能包路径查找
| 功能 | ROS1 | ROS2 |
|---|---|---|
| 查找包路径 | rospack find pkg |
ros2 pkg prefix pkg |
| 直接进入包目录 | roscd pkg |
cd $(ros2 pkg prefix --share pkg) |
| 查看包内可执行文件 | 无统一命令 | ros2 pkg executables pkg |
10、TF 坐标变换
| 功能 | ROS1 | ROS2 |
|---|---|---|
| 查看两坐标系变换 | rosrun tf tf_echo base_link map |
ros2 run tf2_ros tf2_echo base_link map |
| 可视化 TF 树 | rosrun rqt_tf_tree rqt_tf_tree |
命令完全通用 |
11、通用可视化(命令不变)
rviz
rqt_graph
rqt_image_view
rqt_plot
12、ROS2 独有常用命令(ROS1 没有)
# 系统自检,排查DDS、依赖故障
ros2 doctor
# 查看ROS2版本
ros2 version
# Action动作调试
ros2 action list
ros2 action send_goal
13、最简工作流程对比
ROS1: roscore → roslaunch → 调试话题 / 服务 → rviz/rosbag
ROS2: 跳过 roscore → ros2 launch → ros2 topic/node → rviz/ros2 bag