天天看點

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中觀察攝像頭與地圖間的關系

跑這個程式就好了,結果如下:

python3 與python2混用操作測試:

可以運作python2的tf,也可以運作python3的osqp