問題:在使用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