hotch-potch, Note to self

いろいろ作業記録

roslibpyを使ってみる(インストール編)

はじめに

ROS1ではPython2系が使われてますが、間もなくサポートが切れます。

Python3系に対応しているROS2への移行が必要ですが、過去の資産があると、すぐにすぐにの移行は難しいです。

ROSUG勉強会でROSつよつよの方に「rospyの代わりに、Python3も使えるroslibpyをつかうといいよ!」と紹介頂いたので、ひとまずRaspbian Stretch*1+ROS Kineticで使うまでの手順をまとめてみました。

結論

~ $ sudo apt remove python-pip python3-pip
~ $ sudo apt-get update
~ $ wget https://bootstrap.pypa.io/get-pip.py
~ $ sudo python get-pip.py
~ $ sudo python3 get-pip.py
~ $ pip3 install roslibpy --user

インストールの流れ

初っぱなから失敗します・・・

~ $ pip3 install roslibpy
Collecting roslibpy
  Using cached https://files.pythonhosted.org/packages/cf/8d/c17fc0d342e0ac9215173f4ab7bf095cea656f0807d05815e6776eec221e/roslibpy-0.6.0-py2.py3-none-any.whl
Collecting autobahn>=17.10 (from roslibpy)
(・・・途中略・・・)
Collecting constantly>=15.1 (from twisted>=17.9->roslibpy)
  Using cached https://files.pythonhosted.org/packages/b9/65/48c1909d0c0aeae6c10213340ce682db01b48ea900a7d9fce7a7910ff318/constantly-15.1.0-py2.py3-none-any.whl
Collecting PyHamcrest>=1.9.0 (from twisted>=17.9->roslibpy)
Exception:
Traceback (most recent call last):
(・・・途中略・・・)
e 643, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 315, in increment
    total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
~ $

このようなエラーが出て、先に進めません。

PIPのバージョンを最新に

Google Cloud IoT Coreの環境構築ではまったところ(デバイス側) - ChinoDuino(Chino × Arduino)

まずは、今インストールされているpipを削除。
~ $ sudo apt remove python-pip python3-pip
pipをインストール。
~ $ sudo apt-get update
~ $ wget https://bootstrap.pypa.io/get-pip.py
~ $ sudo python get-pip.py
~ $ sudo python3 get-pip.py

改めてインストール再開。でも失敗・・・

~ $ pip3 install roslibpy
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting roslibpy
  Using cached https://files.pythonhosted.org/packages/cf/8d/c17fc0d342e0ac9215173f4ab7bf095cea656f0807d05815e6776eec221e/roslibpy-0.6.0-py2.py3-none-any.whl
Collecting twisted>=17.9 (from roslibpy)
  Using cached https://www.piwheels.org/simple/twisted/Twisted-19.7.0-cp35-cp35m-linux_armv6l.whl
(・・・途中略・・・)
  Downloading https://www.piwheels.org/simple/pycparser/pycparser-2.19-py2.py3-none-any.whl (111kB)
     |????????????????????????????????| 112kB 102kB/s
Installing collected packages: PyHamcrest, idna, hyperlink, constantly, attrs, zope.interface, incremental, Automat, twisted, txaio, asn1crypto, pycparser, cffi, cryptography, autobahn, roslibpy
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/lib/python3.5/dist-packages/PyHamcrest-1.9.0.dist-info'
Consider using the `--user` option or check the permissions.
~ $ 

インストールの際、特定のディレクトリに対するパーミッションが不足してインストールできません。
pip install nfcpyでPermission denied発生したときの対処法

これでインストールできた!

一部のライブラリを、ホームディレクトリにインストールすることを許可して、pipを実行します。

~ $ pip3 install roslibpy --user
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting roslibpy
  Using cached https://files.pythonhosted.org/packages/cf/8d/c17fc0d342e0ac9215173f4ab7bf095cea656f0807d05815e6776eec221e/roslibpy-0.6.0-py2.py3-none-any.whl
Collecting twisted>=17.9 (from roslibpy)
(・・・途中略・・・)
  Using cached https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl
Collecting pycparser (from cffi!=1.11.3,>=1.8->cryptography>=2.7->autobahn>=17.10->roslibpy)
  Using cached https://www.piwheels.org/simple/pycparser/pycparser-2.19-py2.py3-none-any.whl
Installing collected packages: incremental, zope.interface, attrs, Automat, idna, hyperlink, constantly, PyHamcrest, twisted, pycparser, cffi, asn1crypto, cryptography, txaio, autobahn, roslibpy
  WARNING: The script automat-visualize is installed in '/home/pi/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The scripts cftp, ckeygen, conch, mailmail, pyhtmlizer, tkconch, trial, twist and twistd are installed in '/home/pi/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script wamp is installed in '/home/pi/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed Automat-0.7.0 PyHamcrest-1.9.0 asn1crypto-0.24.0 attrs-19.1.0 autobahn-19.8.1 cffi-1.12.3 constantly-15.1.0 cryptography-2.7 hyperlink-19.0.0 idna-2.8 incremental-17.5.0 pycparser-2.19 roslibpy-0.6.0 twisted-19.7.0 txaio-18.8.1 zope.interface-4.6.0
~ $

インストールの確認

Pythonから、指定のライブラリをインポートしてみる。

~ $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import roslibpy
>>>

エラーが出なかったので、OK。

次回、使ってみた例を紹介します。

*1:9/10追記: Busterであれば、pipのバージョンが新しいのでそのまま入りました