nyabot’s diary

電気猫の夢を見るお話

制作記録_2020(04-12)

今年の春頃から、作業した内容や考えたことのログをメモに残しています。
年末だしせっかくなのでそれをここに上げておこうという試み。
こういう誰の役に立つでもない内容の浅い日記的なやつ、ブログ=WebLogの古い在り方って感じがしてすき。約17,000文字。


2020/04/18

赤外線送信に再挑戦する。 前回は、赤外線の記録はできたが、送信がうまくできなかった。 原因の一つとして、赤外線LEDの電流(=光量)不足が考えられる。まずはここを修正して、試すことにする。 抵抗値を書籍をもとにしたものから下げ、LEDに200mA程度流れるようにした。本来は過剰な電流だが、リモコン用としてなら照射時間が短いことから問題ないはず、というWeb情報と自己判断による修正。 結果、前回うまくいかなかった照明の操作が問題なくできるようになった。おそらく、他の家電も同様に操作できるものと思われる。

2020/04/20

bodyの作成に着手したい。電子部品のテストと異なり、検討・修正の繰り返しを何度も行う必要があると想定。故に、早い段階から着手しておき、思考時間を多く取るようにしたい。 今日は、急がば回れという考えから、CADソフトの習熟に努めることにする。経験則として、こうしたツールを用いる場合は、手を動かすより先に知識を得る方が最終的には効率が良い。今回のように、完成物にクオリティを求める場合は尚更だ。

2020/04/29

数日前から脚部の設計を再び始めている。 サーボを固定するフレームと、塗装してフレームに被せる外装を分けて作る。

2020/05/03

脚部フレームの大まかなモデリングはできた。 複数の脚とボディをデータ上で仮組みすると、ひざ下の短さが目立ったので延長。 不恰好なのは良くないが、長くしすぎると成形と制御が難しくなる。 テストプリント後、動作に応じて設計を大幅に見直す必要が生じるかもしれない。

ボディフレームの作成に際して、予め使用するすべてのモジュールをモデリングしておく。ボディフレーム上に配置するために(配置可能なボディフレームを作るために)、少なくとも正しいサイズを把握しておかなくてはならないからだ。

各モジュールのモデリングを終えたら、ボディフレームの設計に取り掛かる。 脚部が本体の最下層に位置し、クーラーに取り付けたレンズが最上層に位置 する。

2020/05/05

新しいアイデアが湧いた。ニキシー管時計を取り付けたいと考えていたら、その電源供給用にUSBコネクタが欲しい、と思った。予めつけておけば、拡張時にも使えるし、非常時にもスマホの充電なんかに使えるかも。 また、スピーカーの電源もバッテリーから直で取れば、ノイズの削減ができるのではないか。

2020/05/09

脚部のモデリングを行なっている。フレームと外装の分離が課題で、外装部分に曲線を多用する場合の自然な接続が難しい。また、各パーツが干渉しないように調整するのもなかなか困難。 しかし、脚部は顔や頭部に次いでデザイン的に重要なポイントなので、妥協はしないようにしたい。

2020/05/11

脚部設計の続き。 足の根元部分のフレームはほぼできた。モデリングを進めるうちに、フレームと外装が干渉することが判明したため、外装を作り直すことにする。 曲面かつ薄い外装部分に負荷をかけるのはたわみなどの心配があるし、ネジ穴を空けるのは美しくない。数時間が水の泡だが仕方ない。妥協はしない。

2020/05/15

二日前に、尻尾を曲げるためのリンク機構を考案した。twitterにあげたところかなり反響があり、新しい知見も得られた。 尻尾等にはワイヤ駆動を用いるのが定石らしい。しかし、ゾイドなど同様のリンク機構で動くホビーもあり、動作や保持、堅牢さを考えるとこちらにも優位な面がある、らしい。 サーボモータで動作させることを考えると、サーボの動作角は余裕をみて120度で、尻尾の先は180度+αくらいの増幅率にしたい。 リンク間の長さを調整することで調整していく。トルク負けするようならギアで減速して、というのも考えたが、もともとの動作角に制限のあるサーボモータではあまり意味がない(力の加わる接続点をサーボに近づけると、その分動作の増幅率が大きくなってしまう)。実際の寸法で作成し、トルクの不足に応じてサーボを変更できるように設計するか。

2020/06/03

足の設計とテストプリント完了。 足は昨年からあれこれ考えていたので、かかりきりではないとはいえ、半年以上かかったことになる。年始にはすでにリンクを用いた2軸のテストプリントをしていたが、そこからはかなり大幅な変更を加えた形だ。結果として動作の自由度はとても高くなり、電源から変更したことで全体の設計やトルクにも余裕が生まれた。コストも大幅に増したが仕方ない。 概ね完成といったところだが、実際に組むと、いくつか修正の必要な点が見つかった。

  • サーボの中心穴の径拡大→中心は大きめにする
  • サーボホーン固定用の穴を追加
  • フレームの幅1mm程度大きく→サーボを固定した際、やや歪んでいるため調整
  • 爪先の固定方法修正→現在ではネジが余る、止めるのも困難
  • 配線用の穴の形状を最適化→大きすぎたり、線が暴れたりする
  • 第1外装と第1フレームの固定用爪追加→膝側がぱかぱかしそう
  • 第2外装と第3フレームの干渉低減?→改善できればもう少し可動域を増やせる。要検討。
  • 脛の長さを短くする→要検討。1,2cm短くしてもいいかも。

今は気乗りしないので、時間のあるときに修正する。

2020/06/04

今日からは尻尾の設計に入る。 リニアサーボという、直線運動をするサーボモータがあるのを知った。回転運動を直線運動に変換しているものだ。 まずは真似てギアを作り、手持ちのサーボで直線運動を操作できるようにするところから始めようと思う。 180度の回転をおよそ2cmくらいの直線運動に変換するつもり。 尻尾の曲げ伸ばしにはリンクを用いて、リニアサーボで動かす。 直線運動の長さに合わせてリンクによる曲げ伸ばしの角度を計算をするのは至難なので、作成したモデルから曲げ伸ばしに必要な長さを求め、それに合わせてギアの歯の数や大きさの方を調整する予定。

リンク構造を使用した骨組みをまず作り、そこに配線用の空洞と外装を加える。

2020/06/某日

直線運動への変換は非効率で不要だ。 単純にしっぽを上げる回転運動をサーボで操作できるようにギアを作ればいい話だった。 作成したモデルでは、サーボの180度を60度に変換することとした。60度程度ならギアが大きくても高さを抑えられる。

2020/06/10

しっぽのリンク部分をプリントし、動かしてみた。 ギアの噛み合わせも問題なく、サーボのトルクも不足はしていなかったようで、今のところは成功と言えそう。 しかし、外装部を取り付けることで重量も増加するため、実際にトルクが足りるかどうかはやや厳しいところだ。 また、プリントすることで細かな数値、特に厚みのずれによる干渉が判明したため後日調整する。 サーボMG90Sを180度動かせていなかった(150度程度だった)ので、後日プログラムも修正する必要がある。

2020/06/24

尻尾の水平方向の可動について、先週から少しずつCADをいじっている。 歯車を用いて120度くらい動かせるようにするつもり。もともと180度動かす必要はないし、トルクも単純計算で1.5倍くらいになる。 サーボを取り付けるスペースと、軸を中心にする兼ね合いから、形状がやや複雑になる。

2020/06/25

尻尾の根元部分のサーボを覆うパーツを作った。 サポートを多く使用したため、PLAでは問題なかったものの他の素材だと綺麗に除けなくなるかもしれない。 また、口が狭くサーボが組み込めないという致命的なミスもあり、根本的に修正が必要。 印刷後の部品を見ると、積層間の定着が弱いようだった。フローの問題か、温度の問題か。次回は温度を少し上げてみることにする。

フィラメントについて。PETGが完成品の素材には適していると考えていたが、PC(ポリカーボネート)もアリかも。しかし、その場合は塗装が困難になる。ひとまずは保留。力が加わるフレームにはPETG、外装はシルバーのPLAとかでもいい気がするが、悩ましい。

2020/07/07

