前言
本篇内容主要是解读ROS的国赛任务以及概述几种实现方案。也祝大家都能取得满意的成绩呀~
正文
相信大家都已经看过国赛的任务以及规则了。相比去年单纯的竞速,今年的任务还是比较新颖的,也考验了大家对ROS的熟悉程度和算法功底,算是去年比赛的进阶版了。下面进入正题。
赛题解读
本次国赛的赛道和去年相比那就是天差地别了,出现了岔路口,这种时候就需要路径规划做出选择。 赛题的大致要求是,在地图中下面标有数字的区域,随机拟定起点终点,以及中途必须经过的区域。 这就面临着路径的选择问题了。而以往对导航的使用都是发布一个目标点,由路径规划算法规划出一条可行的路径进行导航,但是在这个地图中,起点与终点之间则存在着多种路线,因此单纯依靠导航的路径规划算法是不足够完成任务的。毕竟少过一个目标点也是算未完赛的嘛。
在此任务的基础上,规则还给定了两米宽的赛道会出现中间锥桶的可能性。 因此,要在避障的基础上到达任务给的所有目标点,思路就是对路径规划算法进行修改。将目标点进行分段,也就是多点导航,这样可以对多个指定目标进行逐一完成。
方案一
当然用多目标点导航也有不同的方案,首先,方案一是将地图中多个目标点依次输入程序中,利用程序代替rviz来发布终点。 当然这个也有一定的难度,如果里程计数据存在较大误差的时候,是无法判定智能车是否抵达某个坐标点的。 我这两天利用gazebo仿真实现了这个方案的仿真效果,大家可以看下方视频。 (由于是赛前,因此技术性方案实现和源码不予公布,赛后可开源)
方案二
这个方案我没有去实现,不过这个方案是确实可行的,也比方案一简单许多。下面开始介绍这个方案。 我们将地图中每一个数字对应的区域记录在程序中,以每个区域的中心坐标为该区域的目标点。 然后编写一个节点,功能为依次发布目标点,也就是抵达第一个坐标点然后发布下一个坐标点,直至到达最后一个坐标点。 接下来运行该节点,按你需要走过的路径输入程序,例如,输入124567891,便能绕地图外圈一周。 这种方案比较简易方便,并且输入简单,不需要对坐标点进行输入,只需要输入固定的几个区域数字即可,但是不好的点在于没有方案一的灵活性。 当然比赛地图中每相邻两个区域之间只有一条路可走,所以牺牲一些灵活性其实没有很大区别。
总结
以上是我在看完赛题后想到的两种方案,我对其中一种方案进行了仿真算法实现。 不过在真车调试中还会面临诸多问题需要一一克服,地图中存在的锐角弯道,以及十字路口等地方的避障也是难点之一。所以在比赛过程中的路径选择,或许最短的路径未必是最快的路径。 所以参赛选手需要在路径的长、短、难、易之中进行权衡。
实车调试可能会遇到的问题
最后这边罗列一些实车调试可能会遇到的问题。 (1) 工控机强制关机后无法开机。 解决:需要拆开工控机将BIOS纽扣电池拔下重新安装之后才能开机 (2) 由于车模的减震性能很好,以及车模自身重量比较大,可能会导致车模在刹车和加速的过程中出现俯仰角变化,这个会影响四元数姿态解算,也会一定程度上影响里程计定位。所以需要对车模进行调校。 (3) 实际车模的转向半径会比较大,所以要尽可能调节机械转向半径,让左极限转向与右极限转向的半径尽可能一致。否则在导航过程中左转向的参数可能不适配于右转向。