适配环境:VMware 虚拟机 Ubuntu 22.04 + ROS2 Humble Hawksbill
摘要
ROS2 Humble 官方原生支持 Ubuntu22.04,很多开发者在 VMware 虚拟机搭建这套环境。本文从Linux 基础命令讲起,以小海龟仿真为主线,逐步拆解 ROS2 全套命令行操作(节点 / 话题 / 服务 / 动作 / 参数 /bag),最后补充VMware 虚拟机专属踩坑(DDS 多播、图形卡顿、跨机通信等),适合零基础新手系统学习。
一、为什么要用命令行?
很多初学者觉得命令行枯燥难记,不如图形界面直观。打个比方:商场里的成品衣服款式有限,不一定合身;而定制服务可以根据你的需求自由组合布料、剪裁,虽然操作麻烦,但灵活度极高,不受既定规则约束。
图形界面就像 "成品衣服"—— 精心设计但功能固定;命令行就像 "定制工具"—— 用字符输入组合出任意功能,约束极小。无论 Linux 还是 ROS,命令行都是必不可少的调试利器。常用命令也就一二十个,边用边查即可,不必死记硬背。
终端启动方式(Ubuntu22.04):
- 快捷键 Ctrl + Alt + T(最常用)
- 应用列表搜索 "Terminal"
- 文件夹内鼠标右键 → "Open in Terminal"
二、Linux 基础命令速查(虚拟机新手必看)
ROS2 运行在 Linux 之上,以下是最常用的基础命令:
| cd | cd <目录路径> | 切换工作目录,不加参数回主目录 |
| pwd | pwd | 显示当前目录绝对路径 |
| mkdir | mkdir <目录名> | 创建文件夹 |
| ls | ls [选项] [目录] | 列出文件列表,-l详细信息,-a显示隐藏 |
| gedit | gedit <文件名> | 图形化编辑器,文件不存在则新建 |
| mv | mv <源> <目标> | 移动或重命名文件 / 目录 |
| cp | cp <源> <目标> | 复制文件,-r复制目录 |
| rm | rm <文件> | 删除文件,-r删除目录(慎用!) |
| sudo | sudo <指令> | 以管理员权限执行命令 |
实操示例:
pwd # 查看当前路径,例如 /home/yourname
cd .. # 返回上一级目录
cd ~ # 回到主目录
mkdir ros2_ws # 创建工作空间文件夹
cd ros2_ws # 进入文件夹
gedit test.txt # 编辑文件
rm test.txt # 删除文件
⚠️ rm -rf 命令极度危险,删除后不可恢复,使用前务必确认路径!
三、环境准备:VMware Ubuntu22.04 一键安装 ROS2 Humble
# 1. 设置编码(解决中文locale问题)
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
# 2. 添加ROS2软件源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \\
-o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 3. 安装ROS2 Humble完整版 + 仿真工具
sudo apt update
sudo apt install ros-humble-desktop
sudo apt install ros-humble-ros-base ros-humble-turtlesim ros-humble-rqt*
每次新开终端必须加载环境(或写入~/.bashrc 永久生效):
source /opt/ros/humble/setup.bash
# 编译自己的工作空间后还需加载:
# source ~/ros2_ws/install/setup.bash
四、ROS2 命令行总览
ROS2 所有操作都集成在 ros2 总命令下,格式为:
ros2 <一级命令> <子命令> [参数]
执行 ros2 –help 可查看完整命令体系:
Commands:
action 动作相关(长时间任务+进度反馈)
bag 数据录制与回放
component 组件相关
daemon 守护进程管理
doctor 环境诊断(别名 wtf)
interface 查看消息/服务/动作接口定义
launch 批量启动节点
lifecycle 节点生命周期管理
multicast 多播测试
node 节点操作
param 参数操作
pkg 功能包操作
run 运行单个节点
security 安全相关
service 服务操作(请求-应答)
topic 话题操作(发布-订阅)
wtf doctor 的别名
任意命令加 –help 查看详细用法,支持 Tab 自动补全(包名、话题名、参数都能补)。
五、小海龟实战:ROS2 核心命令(主线)
以下所有命令以 turtlesim 小海龟仿真为例,先启动仿真节点:
# 终端1:启动海龟仿真器
ros2 run turtlesim turtlesim_node
# 终端2:启动键盘控制(方向键移动,G/B/V/C/D/E/R旋转,F取消,Q退出)
ros2 run turtlesim turtle_teleop_key
5.1 节点操作 ros2 node
节点是 ROS2 程序的基本执行单元。
# 列出当前所有运行节点
ros2 node list
# 输出示例:
# /teleop_turtle
# /turtlesim
# 查看节点详细信息(订阅/发布的话题、服务、动作)
ros2 node info /turtlesim
ros2 node info 输出包含四大块:
- Subscribers:该节点订阅的话题(如 /turtle1/cmd_vel)
- Publishers:该节点发布的话题(如 /turtle1/pose、/rosout)
- Service Servers/Clients:提供 / 调用的服务(如 /spawn、/clear)
- Action Servers/Clients:提供 / 调用的动作(如 /turtle1/rotate_absolute)
5.2 话题操作 ros2 topic
话题是发布 – 订阅模型,适合传感器数据、位姿等流式数据。
# 列出所有话题
ros2 topic list
# 输出:/parameter_events /rosout /turtle1/cmd_vel /turtle1/color_sensor /turtle1/pose
# 列出话题 + 消息类型(最常用)
ros2 topic list -t
# 实时打印话题数据(Ctrl+C退出)
ros2 topic echo /turtle1/pose
# 输出示例:
# x: 5.544444561004639
# y: 5.544444561004639
# theta: 0.0
# linear_velocity: 0.0
# angular_velocity: 0.0
# —
# 查看话题类型、发布者/订阅者数量
ros2 topic info /turtle1/pose
# Type: turtlesim/msg/Pose
# Publisher count: 1
# Subscription count: 0
# 统计话题发布频率(Hz)
ros2 topic hz /turtle1/pose
# average rate: 62.430
# min: 0.014s max: 0.018s std dev: 0.00085s window: 64
# 统计话题带宽占用
ros2 topic bw /turtle1/pose
# 1.51 KB/s from 62 messages
# 查看话题消息类型(等价于 topic info 的第一行)
ros2 topic type /turtle1/pose
5.3 发布话题消息 ros2 topic pub
不用写代码,直接命令行控制海龟运动:
# 以1Hz频率持续发布速度指令(海龟画圆)
ros2 topic pub –rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist \\
"{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
# –once:只发布一次
ros2 topic pub –once /turtle1/cmd_vel geometry_msgs/msg/Twist \\
"{linear: {x: 0.5}, angular: {z: 0}}"
参数说明:
- –rate <n>:以 n Hz 频率持续发布(不加此参数默认 10Hz 持续发布)
- –once:只发布一次消息
- YAML 格式用 {} 嵌套,冒号后必须有空格
5.4 服务操作 ros2 service
服务是请求 – 应答模型,适合一次性操作(生成海龟、清空画布等)。
# 列出所有服务
ros2 service list
# 输出:/clear /kill /reset /spawn /turtle1/set_pen /turtle1/teleport_absolute …
# 包含隐藏服务(参数相关服务默认隐藏)
ros2 service list –include-hidden-services
# 查看服务类型
ros2 service type /spawn
# turtlesim/srv/Spawn
# 调用服务:生成第二只海龟(name为空则自动命名)
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
# 调用服务:清空画布
ros2 service call /clear std_srvs/srv/Empty {}
# 按类型查找服务
ros2 service find std_srvs/srv/Empty
5.5 动作操作 ros2 action
动作用于长时间任务,支持过程反馈和取消(如旋转到指定角度、导航)。
# 列出所有动作
ros2 action list
# /turtle1/rotate_absolute
# 查看动作信息
ros2 action info /turtle1/rotate_absolute
# 发送动作目标:旋转到theta=3弧度
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "theta: 3"
# 输出:
# Goal accepted with ID: xxxxxxxx
# Result:
# delta: 0.0
# Goal finished with status: SUCCEEDED
# –feedback:实时查看过程反馈
ros2 action send_goal –feedback /turtle1/rotate_absolute \\
turtlesim/action/RotateAbsolute "theta: 3.14"
动作的 YAML 可以用简洁格式 "theta: 3",不必写大括号。
5.6 数据录制与回放 ros2 bag
录制传感器 / 控制数据,离线复现调试。
# 录制单个话题(自动生成 rosbag2_日期_时间/ 目录)
ros2 bag record /turtle1/cmd_vel
# 录制多个话题,指定输出包名
ros2 bag record -o my_bag /turtle1/cmd_vel /turtle1/pose
# 录制所有话题
ros2 bag record -a
# 查看bag信息
ros2 bag info my_bag
# 回放数据
ros2 bag play my_bag
# 也可直接指定db3文件:
# ros2 bag play rosbag2_2022_04_11-17_35_40/rosbag2_2022_04_11-17_35_40_0.db3
六、进阶命令
6.1 参数 ros2 param(动态调参,无需重启节点)
ros2 param list # 列出所有节点参数
ros2 param list /turtlesim # 查看指定节点参数
ros2 param get /turtlesim background_r # 获取参数值
ros2 param set /turtlesim background_r 255 # 修改参数(背景变红)
ros2 param dump /turtlesim –output turtlesim.yaml # 导出参数
ros2 param load /turtlesim turtlesim.yaml # 加载参数
6.2 接口 ros2 interface(查看 msg/srv/action 定义)
ros2 interface list # 列出所有接口
ros2 interface show geometry_msgs/msg/Twist # 查看消息结构
ros2 interface show turtlesim/srv/Spawn # 查看服务定义
ros2 interface show turtlesim/action/RotateAbsolute
6.3 功能包 ros2 pkg
ros2 pkg list # 列出所有包
ros2 pkg prefix turtlesim # 包安装路径
ros2 pkg executables turtlesim # 包内可执行文件
6.4 启动 ros2 launch(批量启动节点)
ros2 launch turtlesim multisim.launch.py
6.5 诊断调试
ros2 daemon status # 守护进程状态
ros2 daemon stop # 停止daemon
ros2 daemon start # 启动daemon
ros2 doctor # 环境诊断(DDS/网络/配置问题)
ros2 wtf # doctor的别名,效果相同
rqt_graph # 图形化查看节点-话题连接关系
七、VMware Ubuntu22.04 + ROS2 Humble 专属踩坑【重点】
坑 1:新开终端 ros2: command not found
永久配置环境变量(推荐):
gedit ~/.bashrc
# 末尾添加:
source /opt/ros/humble/setup.bash
# source ~/ros2_ws/install/setup.bash # 工作空间按需取消注释
保存后 source ~/.bashrc 生效。
坑 2:turtlesim 窗口黑屏 / 卡顿
- 虚拟机设置 → 显示器 → 取消勾选 "加速 3D 图形"
- 安装增强工具:sudo apt install open-vm-tools open-vm-tools-desktop,重启
坑 3:ros2 node list 看不到节点(DDS 多播异常,虚拟机最高频)
虚拟机 NAT 网卡常导致 DDS 多播失败,切换为 CycloneDDS:
sudo apt install ros-humble-rmw-cyclonedds-cpp
echo "export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> ~/.bashrc
source ~/.bashrc
常用 DDS:rmw_fastrtps_cpp(默认)、rmw_cyclonedds_cpp(虚拟机更稳定)
坑 4:虚拟机与主机 / 其他虚拟机跨机通信失败
export ROS_DOMAIN_ID=10
坑 5:rosbag 回放时间戳异常(虚拟机时间漂移)
sudo apt install chrony
sudo timedatectl set-ntp true
坑 6:rqt_graph 命令找不到
sudo apt install ros-humble-rqt-graph
八、总结
| 节点 | ros2 node list/info | 查看系统中有哪些节点 |
| 话题 | ros2 topic list/echo/pub/hz | 调试数据流、手动发指令 |
| 服务 | ros2 service list/call | 一次性请求(生成 / 清空) |
| 动作 | ros2 action list/send_goal | 长时间任务(旋转 / 导航) |
| 参数 | ros2 param get/set/dump | 动态调参 |
| 数据 | ros2 bag record/play | 录制回放传感器数据 |
| 诊断 | ros2 doctor/daemon/rqt_graph | 排查通信和环境问题 |
在 VMware 虚拟机上开发 ROS2,DDS 网络问题是最高频的坑,切换 CycloneDDS + 桥接网卡可解决 90% 的通信异常。熟练掌握以上命令,就能快速定位节点、话题、服务层面的绝大多数问题。



