问题:在使用osqp库编写MPC程序后,小车坐标需要tf转换,而tf库仅能在python2环境下使用,造成了python环境冲突
解决思路:比较安全的思路是,创建一个新的工作空间,配置为python3的环境后,source一下这个工作空间,即可运行双环境。
1.创建工作空间py3_ws,克隆源码geometry和geometry2到src中这里有一个已经创建好的工作空间:
链接:py3_ws
提取码:pyws
3.numpy安装sudo apt install python3-catkin-pkg-modules python3-rospkg-modules python3-empy ipython3
4.删除工作空间中的CMakeLists.txtpip3 install numpy
因为是在我的Linux系统上弄得,所以CMakeLists.txt里面的路径会与你的系统路径冲突,所以删除,重新进行编译
5.重新编译cd py3_ws/src
sudo rm CMakeLists.txt
如果python3的版本是3.5或者其他的,首先要安装其他版本的python,然后将下面的3.6改为自己的python版本。
6.source工作空间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
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中观察摄像头与地图间的关系
跑这个程序就好了,结果如下:结果tf转换结果
可以运行python2的tf,也可以运行python3的osqp



