9.1-ompl1-基础理论

【组件】ompl-open motion planning library1-基础理论

前言

  • open motion plan library,一个开源的运动规划库,主要以sample-based planning算法为主
  • 包括两个核心组件,OMPL,算法库,和OMPL.app,前端用户界面

目录

TOC

参考

ompl home page
demos
tutorials
做品展现
intergrated with your build system
Planning algorithms.pdfhtml

安装

  • 若是使用ompl.app的话,建议ompl也进行源安装。并开启python binding
sudo apt-get remove libompl7 libompl-dev
cd ./build/Release
cmake ../..
make update_bindings -j4
make -j4
sudo make install
sudo apt-get install libompl-dev ompl-demos

运行demo

cmake_minimum_required(VERSION 2.8.3)
project(ompl_beginner)

SET(CMAKE_CXX_FLAGS "-std=c++11")

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

# find packages
find_package(OMPL)

# include dirs
include_directories(
        ${OMPL_INCLUDE_DIRS} )

add_executable(RigidBodyPlanning src/RigidBodyPlanning.cpp)
target_link_libraries(RigidBodyPlanning ${OMPL_LIBRARIES} )

基础知识

绪论

  • ompl包括sample-based 运动规划器,以及构建新规划器的工具集合,用户还可使用前段工具ompl.app。
  • 熟练使用后,用户可以使用这个框架开发本身的规划算法功能,如sate sampling, collision, nearest neighbor searching.

Sampling-based Motion Planning

  • 机器人运动规划的目的在于:“从起点位姿到终点位姿,而且知足全部外部和内部约束”,当机器人拥有较多的自由度时,解算将变得很困难。
  • 以经典的运动规划问题移动钢琴为例,在这个问题中,钢琴有六个自由度(x, y, z, roll, pitch, yaw),为了解算这个问题,咱们必须计算出一个包含钢琴六个参数的数据集合,该数据集合被时间参数化,而且各个参数对于时间的改变应该是连续的。(从一个配置空间(starting configuration)移动到另外一个配置空间(goal configuration),同时要知足避障的内,外部约束条件),这个问题已经被证实是一个PSPACE-hard 问题,解算很是困难。

规划理论的历史进程

  • 精确的和近似的地图单元分解(graph-search)(表明:A*算法)
    在某些例子中,能够将机器人的工做空间根据有无障碍分解成离散的栅格,这些分解能够建模为一个图(roadmap or graph)。根据这个图,问题变成:将一个点(机器人抽象而来)从一个栅格(包含起点)移动到另一个栅格(包含终点)。这种规划的问题在于,当机器人拥有非线性动力学特性时(机器人不知道如何从一个栅格移动到另外一个栅格,好比汽车,先锋机器人因为能够原地旋转,则不存在这个问题),路径规划是失败的。并且,更多的时候,状态空间是多维的,尤为是机器人运动内部有约束时,好比汽车(汽车有不少弯就拐不过去)。再次,状态空间分解空间复杂度很是大。
  • 基于控制的方法(控制的典型特征是反馈环节feedback loop)
    基于控制的方法尝试对系统进行建模,使用控制理论让系统沿着具体轨迹移动。这种方法在连续空间工做,而且拥有反馈环。基于控制的方法的优势是很是快速,能够在线规划。缺点是在复杂环境下不可以很好地计算指望的可行解。(关节空间规划,笛卡尔空间规划,直线插补,圆弧插补,样条曲线插补)
  • 人工势场法
    典型的人工势场法在工做空间的每一个点计算一个函数,计算出的值做为这一点的斥力(或吸引力)。将机器人抽象为一个点,在势场图中沿梯度降低方向到目标点。优势是,能够考虑机器人上的多个点的动做,并且实时性好。缺点是,容易在梯度降低过程当中陷入局部极小值。并且,理论上人工势场函数能够在任意维数的状态配置空间构造,这样就和解决原始问题同样了(Ideally the field would be constructed in the state space of the system, but this is equivalent to solving the original problem)。有一些简化方法使用了导航函数,保证人工势场拥有全局最小值。
  • 随机/几率规划方法
    这种方法被证实很是有用。在人工势场中添加布朗运动能够有效跳出局部极小区域。
    另外,基于采样的规划方法,使用了随机化,采样和几率的方法,在高自由度系统或复杂动力学场景中很是有效。ompl便是这样的一种库,并且部署在ROS和moveIt!中。

基于采样的运动规划

  • 基于采样的规划经过在机器人的状态空间中采样,来快速和有效的回应规划请求,特别是在复杂的约束和系统下尤为好用。传统方法每每空间和时间复杂度都很是大,在高维空间中每每没有什么用处。基于采样的方法在配置空间中搜索可行的状态点,而且继续经过采样链接这些状态点。这样能够产生足够灵活的可行解,而且是几率彻底的,几率彻底意味着,若是解存在,那么随着采样次数逐渐增大,可行解必定能够找到。不过,基于采样的方法没法确认一个问题不存在解。

