はじめに
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のバージョンが新しいのでそのまま入りました