欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 论文《基于现实迷宫地形的电脑鼠设计》深度分析(一)——智能车设计方案入门指南

论文《基于现实迷宫地形的电脑鼠设计》深度分析(一)——智能车设计方案入门指南

2025/4/30 16:15:06 来源:https://blog.csdn.net/qq_63129682/article/details/143722841  浏览:    关键词:论文《基于现实迷宫地形的电脑鼠设计》深度分析(一)——智能车设计方案入门指南

论文概述

     《基于现实迷宫地形的电脑鼠设计》是由吴润强、庹忠曜、刘文杰、项璟晨、孙科学等人于2023年发表的一篇优秀期刊论文。其针对现阶段电脑鼠计算量庞大且不适用于现实迷宫地形的问题,特基于超声波测距与传统迷宫算法原理,设计出一款可在现实迷宫地形下自动寻找出口的电脑鼠。该电脑鼠适用于岔路数量与道路宽度不定、多死路弯道并且相对较大的迷宫地形,具有适应性强、计算量小、兼容性和可塑性强等优点,对于现实迷宫地形下的自动应用具有一定研究价值。

        关键词  电脑鼠;超声波测距;迷宫算法;自动应用

        该论文内容相对较多,特对其进行拆开分析,本文特围绕智能车设计方案进行展开分析,并给出相关开源代码进行学习分析。

一、设计思想

        在复杂的现实道路中,阻碍电脑鼠前进的障 碍物并非 IEEE 比赛中呈直线平行分布的情况 (见图 1),并且电脑鼠相邻两边的障碍物距离也 可能随着电脑鼠的前进而不断变化,具象化的现 实道路(见图 2)。

图1 理想的迷宫地形图

图2 实际的迷宫地形图

        为方便小车的行驶,可以见图3,将弯曲且宽度不一的现实道路进行均匀微分。由于所分段后的路程长度对于实际情况下两边障碍物之间的距离而言相对较小,故而可对所分得的每一路段近似认为障碍物呈现笔直排布。电脑鼠在每个微分路段上的中线上进行直线行驶,则可完成弯曲道路上的正常行驶。


图3 实际道路的合理化        

        超声波探测可对探测头与现实生活中的障碍物之间的距离进行测量,故而可以通过超声波测距测量电脑鼠距离周围障碍物的距离值判断其所处地形,在所划分的每一个路段中保持道路中间行驶,并判断该路段是否有交叉路口,具体流程图见图4。

图4 系统流程图

        基于所提出的三类迷宫算法,此电脑鼠便可在迷宫地形的死路与多岔路口中做出相应选择,从而寻得出口。

二、结构设计

        本电脑鼠采用三轮式驱动,由电机控制两前驱动进行前进与转向,后万向轮无驱使动力,仅由电脑鼠运动带动,用以辅助电脑鼠进行转弯等,三轮式驱动结构见图5。

 

图5 三轮式驱动结构

        由转向舵机与超声波测量模块共同组成测距结构,其中超声波模块进行超声波的释放与接受,从而计算小车与障碍物之间的距离值,而转向舵机带动超声波进行转向,从而得出小车与四周障碍物之间的距离值,测距结构见图6。

图6 测距结构

三、电路设计

        此电脑鼠对于自身寻路所占用的代码量与计算量较少,故适用于市面上的多类开发板。目前智能小车常与物联网开发相结合,故以基于此电脑鼠的后续物联网开发为例,基于arduino UNO开发板设计的电路图见图7。        

        电池组电源经过7805芯片的电流稳压处理后,分别对发光二极管、开发板等元器件进行供电,其中发光二极管起指示灯作用,若电路导通则二极管发光。

        开发板通过D13引脚与转向舵机的数据引脚相连,控制转向舵机的旋转角度;通过D2、D0引脚与超声波模块的ECHO引脚与TRIG引脚分别相连,根据传递的数据进行超声波测距;经过L293驱动芯片的数据处理,对左右电机的转速、方向等进行控制,从而完成电脑鼠的前进、转弯等功能。

四、开源代码

        迷宫电脑鼠(Maze-solving robot)是一个经典的编程问题,通常涉及到搜索算法,比如深度优先搜索(DFS)、广度优先搜索(BFS)或者A*搜索算法。假设我们有一个迷宫,用二维数组表示,其中0表示可以通过的路径,1表示墙壁。我们的目标是找到从起点到终点的路径。

from collections import deque
import time# 定义迷宫
maze = [[0, 1, 0, 0, 0],[0, 1, 0, 1, 0],[0, 0, 0, 1, 0],[0, 1, 1, 1, 0],[0, 0, 0, 0, 0]
]# 迷宫的行数和列数
rows, cols = len(maze), len(maze[0])# 起点和终点
start = (0, 0)
end = (4, 4)# 方向数组,表示上下左右移动
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]def is_valid(x, y):"""检查坐标(x, y)是否在迷宫内且不是墙壁"""return 0 <= x < rows and 0 <= y < cols and maze[x][y] == 0def bfs(start, end):"""使用广度优先搜索找到从起点到终点的路径"""queue = deque([(start, [start])])  # 队列中存储当前坐标和路径visited = set([start])while queue:(x, y), path = queue.popleft()# 如果到达终点,返回路径if (x, y) == end:return path# 检查四个方向for dx, dy in directions:nx, ny = x + dx, y + dyif is_valid(nx, ny) and (nx, ny) not in visited:visited.add((nx, ny))queue.append(((nx, ny), path + [(nx, ny)]))return None  # 如果没有找到路径,返回Nonedef simulate_driving(path):"""模拟智能车的驾驶过程"""print("智能车开始驾驶:")for (x, y) in path:print(f"当前位置: ({x}, {y})")# 模拟智能车的移动time.sleep(1)  # 模拟移动时间def get_sensor_data(x, y):"""获取智能车的感知数据"""# 模拟传感器数据sensor_data = {'front': maze[x][y+1] if y+1 < cols else 1,'back': maze[x][y-1] if y-1 >= 0 else 1,'left': maze[x-1][y] if x-1 >= 0 else 1,'right': maze[x+1][y] if x+1 < rows else 1}return sensor_datadef main():# 执行BFS并获取路径path = bfs(start, end)if path:print("找到路径:", path)# 模拟智能车的驾驶过程simulate_driving(path)else:print("没有找到路径")# 模拟智能车在路径上的感知数据获取for (x, y) in path:sensor_data = get_sensor_data(x, y)print(f"在 ({x}, {y}) 的感知数据: {sensor_data}")time.sleep(0.5)  # 模拟感知数据获取时间if __name__ == "__main__":main()

        迷宫定义maze是一个二维数组,表示迷宫的布局。起点和终点startend分别表示迷宫的起点和终点。方向数组directions表示四个可能的移动方向(上、下、左、右)。is_valid函数:检查给定的坐标是否在迷宫内且不是墙壁。bfs函数:使用广度优先搜索算法找到从起点到终点的路径。队列中存储当前坐标和路径,每次从队列中取出一个元素,检查四个方向,如果新坐标有效且未被访问过,则将其加入队列并标记为已访问。simulate_driving函数:模拟智能车的驾驶过程,打印当前位置并模拟移动时间。get_sensor_data函数:获取智能车的感知数据,模拟传感器数据。main函数:执行BFS并获取路径,模拟智能车的驾驶过程,获取并打印感知数据。该代码模拟了智能车在迷宫中的驾驶和感知过程,包括路径规划、驾驶模拟和感知数据获取。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词