本周完成一个基于 ROS2 与 turtlesim 的综合项目:小乌龟机器人既可以通过手机浏览器远程控制,也可以基于巡墙算法进行迷宫自主探索。
/turtle1/cmd_vel 发布 geometry_msgs/msg/Twist 消息控制小乌龟。| 文件 | 说明 |
|---|---|
README.md |
本周综合项目说明。 |
explorer.py |
自主探索控制脚本。 |
img1.png |
手机遥控与自主探索效果截图。 |
week14.pdf |
根据本 README 生成的项目 PDF 报告。 |
手机浏览器
↓
网页控制界面 HTML/JS
↓
HTTP / WebSocket
↓
Python Bridge Server
↓
ROS2 Node
↓
/turtle1/cmd_vel
↓
turtlesim
系统由三层组成:
| 层级 | 作用 |
|---|---|
| 前端控制层 | 提供手机端按钮界面,发送方向与模式切换指令。 |
| 桥接通信层 | 接收网页请求,解析控制命令,并发布 ROS2 消息。 |
| ROS2 控制层 | 控制 turtlesim 运动,并执行自主探索逻辑。 |
手机端网页提供以下控制能力:
forwardbackwardleftrightmanualauto前端通过 Fetch API 或 WebSocket 将指令发送到桥接服务。桥接服务根据指令生成 Twist 消息,例如:
| 指令 | 线速度 | 角速度 | 效果 |
|---|---|---|---|
forward |
正值 | 0 | 向前移动 |
backward |
负值 | 0 | 向后移动 |
left |
0 | 正值 | 左转 |
right |
0 | 负值 | 右转 |
自主探索模块基于经典巡墙算法实现。核心思想是让机器人始终沿着右侧墙壁前进,当遇到不同环境状态时执行不同动作。
程序维护两个关键状态:
front_blocked
right_open
front_blocked:前方是否被墙或边界阻挡。right_open:右侧是否存在可通行空间。| 环境状态 | 线速度 | 角速度 | 执行动作 |
|---|---|---|---|
| 前方有障碍 | 0.0 | +1.5 | 原地左转 |
| 右侧空旷 | 1.0 | -1.0 | 向右贴墙 |
| 正常巡墙 | 1.5 | 0.0 | 直线前进 |
核心控制逻辑:
def p_control_loop(self):
if self.front_blocked:
self.msg.linear.x = 0.0
self.msg.angular.z = 1.5
elif self.right_open:
self.msg.linear.x = 1.0
self.msg.angular.z = -1.0
else:
self.msg.linear.x = 1.5
self.msg.angular.z = 0.0
self.publisher_.publish(self.msg)
启动 ROS2 环境:
source /opt/ros/humble/setup.bash
启动 turtlesim:
ros2 run turtlesim turtlesim_node
运行自主探索脚本:
python3 explorer.py
如果使用手机遥控,还需要确保手机与电脑位于同一局域网,或通过 Tailscale 加入同一个虚拟局域网。
测试内容:
测试结果:控制指令可以正常发送,小乌龟运动响应流畅,局域网通信稳定。
测试内容:
测试结果:小乌龟能够基于右手法则持续巡墙,自动绕过障碍区域,并完成连续探索。

本周项目将前几周学习的 ROS2 控制、远程连接、网页通信和路径探索算法结合起来,形成了一个完整的小型机器人系统。项目验证了从手机端输入到 ROS2 控制输出的完整链路,也为后续接入真实移动机器人平台提供了实践基础。