３Ｄプリンタで作るいいかげんロボティクス（第２回）：犬猫ロボット

#はじめに
　[前回の記事](https://qiita.com/wilted_cabbage/items/9aab3b1c47a449415da3)でクモ型の四足歩行ロボットを作成しました。比較的安定した動きのクモですが、今回は別の構造のロボも試してみたいと思い、比較的犬や猫の動きに近いロボットを作ろうかと思い立ちました。
　犬や猫のような四足歩行のロボットといえば、昔から様々な研究対象にされており、趣味で作成されたものもyoutubeで大量に見つかります。実際に産業用ですでに出回っているもので、特にメジャーなのがボストンダイナミクスのspotでしょう。
　<iframe width="560" height="315" src="https://www.youtube.com/embed/zogGqjZ1AJ4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
　　
　また最近、公園の巡回点検をロボットで行うという実証実験事例もあります。
<iframe width="560" height="315" src="https://www.youtube.com/embed/AZBUcpBvoCA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
　機動力に優れ、比較的人間社会に溶け込みやすい形のこのような獣型ロボは、今後様々な場面で活用されていくかもしれません。
　しかし、現時点でこれらのロボットはクッソ高いです。spotは日本円で約800万円、中国製のUnitree Robotics社製の四足歩行ロボ「Unitree A1」というロボットでさえ、約128万もします。人それぞれ感覚の違いはありますが、なかなか気軽に買える金額じゃないですね。。。５年後ぐらいには30万ぐらいで買えるようになるかもしれませんが。
　ちなみにクラウドファンディングではありますが、主にSTEM教育用の[Petoi Bittle](https://kibidango.com/1600)という犬型ロボがあり、かなり小型ですが、こちらは４万～６万ぐらいで買えたようです。ただクラウドファインディングなので、一般的に市場出回るにはまだ時間がかかりそう。
　そんな現状では少しお高い四足歩行犬猫ロボを、比較的お安く作ってみましょう。

#目標
 獣型四足歩行ロボットを自律歩行させる

#環境
パーツ作成：[3Dプリンタ](https://www.amazon.co.jp/gp/product/B08C2M79QK) 使用素材：PLA(1.75mm)
使用基盤：raspberry pi 4
使用言語：python3.7 
必要なライブラリ:adafruit-circuitpython-servokit
コマンド↓
sudo pip3 install adafruit-circuitpython-servokit
[※adafruitの公式サイトはこちら](https://learn.adafruit.com/adafruit-16-channel-pwm-servo-hat-for-raspberry-pi/using-the-python-library)


ちなみに、画像認識AI等の搭載を想定して、処理能力の高いラズパイ４を採用しているだけなので、ラズパイ３でも問題ないと思います。以下ではSDカードへのOSインストールや初期設定、sshでの接続設定が完了している前提で書いています。

※なお、以下の内容は手順書のような体裁になっていますが、第三者が一からやっても同じように動かせるかの検証を十分に行っておらず、どちらかというと備忘録みたいな感じでとらえていただけると幸いです。

#使用したもの
| 名前 | 個数| メモ|
|:-----------|------------:|:-----------|
| [TRASKIT Raspberry Pi 4 Model B Starter Kit](https://www.amazon.co.jp/gp/product/B08F83TRY9)  | 1set |SDカード、冷却ファン付き。付属のケースは使いません。 |
| [Adafruit 16チャンネル PWM/サーボ HAT for Raspberry Pi](https://www.amazon.co.jp/gp/product/B00SI1SPHS)    |1set|サーボ制御用の便利なHAT。最大１６個までサーボを接続することが可能。ピンを半田付けする必要があります。|
| [マイクロサーボ SG92R ](https://www.amazon.co.jp/gp/product/B00WQWZXKW)    |8個|SG90Rより高トルクのため採用。なお同型のサイズのサーボなら別の種類を使うことも可能です。|
| [Ecool 電池ケース 電池ホルダー](https://www.amazon.co.jp/gp/product/B07WD6QC12)    |1個|HAT用の電源ケース。スイッチ付き|
| [USB AケーブルからUSB C 90度ケーブルナイロン編み](https://www.amazon.co.jp/gp/product/B088NMLD5Q)    |1本|メインボディの設計上、普通に電源ケーブルをさせないので、L字型のケーブルを採用|
| [Anker PowerCore+ mini](https://www.amazon.co.jp/gp/product/B0146GSZYG)    |1個|ロボ完全自律のためラズパイ用の電源。80g。|
| [パナソニック エネループ 単3形充電池](https://www.amazon.co.jp/gp/product/B07FS86NRM)    |4本|サーボHATへ共有用の電源|
| [日本ケミコン アルミ電解コンデンサー 25V 1000μF](https://www.amazon.co.jp/gp/product/B01ANT2N7A)    |1個|サーボを８個使用するため、念のため使用|
| [Geekworm 2x20 40ピン](https://www.amazon.co.jp/gp/product/B08F2D64R7)    |1個|HATとラズパイの間に冷却ファンを取り付けたかったので、幅を広くするため、HATと基盤の間に挿入してます。|
| [LEOBRO マジック結束バンド 白 ](https://www.amazon.co.jp/gp/product/B082SMN3XW)    |１巻|モバイルバッテリーと基盤の固定用|
| [ニチバン 両面テープ ナイスタック 超強力タイプ](https://www.amazon.co.jp/gp/product/B0017XC3DQ)    |１巻|電池ケースをメインボディに張り付けるために使用|

全体でかかった金額は３Dプリンタを除けば、全部新しく買うとしても、3万いかないぐらいでしょうか。ラズパイはセールで買うか、sdカードは流用するなどすれば、もっと安価に作れると思います。

サーボを固定するネジはM2サイズのネジとナットを使用していますが、下記のセットが一箱あれば問題なかったです。

| 名前 | 個数| 
|:-----------|------------:|
| [M2六角ナット100個付き 370個セット](https://www.amazon.co.jp/gp/product/B083NXNBS9)    |1セット|

あと動かすだけなら不要ですが、[カメラモジュール](https://www.amazon.co.jp/gp/product/B01D1D0DJ0) があると、画像認識とかやりたいときに便利です。（作成した３Dモデルはカメラホルダーも作ってます。）

#歩くためのアプローチ
　前回作成したクモ型ロボットは、重心が低くく安定しており、体重も軽かったため、比較的重心移動がやりやすかったのですが、今回は獣型の上、サイズが比較的大きいため、重心を保ったまま安定して歩かせることが課題でした。
　実際の足の動かし方ですが、[こちらのサイト](http://www.mechatronics.me.kyoto-u.ac.jp/modules/kenkyu/index.php?content_id=16) を参考に、トロット（左前脚と右後脚（右前脚と左後脚）を同時に進める）方式を採用しました。


#モデリング
　ボディのモデリングですが、モバイルバッテリーとサーボ用の電池等を合わせてだいぶ総重量が重くなってしまったため、かなり設計を切り詰め、軽くなるようにデザインしてます。ただ、それでも550gぐらいにはなってしまいました。また、足のパーツを短くし、できるだけサーボのトルクを十分発揮できるようにしています。各パーツは以下のような形です。(githubにもblenderのファイルも併せてアップロードしてます。)

・メインボディ（main body）
　→ラズパイ４基盤を乗せるメインボディ。四つのサーボ用の四角い穴が開いてます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/449beb18-6a62-8f1d-f909-5ea181671610.png"width=30%>
・ファン固定用パーツ(fan)
　→CPUファンを取り付けるための部品。ファンのサイズは（30 * 30 * 7mm） 上記で紹介したtranskitのラズパイセットには二つ入ってます。ファンがあるだけでもcpu温度が10度ぐらい違います。ファンの給電にはHATの１６組（3×16）のピンのうち一組を使用します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/3dd735fa-2507-5160-49f7-8206c2f3918a.jpeg"width=30%>
・脚(foot)
　→一番下の地面に接する足。サーボ用の穴が開いてます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/0e5d2d48-7b8e-de2c-8b29-87f28b348618.png"width=40%><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/3616524c-3546-c569-e61f-664b00bb771d.png"width=40%>


・前太もも(leg_front)
![front_leg1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/80917a39-90dc-b8cb-0c53-08d194417418.png)
・後太もも(leg_back)
![back_leg1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/777407a9-9e15-949f-f3d9-e1b643011e95.png)
　→太もものパーツで、メインボディのサーボで動きを制御します。二つずつ印刷しますが、左右のモデルを別々に作ってないので、各種類ミラーで対称向きのものを一つずつ作ってください。

#コーディング
 [githubページはこちら](https://github.com/shinacabbage/dog)
 前回同様、各サーボの角度をステップごとに合わせるという形です。
　いまのところ、前進するモーションしか作っていないです。

#組み立て
①Hatにピンをハンダ付けし、HATを完成させます。またコンデンサを取り付けます。
　　→ピン穴はそれほど小さくはないですが、初めての方、ハンダ付けが久しぶりの方は、練習キットなどで練習した方がよいかもしれません。（というか私もはんだ付けを失敗したのか、16個のピンの中でいくつか反応しないピンがありました。）
　　→[参考：はんだ付けのコツ](https://www.youtube.com/watch?v=NhDiQtUeF-M)
    →なおコンデンサは極性(プラスマイナスの向き)がありますので注意してください。

②メインボディ裏に電池ケースを取り付けます。取付個所は写真の横長の四角い穴から約１cmあたり、幅はボディからはみ出さないよう注意して両面テープで固定します。ボディ裏側にバッテリーパックをスイッチが表側になるように、強力両面テープで固定します。なおメインボディは横長の四角穴（ファン取り付けパーツの穴）がついている方が前です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/cc0320fd-b8cb-7db5-fcc9-15b6a525906c.jpeg"width=30%>

次に、メインボディにサーボを四つ。サーボの軸が前足は前側、後ろ足は後ろ側になるようにとりつけます。M2ネジ(8mmか10mm)とナットで固定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/fd8afb6f-d1ab-c42d-29f8-97d675bbee6a.jpeg"width=30%>


メインボディ上にラズベリーパイを設置し、Geekworm 2x20 40ピンをGPIOピンに一つ接続し、cpuファンを取り付けたファン固定用パーツを固定穴にさして、ラズパイの上に設置し、上からHATを接続します。(下記左図の写真だとわかりづらいですが、HATとラズパイの間に、黒い層があり、これが延長ピンです。)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/0a563f00-e9dc-2c0f-99b8-c6eb58ea4ffd.jpeg"width=30%>　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/1b399de6-0226-ff86-9d4f-50994279fa22.jpeg"width=60%>

ファンのケーブルを１６組のピンケーブルのうち、一つにつなぎます。３つのピンのうち、プラス（赤）をVに、マイナス（黒）をGに接続します。また、電源ケーブル上の右の写真の、手前の緑のケーブルのように、接続します。

③一番下の足にサーボを取り付けます。M2ネジ(8mm)とナットで固定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/3b545c6c-4e5f-befa-52fc-e274e78d9b23.jpeg"width=30%> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/e54afc4a-43eb-6362-c051-cea2fdb9c7ef.jpeg"width=30%>


④太ももの足にサーボのアームを取り付けます。サーボに同梱されてるネジでアームを両側固定してください。サーボの軸固定用のネジは角度の調整後、最終的に取り付けるのでこの時点では取り付けません。なお、サーボ付属の固定ネジを使わず、M2(10mm)の長さのネジを固定ネジとして使用し、足のパーツごと固定しています。

⑤③、④を繰り返してそれぞれ四つ作ります。

⑥モーターを各ピンに接続して、プログラムを実行し、各サーボの初期角度を調整します。
※足同士が干渉しあう可能性があるので、サーボとサーボのアームは必ず取り外した状態でプログラムを実行してください。

 サーボが動かない場合
   →ライブラリがインストールできてるか確認
   →ファンを繋いでみる等、ピンが通電してるか確認。
   →他のピンに指しても動かないか確認。設定プログラムも指したピン番号に書き換えてください

 サーボの初期角度設定が完了したら、サーボのアームを下記の写真のように取り付けてください。各サーボ90度に設定されますので、太ももと脚をだいたい90度になるように取り付けます。問題なければ各サーボの軸をM2（10mm）ネジで、太ももの脚の穴から、脚ごと８つのサーボ軸を固定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/a5b0ea6a-832f-7c4b-6c5a-0ac1be675eda.jpeg"width=70%>

⑦モバイルバッテリーをボディ前方にマジックテープを使って固定すれば、出来上がりです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276368/488bf5ce-9161-73b4-179d-c32ae3fee502.jpeg"width=30%>




#動作確認
https://vimeo.com/562165775

https://vimeo.com/562166321

https://vimeo.com/562165926

猫ロボの上に乗っかってるのはスピーカーです。ある程度の積載も割と行けそうです。
小さい段差も乗り越えられますね。

#今後の展望
　せっかくカメラ搭載してるので、画像認識のモデルを乗せて、自動運転をさせるのも面白そうです。
　
#参考サイト
　 [脚ロボットについての研究　 京都大学 松野研究室](http://www.mechatronics.me.kyoto-u.ac.jp/modules/kenkyu/index.php?content_id=16)