ここ一週間ほど、ロボットではない動かないモデルを作っている。 fusion360レンダリング機能を使うと、自分でも驚くほどクオリティの高い(高く見える)モデルができ、楽しい。 昨日、このモデルをもとにARで表示ができないか、というアイデアが浮かんだ。今日調べてみたところ、Webを使って思ったよりも簡単に実装する方法がありそう。しかし、fusion360はあくまでも設計用のソフトであり、そういったモデルの作成には適していないみたいだ。かわりに、blenderという3DCGソフトを使用すると良さそう。使い慣れてきたfusion360でオブジェクトを作成し、blenderで取り込んで調整、といった流れでモデルは作れそうな気がする。 ARはロボットと比べると実在感で大きく劣るが、優れている点も多い。 まず、多くの人に手軽に見てもらうことができる。また、モデルの作成も物理的な制限がほぼないため容易だと想像できる。自重を支えなくてよかったり、モーターや基板やバッテリーなどの制限を気にしなくていいのは本当に楽で良い。アニメーション等はどの程度できるのかわからないが、ロボットに同じことをさせるよりも簡単なのではないか、と思う。面白そう。

2020/07/24

ARのモデル作成と表示について。 7/13にARのモデル表示用サイトを公開。着色は間に合わなかったので、その後数日に渡り更新を続けた。 SNS上でもそれなりの反応が得られ、スクショをあげてくれたフォロワーさんも数人おり(とてもうれしい)、個人的には満足。 共有の手軽さという点はやはり大きい。共有したものがモデル自体や設計図だったなら、それを作る人は一人もいなかっただろう。 しかし一方で、その空虚さも感じた。データはデータに過ぎず、と言うとやや語弊があるが、そこから得られる情報量が、実在するものと比べると圧倒的に少ない。何らかの方法で情報の不足を補うことができれば現実に近しくもなるのだろうが、そのためには例えば膨大な分岐を持つ対話機能など、より実現が困難であろうものを要する。データにリアリティを持たせることは、実物にリアリティを持たせるよりよほど大変だということを実感する。今回作成したARモデルが今後動いたとしても、恐らくフィギュアへの認識とさほど変わらず、そこに心は感じない気がする。あるいはVRとかなら、多少は違うのかもしれないが。

2020/08/21

一、二週間ほど前に、リンク機構を用いた尻尾のテストプリントをした。軸径等のわずかな誤差の重なりによって、全体で大きくがたつきが生じることがわかった。重量が思ったより増えてしまっていることも原因かもしれない。現時点では改善が困難であるため、簡素な尻尾をゼロから作ることにした。

今日ようやく尻尾ができた。 可動は根元から上下左右のみとなり、リンク機構を用いたものと比べて面白みには欠ける。一方で、構造はシンプルになり、サイズやデザインの統一感ではこちらが勝っているように思う。 塗装や見栄えを重視し、尻尾は二つのパーツを重ねて作ることとした。もともと1パーツとして印刷するには大きすぎたため、部品を繋ぐ上でも2層構造は都合がいい。 尻尾の先端と根元だけ付け外しできるようにネジで固定し、他は接着してしまう予定。 部品の強度や、自作のギアを用いないためトルクがやや不安ではあるが、配線経路まで含めてひとまず納得のいくモデルが完成したので、次に進む。

足の以下の修正をまだ行っていなかったため、行う。再掲。

  • [x]サーボの中心穴の径拡大→中心は大きめにする
  • [x]サーボホーン固定用の穴を追加
  • [x]フレームの幅1mm程度大きく→サーボを固定した際、やや歪んでいるため調整
  • [x]爪先の固定方法修正→現在ではネジが余る、止めるのも困難
  • [x]配線用の穴の形状を最適化→大きすぎたり、線が暴れたりする
  • [x]第1外装と第1フレームの固定用爪追加→膝側がぱかぱかしそう
  • [x]第2外装と第3フレームの干渉低減?→改善できればもう少し可動域を増やせる。要検討。
  • [x]脛の長さを短くする→要検討。1,2cm短くしてもいいかも。→しっぽ作成後全体のバランスを見たらちょうど良さそうなので保留。

また、しっぽの設計に関しても、若干改善の余地があるように思う。 しっぽの胴部は各パーツを接着する予定ではあるが、面積も狭く強度が心配だ。

2020/08/25

全体像と頭部の動作構造について、スケッチを描いた。頭部は3軸で動かす予定。サーボは下から順に、左右、上下、傾き、と動かすために3つ使用する。ピッチ・ロール・ヨーとも呼ぶらしいが、どれがどれかまだ忘れそうなので使わない。胴体に固定されるサーボは一番下の一つだけなので、動作の優先度(?)を考えて決めた。 例えばこの順番なら、「左を向いて」「顔を上げて」「右に傾ける」というかたちで指定ができる。この順番が一番感覚的に指定できそう。

2020/08/26

脚部の修正を行った。時間をあけたおかげか、かなりスムーズに進められた気がする。

胴体の作成に入る。 足と尻尾を配置してみたところ、どうにもイマイチな形状になる。サイズのバランスの問題かも。胴体はなるべく小さくした方が良さそう。

2020/08/28

胴体の作成をやり直した。足の配置を均等にし、少し詰めてみた。まだバランスは今ひとつな気もするが、足の動作範囲を考えるとこれ以上は限界もある。 降圧コンバータやラズベリーパイのモデルも載せてみたが、足のサイズが大きいおかげで胴体の積載スペースは多少余裕がありそう。あとは頭部や胴体の形状で見栄え良く調整することにする。

2020/08/29

今後の設計の進め方について

頭部のサイズや形状が確定しないと、胴体の最適化ができない。 まずは頭部を作る必要があるが、そのためにはどのモジュールを正式に採用するか確定しなくてはならない。 つまり、現在まだ試していないセンサやカメラ等を先にテストしてから設計の続きを行うこととする。 同時に、尻尾の先につけた赤外線LEDが正常に動作するか、また、暗視カメラモジュールと組み合わせて活用できるかどうかも確認しておきたい。

そのほか設計に関して

設計の難度を考慮して、目の可動はなくす方向で進めたい。赤外線は尻尾からの照射のみでやってみる。 頭部につけるものは、OLED2、カメラ、マイク、スピーカー、ToFセンサ?、照度センサ?、タッチセンサ2?、温湿度センサ? 目にOLED、口と鼻にカメラとマイク、耳か頬にスピーカー。額と顎にタッチセンサ。 ToFセンサはあご下辺りにつけたい。 照度センサは後頭部・首元あたりにつけたい。スペース含め要検討。横からなるべくファンの光等が入り込まないように設計する。

2020/08/30

ラズベリーパイに冷却ファンを取り付け、カメラモジュールのテストを行った。mjpgstreamerを用いたが、以前の方法ではうまくいかず、書籍の手順に従ったところ無事実装できた。 USB接続のウェブカメラよりも動作が安定している様子で、ストリーミングが滑らかだ。 カメラモジュールに付属のコードは少し短いので、長めのコードを買う必要がありそう。

2020/08/31

テストを行うにも、いちいち配線をし直したりしていて面倒になってきた。 決まったピンを使っているわけでもないから、期間が空くと忘れて一からやり直す羽目になりがちだ。 そこで、先に全体の配線を決めてしまおうと思う。 まず、使用するモジュール・センサー類を列挙し、繋ぐ必要があるもの(3.3V, 5V, GND, GPIO, etc…)を確認する。あとはラズベリーパイの各ピンと電源から降圧した5Vを直接とるものに振り分けていけばいい。

  • サーボドライバー *2
  • 電圧
  • タッチセンサ *2
  • ToFセンサ
  • 温湿度センサ
  • 照度センサ
  • 赤外線LED
  • スピーカー(電源必要?)
  • 冷却ファン
  • マイク(専用コードのみ)
  • カメラ(USBのみ)
  • OLED *2

ラズパイのピンの一覧表を作ったので、これを使って整理していく。 表のおかげで使っても後々支障のないであろうGPIOもわかった。

2020/09/04

胴体の作成を進めている。各パーツの形状の調整と、接続部の追加を行った。 外観にあまり影響しない作業なためタイミングを逃しがちで、しかしながら必要不可欠なことでもあるので進められてよかった。 だいぶ実現に近づいた気がする。 土台となる板状パーツがまだ印刷するには大きすぎるので、うまく分割しないといけない。 PETGはPLAとくらべて柔らかいようなので、たわまないように補強も入れておきたい。(あるいは、プレート状のもの、内部フレームはPLAで作るのもアリか?)

