Choregrapheで作成したポーズをC++モジュールで実行する

ポーズや動作を作成するのは、Choregrapheが優れている。動作は、ポーズの時間的なつながりであるとも考えるので(本当は違うが)、同じものとして考えよう。

Choregrapheでポーズを作ると、xapファイルとして出力できる。これについては、別の投稿に書いた。このファイルからポーズデータを読み込んで、NAOQIのAPIのALMotionのangleInterpolationWithSpeedメソッドで実行させる。

xapファイルは、xmlファイルなので、これを読み取らなければならない。これについては、wsibotでも使用している、tinyxml2というのを使う。これは、ヘッダーファイルとcppファイルなので、とても軽いし使いやすい。実行ライブラリ化していると組み込みがまた面倒になるから、数年前には、ほぼ、これ以外の選択肢はないように思えた。(今は、別にいいのがあるかもしれないが調べる気はない)

読み込んで、そのポーズを実行させるところまではほぼできた。その際、xapファイルに書かれている角度について少し困った。StandやStandInit、StandZeroのサーボ角度は度で書かれているのだが、新たに作った、あるいは登録した角度はラディアンで書かれているようなのだ。同じ、positionエレメント内に入っているのに、この違いは面倒臭い。両者を区別することはできないかと思ったら、どうも、version要素が2の時はラディアンと考えて問題が起きなさそうなのである。正しい回答かどうかはわからないが、まあ、これで当面矛盾は起きそうにないので、position要素の中でversionの値が2になっていたら、そのまま、angleInterpolationWithSpeedに食わせて、そうでなければ度からラディアンに変更するというようにしている。

ここまで終わったので、次は、ポーズを連続して動作させることと、それを変数のイベント化して、会話の中で呼び出せるようにしたい。