raspberry pi+mono を使ってlegoを制御
DESCRIPTION
Raspberry Pi に Mono をインストールして、LEGO Mindestorms EV3 のモーターをロボット制御します。TRANSCRIPT
![Page 1: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/1.jpg)
Raspberry Pi+Mono を使って LEGO を制御
増田 智明( @moonmile ).NET ラボ Micorosft MVP C#
Moonmile Solutions
![Page 2: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/2.jpg)
自己紹介
増田 智明 [email protected]
執筆業&プログラマ C# による iOS, Android, Windows アプリケーション開発入門 逆引き大全 Visual C# 2013, Visual Basic 2013
逆引き大全 iPhone/iPad アプリ開発 作って覚える iPhone/iPad アプリ入門
![Page 3: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/3.jpg)
「ハルロック」西餅 著http://www.moae.jp/comic/harurock/1/1
つい最近知った。 電子工作の基礎な話が出てきます。
PIC
Raspberry Pi
Arduino
モーニング連載
![Page 4: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/4.jpg)
目的
Mono ( .NET Framwork )を使っても、機器制御が簡単にできるよ 組み込みは C 言語のイメージが強いが、今となっては手軽とはいえない。 C 言語のライブラリを Python を使う例が多い。
日本では Python をあつかう人が少ないのが難点
C# でもよいのでは? 画像解析とロボット制御の組み合わせをやってみたい
ロボット制御を C# から 画像解析 OpenCV + .NET Framework
![Page 5: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/5.jpg)
機器の組み合わせパターン
機器の直接制御 自走型のロボットを直接制御 自走型のロボットを自律制御
直結
Wi-Fi/Bluetooth
Wi-Fi/Bluetooth
直結
![Page 6: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/6.jpg)
具体的な機器
ノート PC の利用 スマートフォンの利用 自律パターン Raspberry Pi
シリアル制御 Arduino
LEGO Mindstorms EV3
コントローラーの利用
![Page 7: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/7.jpg)
機器からフィードバックが必要か?
温度センサーの解析の仕組み 温度センサーの値を取得するのみ
ロボットアームの制御の仕組み アームの位置を誰が検知するのか? サーボの位置だけで決められる?
ロボットが移動したとき 誰がロボット位置を知るのか? 誰が次の位置を示せるのか? どうやって次の位置を示すのか?
![Page 8: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/8.jpg)
機器を直接制御
PIC プログラミング( ROM に書き込み) どれもチップと制御機器(センサーなど)が直結している。 チップと PC が近い場所にある
基盤設計により小さくできる 小さな箱に組み入れる
回路を組む必要があるので、私には手におえない。
![Page 9: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/9.jpg)
汎用プログラムで制御
Arduino でプログラミング .NET Micro framework でプログラミング LEGO Mindstorems
開発環境が、 C や C# で用意されている。 PIC よりも簡単にできる
![Page 10: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/10.jpg)
汎用 OS で制御
Raspberry Pi
ミニ PC
Android pc
実行環境に OS が入っているので、実は言語を問わない。 OS 特有の機能を使える 機器が大き目になる
![Page 11: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/11.jpg)
自走型ロボットを制御を考える
ロボットと PC は無線で接続 無線 LAN, Bluetooth 制御
無線先を機器そのものにする。機器に Wi-Fi などが必要 制御するのは、コントローラで。 ロボットが視界から外れると動けない
![Page 12: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/12.jpg)
自走型ロボットにカメラを付ける
自走型ロボットにカメラを付ける 各種センサーを付けた自走型ロボット 制御は人間がリアルタイムでやる Wi-Fi が届かなかったどきはどうする?
有線 LAN によるマニピュレータ方式 遠隔操作などはこれ
![Page 13: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/13.jpg)
自走&自立型ロボットを制御
ロボット自身がセンサーを判断する ラインを動くロボットなどがそれ
同時に遠隔操作を可能にする ロボットの位置情報 ロボットの視界カメラ
![Page 14: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/14.jpg)
Raspberry Pi – Model B
Wi-FiBluetooth
専用カメラモジュール
BrickPiI2C 接続
専用液晶ディスプレイ
Linux/RaspbianDebian 互換
CPU ARM700MHz 512MB
私のは初期ロットなので 256MB
![Page 15: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/15.jpg)
Raspberry Pi でロボット制御をやる意味 自走&自立型のロボットの構築
センサーは、 Arduino を通して制御可能? LEGO Mindstorms EV3 のセンサーを利用 赤外線センサー、3軸センサー、 超音波センサーなど
センサーによるフィードバックを Raspberry Pi 内で判断する 自己制御プログラム
C# や F# を使ってロジックを組む TDD 、 Visual Studio 、 Xamarin Studio の利用
母艦 PC と通信する Raspberry Pi と母艦 PC で通信する( Wi-Fi )
通信量を制限できる 前処理済みのカメラデータなど
![Page 16: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/16.jpg)
Raspberry Pi でロボット制御をやる準備 Raspberry Pi
Linux(Debian)
Mono(.net framework)
モーター制御 自走は車で行う(二足歩行は別に) I2C モジュールでサーボ制御
センサー制御 Arduino経由でシリアル制御? LEGO Mindstorms EV3 のセン
サーを流用
コントローラー PS3 Dualstock 3 コントローラー Wii コントローラー? Arduino のコントローラー? スマートフォン ノート PC など
![Page 17: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/17.jpg)
制御するプログラム言語
Linux 上で、 Mono を動かす apt-get install mono-complete で、簡単インストール シリアルポートへの読み書き( C 言語経由) Bluetooth の読み込み(ファイルストリーム経由)
センサー読み取りを制御する → C#
通信は HTTP → 簡易 HTTP サーバを作成 クライアント
ノート PC -> C#
スマートフォン -> Xamarin.iOS/Android で C# を使う
![Page 18: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/18.jpg)
Raspberry Pi - BrickPi で LEGO のモーターを制御
Raspberry Pi に差し込むだけで動作する。 http://www.dexterindustries.com/BrickPi/
BrickPi のサンプルは C, Python なので、 C# で使えるようにした。 https://github.com/moonmile/BrickPiNet
![Page 19: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/19.jpg)
Raspberry Pi で Bluetooth コントローラを使う
標準で /dev/input/js がある。 これを System.IO.BinaryStream で読み込んで、モーターを制御し
ている PS3 Dualstock を使ってロボット制御ができる。
http://github.com/moonmile/BrickPiNet/blob/master/src/BrickPiNet/BPiJoystick.cs
Welcome to QtSixA!
DualShock3 コントローラー http://qtsixa.sourceforge.net/
![Page 20: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/20.jpg)
ロボットを遠隔操作する
HTTP経由で BrickPiNet を制御すれば OK
簡易 HTTP サーバー https://github.com/moonmile/BrickPiNet/tree/master/example/WebBrick
iPhone/Android 用クライアント https://
github.com/moonmile/BrickPiNet/tree/master/example/WebBrickClient
![Page 21: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/21.jpg)
ロボットのアームを制御する
RasPi からアームを動かす BrickPi -> LEGO でもアームが動くが、ここでは RasPi から直接行う。 RasPi -> I2C モジュール → サーボモータ で動作させるのだが、 I2C モジュールを買い忘れてた orz
購入済み。プログラミング途中
![Page 22: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/22.jpg)
ロボットからセンサーのフィードバックを受ける
BrickPi 経由で超音波センサーを使う 変換器が必要なのが分かって、現在購入中。
![Page 23: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/23.jpg)
自走&自立型のロボットを作れると工作の幅が広がる
ロボットからモーターを制御する ロボットからアーム(サーボ)を制御する ロボット付属のセンサーからフィードバックを受ける ★ロボット内で、フィードバックを前処理できる ★ロボット内で、フィードバックを内部処理して、モーターを制御す
る ロボットから母艦へ通信( Wi-Fi )する ★母艦からロボットへ指令( HTTP経由)を出せる
ソフトウェア開発者(私)としては、★部分が重要
![Page 24: Raspberry pi+mono を使ってlegoを制御](https://reader036.vdocuments.net/reader036/viewer/2022081418/5560b878d8b42aef3b8b4b65/html5/thumbnails/24.jpg)
参考文献
Rasberry Pi http://www.raspberrypi.org/
BrickPi http://www.dexterindustries.com/BrickPi/
LEGO Mindstorms EV3 http://education.lego.com/ja-jp/preschool-and-school/secondary/mindstorms-education-ev3
Arduiono http://www.arduino.cc/
meArm http://www.phenoptix.com/products/mearm-pocket-sized-robot-arm
FEZ Spider https://www.ghielectronics.com/docs/170/fez-spider
「ハルロック」 http://www.moae.jp/comic/harurock/1/1