您的位置:首页 > 其它

宾夕法尼亚大学Coursera运动规划公开课学习有感之二

2017-02-13 21:46 1281 查看
这篇感受是学习宾夕法尼亚大学VJKumar教授的Robotics: Aerial Robotics公开课系列中Robotics: Computational Motion Planning课程, 第二周的感受. 这一周的作业主要需要完成下面两个技术细节: 一个是两个三角形之间有重叠这件事情如何用代码完成; 另一个事情就是Dijkstra算法如何应对机械臂360度到0度的跨越无边界问题.

Introduction to Configuration Space

介绍一下configuration space:把障碍物等等物体都对应到一个坐标系中,用坐标系中的路径规划,给真实物体运动做规划.这一节课只有短短的几分钟, 主要是讲解这个专业名词. 个人理解就是描述所有物体的这么一个空间.

RR arm

说到配置空间configuration space:对于机械臂,有两个自由度,可以把两个自由度当成横纵坐标化成一张图,然后在这张图上做路径规划.到达指定位置就变成了到达指定点.这个转化的思想还是挺厉害的.

不过,有个问题就是,怎么把位置转化成2个角度的约束,画出右边的图形?(后来做完作业, 这个问题迎刃而解了. 作业中, 将两个机械臂旋转一周360度分成了2度的区间, 一共360度被分成181个点, 两个机械臂就是181*181个点, 每个点对应一种机械臂的姿态. 对于每种姿态, 都采用相撞算法判断一下这个点对应角度的时候机械臂会不会与障碍物相撞, 如果相撞, 这个点就是不能走的, 就对应右侧那个图中的黑色部分; 如果不相撞, 就对应右侧那个图的白色部分.) 需要注意的是右侧这个图上下界是可以跨过的,因为对于机械臂0和360是一样的嘛.



Piano Mover’s Problem:

搬钢琴问题,这个场景构建的还挺像的.最近看关于路径规划的论文的时候, 这个词汇也经常出现. 学完这个课就可以联想到, 出现这个词汇就指像搬钢琴一样一个物体通过狭窄空间需要姿态变换的问题. 如下图, 红色的机器人涉及到三个事情,位置和姿态,位置在平面上是二维的,在平面上姿态就是一个角度.一共三维.可以把这个问题转化成三维的configuration space.二维的平面障碍物在姿态角度维度上从0画到360就可以.于是,在三维图形上做path planning就能够得到这种问题的解法了.三维图形中规划出来的解如果想进行可视化, 那就是带有障碍的三维空间中一条线从起始点到最终点. 如果维数再增加, 如后面6自由度的机器人, 就是在6维空间内进行可视化, 这时候就不能靠正常思维可视化了.= =



后面还有一个比较厉害的例子.6关节机器人.把它想象成6维空间内的规划问题就行了啊.如果再有什么障碍,哈哈,就很难想了.



Trapezoidal Decomposition

翻译过来叫做梯形分解, 如下图, 把二维的configuration space分解成一个个梯形. 具体做法是用一些竖直线, 按照横坐标,使每个竖直线通过顶点, 这样就形成了众多梯形, 每个梯形选择中心点作为路径点.从起始点,按照连线,运动到终点就完成了路径规划.



下面是做考试题的时候做错的一道题, 首先要理解什么叫做路径规划中的’complete’说法: the Trapezoidal Decomposition method is complete because it will always find a path through space if one exists and report failure if there is no path. 这句话是正确的. 对于梯形分解, 如果存在可行路径, 那一定能找的出来(只不过不是最优的. ).

Visibility Graph

把起点终点边界点所有凸障碍物的端点都连成线,然后用Dijkstra算法等等算法就可以解了.实际应用的时候为了不碰到障碍物,就把障碍放大.这个放大是在考虑真实物体形状和障碍物位置之后画出来的,不是随意放大出来的.



考试中的一道判断题收集到这里: the Visibility graph method is complete because it will always find a path through space if one exists and report failure if there is no path.

这句话也是正确的, 只要存在可行路径, 使用visibility graph方法也一定能找到可行路径.

Collision Detection and Freespace Sampling Methods

怎么检测撞没撞上?如果所有的机器人和障碍物都是由三角形组成的,只需要看两个三角形的六条边,有没有哪一条边被分解了.



还有一件事需要注意,configuration space分的空间一定要细,保证两个点之间不会发生碰撞.分的足够细的时候,就可以认为,所有的两个点之间都可以自由形成路径.



附录

过一阵子会把关于三角形检测的方法传上来. 做的时候自己想了不少点子, 写了不少代码, 后来发现代码都会遇到检测不出来的情况. 最后终于写了一个能够检测所有情况的功能完全但性能比较慢的代码, 利用的办法主要还是上面说的, 检测是否有边的切割情况. 感觉代码一定是有改进的空间的, 只不过根据现在Google的情况只能先到这样.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dijkstra 算法