轨迹规划属于机器人学中的上层问题,其主要目标是计划机器人从A移动到B并避开所有障碍的路线。

1、轨迹计划的对象

  轨迹规划的对象是map,机器人通过SLAM获得地map后,则可在地图中选定任意两点进行轨迹规划。暂时不考虑三维地图,以平面二维图为例,map主要有以下几种:

  

  如上所示,二维图可以分为有权重的节点图以及无权重的网格图。以飞行机器人移动为例:如果场地上每个部分移动所消耗的能量都是等价的,则可以使用网格图进行建模。如果在不同的区域移动所消耗的能量不同,则应该使用节点图来进行建模。

2、轨迹规划的方法

2.1、 grassfire method

  grassfire method是一种最简单的轨迹规划算法。其数据结构包括三个部分:

  1.map,记录了起点,终点,障碍物的位置

  2.distancetoStart,记录了每个探索步骤后,方格与初始点的距离

  3.parent,记录了每个节点的父节点

  算法步骤:

  1、获取map

  2、初始化distancetostart,将起点设为current, 将distance_ 设为0

  3、进入循环  如果current = destination 则跳出循环

    将distancetostart中最小值对应的节点设为current

    distance_ = distance_+1

    寻找current所有的相邻节点

    将相邻节点的distancetostart设为distance_,parent设为current

    将current的distance_设为无穷大

  4、依据parent map反求轨迹

        

  显然,这种grassfire算法是极其消耗计算能力的,因为其需要遍历网格中几乎每一个格子,甚至明明destination在上方,grassfire算法依旧需要向下探索。图中红色的区域代表已探索的点,蓝色是candidate,绿色是起点,黄色是终点。显然这个算法是各向同性的。

2.2、A* 算法

  grassfire算法的最大缺点是没有使用终点与起点相对位置关系信息。从而导致各项同性的探索策略。如果能增加一个将candidate拉向目标点的趋势,则可以减小被探索的点数目。

  A* 算法的数据结构包括五个部分:

  1、map

    2、g:相当于distancetostart;

  3、H:一种衡量算子,用于衡量当前点到目标点的绝对距离

  4、f:g+H,综合了当前点到起点的距离与到终点的距离

  5、parent,用于记录轨迹

  算法步骤:

  1、初始化,获取map,并将起点设为current. 获取H map,distance_ = 0

  2、进入循环   如果current为destination则退出循环

    distance_ = distance_ +1;

    获取当前点的相邻点

    将相邻点的g map值设为distance_

    将相邻点的f  map值设为g+H

    选择f map值最小的点为current

    将current f map值设为无穷大

  3、根据parent map, 反求轨迹

  

  结果如上所示。

  显然,由于引入了H map,所以算法会优先探索相对终点较近的点。obj = distance to start + distance to end 代表了最后需要走过的距离。每次都选择最小的obj,并且最后能够达到终点,那么总路程一定是全局最小的。

3、总结

  对于飞行机器人而言,每次移动都会消耗大量的能量。好的轨迹规划算法可以保证飞行器少走弯路,避开障碍。所以减少计算量必须是在少走弯路的前提下。移动所消耗的能量是计算所消耗能量的十倍左右。

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

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

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

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

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

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

    之前的轨迹规划中,我们只考虑了质点,没有考虑机器人的外形与结构.直接在obstacle map 中进行轨迹规划,然而世纪情况中,机器人有固定外形,可能会和障碍物发生碰撞.此情况下,我们针对机器人自由度 ...

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

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

  5. 【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一

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

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

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

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

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

  8. Minimum Snap轨迹规划详解(2)corridor与时间分配

    在上一篇文章中,我们得到的轨迹并不是很好,与路径差别有点大,我们期望规划出的轨迹跟路径大致重合,而且不希望有打结的现象,而且希望轨迹中的速度和加速度不超过最大限幅值.为了解决这些问题有两种思路: 思路 ...

  9. Minimum Snap轨迹规划详解(1)轨迹规划

    一. 轨迹规划是什么? 在机器人导航过程中,如何控制机器人从A点移动到B点,通常称之为运动规划.运动规划一般又分为两步: 1.路径规划:在地图(栅格地图.四\八叉树.RRT地图等)中搜索一条从A点到B ...

随机推荐

  1. openerp学习笔记 webkit 打印

    1.webkit 打印需要安装的支持模块 请首先安装 Webkit 报表引擎(report_webkit),再安装 Webkit 报表的支持库(report_webkit_lib),该模块讲自动安装和 ...

  2. -sh: ./helloworld: not found

    最近在玩FriendlyARM mini2440的板子,编译了一个helloworld,通过ftp上传到开发版的文件系统中,chmod 777 helloworld,运行./helloworld,出现 ...

  3. 每日一“酷”之Cookie

    Cookie---Http Cookie 作用:Cookie模块定义一些类来解析和创建HTTP cookie首部 Cookie模块为大多数符合RFC 2109的cookie实现一个解析器.这个实现没有 ...

  4. JMS之开源实现ActiveMQ

    1.ActiveMQ是开源的JMS实现. 可以把不影响用户执行结果又比较耗时的任务(比如发邮件通知管理员)异步的扔给jms 服务端,而尽快的把屏幕返还给用户,且服务端能够多线程排队响应高并发的请求.可 ...

  5. ios按钮点击后翻转效果

    代码是网上找到的,不过找到的时候直接复制下来不能用,稍微整理下,为和我一样水平的菜鸟观摩一下下. (1)引入“QuartzCore.framework”库,头部引用. #include<Quar ...

  6. python num[y array

    http://sebug.net/paper/books/scipydoc/numpy_intro.html npArr1=np.array([1,2,3],[4,5,6],[7,8,9]]) npA ...

  7. KVM通过qemu实现USB重定向

    KVM是通过qemu来支持USB设备的,可以在启动的时候就指定需要连接的USB设备,也可以系统启动后动态的添加删除.通过qemu的help可知,使用qemu的usb_add host:xxx:xxx来 ...

  8. 写一个EF的CodeFirst的Demo

    写一个EF的CodeFirst的Demo 今天打算写一个关于EF的CodeFirs的一个小Demo.先略说一个EF的三种与数据库,怎么说,叫映射么,好吧,那就这么叫吧,就是一个是ModelFirst就 ...

  9. .NET核心代码保护策略-隐藏核心程序集

    经过之前那个道德指责风波过后也有一段时间没写博客了,当然不是我心怀内疚才这么久不写,纯粹是程序员的通病..怎一个懒字了得,本来想写一些长篇大论反讽一下那些道德高人的.想想还是算了,那样估计会引来新一波 ...

  10. 解决Maven默认仓库没有的jar下载(二)

    前言: 在 “解决Maven不能下载“oracle.aspectjweaver.com.springsource.net.sf.cglib”jar(http://www.cnblogs.com/wql ...