![見出し画像](https://assets.st-note.com/production/uploads/images/90638805/rectangle_large_type_2_13c9dd4b03ba72ff3ff99ee6a29b2e8f.png?width=1200)
モーションファイルを調べる その1 RobovieMaker2, Choreonoid
Meridian計画。
中枢となるシステムがだいぶ出来てきました。残るのは細かくて時間がかかる作業やユーザビリティ向上の作業です。その中でも早めに決めておきたい部分がモーションファイルの形式についてです。
自分だったらこうするなというフォーマットはすでにあるのですが、中間プロトコルという役割を考えるとなるべく多くのフォーマットを網羅して変換可能なようにしておくのがよさそうです。
まずは主要なフォーマットを調べるところから始めます。
RobovieMaker2
Vstone製の制御ソフトです。
基板のVS-RC003と組み合わせて使うものですが、PWMサーボの制御用としてはとても便利で、私もよく使っていました。
RovovieMakerマスター講座:第6回 モーションデータのフォーマットを解読するの記事を参考に、データ形式の内容をまとめてみます。
RobovieMakerのファイル形式
RobovieMakerのモーションファイルはテキスト形式を採用しており、
「データ名(コマンド) : データ1, データ2, … 改行」
の書式でデータが連なっていくというフォーマットになります。
![](https://assets.st-note.com/img/1667752353612-srk3Ty2NWa.png?width=1200)
RobovieMakerモーションファイルの要素
PC画面のブロック式プログラミングのブロックに備わったパラメータがそのままデータとして書き出されるようです。ゆえにロボット制御用のデータの他に、PC画面上のブロックの座標なども格納されます。
データ内で出現する要素は、以下の5種類になります。
① _MOTION_FORMAT:[フォーマットの種類]
② _ENABLE_AXIS:[制御する軸数]
③ _MOTION_INFO:[[ブロックの名称]]-[ブロックのPC表示X座標(>0)]-[PC表示Y座標(>0)]-[フロー(PC表示矢印)の折り返しまでの長さ(通常)]-[フローの折り返しまでの長さ(分岐)]-[通常のフローの接続先]-[分岐のフローの接続先]
④ _POSE:[遷移時間]-[ポーズスライダの値]…-[[音声ファイルパス]]-[サーボモータ脱力機能の設定]
⑤ ブロック種識別: _STARTMOT:, _ENDMOT:, _OLDLOOP:(ループ), _MIF:(分岐), _VARCON:/_VARVAR:(演算),
さらにブロック種別のルールがあります。
_VARCON(変数対定数演算):[結果代入変数(0~255)]-[計算方法(0:代入,1:加算,2:減算,3:乗算,4:除算]-[定数(-32768~32767)]
_VARVAR(変数対変数演算):[結果代入変数(0~255)]-[計算方法]-[参照変数(0~255)]
_MIF(条件分岐):[参照変数(0~255)]-[条件設定(0:未定義,1:閾値以上,2:閾値以下,3:ビット合致,4:閾値=,5:閾値≠,6:常に成立,7:常に不成立)]-[条件詳細(-32768~32767)]
・0:未定義,6:常に成立,7:常に不成立 → 詳細条件は無視、0を入れる
・1~5:閾値の時 → -32768~32767
・3:ビット合致 → 上位8bitに条件成立値、下位8bitに有効ビット
情報をまとめたことで、少しだけスッキリしました。
条件式やジャンプ先などの設定に加え、演算用のルールやサウンドファイルの指定まで含むところが特徴です。
Choreonoid
コレオノイドについては公式のマニュアルを参考にします。
Choreonoidの「標準ボディモーションファイル形式」はYAML形式です。
拡張子は".seq"ですが、".yaml" または ".yml" でも読み込めます。
ロボットの動きをキーポーズの連続として表現し、制御時間ごとの目標姿勢に変換して、命令列を与えて実行させます。
無理な姿勢のキーポーズには身体バランス補正を行い、安定動作を生成することもできます。
![](https://assets.st-note.com/img/1667752539538-ALY3HSbdfO.png?width=1200)
Choreonoidが生成する動作パターンファイル
大きく2つの関連ファイルがあります。
■ Pose Sequenceファイル(.pseq)
データタイプ、名前、対象となる関節のID、目標関節角、IK計算のための情報などが入る。
■ Motionファイル(.seq, .yaml)
Pose Sequenceから生成され、
一定時間間隔の関節角の列、関節重心位置、ZMPの位置などの情報などが入る。
Motionファイルの要素
Pose Sequenceには初期設定のような情報が入るため、今回の参考としては「Motionファイル」のみフォーカスします。
データはトップノード-コンポーネント-フレームデータの3階層からなり、データのタイトルが同じ場合でも内容が異なることに注意が必要です。
<トップノード>
① type: データのタイプ. PoseSeq, CompositeSeq等
② content: BodyMotion等
③ formatVersion フォーマットのバージョン
③ frameRate 動作全体でベースとなるフレームレート(フレーム数/秒)
④ numFrames 動作全体のフレーム数
⑤ components リスティング形式でコンポーネントを以下に記述
<コンポーネント>
① type: データのタイプ. MultiValueSeq, MultiSE3Seq, Vector3Seq
② numParts 1フレームの要素数。Multiタイプのデータ形式で有効
③ frameRate フレームレート。トップノードにあれば省略可
④ numFrames フレーム数を指定
⑤ frames YAMLシーケンスとして以下にフレームデータを列挙
<フレームデータ>
① データを配列でnumFrames分列挙していく
以上がChoreonoidのおおまかなファイル形式です。
ポイント
時間分割についてRobovieMakerはタイムステップ方式、choreonoidはフレームレート方式となっています。
Meridianの記述ではタイムステップ方式を使用するのがマイコンの制御周期から見て相性がよいかなと思っています。
またchoreonoidではMultiSE3Seq, Vector3Seqなど関節角以外の情報も扱えるようですが、これも一旦は忘れてよいかなと思います。ロボットでは最終的に関節角度に置き換えられるため、Meridianでは複雑な計算は内部に直接式を書いたり、PCで計算した結果を送ることを想定しています。とはいえ、あとで拡張できるように設計時に分岐できるように余裕を確保しておくのはよさそうです。
Meridianの初期の設計思想では、分岐などについては個人がコードを書くことを想定していましたが、やはりモーションファイルの要素に分岐プログラムや演算などの仕組みも加えておいた方が使いやすいかもしれません。
競技ロボやドールロボなど、まだまだリモコンによる操作が主流ですし、既存システムの利便性をなるべく引き継いだ方が、乗り換えもスムーズでしょう。
つぎにやること
今回はRobovieMakerとChoreonoidを調べましたが、RobovieMakerに近いHeartToHeartやChoreonoidに近いブレンダーやCGアバターのモーション設計ソフトも見てみたいと思います。
次の記事:
前の記事:
目次:
いいなと思ったら応援しよう!
![Ninagawa123](https://assets.st-note.com/production/uploads/images/42043408/profile_52f60cd7824c7258c7e476e38c52c3da.png?width=600&crop=1:1,smart)