LEGO Mindstorms EV3をPython3で動かす
本当は先日購入したNVIDIA Jetson TX2でディープラーニングのROS対応を色々と進めていきたかったのですが、とある遠い国から
LEGO Mindstorms EV3をROSで動かして卒業論文を書きたくて、情報を探るとあなたのSpeakerDeckにたどり着きました。 とても助かっているけれど、でも英語じゃないから完全には理解できません。英語の情報はありますか?
といった内容(実際には英文)で嬉しい連絡をいただきました。 なので、まずはEV3のROS対応を改善することを先に進めないといけません。 数週間は時間をもらっているので、今日からはEV3のROS対応の復活とドキュメンテーションを頑張ります。
途中までは以下のブログで進めていましたが、ROS2対応させるため、FreeRTPSをセットアップするところで頓挫して諦めかけていました。
- http://ros.youtalk.jp/2017/07/04/setup-ev3dev.html
- http://ros.youtalk.jp/2017/07/05/ev3dev-freertps.html
とりあえずFreeRTPSの話は中断し、ROS1対応を急ぐことにします。 これからやることを時系列順にリストアップします。
- まず2年前のプログラムを復活させる。
- EV3とリモートPCとの間の通信プロトコルを改善する。
- 日英のドキュメンテーションを整える。
- バイナリパッケージ化する。
2に関してですが、2年前のプログラムではRPyCというPythonモジュールを使っていました。
リモートPCからEV3のPythonモジュールをPythonスクリプトそのままの形で呼び出せるRPCを実現しており、非常に便利なモジュールです。 このおかげでROS対応は1日でできました。 ただし、計算量も通信量もEV3にとっては重たいモジュールだったので、通信環境が悪い場所では動かすことがほとんどできませんでした。
今回はせっかく再度挑戦するのですから、ここの部分にメスを入れましょう。 これまではFreeRTPSで置き換えるつもりでしたが、それは当面うまくいきそうにありませんので、違う通信プロトコルを考えないといけません。 しかもev3devにすでに対応済みであることが条件です。
この条件で、一番良さそうな通信プロトコルはMQTTでしょうか。 ありがたいことに、PythonモジュールもEV3で動作しているようです。
- http://www.ev3dev.org/docs/tutorials/sending-and-receiving-messages-with-mqtt/
- https://pypi.python.org/pypi/paho-mqtt/1.3.0
また、今回はEV3対応のみを考え、LEGO Mindstorms NXTは対象としません。 というかNXTはもう誰も使っていないでしょう笑
python3-ev3dev
2年前のプログラムを書いた時には、ev3dev公式のPythonドライバがなかったのですが、今はあります。 それがpython3-ev3dev
です。
https://github.com/rhempel/ev3dev-lang-python
import ev3dev.ev3 as ev3
ts = ev3.TouchSensor()
while True:
ev3.Leds.set_color(ev3.Leds.LEFT, (ev3.Leds.GREEN, ev3.Leds.RED)[ts.value()])
m = ev3.LargeMotor('outA')
m.run_timed(time_sp=3000, speed_sp=500)
ev3.Sound.speak('Welcome to the E V 3 dev project!').wait()
以前使っていたのはpython-ev3
というPythonモジュールでした。 使い方はほとんど同じようですので、安心しました。
次回はMQTTを学びます。
Comments powered by Disqus.