課題として表出したのは、バッテリーの配置に関する問題。 充電器とプラグの形状等から、充電の度に取り外す必要がある。ボディの最下部に引き出しのようなものを作り、そこに収めることにしようと思う。 同時に、ラズパイのみへの給電用のUSBについても検討。 バッテリーを使用しないときはラズパイの電源のみ入れるため、microUSB端子にはコードを挿しっぱなしにして、バッテリーからの給電はピンから行おうと思う。 バッテリーを使用する際はUSBコードはボディに格納しておき、バッテリーを使用しないときだけコードを引き出せるようにしたい。 こちらも、ボディの最下部に配置すると都合がいい。構造について検討していく。

2020/09/05

バッテリーの配置スペースの確保のため、胴体下部のサーボ固定部分中央を2層構造に修正。 あわせて、ボディのフレームを印刷できるサイズに切り分け、固定用の形状を追加。 サーボモーターのコードが綺麗に収まるかが少し心配。収まりが悪い場合は、結束バンド等で何とかするつもり。 固定用のねじ穴の配置が難しく、思った以上に設計に時間がかかった。 今回の修正により、内部の空きスペースがかなり減った。基本的に胴体部分の拡張は現時点では考えていないため、好ましく捉えることにする。

2020/09/07

電源まわりの回路について検討。 以前スピーカーに乗っていたノイズが電源を原因とするものならば、ラズパイへの給電とスピーカーへの給電を分けたい。 また、複数のサーボドライバーPCA2685へ5Vを流す際の配線についても確認する必要がある。 これらが決まらないことには、本体のモデリングが進められない。 電源の切り替えには物理スイッチを用いるつもりだが、とすると本体外装の設計を多少見直す必要が出てくるかもしれない。そのあたりも踏まえて今後詰めていく。と思ったが、スイッチは調べてみると流せる電流が大きくなく、使用するにはトランジスタやFETを使う必要がありそう。実装するためのスペースも考えるとかなり難しく、今回は見送ることにしようと思う。 スイッチを用いることなく、安全に電源の切り替えを行えるようにする。とすると、やはりバッテリー駆動時はGPIOピンから給電し、アダプター接続時はmicroUSBから給電、というのがいいかもしれない。

2020/09/11

先日の記述について二つ訂正。 スピーカーのノイズについては、電源を変えてもなり続けていたため、別の原因があるはず。オーディオジャックを外しても鳴り続けるようならラズパイ側に問題があり、そうでないならば回路に問題があると考えられる。 どちらにしても、回路を改善することでノイズは抑えられそうだが、かなり大掛かりな改造になりそう。 ラズパイ側の問題でないなら、もう一つ同じスピーカーを買って試してみるのも手だ。あるいは、別のスピーカーを試してみてもいい。

スイッチはものによっては問題なく使えそう。バッテリーとアダプタの切り替えをする、電源の完全なON/OFFをする、には同様の仕掛けは何かしら必須なので、やはり採用する方向で進める。

今後の流れについては、次のように進める。

  1. 必要なモジュールの選定
    1. スピーカー
    2. 物理スイッチ
  2. 接続方法の確認
    1. 2台目のPCA9685への5V給電が1台目のPCA9685から可能か確認
    2. 各モジュール、センサー類の使用するGPIOピンの確定
    3. 実体配線図の作成
  3. 回路の作成/寸法計測
  4. 頭部の作成
  5. 胴部の作成

スイッチはトグルスイッチをAliで購入した。定格は6A125VAC。一般にAC125VはDCにすると25V以下ならば同等の電流を流すことができるそうなので、5V3Aのラズパイ電源用なら問題ないはず、という予想。

2020/09/12

トグルスイッチに加えて、プッシュスイッチも載せることにした。 胴部の空きスペースに台を作り、それらを設置する。胴部を大きめに作っておいたことが幸いし、ちょうど収まった。 ボディの後方に温湿度測定モジュールと照度測定モジュールを設置する予定。

2020/09/13

fritzingで実体配線図を作ろうと思ったが、パーツを探す手間の方がかかってしまう上にそもそもパーツがない。作るのも調整するのも難しそうなので、今回は使用しないことにする。

I2C通信が少し理解を深めた。ラズパイのピンはSDA,SCLの2ピンだけだが、並列して機器をつなげることで、該当するアドレスの機器を指定して操作することができる。 おそらくセンサー類はこのI2Cで接続するはずなので、それぞれのアドレスも調べて確認できるところに書いておこう。アドレスがわかれば、あとは並列でつなぐだけでいい。

ラズパイ3の電流容量は、3.3Vは100mA程度、5Vは電源-1400mAを目安に、と書かれていた。 5Vの方は余裕があるが、3.3Vの方は気をつけた方がいいかもしれない。 ちなみにOLEDの消費電力はフル点灯で0.08Wとのことなので、3.3Vだと24mA強の計算。ふたつで50mA弱。

モジュール 電圧(未確認含む) 接続 アドレス等
PCA9685(1) サーボドライバ 3.3V I2C
PCA9685(2) サーボドライバ 3.3V I2C
OLED SSD1306(1) 128*64 有機EL 3~5V I2C
OLED SSD1306(2) 128*64 有機EL 3~5V I2C
INA219 電流電圧センサー 3~5.5V I2C
DHT22 温度湿度センサー 3.3V-5V
BH1750FVI 照度センサー 3-5V I2C
VL53L0X ToF測距センサ 3-5V I2C
TTP223 タッチセンサ 3.3V
赤外線LED 5V トランジスタ2SC1815使用
赤外線受光モジュール

接続に関してはSPIが使えるモジュールもいくつかあるが、I2Cが使えるものはそちらを使うことにする。 まずはそれぞれの接続方法を改めて確認し、I2Cならばアドレスの重複がないように、それ以外なら使用するピンの重複がないように調整する。 バッテリーからサーボへ電力を供給するサーボドライバのみ、トグルスイッチで動作電源のオンオフをできるようにする。つまり、他の電源と分けるか、並列の場合も間にスイッチを挟むように設計する。 あるいは、サーボドライバの電源電圧が5Vであるならば、それもラズパイを通さず引っ張ってくるのもありか。いや、配線がかえってややこしくなるだけだ。却下。

他の電源に関わらず動作させるモジュールについては、基板上に共通の電源として5Vまたは3.3Vをラズパイから引いてきて、そこから各センサを並列でつなげるのが良さそう。

2020/09/14

2x8のユニバーサル基板のモデルを作成し、ボディモデルの内部に配置した。 サイズはギリギリ。よく言えばぴったり計算しつくされたかのような収まり具合で、胸をなでおろす。

2020/09/15

基板の配線について考えた。複雑な回路を用いないため、かなりシンプルにできそう。 まだ途中ではあるが、全体でも基板のサイズには余裕を持って収まりそうで、一安心。

2020/09/18

基板の配線について引き続き検討。

2020/10/02

バッテリーの収納部を設計。持ち上げてスライドすることで開く構造になっており、開閉のたびにネジ等を外す必要がないものにした。 充電時のことなどを考えると改善の余地はいくらでもありそうだが、きりがないのでこのまま進めようと思う。

今後の流れについて。

  • 頭部の設計
    • サーボによる可動
    • タッチセンサ配置
    • スピーカー配置
    • マイク配置
  • 頭部の下のベース部分の設計修正
    • ToF測距モジュール配置
  • 内部の配線スペース確保
    • 電源供給経路
    • 温湿度センサ配置
    • 照度センサ配置
  • 脚部と尻尾部の高さを実測し、同じになるよう調整
  • 基板等固定用の穴空け
  • 印刷

まずは全体の形状を確定して、それから細部に取り掛かる。 しかしそのためには内部構造を決定しなくてはならない。 つまり、頭部に搭載するスピーカーの選定をまず行わなくてはならない。 ノイズの原因は何か。電源によるものなのか否か。否であれば解決方法は? ラズパイを通したUSB給電だからノイズが乗るのかと思ったが、実際にはバッテリーからの直接給電でもノイズはあった(要検証)。接触不良の可能性もある。接続し直すのもアリかも。ボリュームは半固定抵抗になっていたはず。抵抗値を計測して、固定抵抗に変えてみてもいい。 ボリュームの変更はシステムでしか行わないし、抵抗を減らせば電流が増し、音量も増すはず。その分音が割れたりする恐れもある。

