背景
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