問題:在使用osqp庫編寫MPC程序後,小車坐標需要tf轉換,而tf庫僅能在python2環境下使用,造成了python環境沖突
解決思路:比較安全的思路是,創建一個新的工作空間,配置為python3的環境後,source一下這個工作空間,即可運行雙環境。
這裡有一個已經創建好的工作空間:
鏈接:py3_ws
提取碼:pyws
sudo apt install python3-catkin-pkg-modules python3-rospkg-modules python3-empy ipython3
pip3 install numpy
因為是在我的Linux系統上弄得,所以CMakeLists.txt裡面的路徑會與你的系統路徑沖突,所以刪除,重新進行編譯
cd py3_ws/src
sudo rm CMakeLists.txt
如果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
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