2020/10/05

1号の頭部をばらしてスピーカーを取り出し、テストした。さよなら、またね。 スピーカーをMacにつないだところノイズは生じず、原因はラズパイの方にあると判明。また、ラズパイのジャックに接続してもバッテリーから電源を取るとノイズが軽減されたため、ラズパイを介してUSBから電源を取るのは好ましくないことがわかった。(テストに使用したモバイルバッテリーは一定電流以下の場合に一定時間ごとに電源のON-OFFを繰り返すため、その度にブツブツというノイズは乗っていた。)

一号機から二号機へ流用するパーツはラズパイとスピーカーの二つになる予定。これは生物で言うところの脳と声帯であり、抽象的な意味合いでは心と声として捉えることもできなくはない。それらが共通なら、それは同一個体とも呼べるかもしれない。ロマン溢れるね。

2020/10/09

頭部外装の設計。 実物の猫に似せるには目や口が小さすぎるし、少しデフォルメする。 光沢のあるモデルだと光が表情のようになり不自然だったが、光沢をなくすといい感じになった。 耳の内部形状は要検討。スペースが許すようであれば、スピーカーは穴を開ける必要性上、耳に配置するのが自然かもしれない。 また、耳内部であればサーボからの距離も近いはずなので、トルクの面でも好ましい。

2020/10/16 2020/10/19

頭部内部の設計を進めている。 思ったより重量が嵩み、サーボのトルクや保持力、安定性に不安があるため、上下軸と傾き軸は両軸化させた。軸自体にかかる負荷が分散できるので、多少の気休めにはなるはず。 鼻先のマイクとスピーカーのアンプ基板を設置するスペースを除きほぼ完成。

全体の完成も徐々に見えてきた。できれば11月には印刷を開始し、年内に組み立てを終えたい。 タクトスイッチが届いたため、通電テストを行った。金具に固定用の突起があったため、固定部分の設計を微調整する必要がありそう。

2020/10/20

引き続き頭部の内部設計。開けていなかった穴を開けている。 目鼻固定用のパーツがやや複雑な形状をしているため、調整に時間がかかっている。

2020/10/21

頭部外装を分割し、組み合わせるための形状を追加。 はめ込むだけなので固定がしっかりできるか不安だが、負荷のかからない箇所なので甘く見ておく。

2020/10/22

頭部内部と頭部を固定するパーツを追加設計。 頭部内部にスピーカーのアンプ基板を収める部位を追加設計。

2020/10/23

鼻に位置するマイクの取り付け用パーツを設計。 測距センサカバー周りを設計。ボディフレームの形状調整。

2020/11/04

PETGフィラメントのテスト。 Curaのデフォルト設定の215℃でテストし、218℃に上げ、戻した。糸引きは多いが215℃の方が多少軽減される。 PETGは糸引きは不可避なようなので、造形物に問題がない現在の設定で続ける。 ヒートベッドは一層目のみ定着させるため70℃、以降は0℃とし、加熱しないように設定した。熱暴走による停止があったため対策。

2020/11/05

頭部内部フレームの作成。組み上げまで想定どおり行えたが、トルクに不安がある。 眼のガラスレンズ固定パーツがやや穴が小さく、過度な厚みがあるように感じられたので、穴径を広げ、1mm薄くして作り直した。 設計を変更すればサーボの軸を1cmほど中心に動かせそうなので、検討。

2020/11/06

頭部ピッチ軸のサーボまわりを設計変更して作り直した。重心に軸が約1cm近づき、パーツの干渉も減らしたため動きがスムーズになった。 前回のテスト時は間違えて3.3Vでサーボを動作させていたので、トルクはもともと足りていた可能性がある。 まぁ結果としてより良い設計になったので良しとする。

これで頭部内部はほぼ完成。 動かしてみるとヨー軸の動作が若干他と比べて不安定だったが、これは両軸化していないせいかもしれない。 気になるようであれば、サーボ同士を固定しているパーツだけ作り変えれば安定させられる。一旦保留。

2020/11/0x

頭部外装のプリント。 開口部の大きさはちょうどよく、ギリギリ内部機械を収められる。 一方で固定には難があり、しっかりと止めるためには接着や一工夫必要になる。

2020/11/0x

頭部外装のプリント。左耳の方。 PETGを使うこともあり、なるべくサポートを必要としない角度で印刷したが、それが仇となった。 PETGはPLAと比べて印刷中にかなり揺れる(下部が薄いと曲がる)。 積層のずれた跡がかなり大きく残り、二箇所割れも生じた。相変わらず表面のダマも多い。

2020/11/11

頭部外装のやすりがけを行う。120番の紙やすりで全体をやする。表面の糸引きやダマはかなり取れたが、積層痕や細かな穴などは消せそうにない。適当なところで妥協。

2020/11/12

頭部外装の下地塗装。 プラサフを満遍なく吹き付けたのち、穴や積層痕が大きく目立つ箇所だけ筆で色を乗せた。ほとんど隠れない。

また、OLEDの目を覆うカバーパーツに銀を筆で塗った。出来栄えはイマイチだが、頭部外装に隠れることでいい感じに見えてくれることを願う。

2020/11/13

回路図を書き直す。 抵抗を除く大まかな全体像を、配線図として作成した。 5VをGPIOに繋げてしまっていたため、後で修正しないと。

2020/11/14

昨日シルバーのPLAフィラメントが届いた。 PETGの印刷箇所が終わったら、こちらも試してみる。灰色ではない、銀の光沢がうまく出るといいのだけれど。

2020/11/20

配線図を書き直した。後から見直すと、一部の抵抗やスイッチ、USB接続のマイクと専用端子でつなぐカメラなどは抜けていたが、それらを除けばほとんど完成に近い。ずっと曖昧なままだった不安な部分だけに、不完全とはいえ一枚の紙面にまとまるのはちょっとした感慨がある。 A4にギリギリ収まるくらいで、随分大きなスケールになってしまったなぁと思う。しかしセンサーはロボットにとっての五感になるわけで、うまく使いこなせばよりリアルな反応パターンを生むことができる。

シルバーのPLAフィラメントをテストした。一度パーツをプリントしてみたら、なんだか以前のPLAと比べてあまり綺麗に印刷できず、パラメータの設定をやり直すことにした。 スライサーソフトの使い方を学び、一定の高さごとに印刷時のパラメータを変更できるようになった。高さごとに温度を変えて、適切な温度が決まったら次はファンの速度を調整した。明日の夜には印刷速度を調整してみる。 温度調整の時点で、印刷の品質がかなり決まってくる感じがする。今後別のフィラメントを使うときも、最低限これだけはやろう。

2020/11/21

回路に用いる抵抗の値を計算した。一度やったことでもすぐに忘れてしまうので、自身のブログが備忘録として大変役立つ。 今後の進め方については少し悩ましい。先にすべて配線してしまえば楽なのだけど、そうすると問題が生じたときに原因の切り分けが困難になる。やはり一つ一つモジュールをテストしてから、最後に配線するのが無難だろうか。

関係ないが、トランジスタについて調べていると、だいたい詳しく書かれているブログはオーディオ界隈の方のものだ。まるで研究者のように詳しすぎて、理解が難しいレベル。音楽を聴くという行為は主観に基づく感覚的なものと思っていたが、良い音の追求は極めて論理的に行われる、というのは興味深い。

PLAの場合、印刷スピードはCuraの初期設定である60msより速くても問題ないことがわかった。テストでは、印刷の品質は90msで確認できる変化がなかった。造形物を動かさないタイプのプリンターだから、というのもあるかもしれない。 先日0.2mm層で作ったモデルを、パラメータを調整した0.15mm層で作り直した。見た目の変化は、正直言えば自己満足の部類だ。ただ、層が細かくなる分、サポートを用いない斜辺は綺麗になった。

2020/11/2x

脚部外装パーツをプリント。印刷時間はパーツ一つあたり2時間程度。

2020/11/29

胴体後方の設計修正。給電用のDCコネクタ取り付け用の穴を作成した。 以前購入したカメラ接続用の専用コードがどうやら数センチ短いようなので、買い直す。試行錯誤や計算違いで細かな出費が嵩むなぁ……。

2020/11/30

