Skip to the content.

Week 14:手机遥控 + 局域网通信 + 仿真机器人迷宫探索

本周选择课程项目方向 B:使用 ROS2 turtlesim 作为二维机器人仿真对象,通过手机网页发送控制命令,让小乌龟在迷宫中完成手动遥控和自动探索。项目遵守课程要求的“单一常驻程序”原则:网页只负责发送命令,turtlesim_web_bridge.py 同时负责 WebSocket 通信、ROS2 速度发布、迷宫碰撞检测、终点判定和自动探索调度。

项目目标

文件结构

Week14/
├── README.md
├── img14-1.jpg
├── turtlesim_auto.mp4
├── week14_turtlesim_single_report_concise_updated.pdf
└── turtlesim_remote/
    ├── turtlesim_web_bridge.py
    ├── explorer.py
    ├── maze.py
    ├── index.html
    └── requirements.txt

运行方式

第一个终端启动 turtlesim:

source /opt/ros/humble/setup.bash
ros2 run turtlesim turtlesim_node

第二个终端启动网页桥接程序:

source /opt/ros/humble/setup.bash
cd Week14/turtlesim_remote
pip install -r requirements.txt
python3 turtlesim_web_bridge.py

浏览器或手机打开:

http://localhost:8080

如果使用手机控制,需要手机和电脑进入同一个 Tailscale 网络,再访问电脑的 Tailscale IP 地址加端口 8080

自动探索实现

maze.py 生成 6x6 复杂迷宫,并提供障碍物、边界、起点、终点和格点邻接关系。explorer.py 使用 A* 算法在格点图上规划从当前位置到终点的路径,再把路径点转换为连续运动控制。turtlesim_web_bridge.py 在自动模式下周期性调用:

linear, angular = self.explorer.decide(self.get_state())

得到速度命令后仍然经过原有的 compute_safe_motion() 安全检查,因此自动模式和手动模式共享同一套碰撞检测与终点判定逻辑。

界面与成果

Week14 turtlesim maze project

点击查看本周演示视频

项目还包含演示视频 turtlesim_auto.mp4 和报告 week14_turtlesim_single_report_concise_updated.pdf。网页 index.html 支持手动/自动切换,自动运行时会在迷宫预览中绘制行走轨迹,方便展示探索过程。

验证记录

已完成以下静态检查:

python -m py_compile turtlesim_remote/maze.py turtlesim_remote/explorer.py turtlesim_remote/turtlesim_web_bridge.py
python turtlesim_remote/maze.py
python turtlesim_remote/explorer.py

迷宫自检结果显示 BFS 可达,A* 规划器能够生成到终点的路径。

学习总结

这个项目把前面几周的内容串在一起:Week 7 的网页与仓库整理、Week 10 的 Python/OpenCV 工程习惯、Week 12 的手机与局域网通信,以及 ROS2 的话题控制。最大的收获是理解了“控制链路必须集中”的工程原则。自动探索不是另开一个程序抢控制,而是作为常驻桥接程序内部的一个模式运行,这样状态、碰撞、终点和网页显示都保持一致。