跳转至

ROS 1 参考资料

引言

本页汇总了 ROS 1 开发中的常用命令速查表、核心软件包生态、常见问题排查指南以及向 ROS 2 迁移的参考入口,是 ROS 1 开发者的日常参考手册。

常用命令速查表

核心命令

命令 说明 示例
roscore 启动 ROS Master、参数服务器和 rosout roscore
rosrun 运行指定包中的节点 rosrun turtlesim turtlesim_node
roslaunch 通过 launch 文件启动多个节点 roslaunch my_pkg robot.launch
rosnode 查看运行中的节点信息 rosnode list / rosnode info /node
rosparam 操作参数服务器 rosparam list / rosparam get /param

话题命令 (rostopic)

# 列出所有活跃话题
rostopic list

# 查看话题信息(类型、发布者、订阅者)
rostopic info /cmd_vel

# 实时打印话题消息
rostopic echo /odom

# 只打印一条消息
rostopic echo /odom -n 1

# 查看话题发布频率
rostopic hz /camera/image_raw

# 查看话题带宽
rostopic bw /camera/image_raw

# 查看消息类型
rostopic type /cmd_vel

# 手动发布消息(测试用)
rostopic pub /cmd_vel geometry_msgs/Twist \
  "linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.3}"

# 以固定频率发布(10 Hz)
rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2}}'

服务命令 (rosservice)

# 列出所有服务
rosservice list

# 查看服务类型
rosservice type /spawn

# 查看服务参数格式
rossrv show turtlesim/Spawn

# 调用服务
rosservice call /spawn "x: 2.0
y: 2.0
theta: 0.0
name: 'turtle2'"

# 查看服务所属节点
rosservice node /spawn

数据录制与回放 (rosbag)

# 录制所有话题
rosbag record -a

# 录制指定话题
rosbag record /odom /scan /camera/image_raw -O my_data.bag

# 限时录制(60 秒)
rosbag record /scan --duration=60

# 查看 bag 文件信息
rosbag info my_data.bag

# 回放 bag 文件
rosbag play my_data.bag

# 以 0.5 倍速回放
rosbag play my_data.bag -r 0.5

# 循环回放
rosbag play my_data.bag -l

# 从指定时间开始回放
rosbag play my_data.bag -s 10.0

# 只回放指定话题
rosbag play my_data.bag --topics /scan /odom

可视化与调试 (rqt)

# 启动 rqt 主界面
rqt

# 查看节点与话题的连接关系图
rqt_graph

# 实时绘制数据曲线
rqt_plot /odom/pose/pose/position/x /odom/pose/pose/position/y

# 查看日志输出
rqt_console

# 动态参数调节(需包支持 dynamic_reconfigure)
rosrun rqt_reconfigure rqt_reconfigure

# 查看 TF 坐标变换树
rosrun rqt_tf_tree rqt_tf_tree

# 查看图像话题
rqt_image_view

其他实用命令

# 查找包的路径
rospack find my_robot_pkg

# 进入包的目录
roscd my_robot_pkg

# 列出包中的文件
rosls my_robot_pkg

# 查看消息定义
rosmsg show geometry_msgs/Twist

# 列出某个包的所有消息类型
rosmsg package sensor_msgs

# 编辑包中的文件
rosed my_robot_pkg CMakeLists.txt

# 查看 TF 坐标变换
rosrun tf tf_echo base_link camera_link

# 将 TF 树导出为 PDF
rosrun tf view_frames

核心软件包生态

包名 功能
move_base 导航框架核心,整合全局与局部路径规划
amcl 自适应蒙特卡洛定位 (Adaptive Monte Carlo Localization)
gmapping 基于粒子滤波的 2D SLAM
map_server 加载和提供静态地图
costmap_2d 2D 代价地图(障碍物层、膨胀层等)
global_planner 全局路径规划(A*、Dijkstra)
dwa_local_planner 动态窗口法局部规划
teb_local_planner 时间弹性带局部规划

机械臂 (MoveIt)

包名 功能
moveit_core 运动规划核心库
moveit_ros_planning ROS 接口层
moveit_ros_visualization RViz 交互界面
moveit_setup_assistant 可视化配置工具

感知与视觉

包名 功能
image_transport 图像话题的压缩传输
cv_bridge OpenCV 与 ROS 图像格式转换
pcl_ros 点云库 (Point Cloud Library) 的 ROS 接口
laser_geometry 激光扫描数据几何处理
image_pipeline 图像去畸变、深度图生成
ar_track_alvar AR 标记检测与跟踪

