ros2 twist
时间: 2025-03-06 15:35:33 浏览: 15
ROS2 中 Twist 消息的使用
在 ROS2 中,geometry_msgs/msg/Twist
是用于表示线速度和角速度的消息类型。该消息通常被用来控制移动机器人的运动[^1]。
Twist
消息结构
Twist
消息由两个主要部分组成:
- linear: 表示线性速度向量,包含三个分量 (x, y, z),单位为米/秒(m/s)。
- angular: 表示角速度向量,同样有三个分量 (x, y, z),单位为弧度/秒(rad/s)。
对于地面车辆来说,一般只关心 linear.x 和 angular.z 这两个参数来实现前进、后退和平移旋转操作。
发布 Twist 消息的例子
下面是一个简单的 Python 脚本例子,展示如何创建并发布一个 Twist 类型的消息给 turtlebot3 或其他支持此接口的小车模拟器:
import rclpy
from geometry_msgs.msg import Twist
from rclpy.node import Node
class MinimalPublisher(Node):
def __init__(self):
super().__init__('minimal_publisher')
self.publisher_ = self.create_publisher(Twist, 'cmd_vel', 10)
timer_period = 0.5 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)
def timer_callback(self):
msg = Twist()
msg.linear.x = 0.5 # 设置向前的速度为 0.5 m/s
msg.angular.z = 0.2 # 同时设置顺时针转动角度为 0.2 rad/s
self.publisher_.publish(msg)
def main(args=None):
rclpy.init(args=args)
minimal_publisher = MinimalPublisher()
rclpy.spin(minimal_publisher)
minimal_publisher.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
上述代码每隔半秒钟就会发送一次带有指定线性和角速度值的新指令到 /cmd_vel
主题上。
订阅 Twist 消息的例子
为了接收来自某个话题上的 Twist 数据,可以编写如下所示的一个简单订阅者节点程序:
import rclpy
from geometry_msgs.msg import Twist
from rclpy.node import Node
class MinimalSubscriber(Node):
def __init__(self):
super().__init__('minimal_subscriber')
self.subscription = self.subscribe(
Twist,
'/turtle1/cmd_vel',
self.listener_callback,
10)
self.subscription # prevent unused variable warning
def listener_callback(self, msg):
self.get_logger().info('I heard: "%s"' % str(msg))
def main(args=None):
rclpy.init(args=args)
minimal_subscriber = MinimalSubscriber()
rclpy.spin(minimal_subscriber)
minimal_subscriber.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
这段脚本会监听名为 /turtle1/cmd_vel
的主题,并打印接收到的信息内容[^2]。
相关推荐


















