3.ROS2 Humble 命令行操作详解【VMware Ubuntu22.04 实操】

适配环境: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:虚拟机与主机 / 其他虚拟机跨机通信失败

  1. 虚拟机网卡改为桥接模式(不要 NAT)

  2. 所有机器设置相同 ROS_DOMAIN_ID(0~101):

    export ROS_DOMAIN_ID=10

  3. 关闭防火墙:sudo ufw disable

  4. 确保在同一网段

坑 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% 的通信异常。熟练掌握以上命令,就能快速定位节点、话题、服务层面的绝大多数问题。

相关推荐
星云API技术支持14 小时前
企业微信二次开发:外部群机器人如何结合会话列表、群详情与消息事件做统一管理
机器人·企业微信
龙腾AI白云15 小时前
孪生不止在工厂:能源、医疗与农业
人工智能·机器学习·scikit-learn·知识图谱
SCTF_XingTong15 小时前
机器人晶振选型避坑:三大场景清单
机器人·机器人晶振选型·机器人时钟方案
YFJ_mily15 小时前
9.24早鸟通道即将关闭|IMRA2026智能制造机器人自动化IEEE会议|往届EI稳定检索,设有学生专属投稿权益
人工智能·机器学习·机器人·自动化·智能制造·rdlink研发家·马鞍山会议
renhongxia115 小时前
数字孪生不止在工厂:能源、医疗与农业
人工智能·深度学习·算法·机器学习·数字孪生
数字新视界16 小时前
国产信创动环监控系统赋能智能环境安全新未来
物联网·3d·数字孪生·三维可视化·数据可视化
Quanqiucard16 小时前
“十五五”数字乡村建设提速,平安乡村监控物联网卡怎么选才稳定
网络·物联网
猿人谷17 小时前
BRP,如何用“反向构造”让黑盒对抗 Patch 更省查询?
神经网络·机器学习·图像识别
八荒启·交互动画17 小时前
机器人仿真实践(第0卷)——003机器人定义与发展史:从零实现
机器人·八荒启-交互动画·机器人仿真与模拟