狂気と侠気と気胸な彼

一期は夢よ ただ狂え

 趣味とはいえ、様々な製品を開発して一部は実際に販売している。irMagician, Groovy-IoT, Groovy-PID/Quatroだ。特にGroovy-IoTを開発・販売した時にkikoriを開発してもらった。これは、Groovy-IoTに接続するGrove互換の各種センサやアクチュエータをWebAPI形式でアクセスするためのサーバソフトウェアになる。HIDの単なるやり取りだけだと特に問題はないが、I2Cはステートマシンを保持しなければならないので、実際のデバイスのI2Cの細かい挙動について確認し、実装・テストを行わなければいけない。UARTの場合だと、受信時にデータの構造に合わせてのパーシングを行いjson形式に再構築する必要がある。Groovy-IoTはUSB接続のため、ホストは問わない。Windows, MacOS, Linuxなどの主要なホストはサポートしている。
 様々な基板を開発して、Groovy-IoTで接続が可能になり、高位ソフトからのアクセスが容易になった。これらを統合して活用できないかと考えた。最初は単純にGroovy-IoTのDACをADCで受け止めて、その値に応じてPWMを変化させるモータコントロール基板を開発・製作した。果たして…応答速度が遅くまったく使いものにならない。ファームウェアでモータ制御をかけないと制御が出来ないことが判明した。そこで開発したのが、Groovy-PIDだ。これはAliexpressで販売しているモータやそれを用いた各種のシャーシを利用するための基板だ。モータ自身に減速ギアとエンコーダが実装されているので、それを活用した基板を開発することにしたのだ。もちろん、ArduinoでのPID制御のライブラリなどもあるし、それらを活用した基板も複数開発されている。ただ、メカ的な形状としてラズパイの固定穴と同位置の基板が欲しかったのだ。もちろん、先に述べたArduinoベースの基板も回路図は公開されているので、それを用いれば基板寸法の変更と部品の再配置で実現は可能になる。それで果たして作ったと言えるのだろうか?自分から見ても面白くないし、Arudinoでどこかブラックボックス化するのであれば、ある程度の時間とコストを払ってでもスクラッチから作る価値があるのではないかと考えた…kikoriの作者から見ると、これは狂気らしい。
 最初のモータ制御基板 Groovy-PIDを設計・開発した。文字通り、安価なエンコーダ付きDCモータを用いて、エンコーダからのフィードバックでPID制御を行えるようにした。一通りの動作の確認は出来た。開発してしばらく経つと、DJIからRoboMasterが発売になった。RoboMasterの駆動方式はメカナムホイールだ。このメカナムホイールを使ってみたいと考えた。Groovy-PIDは2軸制御、つまり2個のモータを同時に制御できる。4軸制御のためには基板を2枚使う(2×2=4)か、新規に4軸に対応したモータ制御基板を開発するかだ。迷わず、後者を選ぶ、これも狂気かもしれない。その後はほぼドロ沼だ。ソフトウェア、ハードウェアと比較して相対的にメカニクス(以下、メカ)の知識が乏しい。試行錯誤の連続になる。メカは物理的な制約があるし見た目のバランス(黄金比)が一目瞭然なので最適解は少なくなる。組み合わせによっても黄金比が揺らぐ。同じようなUSBケーブルを何本買ったかわからない。余った長さをタイラップで束ねて長さ調整するのは生理的に受け付けないのだ。これも狂気の為せる技だろう。アマゾンで目についた300mm以下のケーブルは全て買ってみて、引き出し方向、曲げ特性など全て試してみた。メカナムホイールも同様だ。当初は目に付いた60mmのメタル製のホイールを使ってみたがイマイチだ。自分のイメージとまるで違う。96mm径のホイールの存在を知り試してみる。なんとなく自分のイメージに近い。ここで材質と径の違いが完全にイメージできるようになった。同時にモータの減速ギアの走行特性も試してみる。低速から高速まで幅広く速度域があるのが理想なのは言うまでもない。Groovy-PIDで使っていたとはいえ、モータ制御ICの電圧出力 vs PWM周波数、減速ギア特性、メカナムホイール自身の摩擦特性などなど、わからないことだらけだ。理解するためにはこれらのパラメータを変えて、つまりPWM周波数を変えたり、異なる減速ギア特性をもつモータに変えたり、メカナムホイール自身を付け替える必要がある。モータは4軸あるので、変える時は4本同時に変える必要がある。こういった中で探し当てたベストプラクティスが400RPM@12V, 80mm径のホイールだ。現在のGroovy-Quatroとの相性はこれがベストだと考える。
 上位ソフトウェアについても実装が必要になる。ラズパイと双璧をなすSingle Board computer(SBC)と言えば、Jetson-Nanoだろう。出荷枚数をベースとした、ラズパイの情報量の多さと使いこなしの事例に対抗するほど、NvidiaのJetson、さらに微分して言うならGPUから派生したAIエンジンの使いこなしは群を抜いている。応用例としてお手軽な2軸のAIカーのアプリを多数公開している。この中で、自分が秀逸だと思ったのが、Jupyterlabをベースとした、ゲームパッドで手軽に操縦できる教師データ取得のスクリプト群である。ハードの構成とSBCが全く異なるので、これをそのまま利用することは出来ない。ただ、このアイデアを自分の環境で実現できれば、大きな成果になる。Jupyterlabでゲームパッドを取り扱い、その方向キーの入力をローバーへの指令として利用するわけだ。若干の苦労はあったが、当初の目論見とおりの成果は出来た。
 その他にも今後はAIや画像処理などの最新の技術なども取り込んでいきたいし、そのためのプラットフォームは構築できたと考える。kikoriを介在させたROS化もロボを追求するには楽しいテーマだ。

 そろそろ、まとめよう。今までの自分が培ってきた技術を投入したローバーを製作した。この狂気を胸を患った侠気を持った彼が手伝ってくれた。今後は様々なセンサも出てくるだろうし、新しい制御アルゴリズムも開発されるだろう。それを実装できる完全なプラットフォームを手に入れることができた。後はどれだけ、その気持を狂気を保ち続けられるかだけだ。