人間のあるべき姿の探索

思索・人形・エンジニアリング

人形に機構を仕込むためのハード選定

人形になるぞ!

godiva-frappuccino.hatenablog.com

 ということで、人形に機構を仕込んで動かす為の試みを続けています。今回はハードウェアの選定の話をします。ロボットとしての構成は以下の図のようになっています。データフローの説明の為の図なのでソフトウェアとハードウェアが混ざっていますが、まず左の操作用のHMDがPICO4というHMDで、一般的に流通しているVIVEやQuestシリーズとは異なる機種になります。そして、人形側はまず粘土でできた胴体、これは特にいうことがありませんが、その中にロボット用PC、マイコンボードであるArduinoサーボモータを動かすドライバーの役目を担うPCA9685、サーボモータ、そしてUSBカメラで構成されています。

 まず、HMDの選定からです。このプロジェクトの開始が今年の一月ごろだったのですが、元々人形の遠隔操作のツールを選定する中で、スマートフォンを検討していました。しかし、Android端末は元々VRに特化したハードウェアではなく、特に頭にかぶる場合にはそのための器具も必要で、アプリケーションも一から自分で作成する必要があったため、かなり難易度が高いと感じました。センサーも大したものではなく、眼球二つ分をの映像を視差を考慮して画面に映すのは結構面倒でした。Android用のコード書く経験はあまりなかったですし。

 ということで、その辺りの基本的な要件を簡単に満たせるHMDに手を出しました。UnityでVRアプリケーションを書くことは覚悟していたので安価なものを選定したのですが、一般的にはOculus Quest2というものが安価かつ情報も多く、開発向きの機種とされていました。しかし、カメラパススルー機能というHMDを被ったまま外の景色を見られる機能があり、それがOculust Quest2だとモノクロかつ低い解像度でしかできないということを知りました。一応上位機種のQuest ProだとRGBなのですが、当時20万円程度したので、開発用デバイスとして使うだけだと費用を回収できないと思いました。そこで白羽の矢が立ったのがPICO4というわけですね、2022年10月頃発売で未だに開発向けの情報が無く、あまりにもないので僕も記事を書くくらいだったのですが、未だに全然情報がありません。

 因みに、HMDについては未だに開発で困難にぶち当たっています。というのも、カメラ映像の転送のオプションが二つ考えられ、有線接続および無線接続なのですが、通信が高速かつ安定する有線接続についてはあまり有効な手段が確立されていません。一応コミュニティサイトでUSB Type-CからEthernetに変換してPCに刺せば通信できるとの記載があったのですが、ダメでした。これについては昔自作したEthernetが死んでいる可能性があるので別の機会に試してみますが、有線でTCPのような自前で用意したアプリケーションの通信を簡単に動かせる状態ではないようでした。また、Webカメラを直に刺そうとしたのですが、Unity側の都合でWebカメラの映像を投影するためのライブラリが古く、対応するUnityのバージョンが古いためQuestシリーズならまだしも2022年発売のPICOシリーズのSDKとは互換性がないといった状況で、Unityの都合に引っ張られています。といった感じでハードウェアの制約に引っかかる苦労をしています。

youtu.be

 そして、PCについてはラズパイではなく中華性の小型デスクトップPCを使用しています。最終的に人形の外部にPCを置いてデモを行う算段を立てているのですが、設計段階では人形内部に機構と共にPCなどのパーツ一式が入ることを要件としていました。一応今でも入る想定で組んでいますが。そこで、ノートPCはディスプレイがついているので扱いやすいのですが、うすべったいあの形だと有機的な形をした胴体に全然入りません。ということでコロンとした72x72x40mmくらいの小型PCが必要になりました。ここでラズパイを使用することも検討したのですが、ラズパイを3台くらい焼いている身としては、やはり高価なハードウェアを焼いたときのダメージがあたまによぎります。ラズパイ4は一時的な高騰もありましたが、落ち着いた今でも12000円程度、高騰前に確保していたJetson Nanoは40000円近くまで高騰していたこともあり、これを破損したときのダメージはとても大きいと思いました。そこで、サーボモータと接続する部分は直接つなぐのではなく、Arduinoを挟むことによって事故のダメージをArduinoで止めることにしました(ショート時にPCにダメージが来ない配線かどうか確認する必要はあります、どうなんでしょう(確認しろっていわれてるんですが…))。更に、Arduinoはあくまでモータを動かす為のものであまりコードを書き替えたくないので、モータを刺せば命令を投げられるようにしたかったのですが、配線番号をべた書きするようなことは避けたく、そういった依存関係をPCA9685に吸収させることにしました。PCA9685だと16つのサーボまでを論理的な番号で扱えるので、Arduinoのピンのことを気にせずに済みます。一つ難点としては、HMDからサーボモータに命令が流れるまでに各ポイントでの遅延がかさみ、かつ同期するための待ち状態が発生する点があります。これに関してはトレードオフで諦めました。モータを動かすのと映像の転送でそれぞれ200ms程度はひとまず覚悟する結果となりました。

 そして、Webカメラについては検討中ですが、一旦市販のWeb会議用のものを購入しました。眼球にカメラを仕込むために小型カメラをいくつか購入したのですが、Amazonの評価が2.3で評価6件のようなものばかりで、8000円くらい突っ込んでみて一応動くことは確認できたものの、耐久性やデモ中の差し替え、歩留まりなどを考えるとあまり好ましくないように感じました。ひとまず眼球に埋め込むための仕組みは設計しつつ、ヘッドドレスにWebカメラを括り付けるような構成を考えています。耐久性や品質が安定していて安価でAmazonの評価が400件くらいで平均4以上の小型Webカメラが登場したら教えてください。

 というわけで、ハードウェア選定の話でした。考えることが多いですね。