[经验] 走到哪都不会迷路,全自动机器人是怎么导航的?

[复制链接]
发表于 2018-5-11 11:51:27   199 查看 1 回复 显示全部楼层 倒序浏览
分享

现在很多餐厅,都用上了送餐机器人,机器人能端着盘子蹭蹭蹭地自动上菜。


送餐机器人


这个有点厉害呀,无人餐厅的第一步就靠它们了吧!

不过仔细看,这不是巡线小车吗?只要事先铺设好路线,它就会跟着指引线走。

但很多情况下,地上都没有指引线(比如室外),那要如何找路呢?目前有两种方式。

第一种:找参照物,规划好机器人的运动线路。比如下图,机器人从1向西运动x →距离西墙还有y时,右转90度→向北运动z ,到2。


  参照物导航


这里假设运动距离和转向角度测量都是精准的,但其实是不可能的。

那么,问题又来了,如果机器人遇到障碍物,或者被人为挪动了,起点就会错乱。我们把“遇障碍”叫动态路径规划,“被挪动”叫机器人绑架问题。

我们就要用另一种方法——感知式系统。它会先得到地图(事先得到或者自己建立),然后对地图解析推理,得到最佳的路。就像手机导航,从地图中找路。

它能做更复杂的操作,比如自主定位、自主导航。像智能扫地机器人、无人车等就是用了感应式系统。


感应式系统导航


今天就来教大家用感知式系统导航。

宾夕法尼亚大学的Vijay Kumar教授在Coursera公开课上讲过,任何系统的导航,都由四部分组成:


状态估计(State Estimation):实现机器人的定位和感知;

建图(Mapping):建立所在环境的地图(如果事先没有给地图的话);

规划(Planning):制定能走的路;

控制(Control):控制机器人按照导航走。

定位(状态估计)和建图

这两部分经常被一起提起,他们就是大名鼎鼎的SLAM(Simultaneous Localization And Mapping,同步建图与定位)。

我们用一个最简单的一维定位问题,来看机器人如何定位。


红色曲线是传感器得出的位置分布概率

黑色曲线是传感器和已知的地图信息,一起得出的位置分布概率


在这个问题里,三个门的相对位置是已知的。机器人一开始不知道自己在哪,所以黑线(表示概率)没有起伏。(a图)



前进时,机器人发现了一扇门,它立马确定自己在一扇门旁边,但不知道哪一扇。所以机器人在三扇门位置的概率都升高了。(b图)



考虑到误差等因素,其在其他位置的概率并没有等于0。

我们继续走,发现了另一扇门。根据两扇门的相对位置(地图提供),机器人确定自己在第二扇门的旁边。(d图)



现在,机器人基本确定了自己的位置,完成了定位。无人车在3D地图中,也是靠这种方法定位。


无人车激光雷达生成定位地图

那万一机器人走进沟里、爬树上了怎么办?我们也有对策。平面中,常用二维栅格地图,地图会被切成一个个小格。



我们可以用“0”和“1”来表示这个格子是否可以通过,最终得到了相应的地图。

格子越小,地图就越精确,不过占用的存储空间也就越大。

接下来就要建图(建立地图),过程涉及到概率的知识,这里不展开讲。


白色为可通行范围

黑色为障碍物边缘


有兴趣的同学可以参考Sebastian Thrun(谷歌无人车之父)的《ProbabilisticRobotics》第九章,有很详细的讲解(本书的中文版《概率机器人》已在17年5月出版)。

最后放一个移植的Gmapping开源方案的SLAM,大家随意感受一下什么是SLAM。


右下为机器人在建立的地图中走


规划

现在有了定位和地图,可以开始导航了。就像手机导航一样,我们需要知道起点和终点,然后找到一条路。关键就在“路”的选择上,需要考虑很多因素。

举个栗子,我在西安上学,打算自驾去拉萨看布达拉宫。小学学过,两点之间直线最短,我就沿着直线跑。



跑着跑着发现不对头,这路都是土路、山路、峡谷,耗油量反而更高了!于是规划出另一条路,尽量绕开山坡,同时保证路径最短。



机器人的运动同理,需要考虑全局规划(路径短)和局部规划(绕障碍),最后得到最佳的路径。


无人机规划路径


经典的规划算法有A*、D*、RRT、RPM等,其中D*和RRT算法比较有代表性。

下面的是D*算法的仿真,红点是临时加入的“障碍物”,可以看出它有抗动态干扰的能力。NASA的火星车就使用了D*算法。


D*算法


RRT算法是一种基于采样的路径规划算法,它也能抗干扰,而且消耗资源更少。


黑线规划出的所有的路径

红色是连接终点和起点的路径


控制

控制就是让机器人动起来,并且动得很精准,主要包括对底盘的运动控制和电机的PID控制。


实战一下

对导航有基本认识后,我们来现学现卖一把。

以我们为RoboMaster ICRA参赛队开源的RoboRTS为例。RoboRTS可以让机器人在已知地图中,实现自主定位和导航,还能对特定目标(装甲板)识别、跟踪和打击。

从github网站上下载源代码,按照网站上的说明进行编译即可运行。

链接:https://github.com/RoboMaster/RoboRTS


代码分析

我们简单分析源代码,主要分为perception(感知)、decision(决策)和planning(规划),包含了我们上面讲的定位、规划等。

perception部分主要实现了定位和感知功能。(地图已知,不需要进行mapping;感知用于探测步兵机器人的装甲板,提供打击目标)

decision部分进行决策,将任务交给planning部分进行规划路径,实现整车的运动。


编译程序

运行tools目录下的run_simulator.sh,可以得到Rviz输出:



这里将地图换成了RoboMaster赛场。物理模型是通过stage进行模拟,感兴趣的同学可以自行学习相关知识。

我们查看其具体情况:



程序运行后,系统里共有六个节点:

LocalizationNode节点结合tf信息(这里tf可以理解为传感器信息)以及map_serve节点提供的map信息(事先保存的地图),确定自身的位置;

decision_node节点进行决策后,由local_planner_node节点和global_planner_node节点共同作用进行运动路径规划。


路径规划


上图中,红点代表机器人(如果放得足够大,会发现是许多小箭头),黄线的代表模拟的激光雷达采集到的数据;

绿线代表全局路径(global_planner_node节点得出),红线代表局部路径(local_planner_node节点得出),机器人导航就实现了。

◆◆◆

以上只介绍了系统的基本知识。想要研发自己的机器人,还需要补充ROS系统、C++编程等方面的知识,希望大家再接再厉,早日做出最牛的机器人!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
标签:机器人
发表于 前天 16:39  
zhenbang真棒,赞赞赞,有更多其他算法方面的介绍吗
回复

点赞 举报

只有小组成员才能发言,加入小组>>

23个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

方案交易

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

PIC单片机论坛

DSP论坛

瑞萨单片机论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

工程资源中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

电子展览展会专区

芯片求购|供应发布区