人間のあるべき姿の探索

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

人形のシステムの自動テストと手動テスト

人形になるぞ!

godiva-frappuccino.hatenablog.com

 ということで人形に機構を仕込み、HMDから操作できるシステムを製作しているのですが、機構のテストがかなり大変です。というのが、まず入力としてHMDで頭部の姿勢をロボットPCに送り、ロボットPCで計算した値をArduinoに送信して実際のサーボモータを動かす、といった流れになります。しかし、毎回電源を繋いでモータを動かすのは手間がかかる上にソフトウェアにミスがあった場合に可動域を超過して機構を破壊する恐れもあります。HMDの姿勢も最終的には理想的な値を送られる必要があるのですが、テストするうえでは望む値の流れが来た時に人形が同様に動くことを確認する必要があります。

 そこで、レイヤードアーキテクチャを用意して差し替えを簡単にします。上記の流れをフルで動かす場合は、HMDからのメッセージをUDPServerで受取り、Lookユースケースの中でRobotの値を更新し、Move GeneratorはArduinoに更新された人形の姿勢を送信してモータを動かします。ここで、HMD側のテストを切り替えるにはAPIではなくUtestのTestCodeからLookユースケースを呼び出します。そして、実際のハードを用いず値のテストを行うにはInfra層の接続先をMockに切り替えます。

 TestCodeでは簡易的に首機構の三自由度分の姿勢を10fpsで送っています。よく見たらUDPServerに値を送る方式をとっていますね。ここはソケット通信の疎通確認を含めたいかどうかで書き方が変わる為、直にLookユースケースを呼び出す書き方も別途していました。

Mockに送る(=実質プリントデバッグ)ことで、モータを動かさずにテストできます。

 また、これらのテストは理想的な動作を事前に定義した姿勢でテストすることができますが、人間の動作に近い有機的な姿勢を生成するのは少し面倒になります。本当はリプレイ機能を搭載して一度レコードする処理を書けばよいのですが、それもかなり手間なので、手動でテストするためのパーツも購入しました。

 サーボテスターです。これにサーボモータと電源を繋ぐことで、つまみをひねることでサーボの角度を変更することができます。これによって、こう値を送ればこう首が動く、といったイメージを脳みそから直接出力することができます。また、単純にサーボに値を送ることもできるので、角度を90度付近に合わせたい(厳密にはプログラムから送った方が良いです)、サーボのつき方が逆になっていないか確認したいといった簡単なユースケースで専用のプログラムを書かなくて済む点が非常に便利でした。

burariweb.info

 Pepperとか既存のロボットだとこういったテストやシミュレーションのツールが提供されていることもあるのですが、自作だと一から用意する必要がありますね。ロボットテスト、何もわからん…!