ros2小乌龟画五角星
时间: 2025-06-10 15:13:42 浏览: 15
### ROS2 使用 Turtlesim 绘制五角星
在 ROS2 中,`turtlesim` 是一个常用的教育工具包,用于学习基本的 ROS 概念。要让 `turtlesim` 的海龟绘制五角星,可以通过发布速度命令到 `/turtle1/cmd_vel` 主题来实现[^1]。
以下是完整的 Python 脚本示例,展示如何控制 `turtlesim` 海龟绘制五角星:
```python
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
import math
class DrawPentagramNode(Node):
def __init__(self):
super().__init__('draw_pentagram_node')
self.publisher_ = self.create_publisher(Twist, '/turtle1/cmd_vel', 10)
timer_period = 0.1 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)
self.angle_step = 0
self.distance_count = 0
self.is_moving_forward = True
self.target_distance = 2.0 # meters (adjust as needed for your screen size)
self.turn_angle = math.radians(72) # 72 degrees in radians
def move_forward(self):
msg = Twist()
msg.linear.x = self.target_distance / 50 # small steps to simulate continuous movement
self.publisher_.publish(msg)
def turn_right(self):
msg = Twist()
msg.angular.z = -self.turn_angle
self.publisher_.publish(msg)
def timer_callback(self):
if self.is_moving_forward:
self.move_forward()
self.distance_count += abs(self.target_distance / 50)
if self.distance_count >= self.target_distance:
self.is_moving_forward = False
self.distance_count = 0
else:
self.turn_right()
self.angle_step += 1
if self.angle_step >= 5: # Five turns complete the star
rclpy.shutdown() # Stop the node after completing the task
self.is_moving_forward = True
def main(args=None):
rclpy.init(args=args)
node = DrawPentagramNode()
rclpy.spin(node)
if __name__ == '__main__':
main()
```
#### 解释
- **线性运动**: 需要在每次循环中发送一个小步长的速度消息给海龟,使其向前移动一小段距离。
- **角度旋转**: 在完成每条边之后,需要右转 72 度(即 \( \frac{360}{5} \times 2 \),因为五角星的角度特性),这可以由 `Twist` 消息中的 `angular.z` 字段表示。
- **定时器回调函数**: 它负责交替执行前进和转向操作,直到完成五个顶点为止[^2]。
运行此脚本前,请确保已启动 `ros2 run turtlesim turtlesim_node` 和 `ros2 run turtlesim turtle_teleop_key` 或其他键盘控制器节点以便观察效果[^3]。
阅读全文
相关推荐












