完整逐段拆解这条命令

bash

运行

ros2 topic pub --rate 10 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 1.0, z: 0.0}, angular: {x: 1.0, y: 1.0, z: 0.0}}"

1. 基础命令分段

表格

片段 含义
ros2 topic pub ROS2 命令:向话题发布消息
--rate 10 发送频率,10Hz,每秒发送 10 条消息
/turtle1/cmd_vel 目标话题名称(海龟仿真速度指令话题)
geometry_msgs/msg/Twist

消息类型:速度指令消息

话题对应的消息名称

后面大括号内容 消息内部数据(YAML 格式)

2. Twist 消息字段详解

yaml

{
  linear: {x: 2.0, y: 1.0, z: 0.0},
  angular: {x: 1.0, y: 1.0, z: 0.0}
}

linear 线速度(单位 m/s)

  • linear.x = 2.0:向前直线速度(前进方向的速度) 2m/s(正数向前,负数向后)
  • linear.y = 1.0:横向速度,向右横移(平移方向的速度) 1m/s ✅ 麦克纳姆轮小车支持 y 方向横移阿克曼小车、turtlesim 海龟【不支持 linear.y】,这个参数会被直接忽略!
  • linear.z = 0.0:上下方向(垂直方向的速度),2D 机器人一律不用

angular 角速度(单位 rad/s)

  • angular.z水平面旋转(左右转向) 👉 重点!2D 移动机器人只使用 angular.z!
  • angular.x、angular.y:对应俯仰、翻滚(三维空间旋转) 👉 小车、turtlesim 完全用不到,设置任何数值都不会产生任何效果

3. 这条命令实际运行效果

  1. 如果是 turtlesim 海龟仿真 linear.y、angular.x、angular.y 无效 最终等效:向前直行,不转弯

  2. 如果把话题改为 /cmd_vel,发送给亚博 M1 麦克纳姆轮小车 小车会:向前 + 向右斜向平移 但是依然不会旋转(angular.z=0); angular.x=1 angular.y=1 依旧无效,底盘驱动直接丢弃这两个值。

4. 常见实操修正示范

示例 1:麦轮小车斜向移动(无旋转,有效指令)

bash

运行

ros2 topic pub --rate 10 /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 1.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

示例 2:小车前进同时左转(最常用)

bash

运行

ros2 topic pub --rate 10 /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.3}}"

核心总结(机器人开发必记)

二维地面移动机器人只使用三个参数:linear.x,linear.y,angular.z。 angular.x、angular.y、linear.z 永远填 0,写了也不生效。

额外小知识点

停止小车通用指令(所有底盘通用)

bash

运行

ros2 topic pub --once /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