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的程序了