全国大学生智能汽车竞赛创意组(室外光电竞速)不完全攻略

  • 内容
  • 评论
  • 相关

~欢迎关注~
微信公众号:古月居(guyue_home)
新浪微博:
古月春旭
知乎专栏:古月居
原文链接:全国大学生智能汽车竞赛创意组(室外光电竞速)不完全攻略

 

说起全国大学生智能汽车竞赛,古月君有滔滔不绝的内容可以分享,自大二开始,我从懵懂少年跟着师兄比赛,到自己挑大梁拿到国一,再到带队挣得全国前三,基本就是大学本科的青春。

图片1

再说到ROS,古月君就要泪流满面了,告别智能车竞赛,我就结识了ROS,然后一用就是8年,从移动机器人到机械臂,从博客《ROS探索总结》到图书《ROS机器人开发实践》,更是我的青春!

Image

所以看到19年创意组的题目,古月君还是有点激动的,这里就给大家梳理一下技术要点,祝大家拿到好成绩!

 

一、思路梳理

赛题要求并不复杂,一辆ROS小车在如下赛道上自动行驶,避开随机摆放的障碍物(锥桶)到达终点,速度快者为胜。

这是一个简易化的无人驾驶场景,不仅要求小车具备一定智能避障的能力,还要快速完成比赛。类似的工作有一些可参考的开源项目,比如MIT的racecar项目:

参考链接:RACECAR

另外台湾还有一个Hypha ROS Workshop,也做了一个类似的racecar开源项目:

 

该项目的具体资料欢迎关注微信公众号“古月居”,后台回复“racecar”下载

上边的赛题和视频乍看上去并不复杂,仔细一想涉及的问题还挺多:

1. 测试时的地图如何构建?构建地图的精度是否会对后续的工作产生影响?

2. 如何快速识别障碍物并且让小车切换路径完成自主避障?

3.小车如何知道自己所在的位置?又如何规划一条到达目标位置的最优路径?

4.小车可以完全按照最优路径前进么?如果偏离航向怎么办?

5.小车的软硬件如何实现?怎么让它跑的又快又稳?

6....

timg (2)

列出这些问题后是不是感觉一头雾水?我们用一个简化的场景来理一理思路。

古月君毕业后找到一份工作,对公司周围一无所知有些忐忑,万一第一天上班就迟到了可不妙,于是决定在正式上班前去公司周围踩下点,慢慢溜达着把附近的情况熟悉了一下,默默规划一下明天上班的捷径。 于是第二天古月君有条不紊的向公司进发,心想按照昨天规划好的路一定可以很快到达公司。可惜刚走了一小段,意外发生了,前方临时修路不能走,古月君心里一慌,但很快淡定下来,还好昨天来踩过点,旁边还有一条小路,虽然会远一点,但可以绕过施工路段到公司。于是古月君就一路小跑,顺利从这条小路到达了公司,虽然比预期晚了一点,不过还是第一个到公司的新人,感觉自己棒棒哒,走上人生巅峰不是梦了!

好啦,古月君还是要从梦里清醒过来,回到正题,上边的场景其实就是这次的赛题内容:

  • 古月君是小车
  • 古月君可以通过眼睛、手机确定自己的位置
  • 公司是目标点
  • 踩点熟悉环境就是建立赛道的地图
  • 踩点规划好的路径就是小车到达目标点的最优路径
  • 临时施工的路段是障碍物
  • 旁边通往公司的小路是避障路径timg (1)

这样我们就通过对比,梳理得到了赛题需要研究的关键技术:

1. ROS小车平台的搭建:解决怎么做车的问题

2. 定位:解决车在哪的问题

3. SLAM建图:解决赛道地图信息的问题

4. 全局路径规划:解决最优路径规划的问题

5. 本地路径规划:解决动态躲避障碍物的问题

只有明确了这些关键技术,我们才能个个突破,实现目标。当然,ROS是实现以上关键技术的核心工具。

二、ROS是什么

赛题中的关键技术都离不开ROS,那ROS是什么呢?

1. ROS的核心是一个分布式、低耦合的通讯机制;

2. ROS提供多种机器人开发工具,可以快速实现数据可视化、机器人仿真等功能;

3. ROS开源社区中包含大量机器人应用功能,可以帮助我们快速开发功能原型;

4. ROS已经成为一个庞大的生态系统,包含机器人领域的方方面面,同时也得到了越来越多第三方工具的支持,为机器人开发提供了系统化的解决方案。

ROS发展迅猛,已经成为机器人领域的事实标准,基于ROS开发的百度Apollo无人车更是在春晚舞台上得到了广泛赞誉。

更多ROS内容,请参考以下两篇文章,或者关注微信公众号“古月居”:

"Powering the world’s robots" 的ROS是什么?

 知乎 | 如何学习ROS?

三、ROS小车的实现架构

再来看下ROS小车的实现架构,官方已经提供了如下架构的小车:

  • 主控电脑是整个系统的“大脑”,负责处理外部传感器采集传来的信息,进行各种功能计算,并向下传达控制指令;
  • 激光雷达是系统的“眼睛”,通过光线的反射原理,测量周围障碍物与自身的距离信息;
  • 姿态传感器是系统的“前庭”, 检测自身的运动状态和空间位姿;
  • 单片机是系统的“脊髓”,接收主控下发的控制指令,驱动执行器完成相应的运动。