胴体後方のPLAをプリント。印刷時間は8時間40分くらい。大きいパーツだから反りやすいのか、印刷開始1時間ほどで一度ベッドから造形物が剥がれてしまったため、印刷開始面とベッドの距離を少し縮めてやり直し。 配線において、分岐結線には簡易接続コネクタを使用するつもりだったが、内部にコネクタを取り付けられるスペースがなさそう。仕方なくはんだで結線することにする。

2020/12/17

プリンターのベルトが緩んできているように思えたので、きつく止めなおした。 胴体上部ベースプレートの印刷を試みるも、プリンターベッドの水平が取れていないようで高さが合わない。 プラットフォームシートの交換をする。

2020/12/18

プラットフォームシートを交換したところ、印刷の問題はなくなった。プラットフォームが傾いていたのかも。 しかし、今度は食いつきが良すぎる。 前部ベースプレートと尻尾の外装を印刷。

2020/12/19

残りのタスクと年内の日数を照らして計算したら、年内に組み立てまで終えるにはかなりのハードスケジュールになることがわかった。 印刷しっぱなしのパーツが部屋に散乱しているのを今年中になんとかしたいが、そのためにはハードを完成させる必要がある。やれるだけやってみよう。 配線がかなりややこしいが、もしミスがあってもPiさえ焼けなければ他のパーツが壊れても大した痛手にはならない。電源まわりだけ慎重に気を付けておけば、あとは完璧でなくてもいい。

2020/12/20

仕事に行っている間にプリントを少しでも進めようと、朝からプリンターを動かす。 家を出る前にすでに出力が不安定になっていたため、慌てて停止してそのまま出勤。 このところ気温が低いせいか、失敗が多くなっている気がする。帰宅後に同じ設定で再度試したら、今度は問題なく印刷できた。

2020/12/21

PLAの全パーツ出力が終わった。PETGにフィラメントを切り替え、パラメータの調整を行う。 尻尾のインナーパーツのプリントを始めたが、熱暴走によりプリンターが停止したり一層目が剥がれてしまったりで、5回も失敗した。冷却のために時間を空けたりしていたので、調整だけで丸一日終わってしまった。 明日、ブリムをつけてスライスし直し、もう一度試してみる。

2020/12/26

失敗。失敗。失敗。もうここ数日だけで7度目か。印刷が全くうまくいかない。出力したいものはたくさんあるのに、一層目が剥がれたりサポート部分が巻き込まれたり途中で倒れたり、熱エラーで停止したり、高さが勝手に変わっていたり、原因不明のままゴミ屑ができていたりする。その度に冷却して出力屑を取り除きやり直す。一層目が剥がれたりサポートが崩れたりするのは設定や設計の不備だから仕方ない。どうしていつの間にかヘッドがずれているんだ。スピードも十分に落としているし、あるいは温度がまだ低いのだろうか。いや、マイナス10度で設定していても印刷に問題はなかった。テストもしたから高すぎるということもないはずだ。流量が多い?部品の不調?さっぱりわからない。わからないが、できるまで何度でもやるしかない。

足のパーツが1組み分だけ揃っていたので、組み立てることにした。設計は以前何度も修正しただけに概ね問題ないが、一部まだ無理があった。ネジを止められない。幸い致命的ではないので、目を瞑ることにする。 サーボモータのコードの保護をしようと考えていたが、可逆的な方法で固定するとコードの柔軟性が損なわれ動作に影響することがわかったので断念。 理想通りではないものの、問題なく組み上がった。動作はややかくつくものの問題なし。かくつくのはサーボに問題があるのか、動作プログラムに問題があるのか、設計や保持重量に問題があるのかわからない。いずれ調べよう。後は実際に本体の重量を支えたとき、トルクが足りるかどうかだ。 思い返せば一年前からすでに足の試作をしていた。ここに至るまで大変だったけれども、当初想像していたものよりかなりよくなった気がする。


来年につづく。

Fusion360+3Dプリンターで自作ロボットのしっぽを作る

しっぽを作ったのでまとめ。 1号には尻尾がなかったので、もしかすると最大の変更箇所になるかもしれない。

尻尾の役割1:表現に使う

ロボットの尻尾には、2つの機能・役割を持たせます。
一つは、表現のための可動。生物と比較すると、自作ロボットは表情や発声による感情等の表現が難しく、どうしても劣ります。しかしながら、表情や発声のパターンを増やして表現力を高める、といった方向性は今の自分には難しく、できそうにありません。
そこで、代わりに足や尻尾の動きで多様な表現ができるようにしたいと思っています。
足には自重を支えるという役割もあるため、あまり自由には動かせませんが、尻尾はどのような状況でも比較的自由に動かすことができ、ロボットの行動とリンクさせて表現に用いるのも容易なはず。

尻尾の役割2:赤外線照射角度の調整に使う

もう一つの役割は、家電操作用の赤外線LEDの照射角度を変更すること。
ロボットには赤外線LEDを搭載し、万能リモコンとして記憶させた赤外線を発することで家電を操作します。対象の家電はテレビや照明、エアコンなどの予定ですが、それぞれの家電はロボットから見て上方向や前方向など別々の角度にあるため、一工夫必要になります。
具体的には、以下のような方法が考えられます。

  1. 角度が違っても反応するくらいの強さで赤外線を発する
  2. 赤外線LEDを全方向に取り付ける
  3. 対象に合わせて赤外線LEDの向きを変更する

1はLEDに大電流を流すだけですが、通常LEDはそこまでの大電流に対応していないため、壊れたり寿命が短くなったりしそうです。
もっとも簡単なのは2の全方向にLEDを取り付ける方法ですが、見た目も考慮するとあまり個人的にはやりたくなく……。
尻尾の先端にLEDを取り付けたい、という考えもあり、尻尾を動かして赤外線の照射角度を変更できるようにする方法をとりました。
もっとも、対象とする家電の位置の把握は実装が難しそうなので、当面の間は天井の照明に向けるか正面のテレビに向けるか、という程度になりそうですが。

リンク機構を用いた尻尾の試作、失敗

当初はリンク機構を用いた設計にしていましたが、実際に印刷してみるとガタつきが大きく、角度を指定して固定するのは難しい状態でした。

プリントするまでもプリント後も、何度も修正を繰り返しようやくできたモデル。

f:id:sizohu:20200831213148j:plain

動作の増幅率が大きいため、ギアを使ってサーボのトルク不足を補う設計です。
リンクを用いた動き方も生物的な柔らかさがあり、複雑な構造は機械っぽさもあり、かなり気に入っていたのですが、結局ゼロから作り直すことに。
ガタつきの原因は0.2mmくらいの印刷誤差と思われるため、FDMではなく光造形のプリンターなら(あるいは高精度なFDMでも)うまくいくかもしれません。いつか再挑戦するかも。

シンプルな尻尾の設計

根元から縦横に動かす、という単純な構造で作り直した尻尾がこちら。

f:id:sizohu:20200822225052p:plain

尻尾を上げたときに、先端がロボットの頭部より高くなるようにしたかったため、長さ約20センチと少し長めの設計になっています。 尻尾の胴(?)部分は後々塗装することも考慮し、二層を重ねるかたちにしました。
先端はLEDとレンズを仕込むために複数のパーツを組み合わせています。
尻尾の根元、サーボモータを固定する部分は、動作を安定させるためサーボ(MG90)を両軸化し、加えて外からサーボが見えなくなるように作ってあります。
なお、メンテナンス性を考慮し、胴部と根元、先端はネジとナットで固定しつけ外しができるようにしてあります。
配線用の空洞も、先端から根元までばっちり通っています。「配線用の穴を空けたまま、いかに部品同士を固定するか」という点に一番頭を悩ませました。
複数作成する足と違い、一つ作るだけの尻尾は部品数を多くしても印刷や組み立ての労力をあまり気にしなくていいのが良いところですね。

3Dプリンターで一部出力した後、動作テストの様子。

動くように作っているとはいえ、実際に無事動くかどうかを試す瞬間は毎回緊張します。
動作させる上での注意点として、動かすスピードを速くすると(サーボモーターの角度を直接指定すると)トルクが負けてしまいます。重量だけ見てトルクは足りるだろうと高をくくっていたので少し焦りました。。
そこで、今回はループ処理で指定角度を徐々に変えるようにし、ゆっくりと動かすようにしています。
サーボそのままの速さでカクカクと動くロボットはあまり見かけませんし、基本的なことなのかもしれません。

