ROS1 (Noetic)¶
ROS1 工作空间、节点通信、常用命令与调试工具速查。
1. 安装与环境配置¶
# Ubuntu 20.04 安装 ROS Noetic(完整桌面版)
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt install ros-noetic-desktop-full
# 环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
# 常用依赖
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo rosdep init
rosdep update
2. 工作空间(catkin)¶
目录结构¶
catkin_ws/
├── src/ # 源码空间(放功能包)
│ ├── CMakeLists.txt # 顶层 cmake(自动生成,勿改)
│ └── my_pkg/
│ ├── CMakeLists.txt # 功能包构建配置
│ ├── package.xml # 功能包描述文件
│ ├── src/ # C++ 源码
│ ├── scripts/ # Python 脚本
│ ├── launch/ # launch 文件
│ ├── msg/ # 自定义消息
│ ├── srv/ # 自定义服务
│ └── config/ # 参数配置文件
├── build/ # 编译中间文件
├── devel/ # 编译产物(setup.bash 在此)
└── logs/ # 日志
常用操作¶
#进入ros1的工作空间(ros1安装在docker里)
./start_ros1.sh
cd /root/catkin_ws #对应宿主机文件夹为ros1_ws
# 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make # 首次编译初始化
source devel/setup.bash
# 创建功能包
cd src/
catkin_create_pkg my_pkg std_msgs rospy roscpp
# 编译
cd ~/catkin_ws
catkin_make # 编译所有包
catkin_make --pkg my_pkg # 只编译指定包
catkin_make clean # 清理编译
3. 节点与通信¶
核心概念¶
graph LR
A[Node A<br>Publisher] -- Topic --> B[Node B<br>Subscriber]
C[Node C<br>Client] -- Service --> D[Node D<br>Server]
E[Parameter Server] -.- A
E -.- B
| 概念 | 说明 |
|---|---|
| Node | 最小执行单元,一个进程 |
| Topic | 异步消息通道(发布/订阅模式) |
| Service | 同步请求/响应(客户端/服务端模式) |
| Action | 异步带反馈的长任务 |
| Parameter | 全局参数服务器,存储配置参数 |
| Master | roscore,所有节点的注册中心 |
4. 常用命令¶
启动与运行¶
roscore # 启动 ROS Master(必须先启动),启动后挂着不要关
rosrun <pkg> <node> # 运行单个节点
roslaunch <pkg> <file.launch> # 用 launch 文件启动多个节点
节点管理¶
rosnode list # 列出所有活跃节点
rosnode info /node_name # 查看节点详细信息
rosnode ping /node_name # 测试节点连通性
rosnode kill /node_name # 终止节点
Topic 相关¶
rostopic list # 列出所有 topic
rostopic info /topic_name # 查看 topic 的发布者/订阅者
rostopic echo /topic_name # 实时打印消息内容
rostopic hz /topic_name # 查看发布频率
rostopic pub /topic_name std_msgs/String "data: 'hello'" # 手动发布消息
rostopic type /topic_name # 查看消息类型
Service 相关¶
rosservice list # 列出所有服务
rosservice info /service_name # 查看服务信息
rosservice call /service_name "{...}" # 调用服务
rossrv show <srv_type> # 查看 srv 定义
消息类型¶
rosmsg list # 列出所有消息类型
rosmsg show std_msgs/Header # 查看消息结构
rosmsg show geometry_msgs/Twist # 常用:线速度 + 角速度
参数服务器¶
rosparam list # 列出所有参数
rosparam get /param_name # 获取参数值
rosparam set /param_name value # 设置参数
rosparam load config.yaml # 从 YAML 加载参数
rosparam dump params.yaml # 导出所有参数到文件
功能包管理¶
rospack list # 列出所有功能包
rospack find <pkg> # 查找功能包路径
roscd <pkg> # 跳转到功能包目录
rosls <pkg> # 列出功能包内容
rosdep install --from-paths src --ignore-src -r -y # 安装所有依赖
5. 调试与可视化工具¶
| 工具 | 命令 | 用途 |
|---|---|---|
| RViz | rviz |
3D 可视化(TF、点云、路径等) |
| rqt_graph | rqt_graph |
查看节点-话题连接关系图 |
| rqt_plot | rosrun rqt_plot rqt_plot |
实时数据曲线绘图 |
| rqt_console | rosrun rqt_console rqt_console |
日志查看器 |
| rqt_tf_tree | rosrun rqt_tf_tree rqt_tf_tree |
TF 坐标系树 |
| rosbag | 见下方 | 录制/回放数据 |
rosbag 录制与回放¶
rosbag record -a # 录制所有 topic
rosbag record /topic1 /topic2 -O data # 录制指定 topic,输出 data.bag
rosbag info data.bag # 查看 bag 文件信息
rosbag play data.bag # 回放
rosbag play data.bag -l # 循环播放(loop)
rosbag play data.bag -r 2 # 2 倍速回放
rosbag play data.bag --clock # 回放并发布仿真时钟
6. TF 坐标变换¶
rosrun tf tf_echo /base_link /camera # 查看两个坐标系变换
rosrun tf view_frames # 生成 TF 树 PDF
rosrun tf tf_monitor # 实时监控 TF 发布状态
7. Launch 文件示例¶
launch/demo.launch
<launch>
<!-- 参数 -->
<arg name="use_sim" default="true"/>
<param name="robot_name" value="my_robot"/>
<!-- 加载 YAML 参数 -->
<rosparam file="$(find my_pkg)/config/params.yaml" command="load"/>
<!-- 启动节点 -->
<node pkg="my_pkg" type="talker.py" name="talker" output="screen"/>
<node pkg="my_pkg" type="listener.py" name="listener" output="screen"/>
<!-- 条件启动 -->
<group if="$(arg use_sim)">
<include file="$(find gazebo_ros)/launch/empty_world.launch"/>
</group>
</launch>