3.2.c RRT代码解析

category
type
status
slug
date
summary
tags
password
icon
放手一搏,还是要等到年华老去,心中充满遗憾,孤独的迈向黄泉?
—《盗梦空间》
🏰代码及环境配置:请参考 环境配置和代码运行!

本节提供了RRT和RRT Star算法的代码测试.
两个算法运行的环境(地图和障碍物分布均相同),并通过函数实现(这一部分可根据自己需求进行修改):

3.2.c.1 RRT算法实现

tests/sampling_based_planning/rrt.py 中给定start point和goal point,在上述构建的地图环境中进行测试,代码如下:
get_random_node : 获取随机点
get_nearest_node_index :在已有 的node list中找到最近点
steer :按照一定的步长往前计算得到新节点
check_if_outside_play_area:判断新节点是否出了地图
check_collision :判断是否节点和边有碰撞
calc_dist_to_goal :判断是否到终点了,即算法结束
generate_final_course :使用回溯的方式得到最终的路径
测试结果如下,可以看到RRT算法可以找到一条从起点到终点的路径(但不是最优的)。
notion image

3.2.c.2 RRT Star算法实现

RRT Star的算法实现和RRT的算法实现大体相同,为了保证代码的独立性,将其定义在tests/sampling_based_planning/rrt_star.py 中,并在上述构建的地图环境中进行测试,代码如下:
除了与RRT算法中相同的函数,此处不再赘述,其他的函数定义如下:
new_node.cost :每个节点定义了cost,此处用的是欧式距离
choose_parent :给新节点重新寻找父节点
rewite :随机树的重布线
search_best_goal_node :在当前的迭代情况下,找寻最优的目标节点
测试结果如下,可以看到RRT Star算法得到的路径相比RRT算法得到的路径更优。
notion image
上一篇
动手学控制理论
下一篇
端到端-理论与实战视频课程
Loading...