机器人学 —— 轨迹规划(Configuration Space)
之前的轨迹规划中,我们只考虑了质点,没有考虑机器人的外形与结构。直接在obstacle map 中进行轨迹规划,然而世纪情况中,机器人有固定外形,可能会和障碍物发生碰撞。此情况下,我们针对机器人自由度进行建模,给定其运动空间,如果是扫地机器人,那么其自由度是x-y的平移,如果是N自由度机械臂,其自由度是电机转角,我们针对此自由度,构建Configuration Space 并在其中使用A* 或者DJ 算法进行轨迹规划。


1、干涉碰撞检查
构建 Configuration Space 任务的pipeline 如下:空间离散化 --- 干涉碰撞检查 --- 生成 Obstacle Map --- Motion Plan.
所以,其核心的核心就是干涉碰撞检查,检查 Configuration Space 中的点,会不会导致机器人与障碍物碰撞。 干涉碰撞检测的方法是将机器人与物体进行三角化,并利用三角重叠检测的方法来对物体碰撞进行检查。



两个三角形共有6条边,如果存在某条边,使得顶点分别位于边的两边则两个三角形未发生碰撞。代码如下:
P{1} = P1;
P{2} = P2;
linesP1(1,:) = cross([P1(2,:) 1],[P1(3,:) 1]);
linesP1(2,:) = cross([P1(1,:) 1],[P1(3,:) 1]);
linesP1(3,:) = cross([P1(1,:) 1],[P1(2,:) 1]);
Lines{1} = linesP1;
linesP2(1,:) = cross([P2(2,:) 1],[P2(3,:) 1]);
linesP2(2,:) = cross([P2(1,:) 1],[P2(3,:) 1]);
linesP2(3,:) = cross([P2(1,:) 1],[P2(2,:) 1]);
Lines{2} = linesP2;
Result_Judge = zeros(3,1);
lines = Lines{1};
for line_idx = 1:3
line = lines(line_idx,:);
Point_Tri = [P{1}(line_idx,:) 1]*line';
for point_idx = 1:3
Result_Judge(point_idx) = [P{2}(point_idx,:) 1]*line';
end
if Point_Tri>0 && all(Result_Judge<0)
flag = false;
return
elseif Point_Tri<0 && all(Result_Judge>0)
flag = false;
return
end
end
lines = Lines{2};
for line_idx = 1:3
line = lines(line_idx,:);
Point_Tri = [P{2}(line_idx,:) 1]*line';
for point_idx = 1:3
Result_Judge(point_idx) = [P{1}(point_idx,:) 1]*line';
end
if Point_Tri>0 && all(Result_Judge<0)
flag = false;
return
elseif Point_Tri<0 && all(Result_Judge>0)
flag = false;
return
end
end
flag = true;
此算法的缺点是非常非常慢。而且由于需要使用流进行判断,不方便GPU并行处理。我正在思考如何利用异构并行实现碰撞检测。
2、轨迹规划
对于机械臂而言,轨迹规划算法与平面机器人差异并不大,但是需要注意的是,机械臂的关节角可以认为是360度的。具体体现在可以从Configuration Space 的另一头穿越出来。如下:

机器人学 —— 轨迹规划(Configuration Space)的更多相关文章
- 机器人学 —— 轨迹规划(Artificial Potential)
今天终于完成了机器人轨迹规划的最后一次课了,拜拜自带B - BOX 的 Prof. TJ Taylor. 最后一节课的内容是利用势场来进行轨迹规划.此方法的思路非常清晰,针对Configration ...
- 机器人学 —— 轨迹规划(Sampling Method)
上一篇提到,机器人轨迹规划中我们可以在 Configuration Space 中运行A* 或者 DJ 算法.无论A* 还是DJ 算法,都必须针对邻域进行搜索,如果2自由度则有4邻域,2自由度则有8邻 ...
- 机器人学 —— 轨迹规划(Introduction)
轨迹规划属于机器人学中的上层问题,其主要目标是计划机器人从A移动到B并避开所有障碍的路线. 1.轨迹计划的对象 轨迹规划的对象是map,机器人通过SLAM获得地map后,则可在地图中选定任意两点进行轨 ...
- 机器人运动规划中的构形空间(Configuration Space)
A key concept in motion planning is configuration space, or C-space for short. Every point in the C- ...
- 机器人关节空间轨迹规划--S型速度规划
关节空间 VS 操作空间 关节空间与操作空间轨迹规划流程图如下(上标$i$和$f$分别代表起始位置initial和目标位置final): 在关节空间内进行轨迹规划有如下优点: 在线运算量更小,即无需进 ...
- 软件篇-04-OMPL和FCL用于SLAM轨迹规划
使用OMPL内置的infoRRTstar算法模块和FCL碰撞检测库实现当前点和目标点的轨迹规划, 参考文章:https://www.cnblogs.com/shhu1993/p/7062099.htm ...
- 【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
参考资料及致谢 本文的绝大部分内容转载自以下几篇文章,首先向原作者致谢,希望自己能在这些前辈们的基础上能有所总结提升. 1. 运动规划/路径规划/轨迹规划的联系与区别 https://blog.csd ...
- 机器人中的轨迹规划(Trajectory Planning )
Figure. Several possible path shapes for a single joint 五次多项式曲线(quintic polynomial) $$\theta(t)=a_0+ ...
- zz自动驾驶中轨迹规划的探索和挑战
大家好,今天我们主要介绍一下轨迹规划的探索和挑战,我主要从四个方面介绍: 轨迹规划的概念 决策 横向规划 纵向规划 轨迹规划的概念: 轨迹规划的核心就是要解决车辆该怎么走的问题.比如我们知道了附近有行 ...
随机推荐
- Sprint会议-初步组织划分
主题:Spring冲刺计划会议,组员已认领方式领取任务,对个人任务进行详细划分. 日期:2015.4.26 地点:学一食堂二楼 与会人员:王雪青.陆宇.徐擎天.张文冬.赵建松 索引表 因早期任务的认领 ...
- 使用usb+preseed在virtualbox上安装ubuntu(一)
1.制作usb boot盘,在ubuntu上使用startup disk creater将ubuntu-server12.04.iso写入到usb中: 2.修改syslinux文件夹中的syslinu ...
- hdu 4240 Route Redundancy 最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4240 A city is made up exclusively of one-way steets. ...
- Binary Indexed Tree 2D 分类: ACM TYPE 2014-09-01 08:40 95人阅读 评论(0) 收藏
#include <cstdio> #include <cstdlib> #include <climits> #include <cstring> # ...
- 无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "SQL_Latin1_General_CP1_CI_AS" 之间的排序规则冲突。
什么是排序规则(collation) 关于SQL Server的排序规则,估计大家都不陌生,在创建数据库时我们经常要选择一种排序规则(conllation),一般我们会留意到每一种语言的排序规则都有许 ...
- asp.net MVC3 + JQuery 的ajax简单使用
一直都没有使用过JQuery,更没使用过JQuery的ajax支持带来的方便,今天试了一下,真是减少了很多工作量,使用方法也比较简单 这里先记下来,以后使用时可以再拿着用. 本应用中,本来是准备使用长 ...
- 抛弃jQuery 深入原生的JavaScript
虽然我已经做网站建设工作10多年了,但我从最近3年才开始更多地学习如何更好的将纯JavaScript用于工作中,而不总是将jQuery考虑在第一位.现在我每天学习很多东西.这个过程让我觉得Adtile ...
- Java读取图片并修改像素,创建图片
public void replaceImageColor(String file, Color srcColor, Color targetColor) throws IOException{ UR ...
- C++时间标准库时间time和系统时间的使用
#include <iostream> #include <time.h> #include <stdio.h> #include <windows.h> ...
- tomcat与IIS在多IP服务器下的支持
同一个服务器下,双IP(或更多IP),实现tomcat与IIS公用80端口. 操作其实也很简单的,首先禁用iis的套接字池,iis绑定一个ip,然后tomcat在绑定另一个ip,最后重启下服务器即可. ...