坦白说,这个OMPL系列实际上就是翻译官方教程。我以前也翻译过一些库的官方教程,总是开工后才发现网络上已经有前辈做过了,如ROS、Moveit!等中文博客资料多如牛毛,不再需要什么教程,于是就不怎么做这种重复工作了。最近学习OMPL,发现虽然这个库用途广泛,但有关的中文教程却少得不像话。考虑到运动规划也是一个不小的研究领域,针对小白的入门介绍还是有必要的。于是简单翻译了官网教程,结合了我的踩坑过程发出来,希望对大家有些许帮助。如果相关的其它资料,也希望大家分享学习。

 

1 简介

 

开源运动规划库(OMPL)是一个包含许多常用运动规划算法(以基于采样的算法,如RRT、PRM为主)的C++库。也是大名鼎鼎的机器人工具集Moveit!所默认采用的运动规划算法库。

 

The default motion planners for move_group are configured using OMPL and the MoveIt interface to OMPL by the MoveIt Setup Assistant. -----Moveit! Concepts Documentation

通常进行ROS机器人研究时,我们直接使用Moveit!的接口就可以了。但Moveit!是一个同时集成运动学、运动规划、碰撞检测、3D 感知、导航等的庞大工具集,如果我们只需要研究和使用运动规划功能,那么单独使用OMPL也是不错的选择。

 

                                                                OMPL用于运动规划

 

2 安装

 

本文所使用的系统版本:ubuntu 18.04
官方声称通过测试的版本:ubuntu 14.04, 15.10, 16.04, 17.10, 18.04

官方网站提供了源码安装和二进制安装两种方法。我采用二进制安装方法并未成功,因此只介绍源码安装。

 

2.1 下载安装脚本

 

从该链接下载脚本:ompl.kavrakilab.org/ins

 

得到名为install-ompl-ubuntu.sh的脚本文件

 

2.2 修改权限

 

从脚本所在目录打开终端,执行以下命令:

chmod u+x install-ompl-ubuntu.sh

 

2.3 运行安装脚本

 

根据不同的需求,有三种可选的安装命令。

 

(1)仅C++版本

./install-ompl-ubuntu.sh

 

(2)C++版本并绑定了Python接口

./install-ompl-ubuntu.sh --python

 

(3)C++版本并绑定了Python接口,同时带有可视化界面OMPL.app

./install-ompl-ubuntu.sh --app

 

2.4 说明

运行脚本时,会下载源码包omplapp-[版本号]-Source.tar.gz ,该过程需要科学上网。如果没有条件,可用如下方法解决:

 

进入如下镜像网站下载最新版本的源码包(发文时为1.4.2),将其放置在install-ompl-ubuntu.sh的同级目录下。

 

替代镜像网站​www.mirrorservice.org

打开install-ompl-ubuntu.sh,将install_ompl()下的

wget -O - https://bitbucket.org/ompl/ompl/downloads/$OMPL-1.4.2-Source.tar.gz | tar zxf -

 

修改为(注意版本号对应)

tar zxf $OMPL-1.4.2-Source.tar.gz

 

接下来按照2.3节操作即可

 

2.5 测试

如果安装成功,在ompl-1.4.2-Source/build/Release/bin/中将会看到大量示例可执行文件,在该目录下打开终端,运行:

./demo_RigidBodyPlanning

 

将会看到以如下信息开头的运行结果,信息的含义将会在下一章中讲到。

 OMPL version: 1.4.2
 Info:    RRTConnect: Space information setup was not yet called. Calling now.
 Debug:   RRTConnect: Planner range detected to be 1.006980
 ...

 

3 简介

官方文档中提供了OMPL库常用基础类的关系图,机翻如下。

 

 

其中箭头表示类的包含关系,但不表示数据的传递关系,即使不存在箭头,不同类之间也存在函数的调用。类的颜色代表其在一个完整运动程序中的必要性,见图例。

 

下一篇文章中我们通过实例来说明上述接口的用法。

 

参考资料

[1] OMPL官方文档