モーションファイルを調べる その2 HeartToHeart3, 4
Meridian計画。
前回に引き続き各社のモーションファイルの内容を見ていきます。
今回は近藤科学のHeartToHeart3とHeartToHeart4について調べます。
HeartToHeart3
制御ボードのRCB-3と組み合わせて使うのがHeartToHeart3(以降HTH3)です。
新バージョンのHeartToHeart4が登場して久しいですが、HTH3は古参のユーザーを中心に根強い人気があるようです。
RobovieMakerと同じく、プログラムのブロックをラインで接続してコーディングするタイプです。
ブロックの種類は、①ポーズ設定のPOS、②値をセットするSET、③条件分岐のCMP、④ミキシングのMIXの4つです。この4つのブロックとスタートフラグのみで構成されます。
シンプルで素直な作りとなっており、内部のデーター構造も明瞭です。
".RCB" ファイル
HeartToHeart3で作成したプログラムは、拡張子".RCB"のテキストファイルとして保存され、データは下記のように記録されます。
RobovieMakerと同じように、表示用のパラメータとプログラム用のパラメータからなります。
【".RCB"ファイルの中身】
[GraphicalEdit]
Type : 不明.
Width : 画面の表示用横サイズ
Height: 画面の表示用縦サイズ
Items : プログラムブロックの数
Links : 接続線, 分岐線の数
Start : スタートフラグが何番目のブロックか. ナシは-1
Name : 空ファイルを保存すると「無題」と漢字で入る
Ctrl : モーション呼び出し用のリモコン値. 初期値は65535
[ItemxX]
Name : ブロック名. POSx, CMPx など
Width : ブロックの表示用横サイズ
Height: ブロックの表示用縦サイズ
Left : ブロックの表示用横位置
Top : ブロックの表示用縦位置
Color : ブロックの色. 16777215 がデフォルトの白、
-2147483633が標準色, 255が赤, 57が青, 0が黒など
Type : ブロックの種類. POS:0、SET:1、CMP2、MIX:6
Prm : コマンド1つ+24個のパラメータの値
[LinkX]
Main : ラインの種類. 主流が0, 分流が1
Origin: リンク線の親ブロック
Final : リンク線の子ブロック
Point : 表示用の折れ線の頂点
中でもプログラムの本体と言えるのがPrmです。
Prm[0]にはモーションのステップ数が1~255で格納され、SET,CMP,MIXでは1となります。
Prm[1]~[24]にはコマンド付きのパラメータが入ります。
例えば1~32767の範囲は16384をゼロとしたサーボ角の指定となります。
32768以降はパラメータ付きのコマンドが割り当てられており、内容はRCB-3/RCB-3Jコマンドリファレンスのp10に掲載されています。
また、パラメータの計算については、SETブロックでデータをセットし、その値を対象として上記のコマンドで処理する方式です。
データにはブロックの順番に応じて行番号が割り当てられ、各ブロックの関係性はLinkデータと紐づいて収められます。
作ったプログラムはLISTとしてダンプリストのように数字の羅列で表示することができ、とても解読しやすいです。
HTH3の構造や要素は前回のRobovieMakerとかなり似ていることががわかります。
HeartToHeart4
近藤科学のヒューマノイドロボットKHR-3HVの標準ボードがRCB-4であり、対応しているモーションエディタが最新版のHeartToHeart4です。
現在、国内の二足ロボットユーザーが一番使っているのがこの組み合わせであると思われます。
さて、HTH4のモーションファイルはXMLファイルで記述されています。
ここで一度XMLファイルの基本について整理しておきます。ご存じの方は読み飛ばしてください。
XMLファイルについて
文字やデータにタグを紐づけて意味を持たせる記述法をマークアップといいます。
XMLはHTMLのように<xxx>データ</xxx>としてタグをつけるタイプのマークアップ言語です。データの階層構造が作りやすく、またタグも自由に設定することができます。
XMLはExtensible Markup Languageの略で、拡張可能なマークアップ言語ということになります。ユーザーが自由に定義を拡張できることは大きな利点ですが、一方、複数のユーザーやシステムが同じXMLを利用する際には、一定のルールや構造を決めておかないと困ったことになります。
そこで登場するのがスキーマ言語という、記述ルールを宣言するための書式です。
XMLでは「XML Schema」(古くはDTD,Document Type Definition)がそれに該当します。
XML Schemaを定義しておけば、XMLを作る際も利用する際も、それが正しくルールに従っているかを判別でき、またそのスキーマをサーバーに置いておけば、URLの参照で誰もが利用できるというわけです。
また、XMLは自由に定義できるため、タグの名前が重複してしまう可能性があります。その混乱を避けるために、名前空間というものを設定し、中で使われているタグ名が他のユーザー定義と重複しても別モノであると区別できるようにします。XMLファイルに出てくるxmlns(xmlのname space)が名前空間の定義です。
HTH4のモーション用 ".xml" ファイル
冒頭に使用スキーマの定義が書かれ、その他の要素は大きくプログラムブロックとラインの2種類に分かれます。
これまで同様、タグはほぼPC表示用の要素のために使われています。
説明の簡便のためにタグを閉じずにその意味を列挙してみました。
【 HTH4のモーション用 ".xml" ファイルの中身】
<anyType xsi:type="ActivityData"> プログラムのブロック
<Name> ブロック名, Pos01,CmpButton01など
<GUID> ブロックやラインのID
<Location> 画面上のブロックのxy座標
<Size> 画面上のブロックのサイズ
<Text> Nameと同じ?
<BackColorText> ブロックの色 buttonfaceなど
<MotionFlag> モーションの起点フラグ Start,None
<PriorityList> 優先順位 00 04 00 01など
<BaseName> ブロックの種類、Pos、CmpButtonなど
<Description> ポジション設定、コントローラーボタンで分岐など
<Group> ブロックのカテゴリ Position、Compareなど
<Path> 何かしらファイルへのパス
<ConnectedGuids> 接続されたガイド(ライン)のID
<ConnectTypes> 上記の種類 EndConnect,BeginConnect,NotConnected
<ProgramCode> RCB3ボードで有効なプログラムのコマンド
<anyType xsi:type="LineData"> ブロックを繋ぐライン
<StartPoint> 開始座標
<EndPoint> 終了座標
<GUID> ラインのID
<LineType> 線の種類、Straightなど
<ProgramCode>に注目
<ProgramCode>がコマンドの本体です。8ビット(0~255)のデータがHEX型で並びます。一見意味不明ですが、コマンドリファレンスに照らし合わせて解読できます。
データの並びは基本的に下記のようになります。
[サイズ][コマンド][コマンド別のデータ…][チェックサム]
このうちコマンドにはざっと以下ものが割り当てられています。
(※詳細は公式のRCB-4コマンドリファレンス20131018.pdfを参照)
00:MOV命令 - データをコピーする操作.
01:AND命令, 02:OR命令, 03:XOR命令, 04:NOT命令, 05:SHIFT命令
06:加算命令, 07:減算命令, 08:乗算命令, 09:除算命令, 0A:余算命令
0B:JUMP命令, 0C:CALL命令, 0D:RETURN命令
0E:ICS通信: ※問題があるため利用禁止
0F:ICS通信: 一つのサーボを、スピード・ポジションを指定して動かす
10:ICS通信: 動作スピードは一緒で、複数のサーボを動かす
11:ICS通信: ①サーボごとに動作スピードと動作ポジションを指定し動かす。
②指定したサーボのストレッチやスピードを変更する。
FD:RCB-4のバージョン情報を確認
FE:RCB-4と通信が行えるかを確認
コマンドに応じてデータ内の書式が定義されていますが、すべてリファレンスで確認することができます。
具体例で確認
例)
<ProgramCode> 2B 10 3D F3 3F 00 00 64 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 4C 1D 07
</ProgramCode>
・1番目の"2B"は十進法43でデータの数を示します。
・2番目の"10"は複数サーボ動作のコマンドを示します。
・3〜7番目にはどのサーボを有効にするかがビットで示されます。
"3D F3 3F 00 00"は00111101 11110011 00111111 00000000 0000000
となり、ID2,3,4,5,7,8,9,10,11,14,15,18,19,20,21,22,23のサーボを
動かすということになります。
(また最終ビットは更新フラグの操作に割り当てられています。)
・8番目はサーボの動作速度の指定。"64"で値は100。
・9,10番目には1つ目(ID2)のサーボを移動させるポジションが2バイトで
格納されます。下8ビットが先にくるリトルエンディアンのようです。
・最後のチェックサムには、チェックサムの1つ前までのバイトを
すべて加算したデータの下位1byteが格納されます。
ポイント
HTH3のデータ形式はシンプルで魅力的です。RobovieMakerのものと要素をマージすれば、移植しやすいモーションデータの雛形が作れそうです。
また、HTH4も一通りの処理操作をまとめたコマンドセットがなかなか魅力的で、大いに参考にできそうです。
Meridianでは既存のデータ形式では難しかった、滑らかな動作を格納できるモーションファイルを目指しています。
様々なイージングに対応したり、上半身下半身で別々のモーションを並行再生したり、複雑な計算式を混ぜて使えるなどの柔軟性と拡張性を持たせつつ、基本機能の使用に関しては低い学習コストで使えることを目指します。
Meridianのモーションファイルが定義できれば、進歩を止めていたホビーロボットのモーションファイルの表現力を一気に20年分ぐらい巻き返せるのではないかと考えています。
つぎにやること
余力があればCG系のモーションファイルについて調べてみたいと思います。
次の記事:
前の記事:
目次: