文章目录
前言
AWS DeepRacer是亚马逊开发提供给各年龄段学生,工作者练习或学习机器学习
AWS DeepRacer主要分为【计时赛】【障碍赛】【追逐赛】三种,相信大家都对计时赛有了一定的了解,那么这次我将针对我一次障碍赛的比赛经验来讲解一些避障赛的小tips
一,障碍赛分类
1.固定的非移动障碍
2.随机的非移动障碍
3.移动障碍赛
此外障碍物数量依据不同比赛规则会有变化
这篇文章将依据【随机的非移动障碍】障碍物数量:3个 的规则下的比赛经验来讲解。(障碍赛赛道如下图所示)
二,障碍赛思路
1.首先确定主体思路(物理分析赛道)
首先,简单从物理方面分析障碍赛所选赛道,此时要明白,障碍赛的赛道也是以计时赛各赛道为基础,所以可以先假装障碍不存在当成计时赛来跑,之后再根据不同形式的比赛规则加入避障的奖励
“物理”分析赛道如下图:
可见左转弯比较多,并且为数不多的右转弯可以通过切线快速通过,(障碍物虽然随机但均在左或在右)
根据这些特点即可选出你脑海里最中意的主思路
善用规则
1.固定的非移动障碍物比赛
一般是不会有比赛这样跑的,因为它有一个重大缺陷
可以很轻松通过waypoints来避障!
2.随机的非移动障碍物比赛
这是今天要细讲的一种,较于前者更能考验参赛者的避障能力,不过还有另一个缺陷[嘘]
缺陷:如果是线上的话可以通过只让模型贴一边跑来刷成绩(障碍物有可能都随机到一侧)
但是有非常多有趣的思路可以实现避障,很有趣!
移动障碍物
没有尝试过不熟悉,但是比前两者多出一个障碍物速度的参数要考虑,应该也挺有意思的!
三,障碍赛比计时赛多出了那些参数?
1.progress
小车已经完成赛道的百分比,可以乘以赛道长度算出小车离起点线的距离
在算距离时需要用到
2.object_distance
注意!!! 此参数表示障碍物离起点线的距离,并非小车离障碍物的距离,警惕示例代码4可能会出错
四,如何计算小车离障碍物的距离
1.利用勾股定理计算
next_object_loc = objects_location[next_object_index]
distance_closest_object = math.sqrt((agent_x - next_object_loc[0])**2 + (agent_y - next_object_loc[1])**2)
以下为该思路详解:
如下图所示:
证明过程:
在坐标系中任意做出A点(agent)和O点(object)
1.连接AO
2.如果要测量AO距离使用勾股定理即可
3.过A点做垂直于y轴的垂线记为L1
4.过O点做垂直于x轴的垂涎记为L2
5.设L2和·L1的交点为点B
6.若设A(x1,y1),O(x2,y2)
则此时AB=x2-x1 , OB = y2-y1
AB的平方+OB的平方 再利用math库开根号既可得出AO之间的距离
2.利用object_distance和progress来进行计算
a,b = params['closest_objects']
distance = abs( params['objects_distance'][b] - params['progress']*track_length)
以下为该片段详解:
如下图所示:
这个方法很简单
利用障碍物距离起点线的距离(objects_distance)加上小车距离起点线的距离(progress * track_length)即可算出
五,为什么以及如何使小车离中线保持一定距离
原因
障碍物虽然只随机生成在左或在右,但如果走的太靠近中线仍然会导致小车的边缘撞击到异侧障碍物边缘的情况发生从而导致crash,所以我们要做一个限制
方法1
0.05 <= (0.5 * track_width - distance_from_center) <= 0.28:
如果只研究半边赛道的话就可以使用此方法,简洁好用
注意:该数值并非最佳数值,需要自行尝试
方法2
distance_from_center > 0.1:
直接利用distance_from_center这个参数来判断,可行
过于简单不做过多解释
六,避坑指南
1.object_distance参数
再次强调,此参数是障碍物距离起点线的距离,起点线!不是小车
2.waypoints
比赛账号如果有时间限制的话不建议使用waypoints来当主思路,其奖励容易和避障奖励冲突,并且其对训练时间要求较高
3.多提交成绩
因为障碍赛的障碍物是随机的,所以如果障碍物在好的位置对避障成功率也有很大影响,可以尝试多提交几次来刷新成绩
4.示例4
警惕可能会出错(objects_distance的问题)AWS官方文档的示例是没有问题的,但是示例是以惩罚为主,会导致性能不是很高等情况
七,我想出的所有适用思路
如下图所示:
结语
感谢观看,期待在下篇文章与您相会