ROS 2 入门:从零实现小海龟 (Turtlesim) 的手动控制与自动化绘圆


1. 实验背景

ROS 2 (Robot Operating System 2) 是目前机器人开发的主流框架。本实验作为 ROS 2 学习的第一步,通过 turtlesim 仿真器,深入理解 ROS 2 的节点(Node)、话题(Topic)以及发布/订阅(Pub/Sub)通信机制。

2. 实验目标

  1. 启动 Turtlesim 仿真节点。
  2. 通过键盘控制节点,实现对小海龟的手动控制。
  3. 编写 Python 脚本,通过发布 Twist 消息实现小海龟的自动化圆周运动。

3. 实验步骤与效果展示

3.1 环境准备

首先确保 ROS 2 环境配置正确,启动仿真核心节点:

bash 复制代码
ros2 run turtlesim turtlesim_node

3.2 手动控制(Teleop)

开启一个新终端,运行键盘控制节点。通过键盘方向键,我们可以实时改变小海龟的速度。

bash 复制代码
ros2 run turtlesim turtle_teleop_key

在手动控制下,小海龟会在屏幕上留下运动轨迹。

3.3 自动化控制:编写 Python 绘圆脚本

📥 实验源码下载

文件名: draw_circle.py
获取方式: 点击 立即下载 按钮,或者查看资源绑定列表。
适用环境: ROS 2 Humble / Foxy / Galactic

手动控制虽然直观,但机器人开发的内核在于自动化。我们编写了一个名为 draw_circle.py 的 Python 节点,通过定时向 /turtle1/cmd_vel 话题发送恒定的线速度和角速度,使海龟画出一个完美的圆。

代码核心实现:

python 复制代码
# 核心逻辑:设置线性速度 x=2.0, 角速度 z=1.0
msg = Twist()
msg.linear.x = 2.0  
msg.angular.z = 1.0 
self.publisher_.publish(msg)

运行过程:

bash 复制代码
python3 draw_circle.py

最终效果:

可以看到在原有乱序轨迹的基础上,小海龟划出了一个规范的圆形。


4. 实验总结

通过本次实验,我掌握了以下核心知识点:

  • 节点 (Node) :turtlesim_node 和控制节点是相互独立的进程。
  • 话题 (Topic) :控制指令是通过 /turtle1/cmd_vel 话题进行传递的。
  • 消息类型 (Message Type) :使用了 geometry_msgs/msg/Twist 来表达三维空间中的速度。

这种"发布/订阅"的异步通信模式是 ROS 2 系统的基石。


🚀 下一步预告

圆满完成小海龟任务后,我将挑战 目标二:三维导航(3D Navigation)。我们将告别二维平面,进入 Gazebo 仿真环境,探索激光雷达与 3D 避障的奥秘!


相关推荐
系统集成-鹰翔8 分钟前
ERP推单数据库怎么备份:SQLite WAL模式下只复制db文件为什么可能漏任务
javascript·数据库·经验分享·后端
n112128 分钟前
Docker 容器时区错 8 小时:3 个坑
运维·docker·容器·故障排查·服务器运维·容器时区
Android系统攻城狮14 分钟前
Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
咕泡科技18 分钟前
AI前沿速递:Gemini双连发+混元双档落地!智元发布首个机器人工时KPI,具身智能分出工厂与客厅两条赛道
人工智能·机器人·腾讯混元·智元机器人·gemini4carbon·巴布机器人
吴名氏.22 分钟前
Java转AI Agent教程(第二周)超时重试与错误分类
java·人工智能·python·分类·ai agent
青少儿编程课堂24 分钟前
2026蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:堆排序与优先队列解析
c++·python·算法·bfs·信息学竞赛
Eiceblue25 分钟前
用 Python 给 Word 文档加水印:文字、图片与批量处理
开发语言·vscode·python·word
Android系统攻城狮29 分钟前
Linux FFmpeg深度解析之avcodec_find_decoder调用流程与实战(十二)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
小白的码BUG之路38 分钟前
K8s -- 启动一主二从节点
linux·运维·服务器
Android小码家38 分钟前
framework&framework-minus-apex&android.jar的区别
android·python·jar