在ROS中使用Python3

2021-08-21 06:50:18 字數 3400 閱讀 4458

執行測試平台:小強ros機械人

當前ros是只支援python2.7的。python3的支援在ros的計畫中,詳細的可以看這裡。簡單說來就是要到2023年ros的n版本才能完全支援python3。

首先要了解為什麼ros不能支援python3.對於純的python**同時支援python3和python2.7是比較容易的,基本上ros的**也都是支援的。問題在於包含了c++或者c的那部分python**。python2.7和python3的c module**相差很大。一次只能編譯其中的一種版本。而且很多module沒有做好python3的支援。在python3環境下也無法編譯。這就是ros無法支援python3的原因。目前ros的核心包都是支援用python3從原始碼編譯的。但是官方並沒有發布python3的軟體包。所以想要使用的話要自己編譯。下面介紹兩種使用python3的方法。

使用python3和python2.7的混合環境

原理:使用virtualenv建立乙個python3的環境。然後在這個環境中編譯安裝自己需要的軟體包。在引用軟體包的時候,如果沒有對應的python3的軟體包,會自動的去python2.7的環境裡面找。這樣很多軟體包都是可以通用的。當然對於沒有做好python3支援的軟體包也是沒法用的。

下面以geometry2為例子

sudo

apt-get

install python3-dev

mkdir catkin_ws # 建立工作空間

cd catkin_ws

mkdir src

cd src

git clone

git clone 2

cd..

# 建立虛擬環境

virtualenv -p /usr/bin/python3 venv

source venv/bin/activate

pip install catkin_pkg pyyaml empy rospkg numpy

catkin_make

source devel/setup.bash

這樣就能夠成功在python3下使用tf的相關函式了。

執行python3程式

python 3.5.2 (default, nov 23 2017, 16:37:01) 

[gcc 5.4.0 20160609] on linux

>>> import tf

>>> tf.__file__

'/home/xiaoqiang/desktop/catkin_ws/devel/lib/python3/dist-packages/tf/__init__.py'

>>> import tf2_py

>>> tf2_py.__file__

'/home/xiaoqiang/desktop/catkin_ws/devel/lib/python3/dist-packages/tf2_py/__init__.py'

>>>

可以看到我們的tf已經是在python3的路徑下了。

從原始碼安裝ros

首先把ros都解除安裝乾淨

sudo apt-get purge ros-*

sudo apt-get autoremove

建立ros工作空間

mkdir ros
建立python3環境

cd ros

# 把系統預設python替換成python3

sudo rm -rf /usr/bin/python

sudo ln -s /usr/bin/python3.5 /usr/bin/python

sudo apt install python3-pip

安裝ros的編譯基礎軟體包

sudo

apt-get

install python3-rosdep python3-rosinstall-generator python3-wstool python3-rosinstall build-essential

sudo pip3 install catkin_pkg

rosinstall_generator desktop --rosdistro kinetic --deps --tar > kinetic-desktop.rosinstall

wstool init -j8 src kinetic-desktop.rosinstall

# 如果上一步有失敗的,執行

wstool update -j 4 -t src

這裡安裝的是kinetic版本。其他版本需要調整對應的引數。

安裝軟體包依賴

rosdep install --from-paths src --ignore-src --rosdistro kinetic -y

sudo

apt-get

install libtbb-dev python3-pyqt5

sudo pip3 install empy numpy defusedxml netifaces

# 修復 16.04 libboost_python3找不到的問題

sudo

ln -s /usr/lib/x86_64-linux-gnu/libboost_python-py35.so /usr/lib/x86_64-linux-gnu/libboost_python3.so

編譯工作空間

./src/catkin/bin/catkin_make_isolated --install -dcmake_build_type=release
新增環境變數

在~/.bashrc裡面新增

source /home/xiaoqiang/documents/ros/install_isolated/setup.bash
這裡是小強的路徑,你要根據自己的工作空間的位置進行修改。

之後再重新開啟乙個終端就可以了。

in [2]: import tf2_ros

in [3]: tf2_ros.__file__

out[3]: '/home/xiaoqiang/documents/ros/install_isolated/lib/python3/dist-packages/tf2_ros/__init__.py'

in [4]:

可以看到現在的ros使用的python已經是python3了。

總結雖然以上兩種方法都可以使用python3,但是推薦還是使用第一種方法。第二種方法使用起來比較費事,而且一旦使用了python3就沒辦法使用pyhon2.7了。有些軟體包並沒有做好pyhon3的支援。這樣會在使用中產生不少問題。

python3在flask中使用mysql報錯

今天在python3 flask中使用mysql 無論怎麼弄都報錯 importerror no module named mysqldb 按照 stack overflow 上 說pip install mysqlclient或者pip install mysql python 結果都安裝不上,最...

在ROS中使用nodelet

nodelet的作用 減少在ros中傳遞資料的延遲。在同乙個程序內,執行多個node,通過指標傳遞資料,使得程序內訊息傳遞時不產生複製成本。下面是乙個使用nodelet原始檔的例子 namespace nodelet tutorial math private virtual void oninit...

在python3中使用pypcd讀取點雲資料

pypcd的原始碼可以在找到。通過下面的指令可以安裝。git clone在這裡 pull 9可以看到解決python3相容問題的乙個方案。將它fetch到本地。cd pypcd git fetch origin pull 9 head python3 git checkout python3執行下列...