重新写了之前的I,这是中期答辩我写的桥段,没用上就放到博客里来了。有意向了解的朋友们可以去看看另外几篇详述的。密码是123456
一个简易的室内路径规划基础模型
1.1 选择编程工具
编程语言选择Python,语法简单易上手。选择Python的turtle库来实现绘制地图以及展示机器人“动态规划路径”的过程。
1.2 构建地图信息并绘制地图
采用矩形来描述室内障碍物,在室内平面图添加平面坐标系,用点的方式来定位障碍物和机器人。
下面是自己添加的一些障碍物的点坐标
'''author:https://www.cnblogs.com/dragonbean/
'''
class_allpoints = [[(80, 380), (80, 270), (0, 270), (0, 380)],
[(270, 200), (270, -70), (180, -70), (180, 200)],
[(-100, -100), (-100, -350), (-350, -350), (-350, -100)],
[(-20,50),(100,50),(100,-200),(-20,-200)],
[(-150,300),(-10,300),(-10,150),(-150,150)],
[(140,-90),(200,-90),(200,-160),(140,-160)],
[(-200,0),(-90,0),(-90,60),(-200,60)]
]
下面是用turtle库对上述障碍物点进行绘制的Python代码,都进行了一般化处理,后期修改或是使用都会很方便。
'''author:https://www.cnblogs.com/dragonbean/
'''
import turtle
__turtle = turtle.Turtle()
__turtle.hideturtle()
__turtle.speed(0)
#pointsList: [[point,point,point,...],[point,point,..],...]
def drawPolygons(pointsList,color='black',width=2):
if isinstance(pointsList,list) and isinstance(pointsList[0],list):
__turtle.width(width)
__turtle.color(color)
for each in pointsList:
__draw(each,style="polygon")
else:
print("date error!")
#pointsList: [point,point,point,...]
def drawRoad(pointsList,color="blue",width=1,speed=1):
__turtle.width(width)
__turtle.color(color)
__turtle.speed(speed)
__draw(pointsList,style=None)
#pointsList: [point,point,point,...]
def __draw(pointsList,style):
__turtle.penup()
__turtle.goto(pointsList[-1] if style=="polygon" else pointsList[0])
__turtle.pendown()
for point in pointsList:
__turtle.goto(point)
__turtle.penup()
运行结果【室内障碍物】
1.3 设计算法
1.3.1递归
1.3.1.1 原型
以一种现有的通过深层迭代求解最短路径的路径搜索算法为原型进行改进:
'''author:https://www.cnblogs.com/dragonbean/
'''
def searchPath(graph, start, end):
results = []
__generatePath(graph, [start], end, results)
results.sort(key=lambda x:len(x))
return results
def __generatePath(graph, path, end, results):
current = path[-1]
if current == end:
results.append(path)
else:
for n in graph[current]:
if n not in path:
__generatePath(graph, path+[n], end, results)
def showPath(results):
print('The path from ', results[0][0], 'to' , results[0][-1], 'is :')
for path in results:
print(path)
if __name__=='__main__':
graph = {'a':['b','c','d'],
'b'