足としっぽはサーボモーターの大きさにあわせて設計する必要がありました。
今後は足としっぽのサイズに合わせて、バランスをとりながら胴体と頭部を作成します。各種センサーやモジュールなどの配置を考慮して設計する必要はあるものの、可動しない部位はそこまで寸法をシビアに決めなくていいので楽……だといいなぁ。

つづく。

Fusion360で作ったモデルをAR.jsで表示させる

Webで表示するARモデルを作ったので、表示するまでのざっくりした覚え書き。
間違った方法・非効率な方法が満載な気がするので、とりあえず形になればいい、という人以外は真似しないでください。

対象:Fusion360を使ったことがあり、3DCGソフトが全くわからず、色つきのARを手軽に作りたい人

Fusion360でモデルを作る

まずは表示するモデルを作ります。
モデルが複数のボディ・コンポーネントで作成されていると、Webで表示する際に重なった部分がぶれてしまうようなので、結合しておくといいかも。

Fusion360で外観を指定する

大まかに外観を指定します。
ここで指定した外観は、実際に表示するとき色味や質感がかなり変わってしまうので、適当でOK。
色分けができたら、FBX形式でエクスポートします。

Blenderで色や質感を調整

Blenderをインストールします。
Blenderを使いこなせればBlenderだけで全部なんとかなりそうな気がしますが、私はメニューに書かれた用語から各画面まで、何が何だかさっぱりでした。
今後使う予定があるなら学ぶと良いのでしょうが、ここは学習コストをかけないことにしました。
大まかな手順は以下。

  1. FBXファイルをインポートします。(軸の方向がFusion360と違います。手動でYが前にするといいかも。)
  2. 対象の色を設定している部分を調整します。
  3. glTF2.0(glb)でエクスポートします。

※ しっかり色分けしなくてもいい場合は、fbxからglbに変換するWebサービスを使うと簡単です。
使える外観が限られているのかわかりませんが、いろいろ失われがちで私は断念しました……。

マーカーを用意する

オリジナルのマーカーを使用する場合は、マーカー画像を作ります。 普通の画像を用意すれば以下のジェネレータで簡単に作れるので、オリジナルにした方がたぶん楽しいです。

jeromeetienne.github.io

公開環境を用意する

SSLで暗号化された公開環境が必要になります。 NetlifyとBitbucketというサービスを組み合わせて使うのが無料で良さそう。

gitを使う必要があるので、インストールして基本的な使い方を学びます。

HTMLを書く

<html>
  <head>
    <title>AR test</title>
    <script src="https://aframe.io/releases/0.9.2/aframe.min.js"></script>
    <script src="https://cdn.rawgit.com/jeromeetienne/AR.js/1.7.7/aframe/build/aframe-ar.js"></script>
  </head>
  <body>
    <a-scene embedded arjs="debugUIEnabled:false; sourceType:webcam; debpatternRatio:0.50;" vr-mode-ui="enabled: false" renderer="gammaOutput: true;">
        <a-marker type="pattern" url="pattern-marker.patt" >
          <a-gltf-model src="ar-model.glb" scale="0.4 0.4 0.4" position="0 0 0" rotation="0 0 0"></a-gltf-model>
        </a-marker>
        <a-entity camera></a-entity>
    </a-scene>
  </body>
</html>

scaleで大きさ、positionで位置、rotationで角度を調整します。 マーカーの生成時にPattern Ratioを変更した場合は、debpatternRatioの値をあわせます。 ライトは指定しなくても設定されていますが、変更したい場合は以下を参考に。

https://aframe.io/docs/1.0.0/primitives/a-light.html#attributes_intensity

カメラの設置方法はググったら他の書き方も見られましたが、私がうまくいったのは上記の記述方法でした。(公式ドキュメントが見つけられなかったため手探り)

他にもアニメーション等も設定できるようです。

完成

公開したら、スマホSafariChromeからページを開き、ARマーカーをカメラにとらえます。
うまくモデルが表示されたらOK!

多脚歩行ロボットの脚部の設計

多脚歩行ロボットの足の設計とプリントをしました。
見た目の面でも機能面でも脚部が占める割合は大きく、設計に際し留意する項目も多くなりました。
かなり個人的なメモ的内容ですが、多脚ロボットを作りたい誰かの参考になれば幸い。

当初は8足駆動にする予定でしたが、足の動作スペースの確保と後述する電流量がネックとなり、現在は6足を想定しています。

足の作成にかかった時間や労力の割合は、前提知識の習得3:部品の選定1:構想3:CAD1:調整2、といったところ。
知識ゼロからのスタートだったため、"何を学ぶべきか"から学ばなくてはならない、というなかなか難儀なことになっていましたが(いつもですが)、なんとか納得いく形にたどりつきました。

できあがったCADデータはこんな感じ。

f:id:sizohu:20200602125604p:plain

f:id:sizohu:20200602125634p:plain
陰線エッジ表示で各面から。

以下、実際に考えたこと・やったこと等を書き連ねていきます。

関節について

関節はサーボモータで動かします。
サーボモータは角度を指定して動作させることができるモーターで、ロボット作りでは関節にはこれを用いるのが定石となっているようです。

サーボモータの選定

市販のサーボモータには様々な種類があります。以下を基準に、採用するサーボモータを検討しました。

  1. トルク
  2. 価格
  3. 動作電圧
  4. 動作角度

1.トルクはどれだけの力でモーターを動かせるかという値で、大きいほど動作の安定につながります。
一方で、高トルクのサーボモータは消費電力も重量も大きい傾向にあるため、予め必要なトルクを見極める必要があります。
トルクの計算については後述します。

2.価格はサーボモータの種類によって様々で、一個あたり数百円から数千円です。
今回作成する多脚ロボットでは、足だけでも軸数(3軸)×足数(6本)=18個と、多数のサーボモータが必要になります。あまり高価なものは予算の都合上使用できません。

3.動作電圧はサーボモータの種類によって一定の範囲が定められており、指定の電圧の電源を用意する、もしくは使用する電源の電圧にあったサーボモータを選ぶ必要があります。
今回は、ロボットの頭脳として使用するRaspberry Piの動作電圧に合わせて5Vの電源を用意するため、サーボモータも同じ電圧で動かす予定です。
(2セルリポバッテリの7.4Vを降圧して5Vにしますが、電源を共通にするとサーボに負荷がかかった際に電圧降下でラズパイが落ちる恐れがあるため、何かしら対策予定です。コンデンサを使えばいけるのかな?)

4.サーボの動作角度は180度(プラスマイナス90度)が多いようですが、それ以外のものもあるため、留意します。

上記を踏まえ、使用するサーボモータはMG996R(MG995でも可)とMG90S(SG90でも可)に決定しました。
どちらも5Vで動作します。入手性が高いのも○。
価格は国内で1,000円/個くらい、中国からの個人輸入(正規品でない?)なら300円/個くらい。安心を取るか価格を取るか、といったところですね。

ちなみに、MG90SはSG90とスペックはほぼ同じですが前者はメタルギアで値段がほぼ倍となっており、どちらを使うか悩ましいところです。
試しに一つだけ買ったMG90SとSG90を比較したところ、MG90Sの方が心なしか指定角度でプルプルしたりせずしっかり止まるので、こちらを使うつもりです。

