# 如何用 ROS 让 ATRV-Jr 定距移动或转向

> 原文链接：https://robotics.hellobike.com/pitfalls/2013-12-18-robotics-se-2138
> 频道：pitfalls | 更新日期：2013-12-18 | 标签：auto, stackexchange, mobile-robot, ros, navigation
> 核心摘要：ATRV-Jr 通过 /cmd_vel 发布速度会持续运动；可用 rospy 按时间发布 Twist，最后发布空 Twist 停止。

# 如何用 ROS 让 ATRV-Jr 定距移动或转向

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[Move ATRV robot to specific distance using ROS](https://robotics.stackexchange.com/questions/2138/move-atrv-robot-to-specific-distance-using-ros)（Robotics Stack Exchange #2138）

**状态**：有绕过办法

## 问题

使用 `rostopic pub /cmd_vel geometry_msgs/Twist '[1.0,0.0,0.0]' '[0.0,0.0,0.0]'` 后，机器人会一直前进，直到发送另一个命令或刹车；提问者希望前进约 2 米或左右转 90 度。

## 环境

Linux / ROS 机器人软件与控制通用开发环境

## 解决办法

1. 编写 ROS Python 节点，创建到 `cmd_vel` 的 `rospy.Publisher`，消息类型为 `Twist`。
2. 通过设置 `twist.linear.x` 控制前进或后退速度，或设置 `twist.angular.z` 控制左右转向。
3. 每次发布速度后调用 `rospy.sleep(1)` 让动作持续一段时间。
4. 动作结束后发布空的 `Twist()`，使机器人停止。

原问题作者：Maysam；采纳答案作者：Maysam。原内容依 CC BY-SA 4.0 授权，本页摘要同样依 CC BY-SA 4.0 授权。
:::

## 原始参考来源 (Sources)

- [Robotics Stack Exchange #2138：Move ATRV robot to specific distance using ROS](https://robotics.stackexchange.com/questions/2138/move-atrv-robot-to-specific-distance-using-ros)