rospy on Python3
僕が今勤める会社は Chainer, CuPy, Optuna などのPython製オープンソースソフトウェアとして公開しているくらいですから、Pythonistaがたくさんいます。 PythonといえばPython3でしょうという暗黙の了解というか威圧感は否めません(笑)
残念ながらROS1のPythonバージョンの公式サポートは2のままですが、公式パッケージの一部はソースコードビルドすればPython3にも対応しているという噂は昔から囁かれていました。
https://github.com/ros/ros_comm/issues/1208#issuecomment-340605810
Python2自体のメンテナンスは2020年で終わります。残された時間は1年と少しです。それまでに
- ROS2のPython3ライブラリに全てのパッケージの実装を置き換える
- ROS2のPython3ライブラリでROS1のPython2ライブラリを再実装する
- ROS1のPython2ライブラリをPython3対応に修正する
のどれかが実現されなくてはなりません。1は1年では終わらないでしょう。それくらいROSエコシステムは巨大になってきました。現実的には2が進むと思われます。なので僕は3で進めてみましょう。
ソースコードビルド準備
まずは ros_comm
をビルドすることを第1目標とします。 rospy
がPython3で動くようになります。
- OS: Ubuntu 18.04
- ROS: Melodic
環境で進めます。基本的にはソースコードビルドによるインストール手順に従いますが、apt
インストールではPython2のライブラリがインストールされてしまうため、pip3
インストールして明示的にPython3のライブラリをインストールする必要があります。
http://wiki.ros.org/Installation/Source
1
2
3
4
5
6
7
8
sudo -H pip3 install -U trollius
sudo -H pip3 install -U rosdep rosinstall-generator wstool rosinstall
sudo rosdep init
rosdep update
mkdir -p ~/ros/melodic/src
cd ~/ros/melodic
rosinstall_generator ros_comm --rosdistro melodic --deps > melodic-ros_comm.rosinstall
wstool init -j4 src melodic-ros_comm.rosinstall
また、公式手順ではrosinstall_generator
に--tar
オプションをつけていますが、それでは以下のようなエラーが出ます。オプションを外しクローンに変更しましょう。
1
2
3
4
5
6
rosinstall_generator ros_comm --rosdistro melodic --deps --tar > melodic-ros_comm.rosinstall
wstool init -j4 src melodic-ros_comm.rosinstall
[catkin] Fetching https://github.com/ros-gbp/catkin-release/archive/release/melodic/catkin/0.7.14-0.tar.gz (version catkin-release-release-melodic-catkin-0.7.14-0) to /home/youtalk/ros/melodic/src/catkin
ERROR [vcstools] Tarball download unpack failed: file could not be opened successfully[/vcstools]
[class_loader] Fetching https://github.com/ros-gbp/class_loader-release/archive/release/melodic/class_loader/0.4.1-0.tar.gz (version class_loader-release-release-melodic-class_loader-0.4.1-0) to /home/youtalk/ros/melodic/src/class_loader
...
ビルド & 動作確認
ROS1が使うPythonのバージョンは環境変数で取得できるようです。一応確認した上で、依存ライブラリをインストール、catkin_make
と進めましょう。
1
2
3
4
echo $ROS_PYTHON_VERSION
3
rosdep install --from-paths src --ignore-src --rosdistro melodic -y
./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release
無事ビルドできたら後はもう動くはずです。
1
2
3
4
5
6
7
8
source ~/ros/melodic/install_isolated/setup.zsh
python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import rospy
>>> rospy.logwarn('Hello Python3')
Hello Python3
ユニットテストはPython2で書かれたままのようでなので、実行はしていません。完全に正常実行できているかどうかは未確認です。
とりあえず最初の一歩は上手くいったので、DockerイメージかDEBパッケージの形で再現実行できるように継続して取り組む予定です。
Comments powered by Disqus.