目录

ROS_melodic与python3兼容

ROS_melodic与python3兼容

项目场景:

Ubuntu18.04的ros版本是melodic,一般只能兼容python2.7;实际使用中,需要rosrun运行python3的程序。


问题描述

这里是一个使用socket库实现can通讯的程序,直接rosrun出现报错

(‘Unable to Connect to Socket Specified: ‘, (‘can0’,))

(‘Error:’, AttributeError("‘module’ object has no attribute ‘AF_CAN’",))

Unable to Send CAN Frame.

(‘Error: ‘, AttributeError("‘NoneType’ object has no attribute ‘send’",))

Unable to Receive CAN Frame.

(‘Error: ‘, AttributeError("‘NoneType’ object has no attribute ‘recvfrom’",))

Error Enabling Motor!


原因分析:

代码编写的时候使用的是python3的socket库,可能导致部分代码错误


解决方案:

通过anaconda建立一个python3虚拟环境,在虚拟环境中rosrun该程序(下面省略了一些可能存在的source步骤)

1、安装anaconda:

官网或镜像源下载安装包

相关链接方法很多,不在此赘述。我安装的是anaconda2,对应系统默认python版本为2.7

bash Anaconda2-2019.10-Linux-x86_64.sh
(或sh Anaconda2-2019.10-Linux-x86_64.sh) 

2、创建虚拟环境,激活虚拟环境

conda create -n env3.6 python=3.6
#激活虚拟环境
conda activate env3.6
#退出虚拟环境
conda deactivate
#删除虚拟环境
conda remove -n envx.x(虚拟环境名称) --all
#查看安装了哪些包
conda list

3、安装需要的包以及ros的一些依赖

安装自己需要的包:(例如本例程需要用的python-can,bitstring等)

conda install [pkgname]

卸载包:

conda uninstall [pkgname]

注意一定要安装ros的一些依赖包,否则rosrun会报错:

conda install numpy pyyaml rospkg

4、配置完成后激活虚拟环境,应该可以rosrun python版本为3.x的程序了