24
Raspberry Pi+Mono をををを LEGO ををを をを をを@moonmile .NET をを Micorosft MVP C# Moonmile Solutions

Raspberry pi+mono を使ってlegoを制御

Embed Size (px)

DESCRIPTION

Raspberry Pi に Mono をインストールして、LEGO Mindestorms EV3 のモーターをロボット制御します。

Citation preview

Page 1: Raspberry pi+mono を使ってlegoを制御

Raspberry Pi+Mono を使って LEGO を制御

増田 智明( @moonmile ).NET ラボ  Micorosft MVP C#

Moonmile Solutions

Page 2: Raspberry pi+mono を使ってlegoを制御

自己紹介

増田 智明 [email protected]

執筆業&プログラマ C# による iOS, Android, Windows アプリケーション開発入門 逆引き大全 Visual C# 2013, Visual Basic 2013

逆引き大全 iPhone/iPad アプリ開発 作って覚える iPhone/iPad アプリ入門

Page 3: Raspberry pi+mono を使ってlegoを制御

「ハルロック」西餅 著http://www.moae.jp/comic/harurock/1/1

つい最近知った。 電子工作の基礎な話が出てきます。

PIC

Raspberry Pi

Arduino

モーニング連載

Page 4: Raspberry pi+mono を使ってlegoを制御

目的

Mono ( .NET Framwork )を使っても、機器制御が簡単にできるよ 組み込みは C 言語のイメージが強いが、今となっては手軽とはいえない。 C 言語のライブラリを Python を使う例が多い。

日本では Python をあつかう人が少ないのが難点

C# でもよいのでは? 画像解析とロボット制御の組み合わせをやってみたい

ロボット制御を C# から 画像解析 OpenCV + .NET Framework

Page 5: Raspberry pi+mono を使ってlegoを制御

機器の組み合わせパターン

機器の直接制御 自走型のロボットを直接制御 自走型のロボットを自律制御

直結

Wi-Fi/Bluetooth

Wi-Fi/Bluetooth

直結

Page 6: Raspberry pi+mono を使ってlegoを制御

具体的な機器

ノート PC の利用 スマートフォンの利用 自律パターン Raspberry Pi

シリアル制御 Arduino

LEGO Mindstorms EV3

コントローラーの利用

Page 7: Raspberry pi+mono を使ってlegoを制御

機器からフィードバックが必要か?

温度センサーの解析の仕組み 温度センサーの値を取得するのみ

ロボットアームの制御の仕組み アームの位置を誰が検知するのか? サーボの位置だけで決められる?

ロボットが移動したとき 誰がロボット位置を知るのか? 誰が次の位置を示せるのか? どうやって次の位置を示すのか?

Page 8: Raspberry pi+mono を使ってlegoを制御

機器を直接制御

PIC プログラミング( ROM に書き込み) どれもチップと制御機器(センサーなど)が直結している。 チップと PC が近い場所にある

基盤設計により小さくできる 小さな箱に組み入れる

回路を組む必要があるので、私には手におえない。

Page 9: Raspberry pi+mono を使ってlegoを制御

汎用プログラムで制御

Arduino でプログラミング .NET Micro framework でプログラミング LEGO Mindstorems

開発環境が、 C や C# で用意されている。 PIC よりも簡単にできる

Page 10: Raspberry pi+mono を使ってlegoを制御

汎用 OS で制御

Raspberry Pi

ミニ PC

Android pc

実行環境に OS が入っているので、実は言語を問わない。 OS 特有の機能を使える 機器が大き目になる

Page 11: Raspberry pi+mono を使ってlegoを制御

自走型ロボットを制御を考える

ロボットと PC は無線で接続 無線 LAN, Bluetooth 制御

無線先を機器そのものにする。機器に Wi-Fi などが必要 制御するのは、コントローラで。 ロボットが視界から外れると動けない

Page 12: Raspberry pi+mono を使ってlegoを制御

自走型ロボットにカメラを付ける

自走型ロボットにカメラを付ける 各種センサーを付けた自走型ロボット 制御は人間がリアルタイムでやる Wi-Fi が届かなかったどきはどうする?

有線 LAN によるマニピュレータ方式 遠隔操作などはこれ

Page 13: Raspberry pi+mono を使ってlegoを制御

自走&自立型ロボットを制御

ロボット自身がセンサーを判断する ラインを動くロボットなどがそれ

同時に遠隔操作を可能にする ロボットの位置情報 ロボットの視界カメラ

Page 14: Raspberry pi+mono を使ってlegoを制御

Raspberry Pi – Model B

Wi-FiBluetooth

専用カメラモジュール

BrickPiI2C 接続

専用液晶ディスプレイ

Linux/RaspbianDebian 互換

CPU ARM700MHz 512MB

私のは初期ロットなので 256MB

Page 15: Raspberry pi+mono を使ってlegoを制御

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を制御

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を制御

制御するプログラム言語

Linux 上で、 Mono を動かす apt-get install mono-complete で、簡単インストール シリアルポートへの読み書き( C 言語経由) Bluetooth の読み込み(ファイルストリーム経由)

センサー読み取りを制御する → C#

通信は HTTP → 簡易 HTTP サーバを作成 クライアント

ノート PC -> C#

スマートフォン -> Xamarin.iOS/Android で C# を使う

Page 18: Raspberry pi+mono を使ってlegoを制御

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を制御

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を制御

ロボットを遠隔操作する

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を制御

ロボットのアームを制御する

RasPi からアームを動かす BrickPi -> LEGO でもアームが動くが、ここでは RasPi から直接行う。 RasPi -> I2C モジュール → サーボモータ で動作させるのだが、 I2C モジュールを買い忘れてた orz

購入済み。プログラミング途中

Page 22: Raspberry pi+mono を使ってlegoを制御

ロボットからセンサーのフィードバックを受ける

BrickPi 経由で超音波センサーを使う 変換器が必要なのが分かって、現在購入中。

Page 23: Raspberry pi+mono を使ってlegoを制御

自走&自立型のロボットを作れると工作の幅が広がる

 ロボットからモーターを制御する  ロボットからアーム(サーボ)を制御する  ロボット付属のセンサーからフィードバックを受ける ★ロボット内で、フィードバックを前処理できる ★ロボット内で、フィードバックを内部処理して、モーターを制御す

る  ロボットから母艦へ通信( Wi-Fi )する ★母艦からロボットへ指令( HTTP経由)を出せる

ソフトウェア開発者(私)としては、★部分が重要