LEGO Mindstorms EV3 を C# で動かす

レゴ エデュケーションと日本マイクロソフトが日本発 IT 人材育成を目的としたプログラミング ロボット教育カリキュラムの提供で連携 | News Center Japan
http://news.microsoft.com/ja-jp/2015/10/27/151027-azure-lego-education/

ということで、日本でも LEGO と Microsoft が組むそうです。カリキュラム自体は Azure が必須(まあ Microsoft としてはそれが IoT の売りなので外せない)なのですが、個人的には Azure はいりません…が、ドキュメントがダウンロードできるので利用させていただきます。

ロボット×クラウドではじめての本格プログラミング~レゴ® マインドストーム® で地球を探査 | Microsoft Virtual Academy – 専門家が提供する e ラーニング コース – | Channel 9
https://channel9.msdn.com/Series/Microsoft-Virtual-Academy-Japan/lego-mindstorms-programming-curriculum

image

上記からカリキュラムで利用するプレゼン資料とプログラム一式がダウンロードできます。この中で結構ありがたいのは、EV3Azure_Workshop_SetupManual.pptx のプレゼン資料です。この中で、

  • MonoBrick Firmware のインストールの仕方
  • WiFi の設定の仕方

が書いてあります。ちなみに、WiFi は、暗号化なしか、WPA2(WPA-PSK(AES)) の二種類しか選択できません。無線ルータの設定にもよるので、結構ここは躓きやすいところです。探査機ロボットの場合は、センサーで取得した結果を Azure に飛ばすので WiFi が必須になっていますが、無線だけやりたいのであれば Bluetooth のほうが手軽です。

MonoBrick の micro SD カードを作る

Creating A Bootable SD Card On Windows | MonoBrick.DK
http://www.monobrick.dk/guides/firmware-guides/monobrickfirmwaresdcardwindows/

image

上記から MonoBrick のイメージをダウンロードできます。Win32 Disk Imager の使い方も書いてあるので解りやすいでしょう。512MB, 2GB, 4GB 版と3種類ありますが中身は一緒で容量だけが違います。8GB のメモリカードに 512MB を入れてもよいし、4GB 版を入れてもよいでしょう。作業領域の違いだけですね。Raspberry Pi や Windows IoT の場合は 8GB が必要なのですが、MonoBrick の場合はグラフィック系がないためか 512MB でも十分なようです。

EV3 で MonoBrick を起動する

micro SD カードに MonoBrick を焼きこんだら、インテリジェントブロックに差し込んで電源を入れます。CPU が遅いのか、Linux の起動が遅いためか分かりませんが、起動時間は1分弱ぐらいかかります。

image

起動が終わると、Main Menu が出るので「Brick Information」を選択すると、ファームウェア等の情報が見れます。

image

現時点(2015/10/29)では、

  • Firmware 1.2.0.39486
  • Mono version 2.10.9
  • Mono CLR v4.0.30.319

になっています。.NET Framework のバージョンは最新が v4.6 なので、ちょっと古いのですが、愛艇の C#/F# のプログラムは動くはずです。

WiFi を設定する

WiFi の暗号化が「None」か「WPA/2」しか選べないので、うまくつながらないときは無線ルーターの設定を見直してください。暗号化なしが選べるので、パスワードなしのオープンな無線ルータに接続できるかもしれません。

image

SSIDとパスワードの設定が結構面倒(DSでぽちぽち設定するぐらい面倒)ですが、きちんと設定すると「Brick Information」で割り振られた IP が見れます。

image

Tera term で SSH で入ることができます。ユーザ名は「root」で、パスワードはありません。Linux 2.6 が動いていることが解りますね。

image

ifconfig などのコマンドも動くので、細かい設定は /etc/network/interface をいじったほうが早いかもしれません。ただ、iwconfig 等のコマンドがないので、別で設定している可能性もあります。

image

Visual Studio プログラムを書く

Microsoft 提供のサンプルコードを見ると、プログラムはコマンドラインアプリになります。参照設定に「MonoBrickFirmware」を加えて、EV3 のモーターやセンサーの類が使えるようになりますね。

image

他にも、MonoBrickFirmware.UserInput でインテリジェントブロックのボタン押下のイベントが取れたり MonoBrickFirmware.Services.WebServer で簡易 WebServer が作れたりします。ネットワークを通じて EV3 のロボットを操作することが可能ですね。

CLR のバージョンが v4.0 なので async/await が使えないはずですが、これは後で確かめます。

MonoBrick のサンプルは Larsjep/monoev3 で公開されています。MonoBrickFirmware 自体は monoev3/MonoBrickFirmware at master · Larsjep/monoev3 で公開されているので、C# から直接 EV3 のセンサーを叩く時に参考になるでしょう。

WinSCP で実行ファイルを EV3 に送る

Visual Studio でビルドした実行ファイルを、EV3 に送るには、WinSCP を使います。SCP クライアントならば何でもいいはずですが、MS のドキュメントにもあるのでそのまま使うのがいいかなと。

WinSCPとは :: WinSCP
https://winscp.net/eng/docs/lang:jp

転送プロトコルを「SCP」にして、ポート番号は「22」のまま。ユーザ名は「root」で、パスワードはなしです。ログインボタンを押すとと、接続時に戻り値のエラーがでますが、そのまま接続ができます。

image

SSH 上でファイル転送をできるようにした方式だそうなので、FTP のように2ポート開けなくてすみます。使い方は同じですね。

image

/home/root/apps/ の下に適当なフォルダ名をつけて(これが EV3 で動かすプログラム名になります) *.exe と *.dll をコピーします。画像をディスプレイに表示する場合は、それらもコピーします。

 

プログラムを実行する

WinSCP で実行ファイルをコピーしたら、インテリジェントブロックでプログラムを実行します。

image

ぽちぽちとカーソルを動かして、実行すれば EV3 で動きます。これは何もモーターなどがついていませんが、ディスプレイに表示だけするとかもできますね。

そんな訳で C# で EV3 が動く環境までできたのですが、この実行の部分が面倒くさい。先の LabVIEW のように PC から直接動かしたり、なんかデバッグしたりできないですかね?というので、Xamarin Studio の登場です。

etroboEV3 / Wiki / MonoBrickWin
http://sourceforge.net/p/etroboev3/wiki/MonoBrickWin/#11-monobrick-ev3-firmware

この手順に従って環境を構築すれば、Xamarin Stduio で EV3 をデバッグ実行することができます。これ自体もともと MonoBrick に含まれているので、ET ロボコン専用という訳ではなくて普段の EV3 開発にも使えます。

というわけでで引き続き。

補足
SSH で接続して apps に移動した後、「mono プログラム名」で起動できますね。WinSCP をバッチ化して Tera Term で常時繋げておけば、インテリジェントブロックのカーソルキーを使わなくてもアプリを起動できます。

カテゴリー: C#, EV3 パーマリンク