以下の4つの記事でLEGO Mindstorms EV3のROS再対応を進めていたのですが、また一度中断させてください。

かなり色々と手を替え品を替え、時間を投入して挑戦してみたのですが、どの手段も上手くいきませんでした。 失敗の経緯も残しておくことで、次に挑戦される方が現れたときに役立てば幸いなので、メモ代わりに残しておきます。

python3-ev3dev

2年前はEV3のPythonドライバに公式のものがなくて、python-ev3というホビーユーザが作ったライブラリを使っていましたが、こちらは2015年に開発を終えており、その後音沙汰がなく、最新のev3dev OSでは動きません。

そこで、現在できた公式Pythonドライバpython3-ev3devを使ったのですが、こちらは名前の通り、Python 3にしか対応しておらず、試しにPython 2で動かしたところ呆気なくダメでした。

ROS1はPython 2にしか対応しておらず、Python 3で動作させることもできるとはあったのですが、少し試したところ茨の道すぎて諦めました。

https://answers.ros.org/question/237613/how-to-define-ros-kinetic-to-use-python3-instead-of-python27/

また、一瞬python3-ev3devをPython 2対応させる修正を書こうかとも頭をよぎりましたが、なぜこの時代にPython 2に対応させなくてはいけないのかと思い至って止めました。

ros_comm on ev3dev

そこで、自前のmindstorms_rosを再利用することを諦め、ROS Wikiにあった他のEV3のROS対応を試してみることにしました。 ros_commパッケージをそのままev3dev上で動かし、roscoreを起動したクライアントPCと接続して使う方法です。

http://wiki.ros.org/Robots/EV3

2種類挙げられていて、僕はYocto LinuxというOSに詳しくなかったので、ev3dev OSそのままで行える方を試してみました。

ros_commパッケージ入りカスタムev3devを作るためのbrickstrapというクロスコンパイルツールを使う必要があるのですが、これがUbuntu 16.04では動きません。 brickstrapはUbuntu 14.04までの対応で、Ubuntu 16.04からはDockerコンテナを使った方法に変わったそうです…

http://www.ev3dev.org/docs/tutorials/using-docker-to-cross-compile/

しかし、Dockerコンテナを使った方の情報はほとんどないので、VMWareにUbuntu 14.04をセットアップして古いbrickstrapをインストールしてみましたが、aptでは依存パッケージが入れられなくなっており、ソースコードを取ってきて使う必要があります。

https://github.com/ev3dev/brickstrap

Installationマニュアル通りセットアップして、いざツールを使うぞとコマンドをマニュアル通り打ち込んでもオプションが違うだの、なんだのいわれて動きませんでした。 helpも見ましたが、合っているように見えます…


というような経緯で、今回の中断に至ります。地球の裏側からメッセージを送ってくれた方には、上手くいかなかった旨を返信しました。

実は、ブログの読者の方からEV3でのFreeRTPSビルドに成功したとの報告をいただきました。

http://ros.youtalk.jp/2017/07/05/ev3dev-freertps.html#comment-3487938045

残念ながら通信自体は上手くいかず、FreeRTPS自体に改善が必要とのことなのですが、FreeRTPSの修正をしていく方が、EV3のROS対応は早いかもしれません。 またいずれ再開したいとは思いますが、時間を使いすぎたので一度中断させてください。