Ubuntu(16.04+20.04)安装OMPL(app+python)机器人运动规划库

Ubuntu(16.04+20.04)安装OMPL(app+python)机器人运动规划库


前言:

OMPL安装总结教训如下

  • 实验室电脑安装编译OMPL,全程耗时10分钟左右;自己的笔记本电脑安装编译OMPL,全程耗时8小时以上.
  • 实验室电脑是ubuntu20.04,我的笔记本是ubuntu16.04
  • 后来我给笔记本重装成ubntun20.04,安装和编译速度也很快,阅读安装脚本可以发现,高版本的ubuntu,会安装加速编译Python-binding的库,因此速度自然就比较快
  • 需要注意的是,编译过程中需要占用较大的内存,如果内存不够,g++会报错,最好编译前就分多一点swap空间,具体方法参考下文
  • OMPL的安装脚本(官网链接)中都是用sudo apt-get installsudo pip install来下载所需依赖的。因此这也就意味着OMPL的python默认是系统python,以及OMPL用的并不是虚拟环境中的python。我尝试过修改安装脚本和下载源码安装,但是都因为安装依赖的问题而失败了。
  • 事实上,官网的安装脚本中都有所需依赖的安装过程,而无需自行安装依赖。
  • 如果非要用源码安装OMPL,或者非要用虚拟环境的python安装OMPL,那么就得在自己的虚拟环境中按照脚本一个一个地安装所需的依赖,然后进行编译cmakemake -j 4 update_bindings。然而这似乎很难保证最终能够安装和编译成功,会有各种报错。因此,我放弃了在python的虚拟环境中安装OMPL,而直接用官网的安装脚本(官网链接)安装(需要科学上网)

安装脚本解析:

  • 安装通用依赖
    common

  • 安装python-binding依赖,可以看到高版本的ubuntu会安装可以加速python-binding编译的库
    python

  • 安装app依赖
    app

  • 安装ompl
    ompl


安装流程:

Ubuntu20.04

  • 官网下载安装脚本
  • 直接运行安装脚本即可
  • 安装流程都在脚本中写好了,无需做任何修改
  • 这是我实验室的电脑,因此直接运行脚本,10分钟左右就好了

Ubuntu16.04

  • 官网下载安装脚本
  • 如果想将OMPL安装在ubuntu16.04的系统python3,而不是系统python2上面,则在安装脚本做如下修改:
# the default version of Python in 17.10 and above is version 3
if [[ $ubuntu_version > 1404 ]]; then
    PYTHONV=3
fi

这里本来是$ubuntu_version > 1704,被我改成了$ubuntu_version > 1404,于是在ubuntu16.04的系统中就默认用系统python3去安装OMPL了

  • 如果想要编译更快一点,可以采用多线程,也就是在第9496行的位置改为:make -j 4 update_bindings,如面代码中所示
    if [ ! -z $PYTHON ]; then
        # Check if the total memory is less than 6GB.
        if [ `cat /proc/meminfo | head -1 | awk '{print $2}'` -lt 6291456 ]; then
            echo "Python binding generation is very memory intensive. At least 6GB of RAM is recommended."
            echo "Proceeding with binding generation using 1 core..."
            make -j 4 update_bindings
        else
            make -j 4 update_bindings
        fi
    fi
  • 如上面中echo所述,编译OMPL是有内存要求的,事实上就算内存大于6GB,后面可能还会报错:g++: internal compiler error: Killed (program cc1plus)
    编译时内存不足

  • 解决办法如下:解决办法参考。如果分配的空间不够,那么可以增加count

sudo dd if=/dev/zero of=/swapfile bs=64M count=16
#count的大小就是增加的swap空间的大小,64M是块大小,所以空间大小是bs*count=1024MB
sudo mkswap /swapfile
#把刚才空间格式化成swap格式
sudo swapon /swapfile
#使用刚才创建的swap空间
  • 编译完成后恢复swap:
sudo swapoff /swapfile
sudo rm /swapfile
  • 我的笔记本电脑是ubuntu16.04,最后安装编译成功,全程花了8+小时。事实上,前面因为探索安装方法而失败了很多次,大概浪费了两三天的时间,哭了。

后记

  • 由于我需要在ROS中使用OMPL,当然ROS自带OMPL,但是自带版本功能不全。因此我想独立地在ROS 中使用OMPL的python版本。
  • 然而ubuntu16.04的ros只支持python2,当然也可以用pyenv新建python3的环境,但是这就是ompl的系统python3不一样了。
  • 为什么不用ubuntu16.04的系统python3呢?这样似乎就可以既使用OMPL又使用rospy,然而ubuntu16.04的系统python的版本都过于老旧,其中的pip(pip和pip3)也是,因此升级pip后,pip就不能使用了,会遇到各种问题。并且ubuntu16.04的ros中的rospy是默认系统python2的,就算在系统python3中安装了rospy,我觉得大概率也用不了,ubuntu16.04的ros想要在python3中使用rospy,办法就是pyenv或者virtualenv的虚拟环境等
  • 综上所述的各种问题,让我决定放弃ubuntu16.04,直接重装ubuntu20.04。ubuntu20.04只有python3,ros的python也是python3。
  • 当然我的机器人(Jetson TX2)上面运行的是ubuntu16.04,不过ROS存在多机器通讯的机制,完全不用担心自己电脑的ROS版本与机器人ROS版本不一致的问题,并且可以将复杂的计算程序跑在自己的电脑或者服务器上面,减轻了Jetson TX2的计算负担,当然这也会导致一定的通讯延时。
  • 我笔记本重装了ubuntu20.04后,安装OMPL全程就花了10分钟左右的时间,还是新版本香

版权声明:本文为qq_42674415原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。