机器人学 —— 轨迹规划(Configuration Space)

时间:2021-09-25 23:46:08

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

  机器人学 —— 轨迹规划(Configuration Space)机器人学 —— 轨迹规划(Configuration Space)

1、干涉碰撞检查

  构建 Configuration Space 任务的pipeline 如下:空间离散化 --- 干涉碰撞检查 --- 生成 Obstacle Map --- Motion Plan.

  所以,其核心的核心就是干涉碰撞检查,检查 Configuration Space 中的点,会不会导致机器人与障碍物碰撞。 干涉碰撞检测的方法是将机器人与物体进行三角化,并利用三角重叠检测的方法来对物体碰撞进行检查。

  机器人学 —— 轨迹规划(Configuration Space)机器人学 —— 轨迹规划(Configuration Space)机器人学 —— 轨迹规划(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)

机器人学 —— 轨迹规划(Configuration Space)的更多相关文章

  1. 机器人学 —— 轨迹规划(Artificial Potential)

    今天终于完成了机器人轨迹规划的最后一次课了,拜拜自带B - BOX 的 Prof. TJ Taylor. 最后一节课的内容是利用势场来进行轨迹规划.此方法的思路非常清晰,针对Configration ...

  2. 机器人学 —— 轨迹规划(Sampling Method)

    上一篇提到,机器人轨迹规划中我们可以在 Configuration Space 中运行A* 或者 DJ 算法.无论A* 还是DJ 算法,都必须针对邻域进行搜索,如果2*度则有4邻域,2*度则有8邻 ...

  3. 机器人学 —— 轨迹规划(Introduction)

    轨迹规划属于机器人学中的上层问题,其主要目标是计划机器人从A移动到B并避开所有障碍的路线. 1.轨迹计划的对象 轨迹规划的对象是map,机器人通过SLAM获得地map后,则可在地图中选定任意两点进行轨 ...

  4. 机器人运动规划中的构形空间(Configuration Space)

    A key concept in motion planning is configuration space, or C-space for short. Every point in the C- ...

  5. 机器人关节空间轨迹规划--S型速度规划

    关节空间 VS 操作空间 关节空间与操作空间轨迹规划流程图如下(上标$i$和$f$分别代表起始位置initial和目标位置final): 在关节空间内进行轨迹规划有如下优点: 在线运算量更小,即无需进 ...

  6. 软件篇-04-OMPL和FCL用于SLAM轨迹规划

    使用OMPL内置的infoRRTstar算法模块和FCL碰撞检测库实现当前点和目标点的轨迹规划, 参考文章:https://www.cnblogs.com/shhu1993/p/7062099.htm ...

  7. 【2018&period;04&period;19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一

    参考资料及致谢 本文的绝大部分内容转载自以下几篇文章,首先向原作者致谢,希望自己能在这些前辈们的基础上能有所总结提升. 1. 运动规划/路径规划/轨迹规划的联系与区别 https://blog.csd ...

  8. 机器人中的轨迹规划(Trajectory Planning )

    Figure. Several possible path shapes for a single joint 五次多项式曲线(quintic polynomial) $$\theta(t)=a_0+ ...

  9. zz自动驾驶中轨迹规划的探索和挑战

    大家好,今天我们主要介绍一下轨迹规划的探索和挑战,我主要从四个方面介绍: 轨迹规划的概念 决策 横向规划 纵向规划 轨迹规划的概念: 轨迹规划的核心就是要解决车辆该怎么走的问题.比如我们知道了附近有行 ...

随机推荐

  1. Android课程---Activity中保存和恢复用户状态

    onSaveInstanceState 保存 在暂停之后和保存之前调用 onRestoreInstanceState 恢复 再启动之后和显示之前调用 package com.example.chens ...

  2. debian7 请把标有&OpenCurlyDoubleQuote;Debian GNU&sol;Linux 7&period;1&period;0 &lowbar;Wheezy&lowbar; - Official amd64 DVD Binary-1 20130615-23&colon;06”的盘片插入驱动器&OpenCurlyDoubleQuote;&sol;media&sol;cdrom&sol;”再按回车键

    有时候,在通过apt-get install 安装软件的时候,会出现: 更换介质:请把标有“Debian GNU/Linux 7.1.0 _Wheezy_ - Official amd64 DVD B ...

  3. &lowbar;int、NSInteger、NSUInteger、NSNumber的区别和联系

    1.首先先了解下NSNumber类型: 苹果官方文档地址:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/F ...

  4. Python3环境搭建

    Python3环境搭建   Windows系统下安装Python3 Python3 下载 Python3 最新源码,二进制文档,新闻资讯等可以在 Python 的官网查看到: Python 官网:ht ...

  5. Oracle数据库 基础SQL语句练习

    一.说明 第一次使用Oracle,想做一些练习,熟悉一些oracle. 表:使用的是scott用户,默认的表 具体表讲解,可以参考该文档:https://www.cnblogs.com/xjcheng ...

  6. 阿里云服务器 centos7 中继邮箱&plus;转发服务 详细配置

    阿里云centos7 邮箱转发服务配置 一.文档编写目的: 网络拓扑图: 阿里云服务器屏蔽掉25端口后,内网服务器如何通过跳板机发送邮件到外网邮箱. 如果是可联网的阿里云机器,可以直接配置mailx使 ...

  7. QQ的成功,远没有你想象的那么顺利和轻松

    本文来自公众号“傅老师”(ID:fustory)的原创分享,感谢作者. 1.引言 如果QQ是一个人,看似风光,其实从出生到成长,过程饱经错荡,堪算坎坷.它的人生历程确实也够励志的了.   学习交流: ...

  8. Linux下的信号详解

    文章链接:https://blog.csdn.net/qq_38646470/article/details/80257512

  9. &lt&semi;Linux多线程服务端编程&gt&semi;学习记录

    使用智能指针解决多线程下 类的解析冲突问题 有这样一个场景 使用StockFactory记录Stock的信息  容器是map<string,smart_ptr>; 代码如下: #inclu ...

  10. php7实现基于openssl的加密解密方法

    还需要注意的是加密字符串长度问题,如果加密字符串长度太长需要进行分段加解密,如下代码: 加密:(公匙加密,私密一般用来解密) function encrypt($originalData){ $pub ...