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 避障的奥秘!


相关推荐
曲幽1 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码1 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱11 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵12 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio16 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
SelectDB16 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
用户03321266636717 小时前
使用 Python 从零创建 Word 文档
python
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate