RobotSpecManager
ロボットの仕様の XML ファイルを読み、ロボットの寸法と質量(SMSL_RobotSpec)と、ファイルに書いてあればその性能値の限界(SMSL_RobotMotionLimits)を、始めに 1 回だけ出力します。
処理内容
- 始めに spec_file のファイルを読んで確かめ、ロボットの仕様を 1 回だけ出力し、あとはダイアグラムが止まるまで待ちます。ロボットを使う部品は値を線で受けるので、ロボットの大きさのプロパティを持つ必要がありません。
- ロボットの体の輪郭(フットプリント)は、長方形(ロボットの原点から前端・後端・左端・右端までの距離)、円、多角形(3〜32 頂点、ROS の footprint の書き方)のどれかで与えます。出力する輪郭は必ず反時計回りです。内接円の半径は原点から辺までの最短距離、外接円の半径は原点から頂点までの最長距離です。円のときは、どちらも半径です(輪郭は円を内に含む正 16 角形)。
- ロボットの種類(differential、omni、ackermann、drone)によって、body 要素と motion 要素のどの属性が必須か、任意か、書けないかが決まります。body 要素には、高さ、質量と重心、車輪の配置を書きます。motion 要素には、機体の限界(最大速度、最大加速度、最大減速度(非常停止の減速度を含む)、最大角速度、ドローンでは傾きの最大角、ackermann では舵角を切る速さの最大)を書きます。ロボットが動けない方向は、出力では 0 です。
- 構造体は DataViewer で見えないので、値は始めにログへ出します。
- ファイルが読めないとき、属性が足りないか種類に合わないとき、値が有限の数でないか範囲外のとき、多角形が自分と交わるか面積が 0 のとき、ロボットの原点が輪郭の内側にないときは、エラーで止まります。
使い方
- 主な出力:
robot_spec→rings_pose_estimation_icp.robot_spec、robot_motion_limits→rings_pose_estimation_icp.robot_motion_limits、robot_spec→rings_pose_estimation_p2plane.robot_spec、robot_motion_limits→rings_pose_estimation_p2plane.robot_motion_limits。
データ形式
- ロボットの座標は右手系で、X が前、Y が左、Z が上、単位は m です。原点はロボットの姿勢(pose2D)が指す点です。地上のロボットは z = 0 が接地面です。
- ファイル:UTF-8 の XML。ルート要素は robot_spec で、属性 type を持ちます。footprint 要素(属性 shape:rectangle、circle、polygon)を 1 つ、body 要素と motion 要素を任意で 1 つずつ書きます。body か motion を書くときは type が必須です。知らない要素・属性はエラーです。
- 出力 robot_spec:カスタムストラクチャー SMSL_RobotSpec(632 バイト)。頂点の数、種類、内接円と外接円の半径、最大 32 個の頂点(x, y、反時計回り)、続いて body 要素の値(書いていないか、種類で使わない値は 0)。出力 robot_motion_limits:カスタムストラクチャー SMSL_RobotMotionLimits(120 バイト)。motion 要素を書いたときだけ作られます。速度と加速度は 0 以上です。
- 4 つの種類のサンプルが example フォルダにあります(robot_spec_differential.xml、robot_spec_omni.xml、robot_spec_ackermann.xml、robot_spec_drone.xml)。
注意事項
- センサの取り付け(各センサの位置と向き)は、このコンポーネントでは与えません。RTMaps 標準のコンポーネント Sensor Calibration File Parser を使い、その行列の出力を Rotation3D(Matrix Input)につないでください。トピック「ロボットの仕様とセンサの取り付け」を参照してください。
- motion 要素に書くのは機体の限界だけです。今日使う速さは、使う部品のプロパティに、限界以下の値で持ちます。
- 摩擦係数はロボットの仕様に入りません。床の値だからです。
- ファイルの motion 要素を足したり外したりしたときは、出力 robot_motion_limits が作られる・消えるように、spec_file を選び直してください。
プロパティ
| 名前 | 説明 |
|---|---|
spec_file | ロボットの仕様の XML ファイルのパス(UTF-8)。書き方はコンポーネントの説明を参照してください。 |
出力
| 名前 | 説明 |
|---|---|
robot_spec | ロボットの寸法と質量をカスタムストラクチャー SMSL_RobotSpec で出力します:輪郭、内接円と外接円の半径、種類、body 要素の値。始めに 1 回だけ出力します。型: SMSL_RobotSpec |
robot_motion_limits | ロボットの性能値の限界をカスタムストラクチャー SMSL_RobotMotionLimits(最大速度、最大加速度、最大減速度、最大角速度、傾きの最大角)で出力します。ファイルに motion 要素を書いたときだけ作られ、始めに 1 回だけ出力します。型: SMSL_RobotMotionLimits |
RTMaps ツールキット ドキュメント