您当前的位置:首页 > 计算机 > 系统应用 > Linux

Ubuntu ROS与Anaconda3配合使用解决py2/py3问题

时间:02-03来源:作者:点击数:

前言:

ros的很多命令都是基于python的文件,比如roslaunch,rospy,rospkg其实都是python文件,所以说ros基于的哪个python版本非常重要。我们运行ros命令其实就是运行这些文件。


基本常识

ros-melodic是基于py27写成的。ros-noetic是基于py38。

通过source /opt/ros/<ROS_VERSION>/setup.zsh或者source /opt/ros/<ROS_VERSION>/setup.bash设置了诸多环境变量,其中就包括$PYTHONPATH,此处$PYTHONPATH=/opt/ros/noetic/lib/python3/dist-packages在该路径可以找到很多ros包和ros命令。

由于anaconda也提供python环境,所以可以在anaconda中运行基于任何python版本的ros。

anaconda的$PYTHONPATH=/home/up/anaconda3/envs/<YOUR_ENV>/lib/python2.7(3.8/3.x)/site-packages


听起来很厉害!

用起来并不顺畅~

目前只是基本功能可用


anaconda中ros包安装

使用anaconda中的ros,必须安装相关ros包。在这个网址可以搜到anaconda package

执行类似conda install -c conda-forge ros-rospy命令,就可以安装ros包。

-c conda-forge指明了源,这个源安装的都是基于py27的,conda list可以看安装的conda包。

网址中还有一个conda install -c robostack ros-melodic-rospy,其中-c robostack指明了使用robostack的源,是非官方组织开发anaconda项目。基本上robostack开发的ros包是noetic的,并据他们称,依据conda开发一套完善的ros-noetic的包,这样在ubuntu18上安装他们的conda也可以使用ros-noetic。


这样一来,组合会非常灵活。

系统:ubuntu18 + ros-melodic可以运行py2的ros相关程序,如果加anaconda robostack中的ros-noetic则又可运行py3的ros程序。

系统:ubuntu20 + ros-noetic可以运行py3的ros相关程序,如果加anaconda conda-forge中的ros相关包则又可运行py2的ros程序。

需要注意:启动终端时候自带的~/.bashrc或者~/.zshrc中不要加source /opt/ros/<ROS_VERSION>/setup.bash,不然会直接将系统的$PYTHONPATH加入,而无法使用anaconda中$PYTHONPATH

所以最好进入一个空终端后再export PYTHONPATH

另外如果使用anaconda中的ros包,因为没有source /opt/ros/<ROS_VERSION>/setup.bash这样方便的命令,我们需要手动加入ros的环境变量。下面以加入py2的ros包为例。

export ROS_PACKAGE_PATH=/home/up/anaconda3/envs/<YOUR_ENV>/share
export ROS_MASTER_URI="http://localhost:11311"
export ROS_DISTRO=“melodic”

issue

目前在anaconda中开启roscore或者roslaunch,会有找不到rosout的错误,但如果仅仅调用了rospy,std_msgs等基本ros包是没有问题的。

比如我的运行EAI小车的python文件必须使用py2的ros,那么在我的ubuntu20.04的电脑创建

conda create -n car_py2 python=2.7环境。

driver.py

#!/home/up/anaconda3/envs/car_py2/bin/python2
import rospy
import sys
from nav_msgs.msg import Odometry
....
....

然后运行python2 driver.py,因为anaconda中rosout我调用不了,所以尽管roscore可运行,但是roscore依赖rosout。roscore也不能在anaconda中运行。

但是!!

可以在非conda环境的终端通过source /opt/ros/<ROS_VERSION>/setup.bash后,运行ros-noetic的roscore。

非常棒!

这样只有需要py2的程序在conda的终端运行,其他ros命令都可以在非conda环境的终端中运行。包括rosparam load

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门