サークルで使っているLEGOロボットについて

##はじめに
この記事は [SLP_KBITその２ Advent Calendar 2016](http://qiita.com/advent-calendar/2016/slp_kbit2) の9日目の記事です。
今回はほとんど内輪向けの記事になります。

組込みをメインとして活動しているETRですが、他のプロジェクトの人は「ロボットを使ってるのはわかるけどあれ何なの？」と感じていることでしょう。
そんなわけで今回は、普段使っているLEGO Mindstorms EV3というロボットと、動作させるための環境についてお話します。

##LEGO Mindstorms

LEGO Mindstormsとは、モーター、センサ、マイコンを含んだ教育玩具で、LEGO社とMIT社が共同開発しています。
これまでに、第1世代のRCX、第2世代のNXT、第3世代のEV3が発売されています。
ちなみに私の代の情報環境実験Ⅱの授業まではNXTが使われていました。
特徴として、LEGOブロックでロボットを簡単に作成できる、テキストベースの本格的な制御ができる、ビジュアルベースの直感的な制御環境も提供されるといった点があげられます。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/61622/fb1241a9-951c-23b6-b4a8-5e9ff7cd373d.png)

##何ができるか
LEGO Mindstormsの最大の特徴は、ロボットを簡単に作れることです。
LEGO社が発売しているだけあって、構成パーツはすべてLEGOのパーツとして使用できます。
そのため、物理的に動く物を短時間で作ることができます。
Youtubeで検索すると、[ルービックキューブを解いたり](https://www.youtube.com/watch?v=-AuqojSpg0k)、[演奏したり](https://www.youtube.com/watch?v=TDvcTa3abRM)、[装着するアームを作ったり](https://www.youtube.com/watch?v=7JsDiZxz_fQ)している動画を見ることができます。
ブレッドボートと電子素子を使って何かをしたい場合は、ArduinoやRaspberry Piを使った方がいいでしょう。

##EV3の構成パーツ

###インテリジェントブロックEV3
処理の中心となるプロセッサにあたる部分です。
単に処理を行うだけでなく、センサの入力ポートと出力ポートを4つずつ備えています。規格はRJ45コネクタ(だったはず)です。
側面には、タイプAのUSBポートと、ミニBのUSBポートがあります。ここにWiFiドングルを指すことによってWiFiを使用することもできます。
また、Bluetoothが内蔵されていたりします。
さらに、microSDを挿入することもできます。microSDにEV3用のOSを書き込んでいる場合、そのOSを使用することができます。

![45500_pbrick.jpg](https://qiita-image-store.s3.amazonaws.com/0/61622/e9943ad8-021b-7247-8db3-3128bd2ec0f6.jpeg)


###モーター
####Lモーター
パワフルな出力を持つモーターです。車のタイヤを回したり、アームを作って持ち上げたりすることに適しています。

![45502_LargeMotor.jpg](https://qiita-image-store.s3.amazonaws.com/0/61622/d6430312-d66a-20f6-85e3-992f568dbd2d.jpeg)



####Mモーター
精度の高い回転を行うことができるモーターです。ETRではあまり使っていません。

![45503_MediumMotor.jpg](https://qiita-image-store.s3.amazonaws.com/0/61622/3c426471-861c-5e42-9d99-1920e48721a6.jpeg)


###センサ
####タッチセンサ
スイッチのON/OFFを取得するセンサです。ETRではロボットが何かにぶつかったのを検知するのに使っています。

![45507_TouchSensor.jpg](https://qiita-image-store.s3.amazonaws.com/0/61622/1ccb2e00-e16c-4797-9921-41f3e8873718.jpeg)


####カラーセンサ
反射光、色、周囲の明るさを取得できるセンサです。ETRではライントレースを行うのに使っています。

![45506_color.jpg](https://qiita-image-store.s3.amazonaws.com/0/61622/7b92817b-7e36-2c78-05cb-76dff0fcdc6a.jpeg)

####超音波センサ
超音波を出して帰ってくる時間から物体との距離を測ることができるセンサです。ETRでは物体を回避するのに使用しています。

![45504_UltrasonicSensor.jpg](https://qiita-image-store.s3.amazonaws.com/0/61622/2f7b102d-fc52-7c51-a627-b2e74307c9ff.jpeg)

####ジャイロセンサ
傾きと角速度を測ることができるセンサです。ETRではセグウェイのような倒立したロボットを制御するために使用しています。

![45505_GyroSensor.jpg](https://qiita-image-store.s3.amazonaws.com/0/61622/76d104ad-d9fa-be85-d1db-72c9022229b9.jpeg)

##EV3の動作環境
EV3は、OSによって使用できる言語や開発環境が異なります。
ETRでは主にleJOSを使用しています。

| OS         | 言語                    | 開発環境                        |
|:----------:|:----------------------:|:------------------------------:|
| leJOS      | Java                   | Eclipse/NetBeans               |
| ev3RT      | C/C++                  | Cygwin/Windows環境のエディタ     |
| MonoBrick  | C#                     | Xamarin Studio                 |
| ev3dev     | C/Pyyhon/Ruby/Perlなど | Tera Termなど/Linux環境のエディタ |

##leJOS EV3
Oracle純正の仮想マシンを含んだEV3用のLinuxOSです。
EV3のキットに付属されているデバイスを制御するためのAPIを使用できます。
また、Java SE Embeddedというプラットフォームを使用しているため、組込みシステム向けのAPIを使用することができます。

##おわりに
動かしてみたい人は[LegoWiki](http://chausson9.eng.kagawa-u.ac.jp/App/LegoExrc/neoLegoWiki/)を見ながら試してください。
16日のアドベントカレンダーではIoTと絡めたプログラムの紹介を行う予定です。