搭载以上架构的车模已经由组委会提供,大家拿到后应该很快就可以把硬件平台搭建起来,重要的是理解各部分之间的关系。

四、ROS小车的定位

小车的定位有很多种方法,常见的方法如下:

1. 里程计定位:通过编码器获取电机/车轮在单位时间内的旋转圈数,计算得到速度,再积分得到位置;

2. 姿态传感器:姿态传感器可以感知小车的线加速度和角加速度,利用积分同样可以得到速度和位置;

3. 视觉定位:通过激光检测小车和周围物体的距离变化,计算位置;

前两种方法均会产生积分误差,第三种则不会。在实际应用中,为提高定位精度,我们往往会通过滤波算法来融合多传感器的信息,比如ROS中的robot_pose_ekf,就可以通过扩展卡尔曼滤波的方式,将以上三种定位信息融合到一起。

参考链接:robot_pose_ekf - ROS Wiki

另外在ROS中也常用amcl来实现定位。amcl是一种自适应(或kld采样)的蒙特卡罗定位方法,这是一种概率统计方法,针对已有地图使用粒子滤波器跟踪一个机器人的姿态。

参考链接:

 amcl - ROS Wiki

 ROS探索总结(十五)--amcl(导航与定位) - 古月居

五、SLAM建立环境地图

SLAM问题可以描述为:机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和地图进行自身定位,同时建造增量式地图,实现机器人的自主定位和导航。

想象一个盲人在一个未知的环境里,如果想去感知周围的大概情况,他需要伸展双手作为他的“传感器”,不断探索四周是否有障碍物。

当然这个“传感器”有量程范围,他还需要不断移动,同时在心中尽量整合已经感知到的信息。当感觉新探索的环境好像是之前遇到过的某个位置,他就可以校正心中整合好的地图,同时也可以校正自己当前所处的位置。

作为一个盲人,感知能力毕竟有限,所以他探索的环境信息会存在误差,而且根据自己的确定程度,可以为探索到的障碍物设置一个概率值,概率越大就表示这里有障碍物的可能性越大。

这样一个盲人探索未知环境的场景,基本可以表示SLAM算法的主要过程。

ROS 开源社区中汇集了多种SLAM 算法,都可以直接使用或进行二次开发,其中最为常用和成熟的是 gmapping 功能包。

gmapping 包集成了 Rao-Blackwellized 粒子滤波算法,为开发者隐去了复杂的内部实现。

gmapping功能包需要订阅机器人的深度数据、 IMU 信息和里程计信息,同时完成一些必要参数的配置,即可创建并输出基于概率的二维栅格地图。

参考链接:

 OpenSLAM.org

 gmapping - ROS Wiki

六、ROS小车的自主导航

ROS有一套完整的导航功能框架,框架中大部分功能都可以使用ROS中原有的包,我们只需要封装好传感器信息,就可以像搭积木一样,把整个系统给搭建起来了。

想实现ROS小车的自主导航,用ROS中路径规划的功能包——move_base就可以搞定啦,它由两大规划器组成:

1. 全局路径规划(global planner)

根据给定的目标位置和全局地图进行总体路径的规划。在导航中,使用Dijkstra或A*算法进行全局路径的规划,计算出小车到目标位置的最优路线,作为机器人的全局路线。

2. 本地实时规划(local planner)

在实际情况中,小车往往无法严格按照全局路线行驶,所以需要针对地图信息和机器人附近随时可能出现的障碍物,规划每个周期内应该行驶的路线,使之尽量符合全局最优路径。

本地的实时规划由local_planner模块实现,使用Dynamic Window Approaches算法搜索躲避和行进的多条路经,综合各评价标准(是否会撞击障碍物,所需要的时间等)选取最优路径,并且计算行驶周期内的线速度和角速度,避免与动态出现的障碍物发生碰撞。

参考链接:

navigation - ROS Wiki

move_base - ROS Wiki

七、单片机驱动系统

定位、建图和导航都可以在上层的控制器中运行,最终运算的结果还是需要落实到具体的执行器上,在这里就是小车的舵机和电机,这就是单片机需要完成的驱动功能。

比如控制器规划得到小车的线速度和角速度,那么单片机收到指令后就需要控制舵机转向、电机旋转,这个部分当然会涉及到大家熟悉的PID控制,和智能汽车竞赛的其他组别内容一致,此处就不再赘述。

篇幅有限,这里先为大家梳理创意组中ROS小车的关键技术点,在具体实现的时候当然要具体挖掘每个点的潜力。

timg

最后,古月君也要给大家一点提醒,ROS虽好,可不要贪杯哦!

ROS是机器人开发中的重要工具,现在相关的资料也很多,ROS小车按照这些资料应该可以很快跑起来,但是也一定会发现很多问题。大家面对的是来自全国各地的高手,除了调整参数之外,算法优化和改进也是非常重要的,这部分更需要大家结合机器人理论来完成实践。

最后的最后,如果大家对ROS有任何疑问,欢迎关注微信公众号“古月居”,或参考古月君的ROS秘笈——《ROS机器人开发实践》。

 

更多内容欢迎关注:

微信公众号:古月居 (guyue_home)

新浪微博:古月春旭

知乎专栏:古月居


原创文章,转载请注明: 转载自古月居

本文链接地址: 全国大学生智能汽车竞赛创意组(室外光电竞速)不完全攻略

微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixinpay_weixin