本文主要是介绍python3 与python2混用操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题:在使用osqp库编写MPC程序后,小车坐标需要tf转换,而tf库仅能在python2环境下使用,造成了python环境冲突
解决思路:比较安全的思路是,创建一个新的工作空间,配置为python3的环境后,source一下这个工作空间,即可运行双环境。
1.创建工作空间py3_ws,克隆源码geometry和geometry2到src中
这里有一个已经创建好的工作空间:
链接:py3_ws
提取码:pyws
2.安装python3依赖
sudo apt install python3-catkin-pkg-modules python3-rospkg-modules python3-empy ipython3
3.numpy安装
pip3 install numpy
4.删除工作空间中的CMakeLists.txt
因为是在我的Linux系统上弄得,所以CMakeLists.txt里面的路径会与你的系统路径冲突,所以删除,重新进行编译
cd py3_ws/src
sudo rm CMakeLists.txt
5.重新编译
如果python3的版本是3.5或者其他的,首先要安装其他版本的python,然后将下面的3.6改为自己的python版本。
catkin_make --cmake-args -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so
6.source工作空间
source py3_ws/devel/setup.bash
每次需要进行双版本混用的时候都要source一下这个工作空间,如果嫌麻烦,可以把这个命令加入到.bashrc文件中。
sudo gedit ~/.bashrc
在底部加入完整路径即可
source /home/zhz/gzrobot_ws/devel/setup.bash # 原有工作空间
source /home/zhz/py3_ws/devel/setup.bash # 新建立的工作空间
测试:
我们系统中有原有的工作空间(例:gzrobot_ws),还有一个新创建的工作空间py3_ws,我们只用在前者中进行操作就行了,在写python文件时,解释器选择python3。测试程序如下:
#!/usr/bin/env python3
# -*- coding=utf-8 -*-import osqp
import rospy
import tf
if __name__ == "__main__":rospy.init_node('test', anonymous=True) while not rospy.is_shutdown():rate = rospy.Rate(1)br = tf.TransformBroadcaster()br.sendTransform((0.0, 0.0, 1.0), tf.transformations.quaternion_from_euler(0, 0, 3.1415926/2), rospy.Time.now(),'camera','map')rate.sleep()
完成的功能是调用osqp库,建立tf坐标转换,在rviz中观察摄像头与地图间的关系
跑这个程序就好了,结果如下:
可以运行python2的tf,也可以运行python3的osqp
这篇关于python3 与python2混用操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!