自主导航介绍
机器人实现自主导航就是实现机器人自主完成行驶任务,自主避障。
功能需要:定位;建图;规划
定位:确定机器人位置信息
建图:识别建立环境地图,以栅格占用地图为主。
地图分为:占用栅格地图及代价地图(costmap)。
其中占用栅格地图表述地图的静态障碍物信息
代价地图(costmap)用于导航,机器人以最小cost总和完成任务。
规划:基于得到的机器人位置信息及环境地图信息,以及给定的目标点,规划完成导航任务。
规划包括:全局规划和局部规划。
全局规划是基于占用栅格地图及全局代价地图,当前位置及给定目标点完成轨迹划化,完成全局的静态避障。
局部规划是基于局部代价地图,当前位置,及全局规划给定的局部目标完成局部路径规划,实现动态避障。
主要算法:
定位:激光&视觉&GPS&IMU & so on
eg:
-
Amcl:蒙特卡洛自适应定位,基于粒子滤波器的定位算法,与gmapping的定位方法类似,但主要实现定位功能。AMCL介绍
-
Slam:同步定位与建图,实现定位及地图创建功能。激光slam与视觉slam
建图:点云/栅格/体素/八叉树(常用,可调节分辨率)地图等
eg:
Octomap:可将点云地图转化为二维八叉树地图及三维概率地图。
OccupancyGrid:显示三维概率地图
OccupancyMap:显示二维占据地图。
规划:全局规划算法和局部规划算法
eg:
-
A*:全局路径规划算法,基于全局代价地图,规划出一条使总代价最小的到达目标点的路径。
A星算法介绍-blibli- -
RRT :三维路径规划
-
局部路径规划(局部避障)常见的算法有人工势场(APF)、直方图法(VFH)和动态窗口法(DWA)。
-
人工势场法APF 假设机器人在一种虚拟力场下运动。人工势场包括引力场合斥力场,其中目标点对物体产生引力,引导物体朝向其运动。障碍物对物体产生斥力,避免物体与之发生碰撞。物体在路径上每一点所受的合力等于这一点所有斥力和引力的和。这里的关键是如何构建引力场和斥力场。
APF存在的问题:
当物体离目标点比较远时,引力将变的特别大,相对较小的斥力在甚至可以忽略的情况下,物体路径上可能会碰到障碍物
当目标点附近有障碍物时,斥力将非常大,引力相对较小,物体很难到达目标点
在某个点,引力和斥力刚好大小相等,方向想反,则物体容易陷入局部最优解或震荡,
以上参考使用APF进行局部路径规划https://github.com/amov-lab/Prometheus/wiki/%E4%BD%BF%E7%94%A8APF%E8%BF%9B%E8%A1%8C%E5%B1%80%E9%83%A8%E8%B7%AF%E5%BE%84%E8%A7%84%E5%88%92 -
Dwa:局部规划算法,对机器人的线速度角速度的瞬时轨迹进行评价,选取最优线角速度完成局部轨迹规划。
dwa算法介绍-哔哩哔哩
自主导航:
已知地图(slam/测量)时,使用amcl+规划算法实现自主路径规划
直接使用slam+规划算法实现路径规划