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 install
和sudo pip install
来下载所需依赖的。因此这也就意味着OMPL的python默认是系统python,以及OMPL用的并不是虚拟环境中的python。我尝试过修改安装脚本和下载源码安装,但是都因为安装依赖的问题而失败了。 - 事实上,官网的安装脚本中都有所需依赖的安装过程,而无需自行安装依赖。
- 如果非要用源码安装OMPL,或者非要用虚拟环境的python安装OMPL,那么就得在自己的虚拟环境中按照脚本一个一个地安装所需的依赖,然后进行编译
cmake
,make -j 4 update_bindings
。然而这似乎很难保证最终能够安装和编译成功,会有各种报错。因此,我放弃了在python的虚拟环境中安装OMPL,而直接用官网的安装脚本(官网链接)安装(需要科学上网)
安装脚本解析:
安装通用依赖
安装python-binding依赖,可以看到高版本的ubuntu会安装可以加速python-binding编译的库
安装app依赖
安装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了
- 如果想要编译更快一点,可以采用多线程,也就是在第94和96行的位置改为:
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版权协议,转载请附上原文出处链接和本声明。