一些定义

  • 工做空间:机器人操做的物理空间,工做空间的边界被认为是障碍
  • 状态空间:机器人的参数空间。参数空间包括全部的机器人在工做空间中的状态配置,状态空间中的一个点就是一个状态,注意状态空间多是多维的
  • 自由状态空间:状态空间的一个子集,在这个子集中的每一个状态都是无障碍的
  • 路径:状态空间中的连续状态点。若是路径中的每一个点都是无障碍的,那么这个路径也是无障碍的。
    因此,基于采样的规划方法的目标是:在状态空间中找到一个无障碍的路径。接下来介绍两种主要的基于采样的规划器。

几率地图(PRM)

  • PRM是第一个基于采样的规划器,这种方法使用在状态空间中随机采样的方法构建roadmap,这种roadmap很像城市街区地图。
  • 均匀采样,并链接起来,构形成roadmap,存储在图数据结构中。
    • 须要注意的是:状态空间历来都不是显式定义的,因此必需要有障碍检测模块,每一次采样都要进行check,只有通过检查的才可以保留下来
    • 有不少不一样的采样的方法,改进采样策略每每颇有用
  • 一旦采样达到必定的数量,就开始构造边,标准RPM会对每个采样点,搜索周围K临近点(在以前的采样点中找),使用局部规划器找到最短无障碍路径,局部规划器直接在这些采样点间进行插值(如直线差补),而后在这条直线中以必定的分辨率进行障碍检测,若是没有障碍点,那么这个边就做为合格边加入到roadmap中。
  • 一旦roadmap构造彻底,那么规划就成为链接起点和目标点的roadmap。
  • 而后对这个roadmap进行图搜索,执行最短路径搜索

基于树的地图(RRT,快速随机树搜索)

  • 现有的不少基于采样的规划器在自由状态空间中构造了树型结构,这种树形结构与上节讲的PRM很像,PRM的图带有环,这里的是树而已。因为基于树的规划器太多(RRT,EST,SBL,KPIECE),这里就不详细讲某一个,而是讲一讲大体的框架。
  • 将机器人的起点当作一个树根,随机采样的点做为这个树的一个节点,树采用一种启发式扩张方法,这种启发式搜索条件每每就命名了这个方法,若是一个节点与树之间有无障碍路径,则将这个节点并入到树中。
  • 尽管采样过程可能永远也不会采样到达机器人的目标状态,规划器每每都会设置有偏(bias)的扩张搜索,一旦将目标状态点并如到树中,路径规划就结束了。

PRM和RRT的不一样

  • PRM须要构造覆盖所有状态空间的一个图,而后再链接起点和终点,而RRT不须要,只是逐渐的扩张树,直到终点。
  • 因此,RRT特别适合于一次请求的规划,由于它构造的树并不包含其余目标点的信息,就算要求其到另一个点,它也要从新进行树的扩张和生长。而PRM只须要构造一次便可。
  • Controls are usually directed commands, and require a specific pre-condition in order for
    a particular control to be valid. Tree-based methods, on the other hand, excel at planning with
    complex dynamics because of the directed, acyclic nature of the underlying data structure. Control
    information can be encoded for each edge of the tree, with the vertices of the tree satisfying the
    prerequisites for the valid controls.(没看懂)

总结

  • 基于采样的规划方法所需内存更少
    • 由于其不须要对状态空间进行显式表示
    • 树和图等的数据结构保障了查找的效率和质量

基于采样的规划的基本组成

  • 基于采样的规划特别适合在高维空间和复杂动力学环境下的路径规划,有不少中不一样的规划器及其附件,可是核心是:在一次采样中,发生了什么?

障碍检测

  • 障碍检测很是有用。局部规划器在寻找无障碍路径时会用到(见PRM),在采样过程当中也会用到。在复杂的高维系统中,显式表示状态空间会很难,可是规划器去不用去能够构造它,由于障碍检测执行了这一功能,若是没有障碍,则这个状态配置是合法的。
    • (这里“障碍”应该是广义的,不只应该是物理障碍,还应该包括机器人在现有动力学约束下没法到达的状态区域)

最临近搜索

  • 前面已经提到,规划算法须要找出离当前状态最近的一个状态,寻找无障碍路径。当须要判断机器人的两个状态的距离时就要用到这个方法。
    • 可是,在高维空间中,欧式距离已经不能很好地计算。K-d树数据结构提供了一种方法。

OMPL

  • OMPL核心算法库将这些都实现了!

下期预告

  • 使用ompl.app
相关文章
相关标签/搜索