LoginSignup
28
24

More than 3 years have passed since last update.

ROSでPython3を使う方法

Posted at

背景

ROS1は公式にはPython2.7にしか対応していない。
けどいまさらPython2というのはやりづらい。
Web上にはソースからPython3でインストールする例が多いけど、時間がかかるし、なんだかんだうまくいかない。

基本

ここを抑えておけばエラーが起きても対応できるし、応用もできる。

  • ROSのツール類(roscore, roslaunch, rosrun, catkinなど)はやっぱりpython2じゃないとだめ
  • rospyだとかmsgs類(std_msgsとか自作のmsgs)などROSノード実行に必要なものははpython3でも動く
  • ROSのツール類はshebangにより/usr/bin/pythonで起動する
  • 以上からROSツール類は標準のpython2.7(/usr/bin/python)で実行され、python3で書かれた自作ノードは仮想環境上のpython3(/home/xxx/anaconda3/bin/pythonなど)で実行される状態が幸せ

HOW

Install

まず公式の通りにインストールする。
その際に仮想環境(pyenv, conda)等からは抜けておくこと。
ubuntu 18.04の場合python2.7がそもそも入ってなかったりだけど大丈夫。
pythonと打って標準の3.6が起動する状態でOK
http://wiki.ros.org/melodic/Installation/Ubuntu
この時点でpythonコマンドのリンク先がpython2.7になっているはず

環境構築

catkin_wsの作成も公式通り
この場合も仮想環境からは抜けておくこと
http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment

Python3に切り替え

condaなりpyenvなり(私はcondaを使ってます)python3に切り替える。(pythonとうって仮想環境上のpython3が起動する状態)

このときecho $PYTHONPATHすると/opt/ros/melodic./xxx/catkin_ws内のdist-packageが設定されているはず。
この状態でroslaunchなりrosrunなりすると、roslaunch,rosrun自体はpython2.7で実行されるが、ROSノードは仮想環境上pythonで実行される。

当然この状態だとROSノード実行に必要なものがpython3の環境に含まれていないのでエラーが出る(rospkgなど)がpython3のpipでインストールできるのでエラーが無くなるまでpipでインストールする。

その他

この状態だとpython2で書かれたノードもpython3で実行されてしまうけど、仮想環境を抜けるなりpython3に書き直すなりすればOK。

環境

Ubuntu 18.04
python3.7(Anaconda 3.7)
ROS melodic

28
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
24