昨日の記事はShachiku Hakase さんの「マイクロマウスロボットコンテストにおけるロボトレース競技向けのログ保存およびPythonと生成AIで作るログ表示システムの解説」でした。
初心者上級者問わず、ログを見て機体の状況を解析することは非常に大切なわけですが、そのシステム構成について大変ためになる記事でした。その完成度の高さもさることながら、組み込みシステムにおけるメモリの扱いや、アプリケーションにおける生成AIの活用など、マイクロマウスに限らず普段の開発に必ず役に立つTipsも盛り沢山です。私も少なくともあと10回以上は読み返すと思います。技術レベルの高い人のやっている話は何度読んでも面白いものです。公開してくださったことに感謝ですね。
では、本題行きましょうか。久しぶりのマシン紹介です。私が2021~2022に製作していた"Entrance"の内容(v2もセットで)を公開します。
書くモチベーション
そろそろ出さなくなって1年以上が経過しておりパラメータとか設計思想を忘れそうなので備忘録的な意味合いが半分と、だんだんクラシックからマイクロマウスの方にチャレンジする層(特に学生)が増え始めたので、タイミング的に参考になるかなというのが半分くらいな感じです。
テクニカルデータ
Entrance(初代)
Entrance_v2
サイズ[mm] 67×39×13
重量[g] 10.2(初代)→9.7(v2)
マイコン RX631
バッテリー indoor airplane で売っている50mAh 20C 1S
走行用モータ Mk06-4.5
モータドライバ TC78H660FTG(初代) → DRV8835DSSR(v2)
フォトセンサ OSI5FU3A11C+LTR-209
IMU MPU-6000
エンコーダ AS5147P
ギア比 9:38
走行パラメータ
みんな好きなやつ。MAXだけ載せようかと思いましたが、今後作る人の参考になるように、オートスタート、普通の最低パラメータ、最高パラメータ、の3つを示しておきます。
ターンパラメータはターン速で決めてないので、小数点以下3桁目は四捨五入。
・オートスタート
MAX speed(Straight): 2.0 m/s
MAX speed(Diagonal): 1.5 m/s
Acceleration(Straight): 5.0 m/ss
Acceleration(Diagonal): 4.0m/ss
in45: 0.41 m/s
out45: 0.44 m/s
big90: 0.44 m/s
v90: 0.35 m/s
in135: 0.38 m/s
out135: 0.38 m/s
big180: 0.39 m/s
・最低パラメータ(通常)
MAX speed(Straight): 3.5 m/s
MAX speed(Diagonal): 2.5 m/s
Acceleration(Straight): 8.0 m/ss
Acceleration(Diagonal): 6.5m/ss
in45: 0.81 m/s
out45: 0.89 m/s
big90: 0.89 m/s
v90: 0.71 m/s
in135: 0.75 m/s
out135: 0.75 m/s
big180: 0.77 m/s
・最高パラメータ(通常)
MAX speed(Straight): 4.0 m/s
MAX speed(Diagonal): 3.5 m/s
Acceleration(Straight): 12.0 m/ss
Acceleration(Diagonal): 10.0m/ss
in45: 0.92 m/s
out45: 1.11 m/s
big90: 1.04 m/s
v90: 0.83 m/s
in135: 0.88 m/s
out135: 0.88 m/s
big180: 0.91 m/s
オートスタートはもともともう少し早い設定でしたが、全日本大会の32×32の試走で埃がたまるとありえないくらい軌道が膨らんでしまったことから、どんな状態でも走れるくらいには速度を落としました。
最低パラメータは安心してみていられるくらいだったと思います。このくらいであれば、特殊な工夫はなくともきちんと制御を行えれば走るはず。
最高パラメータはハードウェアの限界付近だったと記憶しています。成功するかは路面の相性とバッテリーの調子次第。これ以上上げようとするとタイヤが地面を蹴れなくなるような動きをした覚えがあります。この辺まで行くと「ハードの限界」という言葉の意味するあたりがなんとなくわかってきます。そしてこれでも全く勝てなくて絶望するまでがセット。
ハードウェアの狙い
細かいところを書けば色々出てくるようにも思いますが、とりあえず全体のコンセプトと、質問の多い足回りと、初代からv2の重要な変更点であるモータードライバを絡めて回路の話をしようと思います。なんか他に大事なことを思い出したら追記するかも。
・全体コンセプト
この機体を製作する上での最終目標は「ハードウェアの限界値で動かすとはどういうことかを知る」です。
これを達成するために、以下3点を意識した設計になっています。
1. 極力シンプルな構成にする... 非吸引2輪を採用
2. 扱いにくくならないように過度な軽量化はしない... ex 0.4 mm基板は非採用
3. そうはいっても同系統の中では速度を狙える構成にする... 低慣性モーメント&低重心になるようにする、工夫して軽くできるところは軽くする
慣性モーメントを減らす、というのは具体的に言うと部品をなるべく旋回中心によせるということです。そのほうが曲がる際に必要な力を減らせるためコントロールしやすくなります。自転車のサドルのかごに重いリュックを置くより自分で背負ったほうが漕ぎやすいのと同じイメージです。
まあここまで数式一切無しで説明しましたが、よくわからない人は力学を勉強しませう。
エンコーダの磁石、モータ、バッテリーをなるべく中央付近においています
低重心のメリットについてピンとこない人は、私が今年のマウス合宿で解説した図を復習しませう。ついでに縦に長くしているのもおさらいしておきましょう。
この低重心を実現しているキモは足回りにあるので、次項で足回りを見ていきましょう。
・足回り
ハーフの足回りにおいて地味に悩ましいのが、部品をどう固定するか?ではないでしょうか。というのもサイズがかなり小さいので、例えばネジを使おうとすると適切なサイズのが手に入らなかったり頭の高さが地味に邪魔だったり、結構制約があります。固定方法に着目しながら、Entranceのノウハウを公開していきます。そのためにはあの最高な縞模様のPCにあるCADデータのスクショを持ってくる必要がある、なかなか困難。
まず、モータマウントはこんな感じです。材質はDMMの高精度アクリル黒。
手前(というより右か)の大きめな穴には310サイズのベアリングが入ります。これは普通に圧入。ちなみに、dmmのアクリル部品で圧入する部品を頼むときは、大体半径を0.02 mmくらい設計値よりも縮めて出しておくとスカスカになりにくくておすすめです。ちなみに、ここでベアリングの外径交差は基本マイナスなんだからそれはそうでしょと思った方、鋭いですね。そのとおりです。
そして左のくぼみにモータがハマります。これはやってる人意外と少なそうですが、Entranceの駆動モータはモータマウントで圧入するのではなく、上から抑えてあげる形で基板とサンドイッチになるような形をしています。こうすることでモーターを極力低い位置に置くことができます。そのままはめ込むだけでは当然固定できないので、モータとモータマウントは弱めの接着剤で接着しています。使っているのはセメダインスーパーXシリーズ。適度に柔らかくて万が一のとき外したい部品に対して使い勝手が良いです。
よく見ると、モーターとマウントの隙間に少し黒っぽい固体っぽいのが見えるはず
位置が決まる程度に少なめに塗るのがポイントです
モーターがついたら今度はホイール周りですね。Entranceは磁気式エンコーダを使う都合上、磁石が回転する必要があるので車軸側が回転する必要があります。わかりやすくモータマウントを透明にして上から見たCAD画像は、こんな感じ。
車軸にホイールと磁石の固定用の部品が圧入されています。ちょっと磁石を固定する部品の圧入部分が短くて取れやすいので、ここはあんまり真似してほしくないかもです。
磁石を固定する部品(3Dプリント)
画像右からφ4の磁石を圧入します
ホイール(3Dプリント)
出っ張りのところにφ3の穴の空いたスパーギアを圧入します
ピニオンギアはアールティさんで売っている真鍮ピニオンをロックタイト638で固定しています。ピニオンは高校生の頃に薄いものを使って何度もピニオン滑りで泣いた苦い経験があるので、重いですが厚さ2mm の金属ピニオンをロックタイトで固定する、で決めています。正直やりすぎですが、まあこだわりみたいなものです。下手に攻めるよりはいい。
スパーギアは当時kkpmoで注文していましたが、なんと今はこれも全く同サイズのものがアールティで手に入るようになりました。何という偶然。狙ったわけではないですが、アールティで現在入手できるハーフサイズ用のギアはEntranceと全く同じ構成です。これでどの部品も入手性が非常に良くなりましたね。
そして、これらを組んで完成した足回りのユニットを最後基板に接着します。モータマウントについてる突起で位置合わせをして、少し塗ってちょうどはんだ付けの富士山型のようになるように止めます。画像のスライドスイッチとモータマウントの間の埃をかぶってる黒っぽいのがそれなのですが、見えますかね?これもスーパーXで、いざとなれば爪ではがせます。
足回りはこんなところですかね。全部書くとやはり結構な量になるな…。
・回路周り
内容自体は非常にオーソドックスというか、変わった機能は一切ない構成です。なのであんまり書くことないんですが、初代からv2に変わった大きな理由はここにあるので、その話をここで書いておきます。
初代を製作していた頃の2021年は、世界的な半導体不足で、メジャーな電子部品が全然手に入りませんでした。注文しようとしてもリードタイム52週間とか、そんな感じです。
そのため、これを機に新しい部品を使ってみようと思い、あまり他の人が使っておらず当時新製品で入手できた、TC78H660FTG というモータードライバを使ってみました。
これはデータシートの抜粋ですが、400 kHzに対応していれば大丈夫じゃん、と甘い考えで採用したのです。
つまり、400 kHzで駆動できるのは立ち上がりや立ち下がりのデッドタイムの影響が最も少ないDuty50%の話で、低いDutyについては全く保証されていませんでした。そのため、モータードライバの応答が追いつかず、行いたい動きができなかったのですね。
多くのマウサーが使っているDRV8835 に変更しv2 となってから、今まで全く決まらなかった調整の値がみるみる確定していったのは良い思い出です。
健全なソフトは健全なハードにしか宿らない(重要)
ソフトウェア
正直言ってしまうと、ソフトウェアも回路と同様特段変わったことはしていません。一つ一つの機能を丁寧に実装しているだけといえばだけです。具体的なノウハウは人によって考え方が割れる部分も多く、あんまり私の話を鵜呑みにして唯一解みたいに勘違いされても困るので(あくまで、「私流の」やりかた、と「一般的に有用な」やりかたの区別が初心者だと難しくかえって混乱すると思っています)、Entranceを製作していく上で学んだことを伝える形にしたいと思います。
・機能を実装するときには目的を明確にする
Entranceの製作する上で得た教訓として一番大きいのはこれです。この考え方がわかってきたことが一番の収穫だったように思います。
少し具体的な話をすると、「なんとなく曲線加速にするといいって聞いたから実装してみよう」とか、「なんとなくカルマンフィルタってよさそうだから実装してみよう」みたいなスタンスではなくて、「実際の走行中に、〇〇な良くない動きをしていて、その原因はおそらくxxだと考えられる。だから、それには△△か☆☆あたりが効きそうだ。試してみよう」という感じに頭を動かせるかどうか、ということです。
正直、これは意識の問題なのと、知ったところですぐに実力がつくタイプの話ではなく、普段の試行錯誤、知識の習得の中で少しずつ出来るようになっていくものです。ただ、ここが意識できていないとずっと誰かのノウハウの追っかけにハマってしまうことになり、こうなってくるとなかなかいざというときに苦しくなります。ここの考え方を修正できたのが最大の収穫です。
・ハードウェアがしっかりしている機体はソフトウェアの評価がしやすい
鋭い人は、これ、マウス10則の「ハードウェアの欠陥をソフトウェアで補うことはできない」の言い換えじゃん、と気づくかもしれません。しかし、Entranceを調整していて思ったのはどっちかというとこういうニュアンスです。素のグリップのみかつ安定したハードが出来上がっていると、基本的に下手な制御をしようとするとわかりやすくおかしな動きをしますし、いい線付いてる機能を実装すると動きそうな雰囲気がわかりやすく出てきます。
そういった意味で、あえて吸引を封印し、2年の歳月をかけてマウスにおける基礎をじっくり作った当時の判断は大正解だったと思います。
終わりに
いかがでしたでしょうか。というか書いてる方もさすがに長くて疲れてきた。もちろん、ノウハウの部分を参考にしていただくのは歓迎ですが、個人的には、ここから私の設計思想の部分を読み取って、自分なりに主張を持ったマウスを作れる人が増えてくれる一助になってほしいな、と思っています。
余談
ところで、低慣性モーメントの話を読んだときに、こうしたほうがもっと有利じゃない?と思った人はいますかね。私は思いました。
でも磁石が邪魔なんですよねぇ...。そしてここから地獄は始まった...
以上です。0時の投稿遅れてしまって待っていた方もしいたらごめんなさい!
明日はぱわぷろ先輩の、「マイクロマウス参加動機タイプと進め方のススメ」です。お楽しみに!