ロボットの作り方

この記事は[UEQareer Advent Calendar 2016 ](http://qiita.com/advent-calendar/2016/ueqareer)16日目の記事です。
#はじめに
みなさんは**ロボットを作りたいな**と思ったことはありますか？
実はここ最近になってロボットを簡単に作ることができるようになってきました。

今回は入門の一つ手前、そもそもどのような考え方で作っていけばいいのかなどの考え方について書いていこうかと思います。

**実はロボットを作ってみたかったんだよね**という方
**ソフトだけじゃなくてハードもやってみたいな**という方。
**魔術師として使い魔が欲しいな**という方。
そういった方の一助となれば幸いです。

ただし**我流**ですのでご留意ください。
いろんな用語が出てきますが詳細はGoogle先生に尋ねてみてください。

#ロボットの要素
そもそもロボットを構成している要素には何があるのでしょうか。
個人的には
    1. **エネルギー源**・・・いわゆるバッテリーなどのこと。人間でいうところの**脂肪**や**肝臓**。
    2. **頭脳**・・・いわゆるマイコンなどのこと。人間でいうところの**脳みそ**。
    3. **感覚器**・・・いわゆるセンサーなどのこと。人間でいうところの**目**や**耳**。
    4. **骨格**・・・いわゆるフレームなどのこと。人間でいうところの**骨**。
    5. **駆動装置**・・・いわゆるモーターなどのこと。人間でいうところの**筋肉**。
これらのものがあるんじゃないかと考えています。

逆に言えば**これらの要素を用意してしまえばロボットが作れちゃう**ってことです。

##エネルギー源
エネルギー源として用意すべきは**バッテリー類**です。
簡単に入手できるのは**乾電池**ですかね。簡単なロボットならそれだけで動きます。
よりパワフルな動作をさせるときは**ラジコン用のバッテリー**（Li-PoとかLi-Feとか）を用意しましょう。
選ぶ際はマイコンやモーターなどが必要とする**電圧**や**電流**、ロボット自体の**稼働時間**に注意しましょう。電池の容量は**mAh**、放電レートは**C**といった単位で表されています。

##頭脳
頭脳として用意すべきは**マイコン**や**パソコン**などだと思います。
実際問題センサーやモーターなどの制御が行えるだけの**賢さ**があればいいので、お好みでどうぞ。私の場合はレジスタをいじるのがかっこいいと思っていたので**SHマイコン**や**RXマイコン**を使っていましたが、手を出しやすいのは**Arduino**や**Nucleoなどのmbed系**かなと思います。
マイコンは入出力に使えるピンに限りがあるので、ロボットの規模に合わせて**マイコン自体の数**や**ピン数**の選択を行いましょう。
プログラミング言語は使うデバイスごとに使えるものを使うといったことになると思います。私の場合は**C**や**C++**が多いです。最近は**Python**でも開発しています。

##感覚器
感覚器として用意すべきは**センサー類**です。
これは**ロボットに知らせたい情報**が何なのかを考えて選びましょう。
ロボット自体の**姿勢**を知らせたければ**加速度センサー**や**ジャイロセンサー**、目標物までの**位置や距離**を知らせたければ**カメラ**や**測距センサー**といった感じです。
その他にも**温度センサー**や**匂いセンサー**、**光センサー**などなどやりたいことに合わせて選びましょう。
ちなみにラジコン感覚でロボットを操る場合は無くても良かったりします。その場合のセンサーは人間の目や耳、鼻になります。

##骨格
骨格はまぁロボットが形を保てればなんでもいいと思います。
**紙**だったり**段ボール**だったりもなかなかいいですし、もっと強度が欲しければ**ABS樹脂**だったり**アルミ**だったりといった感じです。
デザインは**全体の形**や**使うマイコンやモーターなどの位置**に注意しながら行うことになると思います。例としてロボットハンドを作る場合であれば、全体の形は人間の腕のようにしてロボットの根元にマイコンを、各関節にモーターを設置、といった感じです。
設計は**紙に手描き**から**CAD**を使うまでいろいろありますが、やはり便利なのは**3DCADソフト**でしょう。学生であれば**Autodesk**の**Inventor**や**Fusion360**が無料で使えたり、**FreeCAD**というオープンソースのソフトがあったりします。設計の仕方自体はそれらのソフトのチュートリアルをこなせば身につくはずです。
実際に骨格を作るとなった場合は**手加工**や**加工業者に頼む**、**CNCフライスを買う**、**3Dプリンタで出力する**などの手段があります。（余談ですが3Dプリンタは楽に造形ができるので最近多用しています。出力代行業者もあるので気になる方は試してみるのもいいかと。）

##駆動装置（アクチュエーター）
駆動装置の代表は**モーター**です。一口にモーターといっても**無限回転**させるのか**角度指定**で動かすのかと用途は様々です。無限回転させるだけならばいわゆる**DCモーター**を使うのがいいでしょう。角度指定をする場合は**サーボモーター**や**ステッピングモーター**が便利です。**DCモーター ＋ ロータリーエンコーダー**でも可能です。
選ぶ際は必要となる**回転数**だったり**トルク**だったりを考慮しましょう。この両者はよくトレードオフの関係になっているのでどちらが必要なのかをよく考える必要があります。
考えたくない場合は市販されているキットを使いましょう。**タミヤ**が**ギヤボックス**や**タイヤ**、**キャタピラ**などのキットを出していたりするので利用するとよいかと。
モーターの駆動には**モータードライバ**というICがよく使われます。というのもモーターは結構電流を流さなければならないのですが、マイコンに直に接続するとマイコンの性能を超えて電流を流そうとして最悪の場合（マイコンが）死に至るからです。

##その他
上述した要素以外にあると便利なものとしては**ディスプレイ**や**スピーカー**などのロボットからの出力を表示するものです。ロボットとコミュニケーションをとりたい場合などには必要になってくると思います。

#ロボットのつくりかた
では実際にロボットをどのように作るのか、それは
    1. コンセプトを決める
    2. デザインを起こす
    3. 必要なパーツを見繕う
    4. パーツとの兼ね合いを見ながら詳細にデザインする
    5. デザインからフレームを設計
    6. フレームを加工
    7. 全パーツを組立
    8. プログラミング
    9. デバッグ
    10. 完成
こんな感じです。

##例として茶運びロボットを作るとすると
###コンセプト
お茶を運んでくれるロボット
###デザイン
駆動部分はキャタピラ
湯呑を載せる荷台がある
キッチンからデスクまでお茶を運んでもらう
###パーツを見繕う
頭脳はArduinoで十分かな
キャタピラのキットを買ってこよう
モータードライバも必要かな
荷台には湯呑検知用に圧力センサを用意しよう
キッチンからデスク線を引いてライントレースをしてもらうのにフォトセンサーを買ってこよう
それぞれの接続に配線やらネジやらを買おう
###再デザイン
それぞれパーツの寸法をデザインに反映
キャタピラユニットの上にArduinoは縦置きにして設置その隣に荷台、防水対策もしておく
フォトセンサはキャタピラの前側下向きに設置
###フレーム設計
Arduino設置フレームはL形でネジ穴の位置を合わせておく
荷台はただのトレイでいいかな
###フレーム加工
3Dプリンタ出力代行業者に設計データをぽい
あとはよろしく
###組立
パーツをデザイン通りに組み立てるだけ。
###プログラミング
Arduinoさんにフォトセンサーと圧力センサーの処理を書き込み
モータードライバへの出力も忘れずに
フォトセンサーの値をモータードライバへの出力に反映させてライントレースさせよう
###デバッグ
湯呑検知の閾値を変更
モーターの動きが激しいから緩やかにしよう
###完成
茶運びロボットが完成
快適なお茶ライフ

こんな感じです。

#さいごに
今回の記事では**ロボットの要素**と**つくりかた**について書いてみました。
かなりざっくばらんに書いているので詳しい話は他に解説をしている方がいるのでGoogle先生に尋ねてみたください。
ただこんな感じで難しく考えなくてもロボットができるんだということを知ってもらえればいいかなと思います。
ではでは