魔改造 レゴ Wall-E ~ AI搭載ロボへの道

##### 更新(2024/02/08)
- 「[『レゴ Wall-Eに おしゃべりAIを搭載する』へ続く](https://qiita.com/nagayaoh/items/603f4ad46e352ecddcfc#%E3%83%AC%E3%82%B4-wall-e%E3%81%AB-%E3%81%8A%E3%81%97%E3%82%83%E3%81%B9%E3%82%8Aai%E3%82%92%E6%90%AD%E8%BC%89%E3%81%99%E3%82%8B%E3%81%B8%E7%B6%9A%E3%81%8F)」に予告編追加
- [「HamamatsuMicroMakerFaire2023」会場レポート【公式】](https://makezine.jp/blog/2024/01/hmmf2024_report.html)

# 言語AI搭載ロボへの道

　６年前から、LEGO社の「レゴ (LEGO) アイデア ウォーリー 21303」をベースに、様々な改造を加え、映画「Wall-E」のようなロボット化を目指してきました。しかし、映画のように人格を持つように見せるためには、様々な技術的な壁がありました。その実現は中々難しく、あれこれ手伝ってもらっている長男も忙しくなり、正直この２〜３年は開発が停滞しておりました。
　ところが昨年夏頃から大いに話題となった「生成AI（特にChatGPT）」の能力は凄まじく、また近年のネットワークアプリケーション技術の広がりもあって、言語系AIの進化をM5Stackといったマイコンでも享受できるようになりました。
　そこで、改めてWall-Eに言語AIを搭載し、人格があるように見せるというアイディアを試みることとしました（※ 主開発者の長男も生成AIに興味を持ってくれたのもあります）。

　本ページでは、これまでの改造「Micro:bitベースのリモコン動作ロボット化」の歴史と、「おしゃべり機能」を持たせるまでの取り組みについて記載していきます。

---
# これから始まりました

マイコンボードChibi:bitを使ってレゴロボットをリモコン制御します。
リモコンコントローラにもChibi:bitを使います。驚くほど簡単に無線リモコン操縦できますよ。

[![Chibi:bitでWALL-Eを制御する](http://img.youtube.com/vi/W7aq2AMuKlo/0.jpg)](http://www.youtube.com/watch?v=W7aq2AMuKlo)


# ベースとなるキット「WALL-E」とパーツたち

## レゴ (LEGO) アイデア ウォーリー 21303
ディズニー／ピクサー映画"WALL-E"を主人公ロボットWALL-Eをレゴ化したキット。アマゾンなんかで入手可能です。ピクサーの動画監督さんが映画を作りながら、同時に作成した作品がLEGO/Ideasに採用され商品化。正統派レゴ作品です。

<img src="https://sh-s7-live-s.legocdn.com/is/image//LEGO/21303_alt1?$main$" width=400>


##LEGO Power Functions M-Motor 8883
商品「WALL-E」自体はモータが付いていません。しかし、下記のレゴ純正モータを別途購入すれば、そのまま装着できる設計になっています。純正Mモータの入手ですが、LEGOからは販売されていません。別のLegoキットから流用してもいいですし、専門店からネット購入も可能。自分は[こちらのお店](http://www.brickers.jp/?mode=cate&cbid=853602&csid=0)から。後ヤフオクでも時々出品されています）。

<img src="https://sh-s7-live-s.legocdn.com/is/image/LEGO/8883?$main$" width=300>

# Chibi:bit
[Microbit]:http://microbit.org/
[BBC Micro:bit][Microbit]というシングルボードコンピュータの互換機。Armベースでクレジットカード大。技適に対応し国内でのBLE利用可能。入力最大電圧も拡大されている。[スイッチエデュケーション](https://switch-education.com)が開発／販売中。
### 【参考】 BBC Micro:bitとは
>"BBC Micro:bitは英国の小学生への情報教育のための施策"Make it Digitalキャンペーン"の一環として英国国営放送が11歳と12歳に小学生へ無料配布した(2015)、低消費電力／低コストのシングルボードコンピュータ。"
> <cite><a href="https://ja.wikipedia.org/wiki/BBC_Micro:bit" title="">BBC Micro:bit - Wikipedia</a></cite>
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/bac2e68c-000a-84d8-753c-c529319e12ac.jpeg" width=300>

### 【スペック】
BBC Micro:bitと同じく以下の機能を備える。

| 項目 | スペック |
|:---------:|:--------|
| CPU | ARM Cortex-M0 |
| プログラミング言語 | Python、JavaScript |
| 開発環境 | Webベース開発環境  |
| 通信I/F | BLE、USB端子 |
| 入出力端子 | 3つのI/Oリング、20ピンのエッジコネクタ |
| その他 | 25個の赤色LED、2個のボタン、加速度センサ、磁力センサ、照度センサ |

# その他のパーツ： サーボモータとカメラマウント
　頭部を動かすために用意したのが、模型用サーボモータ[SG90](http://akizukidenshi.com/catalog/g/gM-08761/?customer=z)と、[ミニ2軸カメラマウント](https://www.amazon.co.jp/exec/obidos/ASIN/B00FHRVGN6/)です。サーボモータは400円、マウントは200円〜500円ぐらいで入手できます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/4d6742ca-4d87-73f8-05d1-f77939d15a94.jpeg" width=300>


# 早速作ってみましょう
## (0) 部品一覧
　一番奥にあるのがLegoキット"Wall-E"。この後の改造のため、一旦、頭部とキャタビラを外してあります。
　真ん中頭部パーツの左側にある「青いパーツ」は首を動かすためのサーボセットです。「別に頭を動かさなくてもいいや」って方や「後でじっくり追加」って方は、元のパーツそのままで大丈夫。

<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/a5d11892-280b-0ed5-db31-e5371464f9f0.jpeg" width=500>

　手前は(1)Chibi:bitと(2)拡張パーツ"Moto:bit"(3)電池ケース。詳細は後ほど説明します。※今回は２つのChibi:bitを用意。１台はWalle制御、もう一台はリモコンになります。

## (1) まずWALL-Eの胴体をちょっとだけ改造
　まずLegoキット"Wall-E"を組み立ててください。パーツ数は６７６。うちは息子と二人で毎晩２時間x5日かかりました。こちら<a src="http://legohasep.blog.fc2.com/blog-entry-239.html">LEGOHASEPさんの組み立て実況ページ</a>が参考になります。
　オリジナルのLegoキットの"Wall-E"は胴体が空洞になっています。ここに電池ボックスや配線を入れます。ここでは背面のブロックを取り去ります。ここにChibi:bitを挟みます。
※胸のパーツをうまく流用することで、新しくブロッックを購入しなくても作れます。
#### <前から見た所>
パーツ流用の関係で胸部分が変わっています。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/bcb6d6c9-c05b-a3f9-e48e-2279cfadf8de.jpeg" width=400>
#### <後ろから見た所>
背面のブロックを全て取り去り、Chibi:bitとMoto:bitを挟めるようにしてあります。赤いポッチや青いブロックは飾りです。構造上の意味はありません。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/f2f0d2c0-d434-e765-a4e3-1f79cfb95d36.jpeg" width=400>
#### <上から見た所>
頭部を動かすカメラマウントを置くためLEGOプレートパーツを使ってフラットにしてあります。この辺のブロック組み換えもキット内のパーツのやりくりでなんとかなっています。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/ddff23d7-da86-7f21-2727-d54e3470c874.jpeg" width=400>

## (2) モータをつける
　Legoキット"Wall-E"へLego純正モータを取り付けてLego純正リモコンで制御するのはわりかしポピュラーです。検索すると動画も多数。ただ意外とモータ取り付け工程を詳しく書いているのところがないので工程写真を載せますね。
#### <モータ設置後>
　まず、モータ取り付け後の状態を。このキットはキャタビラ後部に繋がっている部分のブロックを少しいじるだけで簡単に純正モータを設置可能。すごい設計だと思う。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/c93badc2-f8db-6852-b042-206aa7ab75c3.jpeg" width=400>
#### <胴体側を準備>
　キャタビラ後部に繋がっている部分のブロックを取り去ります。２x６プレートブロックが収まるスペースを作ります。キット内のパーツやりくりでなんとかなります。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/2ac260eb-8b5f-b208-0623-e850639989f5.jpeg" width=400>

#### <モータ>
　上記の純正Mモータを２つ用意します。２つのMモータを写真のように背中合わせにし2x6プレートで止めます。写真は穴あきパーツを使っていますが、２x６プレートならなんでも構いません。隙間が空かないよう注意ください。黒いコードは根元から曲げておきます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/8d54499b-33df-a6f9-7c7e-43d444c2ad38.jpeg" width=250> <img src="https://qiita-image-store.s3.amazonaws.com/0/111758/41dd776a-6e1f-2e65-af2b-76d9ec5051af.jpeg" width=250>

#### 【注意】 LEGO純正Mモータの改造
　LEGO純正Mモータの線を拡張ボードMoto:bitに接続するためには、一旦ケーブル線を切断しコネクタに付け替える必要があります。４本のケーブルのうち、真ん中の２本をピンコネクタにつなぎ直します。左右の二本は使用しません。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/edf0a2ca-db25-e665-ea92-6b51034f72b1.jpeg" width=400>


#### <モータを設置>
　モータブロックを本体の後ろ側に載せます。ブロックの本当に乗せるだけになります。両面ポッチのブロックがあればいいんですが。脱落しそうですが、キャタビラ側のパーツが支えになり、うまいこと取り付けられます。邪道ですが、両面テープや接着剤で止めてもいいかもしれません。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/da5ba324-6ffb-4baf-730b-98b3bcbcd5fe.jpeg" width=250>  <img src="https://qiita-image-store.s3.amazonaws.com/0/111758/aad0b66d-edaf-3628-f5b4-25a48f3492fc.jpeg" width=250>

#### <キャタビラパーツを取り付ける>
　写真のようにキャタビラを取り付けます。キャタピラパーツには二箇所LEGOパーツを追加しています。一つ目は、モータの駆動力を伝えるための[テクニック4M十字軸](http://www.brickers.jp/?pid=24384260)(手前の棒パーツ)。もう一つは、モータとキャタピラを接続する[コネクターペグ](http://www.brickers.jp/?pid=24384220)(奥の方黒い筒)。右写真のようにキャタピラパーツでモータと接続する軸を十字軸に交換します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/86482ac5-910d-612f-2d77-eac5408820fa.jpeg" width=250> <img src="https://qiita-image-store.s3.amazonaws.com/0/111758/1cc471f9-a7af-4b8e-7029-89def9b39dbb.jpeg" width=450>

接続の様子がわかりやすいようにキャタピラパーツを取り除いた状態で示したのが次の写真です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/29c8c000-1ee6-f943-946f-0f07768fbd23.jpeg" width=440>

※写真では十字軸が黒とグレーの二つが出てきますが、長さ３９ミリ黒い十字軸より、長さ４１ミリグレー十字軸の方が外れにくいようです。ちょっとはみ出してブサイクですがこちらをオススメします。

#### <注意>
　モータケーブルが写真のように地面高さからギリギリになります。うまく折りたたむ、セロハンテープなどでたるみをとるなどの処置をした方がいいかもしれません。

<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/9037037a-88ec-fa70-4d28-ae5c61eb79fa.jpeg" width=400>

## (2) 次に首パーツ（サーボ）を本体に接続
　頭を動かさない方はこちらスキップしてください。キット純正として組み立てたままでも次に進めます。
　まずはカメラマウントを組み立ててください。機械的な可動の確認が大切です。組み立て方については[ものづくりエクスペリメントさんの記事](http://denshikousaku.net/control-servos-on-raspberry-pi-part1-rpio)がとても参考になります。
　カメラマウントは上下逆さまにして使います。動作としては、チルト（上下動）が下側、パン（左右動）が上となります。まず、カメラマウントは若干加工します。カメラを挟む爪部分は切り落とし（写真左）、面を平らにします。その面に両面テープで2x4プレートブロックを貼り付けます（写真中）。これが「首パーツ」となります。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/5199edd8-df66-2287-624c-19e5e868dbc7.jpeg" width=200>  <img src="https://qiita-image-store.s3.amazonaws.com/0/111758/2bc6e53f-f8cd-edc4-c0f5-861506593cc8.jpeg" width=200> <img src="https://qiita-image-store.s3.amazonaws.com/0/111758/520a7ef3-75ab-887b-bf00-8ef30abb616b.jpeg" width=200>

この首パーツを本体にはめ込むわけです（上写真右→下写真）。配線が右写真のように中に通します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/6c0319e1-0500-7117-b478-57207599a861.jpeg" width=360> <img src="https://qiita-image-store.s3.amazonaws.com/0/111758/7dce6064-6155-c54d-3959-a49a9dfe87c1.jpeg" width=200>

## (３) 頭部パーツと首パーツの接続
　写真左のように、頭部パーツは特に改変なしで使用します。接続パーツには今回写真下部のパーツを自作して使用してみました。写真下部の２x３プレート（黒）は、３Dプリンタで整形したのものです。写真右のように背面にサーボホーンを削ってはめ込んであります。今回は接続パーツを自作しましたが、通常のレゴプレートにサーボホーンが取り付けられればなんでもよく、２x３出なくてもう少し大きいパーツでもいいかもしれません。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/b65aa26c-12a0-42f4-861b-59c5f64b02eb.jpeg" width=300>  <img src="https://qiita-image-store.s3.amazonaws.com/0/111758/3af1f146-9256-a2f1-cdaa-cbd6eeed9a35.jpeg" width=300>

　この接続パーツと首パーツをサーボ用ネジで止めます。頭部パーツをこの接続パーツにLEGO的に乗せることで、頭部を組み付けます。


## (4) Chibi:bitと拡張ボードをWall-Eの背中につける
#### Chibi:bitと拡張ボードMoto:bit
 LEGO純正Mモータもそうですが、コンピュータからモータを動かすには、モータドライバと呼ばれるIC素子を載せた回路を使います。Micro:bitの場合、差し込むだけでモータを動かせるようになる拡張ボードがいくつか販売されており、今回は[SparkFunのMoto:bit](https://www.switch-science.com/catalog/3382/)を使うことにしました。

<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/3ece3b88-9ce6-2b15-f476-da5c1b6a745e.jpeg" width=250> <img src="https://qiita-image-store.s3.amazonaws.com/0/111758/b7d5006d-0e5b-a920-2647-c2976545fbf8.jpeg" width=250>

| Sparkfun Moto:bitのスペック |
|:--|
| DCモータ用ポート x2|
| サーボモータ用ポート x2 |
| センサ用ポート（デジタル専用x3、デジタル/アナログ共用x3） |
| I2C用ポート |
| モータ用ON/OFFスイッチ |
| DCジャック（入力電圧：3～17 V） |


#### 乾電池ボックスを格納する
　もともとWallEキットの胴体に巨大な空間がありますので相当大きな乾電池ボックスが入ります。写真は[乾電池ボックス：単３x６個](http://akizukidenshi.com/catalog/g/gP-10611/)が入れる場合の格納状況です。拡張ボードMoto:bitの入力電圧幅は３V〜17V、LEGO純正Mモータの入力電圧幅(3.3V〜9V)なので、単３〜単4あたりで直列４個〜6個で自由に選べます。liPOやスマホバッテリも良い選択肢かもしれません。
　拡張ボードMoto:bitはDCプラグ(2.1mm)で接続するため、[２．１ｍｍＤＣプラグ付バッテリースナップ](http://akizukidenshi.com/catalog/g/gP-07356/)を合わせて使っています。

<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/eae5bc4a-9106-50e5-6dbd-48a86dba5563.jpeg" width=250> <img src="https://qiita-image-store.s3.amazonaws.com/0/111758/5ad867dc-66f7-2402-3d3a-5c65d6afc439.jpeg" width=250>

#### 拡張ボードMoto:bitの取り付け
　写真のようにするとうまいことMoto:bitのくびれ部分をレゴパーツで引っ掛けられます。下部の方は空間があり、可動幅を抑えているだけで物理的な接触はありません。
　配線はMoto:bitの左右から取り出します。余った配線は適当に押し込んでください。

<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/5914b606-6fe9-adfb-b133-6e4a8594fd4f.jpeg" width=600>

#### 拡張ボードMoto:bitへの配線
　配線後のした写真。サーボモータの接続チャネルやモータ配線C１／C１の接続についてはChibi:bitプログラミング編で説明します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/111758/652807b4-f6fc-c740-63e5-cd32d87f03a3.jpeg" width=600>

## 完成！ 首を振る Wall-E
首を振らせることができました！
こうやってみると、首が動くだけで、表情を感じられる気がするのは不思議です。

[<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111758/0858da0f-b137-32dc-efdd-1f84d493e52e.png" width="75%">](https://youtu.be/2GmnOuFGrFo)

---
## 「レゴ Wall-Eに おしゃべりAIを搭載する」へ続く

### ＜予告編＞
胴体にM5Stackを内蔵！

![スクリーンショット 2024-02-08 12.18.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111758/95e51fe6-2178-7c17-4c3e-b27e84180231.png)

### 動画
2023年11月ロールアウトした際の記録動画です
https://youtu.be/D9V47Z2d624

### Hamamatsu Micro Makers Faire 2023 展示
![IMG_5982.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111758/5a2696c3-85c5-9256-21fa-95c7c5a2f4c2.jpeg)
→ [「HamamatsuMicroMakerFaire2023」会場レポート【公式】](https://makezine.jp/blog/2024/01/hmmf2024_report.html)に掲載されました