ROS提供了许多Python的包可供使用,并且这些包是不需要安装ROS就可以直接使用的,比如在Windows系统中想对bag包进行处理,但Windows系统并不支持ROS,这时就可以直接在conda里面直接安装ROS的一些工具包。第一部分首先讲解了如何在没有安装ROS系统中安装和使用这些包,第二部分讲解如果我们已经在Ubuntu系统中安装了ROS之后应该如何正确的调用这些包。调用rosbag包的时候有很多雷点,记录下来帮大家避免。
首先,我们需要在Windows或Ubuntu系统中创建一个conda虚拟环境
conda create -n ros_ws python=3.x
虚拟环境的名字可以自定义,python版本可以根据需求安装,但是安装ROS的包要根据安装的python版本来进行下载。
进入虚拟环境
conda activate ros_ws
安装需要的bag包
pip install rosbag -i https://rospypi.github.io/simple/
这一步,-i表示的是指定下载源,如果不指定,可能会安装错误。因为pip是有默认的源,我自己设置了pip的源为阿里的源,在安装包的时候就会去阿里源寻找对应的包,如果不指定rospypi这个源,可能会下载到重名的但不正确的包。比如genpy这个包,在后面会遇到。
经过这一步就可以成功安装rosbag包。但也有可能会出现rosbag包已存在的情况,这将在已安装了ROS的环境中出现,我们会在第二部分讲解遇到这种情况的解决方案。
此时进入python环境,输入
import rosbag
此时有可能报错缺失某些包,比如
No module named 'roslib'/'genpy'/'genmsg'/'pycrypto'/'roslz4'...
这时首先应该打开上面的网址rospypi, 在这个网站里面查看缺失的包是否存在,如果存在,我们的安装指令就和安装rosbag一致:
pip install roslib -i https://rospypi.github.io/simple/
pip install genpy -i https://rospypi.github.io/simple/
pip install genmsg -i https://rospypi.github.io/simple/
pip install roslz4 -i https://rospypi.github.io/simple/
注意genpy一定要用-i,因为阿里源有一个重名的genpy包,但完全不一致。
pycrypto这个包不在rospypi这个源里,所以直接pip即可
pip install pycrypto
所有的包都安装完成之后就可以直接
import rosbag
此时应该可以成功。
在目前大部分的安装ROS的教程中都会在最后一步执行
gedit ~/.bashrc
source /opt/ros/melodic/setup.bash
这一步可以让我们直接在使用ROS的时候不需要source直接就可以运行roscore、rosbag等指令。
这很方便,但是他在这一步向我们的系统环境中添加了一句
export PYTHONPAT=/opt/ros/melodic/lib/python2.7/dist-packages
这相当于我们所有的Python环境都默认额外加了这个环境,这里面也会有一个rosbag,但这个rosbag对应的是python2.7版本,如果你使用的python版本就是python2.7,那么则不需要再继续看下去,只需要根据需求安装缺少的包即可。但如果使用的是python3.x及以上的版本,就会报错,解决方案如下。
其实解决方案非常简单,那就是我们进入
gedit ~/.bashrc
# source /opt/ros/melodic/setup.bash
将下面的一行注释掉,这时我们在按照上面的步骤进行安装需要的包即可。还有可能遇到的问题就是如果不想用pip进行安装(有可能打不开上面那个网址),也可以用conda安装。
比如我们要用conda安装rosbag,在conda默认的channel里面是没有这个包的,所以指令应该改成下面的:
conda install -c conda-forge ros-rosbag
这样或许能够安装成功,但也有可能卡在solving environment这里一直转,那么还有备选方案
我们可以访问anaconda官网,这里可以搜索自己需要的包,比如搜索rosbag,搜索出来找你需要的,一般是找名字对应你的ros版本的,并且最好是官方的而且下载数量比较多的,那就是正确的。点击进去后,点击Files,在里面找到你需要的**(一定要注意!!下载的时候要看清楚对应的PYTHON版本!!!)**,并下载。
下载完成之后,将下载的tar,bz2放到anaconda/pkgs里,并执行下面的指令进行安装。
conda activate ros_ws
cd home/anconda3/pkgs
conda install --use-local ros-rosbag-1.14.3-py36h398749e_1.tar.bz2
至此已经安装完成,此外不只是ros的包,其他所有无法用conda install直接安装的都可以通过这种方法安装。很方便。