本项目基于 ROS2 与 turtlesim 仿真环境,实现了一个支持手机远程控制和自主探索迷宫的小乌龟机器人系统。
项目主要包含两个功能模块:
手机遥控模块
自动探索模块
系统整体架构如下:
手机浏览器
↓
网页控制界面(HTML/JS)
↓
HTTP / WebSocket
↓
Python Bridge Server
↓
ROS2 Node
↓
/turtle1/cmd_vel
↓
turtlesim
这是小乌龟 效果见截图
—
系统采用前后端分离架构,由以下三个部分组成:
负责提供手机端操作界面。
主要功能:
负责连接网页与 ROS2。
主要功能:
负责控制 turtlesim 中的小乌龟运动。
主要功能:
在 week14_starters/turtlesim_remote/frontend/ 目录下开发了一个轻量级网页控制界面,用于通过手机远程操控小乌龟运动。
网页提供以下控制组件:
用户通过手机浏览器访问网页即可实现实时控制。
前端采用 JavaScript 实现控制指令发送。
当按钮被点击或长按时:
direction=forward
direction=backward
direction=left
direction=right
模式切换时:
mode=manual
mode=auto
利用 Fetch API 或 WebSocket 将请求发送至桥接服务器。
桥接程序同时充当:
监听地址:
0.0.0.0:8080
采用 Flask 或 FastAPI 接收来自手机端的请求。
桥接节点继承:
rclpy.node.Node
创建速度发布器:
geometry_msgs/msg/Twist
并向以下话题发布控制消息:
/turtle1/cmd_vel
手机网页
↓
HTTP/WebSocket
↓
Bridge Server
↓
ROS2 Publisher
↓
/turtle1/cmd_vel
↓
turtlesim
自动探索功能属于本项目核心内容。
项目基于参考文件 explorer.py 进行了二次开发,实现了适用于 turtlesim 环境的自主巡墙算法。
右手法则是一种经典迷宫搜索方法。
其基本思想为:
始终保持机器人右侧贴着墙壁前进,在连通迷宫中最终能够找到出口。
由于 turtlesim 不提供激光雷达等传感器,本项目利用:
来判断周围墙体状态。
系统维护两个核心状态:
front_blocked
表示前方是否存在障碍物。
right_open
表示右侧是否存在可通行空间。
系统根据环境状态执行不同动作。
行为:
条件:
行为:
条件:
行为:
条件:
行为:
自动探索控制循环如下:
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)
| 环境状态 | 线速度 | 角速度 | 执行动作 |
|---|---|---|---|
| 前方有障碍 | 0.0 | +1.5 | 原地左转 |
| 右侧空旷 | 1.0 | -1.0 | 向右贴墙 |
| 正常巡墙 | 1.5 | 0.0 | 直线前进 |
该策略具有实现简单、计算开销小、稳定性高等特点,能够满足课程项目对于自主探索迷宫功能的要求。
测试内容:
测试结果:
测试内容:
测试结果:
本项目完成了基于 ROS2 的手机遥控与自主探索系统设计,实现了网页控制、网络通信以及自动巡墙导航等功能。
项目成果包括:
未来可进一步扩展:
通过本项目,深入掌握了 ROS2 节点通信机制、网络控制系统设计以及自主导航算法的基本实现方法。