やや話が逸れますが、もし予算に余裕があれば、秋月電子で販売されている薄型サーボ「[GWSサーボ S11HP/2BBMG/JRタイプ](http://akizukidenshi.com/catalog/g/gM-01724/)」を使いたいです。現在2,200円/個で販売されていますが、今回は予算オーバーです。MG996Rよりトルクはやや劣るものの小さく、これを使えば足をより細くすることができ、例えば8足に増やしたとしても、干渉したり不恰好になったりしにくいはず。8本×2軸×2200円=35200円、8本×3軸×2200円=52800円……。 一般的に多脚ロボットが多数の足を持たされるのは、悪路や過酷な環境での走破性・安定性を求めた結果です。実際に各国で実用化を目的に設計された多脚ロボットを調べてみると、宇宙や火山、砂漠など、タイヤやキャタピラでは走行困難な場所での活動を前提とされたものがほとんどです。 しかし、ロボットの足はただ歩くためだけにあるわけではない、と私は考えます。我々人間がジェスチャーを用いて意思の疎通を図ることができるように、多脚ロボットは足を用いて様々な表現をすることも可能です。足の数が多ければ、それだけ多様な表現が可能になるはずです。と、将来的に8本に増やしたいなぁという願望を綴っておきます。

トルクの計算

データシートにあるストールトルクは以下。

  • MG90S:1.8kg/cm(4.8V)
  • MG996R:9.4kg/cm(4.8V)

ストールトルク≒最大トルクですが、出し続けてはいけないトルクなので、余裕を持たせて設計をします。
1.8kg/cmという値は、サーボモータの軸から1cmの距離で1.8kgのものを持ち上げる力がある、ということだそうです。
距離が2cmなら0.9kg、3cmなら0.6kgと、距離に反比例して力は弱くなります。

作成するロボットの総重量は2.5kgほどを想定しており、歩行時に接地している足数(最少3本)でそれを支えなくてはなりません。ロボットの重量(2.5kg)/最少接地足数(3本)でおよそ0.83kgが一本あたりで支える重量となりますが、これはそれぞれの足に均等に重さが加わった場合の値であり、実際にはこの数値に対しても余裕を持たせて設計する必要があります。

f:id:sizohu:20200601113354p:plain

上図において、トルク計算に用いる距離は、A(サーボの中心から動作させる点間の距離)ではなく、B(サーボの中心と動作させる点間の水平距離)になるそうです。
以上を踏まえると、余剰トルクを仮に100%とした場合、MG90SならBをおよそ1cm以内(1.8÷(0.83×2)≒1.07)、MG996RならBをおよそ5.6cm(9.4÷(0.83×2)≒5.62)以内に収めればいい、ということがわかります。
本当は水平方向のトルクも計算しておくべきなのでしょうが、加わる力の算出方法がわからないのと、垂直方向の必要トルクよりも小さくなるだろうと見て省きます。

f:id:sizohu:20200601113921p:plain

今回作成する足は上図のような形を想定しているので、サーボ1に高トルクのMG996R、サーボ2にMG90Sを使い、各節の長さを調整すればなんとなくできそうですね。

多脚と電源

少し足自体の話からは脱線します。
多脚ロボットの自作において、最も頭を悩ませるのは電源かもしれません。
サーボモータを用いて多数の可動軸を持たせる今回のような設計では、歩行時に大量の電流を要します。

サーボモータを一つ動作させるのに仮に1A必要だとすると、6足の場合6A(3足2軸同時動作)、8足なら8A(4足2軸同時動作)程度の電流は使いたいところ。
実際にサーボを動かした際の電流量はMG90S、MG996Rのどちらも1A以下でしたが、MG996Rのストール電流は1Aよりも大きそうな気がします。
加えて、同時に動かさないサーボも、角度を保持するためにある程度の電流を常時必要とします。
足を一本ずつ動かす歩容にする、など消費電流量を抑える方法は考えられるものの、その分歩行速度が遅くなり、動きが緩慢な印象になってしまいます。

当初は安全性の高いとされるニッケル水素電池で動かすことを目指していましたが、購入したニッケル水素電池をテストしたところ、電圧を落とさず流せたのは2A程度。
これでは必要な電流量を賄うことができないため、放電能力の高いリチウムポリマーバッテリを用いることにしました。

リポバッテリであれば十分な放電能力を持った製品が数多くありますが、サーボモータを動作させる際には変圧が必要になることが多く、その場合、今度は変圧器がボトルネックになって大電流を流せない、というケースに陥りがちなように思います。
そこで、15Aまで流せるという大きめの降圧レギュレータを輸入したので、追々試してみます。

なお、発火や爆発等の大事故を起こしがち、ということで敬遠していたリポバッテリですが、発火に至る仕組みを一通り学んでみると、しっかりと適切な管理さえすれば危険性はそれほど高くないように思えました。それでも念のため、保管用に金属製の弾薬箱を購入。こんなやつ↓

海外の検証動画によると、これの蓋のシーリングを剥がして使うのが比較的安全らしいです。
それにしても、ロボットのエネルギー源が爆弾になるのって映画の世界だけじゃないんだなぁ。

電源周りについては、電圧の監視をはじめ色々とやることがあるので、いずれ別記事にまとめる予定です。

3Dプリント用データの作成

使用するサーボモータが決まったら、次はその組み方を考えます。 以前購入した3Dプリンターと、勉強を始めたfusion360がようやく出番を迎えます。

まず、最低限抑えたいことは以下の2点です。

  • サーボを両軸にする
  • トルクを考慮する

安価なサーボモータは片側にのみ軸があり、そこから動力をパーツに伝えます。
動作する軸の反対側にも軸を設けることで、軸にかかる力を分散させ、動作時のブレを抑えたりすることができます。
マーク1作成時にもSG90サーボを使って低精度ながら挑戦しましたが、両軸化をやるのとやらないのとではかなり安定感に差が出ました。

そして、前述したトルク計算の結果から、各パーツのサイズを検討・調整します。
各部位が大きすぎるとトルク不足になりますが、小さすぎると見栄えがよくなかったり歩幅が小さくなるため、いい塩梅に調整します。

さらに、以下の条件を加えます。

  • 部品の固定はネジで行う
  • 外装パーツとフレームパーツを分ける
  • ネジ、サーボモータ、配線などを隠す
  • ある程度の強度を持たせる
  • 曲面を取り入れる

私が作りたいのは、単なる玩具ではなく、生活のパートナーです。

長期的な使用を前提とし、各部品は劣化・破損時等に個別に交換できるよう、基本的にすべてネジとナットで固定します。
また、外装は後々塗装する予定なので、骨格としてサーボモータを固定するフレーム部と外装部は別パーツになるよう設計します。
配線やサーボモータが露出すると自作ロボット感が出すぎるので、可能な範囲で覆い隠します。

各部位にはそれなりの負荷が加わることが想定されます。
折れたり曲がったりしないよう、厚みや形状にも配慮が必要です。計算は知識がなくできそうにないので、試行錯誤します。
ちなみにマーク1を作った際は、部品同士を接着剤で固定していたため、動作させるうちにそれが剥がれたり、加えてトルクや電流の計算を知らずに作ったために、次第に生まれたての子鹿のようになってしまいました(それはそれでかわいい)。

元気な頃のマーク1はこちら。

曲面を使用する意義

さて、日々自作ロボットの動画をyoutubeで眺めていると、どうも平面だけを用いたデザインが多いことに気がつきます。マーク1も平面が多かったことを思い出します。
金属板やプラ板などを素材として利用すると、どうしても曲げ加工は困難で、曲面を作ることが大変だということに気がつきます。また、曲面を用いたところで構造的なメリットが薄いため、自作ロボットが直線や平面を多用したものになるのは自然なことなのでしょう。

翻って考えると、曲面を用いれば、それだけで多くの自作ロボットとは違う印象を自他に与えることができる、とも捉えることができます。
特に重要なのは、自分の認識に影響を与える、という点です。実際はそうでもなくても、「この子は特別なんだ」という思い込みを持てることが大事です。
ロボットの完成はまだまだ遠いうえ、SNSを覗けば天才か賢者か魔法使いなのでは?と思える方がごろごろいらっしゃいます。こういうところでモチベを高めておかないと挫折しかねません。

3Dプリントに際しての留意項目

パーツの出力には熱溶解積層方式の3Dプリンタを使用するため、以下のような欠点も頭に入れておく必要があります。

  • 0.数mmの誤差が生じる(印刷誤差+素材の熱収縮)
  • 一定角度以上の傾斜にはサポートをつける必要があるが、きれいに取るのは困難

パーツ同士やパーツとサーボモータの接合面、ネジ穴などには0.2mmから0.8mmくらいの隙間を作っておくと、いい具合に収まります。
ネジ穴に関しては、固定するのか軸にするのかによっても多少大きさを調整します。穴を円で作成するか多角形で作成するかによっても、多少大きさが異なります。
パーツのCADデータの作成前に、0.2mm単位くらいで複数の径の穴を円と多角形であけたモデルを作成・プリントし、試しておくと良いと思います。
なお、テストプリントに使用したPLAは他のフィラメントと比較して収縮しにくい素材のようなので、本出力ではABSやPETGなどを使用することを考慮して気持ち緩めに設計しました。

また、水平に近い角度の面を出力する際には、印刷開始面を作り出力物を支えるためにサポートを使用します。

f:id:sizohu:20200601113336p:plain

形状によっては必要不可欠なサポートですが、基本的にあまり綺麗には取り除けません。無闇にサポートをつけると、出力後にサポートの除去ができなかったり、表面が汚くなったり、サポートを取るときにパーツが折れたり割れたりします。しました。
私のプリンタの場合、水平から45度くらいまでの傾斜であればサポートなしでもある程度きれいに印刷でき、30度くらいではサイズが小さければ印刷はギリギリできるものの、印刷面がブレます。オーバーハングというらしい。
設計時には、出力の向きと各面の角度を考慮し、極力サポートを減らすよう心がけると良いです。
また、2mm径ほどの小さな穴にサポートをつけると、サポートが一体化して穴が完全にふさがってしまう場合があります。円ではなく多角形を用いるとサポートなしで穴を作れるので、小径かつ横向きの穴は特に多角形で作成するのがおすすめです。

f:id:sizohu:20200601113343p:plain

また、3Dプリンタ(熱溶解積層方式)は出力結果を左右する要因がかなり多く、気をつけていても一定の確率でプリントに失敗します。たぶん私だけではないと思います。
出力時間も一辺5cmの直方体くらいのサイズで1時間弱くらいと中々かかるため、部品点数が多くなる(=印刷回数が多くなる)のは精神衛生上よくありません。部品点数は可能な限り少なくしたいです。
仮に、部品が1点増えれば足数6として計6点、一度に複数印刷できないサイズ・形状であれば印刷回数が6回も増えます。6回に1回くらいは印刷も失敗します。
と書いたけどこれは完全に単なる設計力不足。

先述したサポートも、手間さえかければ綺麗に除去することが可能なケースもあります。しかし、印刷と同様に、足の本数とパーツの数だけその手間がかかります。
……多脚が流行らない理由が少しわかる気がしますね。

試作品の完成

上記すべてを踏まえ、実際にプリントした3軸可動の足がこちら。

f:id:sizohu:20200603154910j:plain
組み上げ前

f:id:sizohu:20200603154822j:plain
伸ばしたところ

f:id:sizohu:20200603154814j:plain
曲げたところ

一足あたりのプリントするパーツ数は7、足の付け根は角張っていますが、胴部に納まるため問題ありません。
爪先は別パーツになっており、足先が外に出たときのトルクを考慮して内側に少し入れ込んでいます。また、後から接地の微調整をする際も爪先だけ作り直せばいいので、プリントが楽になります。 配線は一部露出しますが、基本的には外装パーツとサーボモータの間に隙間を設けて通しています。

各ネジ穴はサポートを使用しないで印刷できるよう6角形で作成しています。
また、固定に使用しているネジは、サーボの固定に2M×6mmを10本、パーツ同士の固定に同じく2M×6mmを7本使用しています。
サーボの両軸化には、シカゴネジ?と呼ばれるものを見つけ、使用しています(5M×6mm)。 本当は軸にはベアリングとかも使うといいのでしょうが、一旦はこれだけで作り、様子を見ようと思います。

ちなみに、今回ここに至るまで各パーツ3度ほどプリント→設計修正を繰り返しました。CADでは問題なかった部分が印刷すると0.数ミリ合わなかったり、気づかないミスがあったり……。

f:id:sizohu:20200603155244j:plain
使われなかった部品たち

プリントして初めて得られる気づきも多く、設計→プリント→修正のサイクルをいかに早く回せるようになるかが今後の課題ですね。

つづく。

Raspberry Piで赤外線の送受信をする

以前の方法(以下記事)では、赤外線の送受信が完全ではなかったので、作り直しました。

nyabot.hatenablog.com

今回作りたい赤外線送信モジュールの条件は以下。

  1. テレビ以外の電子機器も操作できること
  2. 数メートル離れた位置から操作できること
  3. 多少角度が違っても赤外線が届くこと
  4. LEDを複数使わないこと

赤外線LEDはロボットの尻尾に搭載する予定なので、角度を変えて複数個LEDを設置する、という方法はとりたくありません。 そのため、基本方針として電流とソフト側の調整でなんとかしたいと思っていました。

ソフトに関しては、以下の記事をもとにpigpioを導入し使用します。

qiita.com

赤外線送信部の回路についてだけ、いくつか変更をしています。
上記記事でFETを使用しているところを、メジャーなトランジスタ2SC1815GRで代用。抵抗も少し大きくしています。

前回のLIRCを用いたテストでは、50mA程度の電流でも十分に機器の操作ができたことから、今回もLIRCのときと同じ電流値50mAで試したところうまくいかず。
機器が全く反応しないため、てっきり設定等にミスがあったかと思い色々試すもうまくいかず。。
そのまま数ヶ月放置していたのですが、結局、電流を大きくしたら無事動作が確認できました。

赤外線LEDに流す電流量について

赤外線LEDに流す電流の大きさですが、お高いLEDだと絶対最大定格が300mAのものがあります。電流が大きければ大きいほど赤外線は遠くまで飛ぶはずですが、私の場合は電流は300mAに収まる程度で十分と予想。そもそも前回は50mAで届いたので、200mAもあれば十分かなぁと(部屋も広くないし)。
上記記事の引用先を読んでみたところ、より大きな電流を流そうとする場合、2SC1815ではhFEの降下があるためFETを使用した、ということみたいです。なるほど。

抵抗計算

抵抗器は47Ωと4.7kΩの2種類を使用します。
抵抗器にも定格電力があるので、それをオーバーしないように計算。

抵抗器の定格電力は、次の三種類があるみたいです。

  • 1/4W
  • 1/2W
  • 1W

今回は低い抵抗で大きな電流を流したいため、1Wの抵抗器を追加で購入しました。 抵抗器に流れる電流と電圧は、以下のようになります。

47Ω抵抗器に流れる電流

I = V / R
I = 5[V] / 47[Ω]
I ≒ 0.106[A] = 106[mA]

電力は電流と電圧の積だから、0.106*5でおよそ0.53Wになるはず。

定格電力は値の半分以下で使用するものらしいので、1Wの半分と考えると若干オーバーしていますが、赤外線LEDに電気を流す時間はごく短時間なので問題ないだろうという考え。

LEDに47Ωの抵抗器を並列に二つ繋いで、合計最大約212mAの電流が流れるようにします。
実際に流れる電流は、トランジスタ2SC1815のベースに流す電流によって決まります。

4.7kΩ抵抗器に流れる電流

I = V / R
I = 5[V] / 4700[Ω]
I ≒ 0.00106[A] = 1.06[mA]

およそ1mA。ラズパイのGPIOに流す電流は8mAまでにすべきですが、この電流量なら問題ありません。
今回用意したトランジスタ2SC1815GRの増幅率(hFE)はデータシートによると200~400なので、コレクタからの電流はおおよそ212~424mA程度までエミッタに流れることになります。つまりエミッタおよびLEDには、先ほど計算したコレクタに流れる電流の最大(約212mA)+ベース電流(約1mA)=約213mAが流れる。はず。

赤外線送信回路

赤外線送信部の回路は以下のような形に(実際は向きや配置を少し変えているけど、わかりにくかったので調整)。

f:id:sizohu:20200421112800p:plain

トランジスタの各足は、画像の左から順にエミッタ、コレクタ、ベースになっています。
ラズパイからは5Vを赤外線LEDの陽極に、GPIO17をトランジスタのベースに繋いでいます。

実際はこれに赤外線受信モジュールが加わりますが、回路図作成ソフトに該当する部品が見つからなかったので省略。

結果

pigpioのインストール、上記記事にある設定およびIR Record and Playbackのダウンロード後、以下のコマンドで学習&送信。

学習

例)GPIO18を用いて照明ONの赤外線コードを学習、codesファイルに記録

$ python3 irrp.py -r -g18 -f codes light:on --no-confirm --post 130

送信

例)GPIO17を用いて、学習した照明ONの赤外線コードを送信

$ python3 irrp.py -p -g17 -f codes light:on

動作は完璧!
大体の角度だけあわせてあげれば、3mほどの距離から問題なく機器の操作ができるようになりました。

失敗もしつつ、数ヶ月越しに完成したからとても嬉しい。

つづく。