欢迎光临
我们一直在努力

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

  • 虚拟机网卡改为桥接模式(不要 NAT)
  • 所有机器设置相同 ROS_DOMAIN_ID(0~101):
  • export ROS_DOMAIN_ID=10

  • 关闭防火墙:sudo ufw disable
  • 确保在同一网段
  • 坑 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% 的通信异常。熟练掌握以上命令,就能快速定位节点、话题、服务层面的绝大多数问题。

     

    赞(0)
    未经允许不得转载:171主机测评 » 3.ROS2 Humble 命令行操作详解【VMware Ubuntu22.04 实操】
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址