Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

ROSでPython3を使う方法

More than 1 year has passed since last update.

背景

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

tnjz3
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away