在浏览PX4开发手册过程中看见里面提到的一种障碍规避算法——3DVFH 。该算法在之前做本科毕设时候有所接触,不过当时是进行了2D的Matlab仿真,down个代码改改障碍物形状,飞机当做质点考虑,没有深入了解这个算法在实际中该怎么应用。今天找到了论文的原文《3DVFH :Real-Time Three_Dimensional Obstacle Avoidance Using an Octomap》,从头到尾仔细看了看,发现比较适合无人机在室内导航中做障碍规避,尤其是在低速时的无人机状态可以简化为(x,y,z,yaw)时。更方便的 是这个算法被集成到ROS的功能包中,不过程序还没来得及看,Github上有源码,可以直接下载浏览。下面给出原文和一些自己的理解。
在之前解决三维高密度障碍的方法中多数是从3D地图中建立2D地图,或者是有多层高度的2D地图,在实际三维空间的飞行中,这些方法效果不佳。本文提出使用了基于2D的VFH 和octomap表示三维环境的方法。该方法从octomap中生成一个2D极坐标直方图来指引机器人运动。并且计算量极小,实时性很好。
1.机器人对环境中的密集障碍物的定位可以通过laser或者depth camera实现,并且用octomap表示。
2.目前2D机器人在3D环境中导航通过建立2.5D高度地图或者2D地图来规避障碍。解决3D的路径规划使用A或D,但这两种方法耗费计算资源。
3.作者的方法为基于2DVFH ,从octomap中生成一个2D极坐标直方图来进行3D导航。(贴出原文)
简单说就是之前的导航算法针对的都是2D运动机器人,3D环境使用A和D计算太慢。作者将自己的算法分成五个部分进行说明。
Octomap是一种表示3D环境的有效方法。只要传感器能给出深度信息(点云信息)就可以生成,基本单位是voxel(体素),voxel的大小也可称为分辨率,体积越大计算量越小但是精度越大。voxel定义网上有很多,我截个图直观的展示一下,然后附带着原文简要说一下octomap的表示方法。
机器人的传感器感知范围有限,并且考虑到精度和计算载荷,在机器人运动过程中,仅对一个小边界范围内进行地图探索。里面还提到一些简化运算的技巧,不展开谈。
将体素中得到的信息添加到2D原始极坐标直方图中,一个有效的体素由两个角度决定。
这部分讲到了机器人在运动过程中的动力学问题,有时候需要调整航向进行转弯的机动,这些动作和机器人当前状态有关。当然在无人机速度不快的时候,我们可以将其运动分为旋转和平移两个独立的部分。后半部分主要讲了转弯半径和爬升的机动策略。
此部分减少了原直方图的信息来生成一种新的直方图。
在2D二值化极坐标直方图中进行窗口扫描,如果空隙大于飞机包络,记作一条可选路径。对于多条候选路径,本文给出了一个代价函数来对路径进行选择。
实验给了一个gazebo的仿真,没有实际的测试。后面内容略掉。
准备以后拿飞机上结合自己的任务试一试,有结果继续更。
联系客服