机器人描述与仿真

包名 功能
urdf 统一机器人描述格式 (Unified Robot Description Format) 解析
xacro URDF 宏扩展工具
robot_state_publisher 根据关节状态发布 TF
joint_state_publisher 发布关节状态(可带 GUI 滑块)
gazebo_ros Gazebo 仿真器 ROS 接口
rviz 3D 可视化工具

坐标变换

包名 功能
tf 坐标变换库(旧版)
tf2_ros 坐标变换库(推荐使用)
tf2_geometry_msgs geometry_msgs 的 TF2 转换

常见问题排查

连接与通信问题

问题:节点无法通信

# 检查 ROS Master 是否运行
rostopic list

# 检查 ROS_MASTER_URI 设置
echo $ROS_MASTER_URI
# 默认应为 http://localhost:11311

# 多机通信时检查网络配置
echo $ROS_IP
echo $ROS_HOSTNAME

# 确保主机名可解析
ping <远程主机名>

问题:多机通信配置

# 机器人端(Master 所在机器)
export ROS_MASTER_URI=http://192.168.1.100:11311
export ROS_IP=192.168.1.100

# 工作站端
export ROS_MASTER_URI=http://192.168.1.100:11311
export ROS_IP=192.168.1.200

编译问题

问题:找不到包或消息

# 确保已 source 工作空间
source ~/catkin_ws/devel/setup.bash

# 重新编译消息包
catkin_make --pkg my_robot_msgs

# 检查消息是否生成成功
rosmsg show my_robot_msgs/RobotStatus

问题:依赖缺失

# 安装所有未满足的依赖
cd ~/catkin_ws
rosdep install --from-paths src --ignore-src -r -y

时间同步问题

问题:TF 时间戳警告

# 常见警告信息:
# "TF_OLD_DATA" 或 "Lookup would require extrapolation into the past"

# 检查系统时间同步
ntpdate -q ntp.ubuntu.com

# 多机环境下使用 chrony 同步
sudo apt install chrony

性能问题

问题:话题延迟过高

# 检查话题发布频率是否正常
rostopic hz /camera/image_raw

# 检查带宽使用
rostopic bw /camera/image_raw

# 使用 image_transport 压缩图像传输
# 将 image_raw 替换为 image_raw/compressed
rosrun image_view image_view image:=/camera/image_raw compressed

发行版时间线

发行版 代号 发布时间 对应 Ubuntu EOL
ROS Indigo Igloo 2014-07 Ubuntu 14.04 2019-04
ROS Kinetic Kame 2016-05 Ubuntu 16.04 2021-04
ROS Melodic Morenia 2018-05 Ubuntu 18.04 2023-05
ROS Noetic Ninjemys 2020-05 Ubuntu 20.04 2025-05

ROS Noetic 是 ROS 1 的最后一个发行版。此后 ROS 1 将不再有新版本发布,社区开发重心已转向 ROS 2。

迁移到 ROS 2

ROS 1 已进入维护末期,建议新项目直接使用 ROS 2。以下是迁移参考要点:

关键变化概览

方面 ROS 1 ROS 2
通信中间件 自研 XMLRPC/TCPROS DDS (Data Distribution Service)
中心节点 需要 roscore (Master) 去中心化,无需 Master
编译系统 catkin (CMake) ament (CMake/Python)
Launch 文件 XML 格式 Python(推荐)或 XML
客户端库 roscpp / rospy rclcpp / rclpy
生命周期 支持托管节点 (Lifecycle Nodes)
QoS 细粒度的 QoS 策略

迁移资源

  • ros1_bridge:在迁移过渡期,使用 ros1_bridge 包实现 ROS 1 和 ROS 2 之间的话题和服务桥接
  • 迁移指南:详见本站 ROS 2 迁移手册

建议迁移策略

  1. 新功能用 ROS 2 开发,通过 ros1_bridge 与现有 ROS 1 节点通信
  2. 逐包迁移,从叶子节点(依赖最少的包)开始
  3. 优先迁移自定义消息包,因为它们被其他包广泛依赖
  4. 充分利用 ROS 2 的 QoS、生命周期节点等新特性

官方文档与社区

官方资源

学习资源

常用第三方资源

参考资料