ディレクトリ
6 TF
TFはROSの基本的かつ重要な概念であり、TF(トランスフォーム)は座標変換です。
Tfは本質的にツリーのようなデータ構造であるため、通常「tfツリー」と呼びます。tfはトピックと見なすこともできます。/tf、トピックに格納されるメッセージはtfツリーのデータ構造形式です。ロボット全体、さらにはマップまでの座標変換関係が維持されます。
6.1 TF / TFツリー形式の仕様
TransformStamped.msgのフォーマット仕様は次のとおりです。
std_mags/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/Transform transform
geometry_msgs/Vector3 translation
float64 x
float64 y
float64 z
geometry_msgs/Quaternion rotation
float64 x
float64 y
flaot64 z
float64 w
まず、ヘッダーはシリアル番号、時間、フレーム名を定義します。次に、child_frameも作成しました。これら2つのフレーム間の変換は、geometry_msgs / Transformによって定義されます。Vector3 3次元ベクトルは並進を表し、Quaternionクォータニオンは回転を表します。
最後に、多くのTransformStamped.msgがtfに送信され、TFツリーが形成されました。
TFツリーは、多数のフレーム間のTFステッチによって形成されます。それでは、TFツリーはどのタイプですか?次のように:
- tf / tfMessage.msg
- tf2_msgs / TFMessage.msg
TFには2つのデータ型があり、主な理由はバージョンの反復です。ROS Hydro以降、tfの最初の世代はtf2を支持して「非推奨」になりました。
使用しているTFのバージョンを確認するには、rostopic info / tfコマンドを使用します。
tf / tfMessage.msgまたはtf2_msgs / TFMessageの標準形式の仕様は次のとおりです。
geometry_msgs/TransformStamped[] transforms
std_mags/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/Transform transform
geometry_msgs/Vector3 translation
float64 x
float64 y
float64 z
geometry_msgs/Quaternion rotation
float64 x
float64 y
flaot64 z
float64 w
TransformStamped配列はTFツリーです。
6.2 TF関連のツールコマンド
- 現在のtfツリーに基づいてpdfグラフを作成します。
$ rosrun tf view_frames
このツールは、最初に5秒間/ tfをサブスクライブし、この間に受信したtf情報に基づいてtfツリーを描画してから、pdfマップを作成します。
- 現在のtfツリーを表示します。
$ rosrun rqt_tf_tree rqt_tf_tree
このコマンドもtfツリーをクエリしますが、最初のコマンドとの違いは、コマンドが現在のtfツリーを動的にクエリすることです。現在の変更は、いつ切断するか、いつキャッチするかなど、すぐに確認できます。これらは、rqtプラグインを介して表示されます。
- 2つのフレーム間の変換関係を表示します。
$ rosrun tf tf_echo [reference_frame] [target_frame]
6.3 TFの原則
6.3.1 ROS座標系
- ROSの座標系は右手で定義されます。
したがって、ROSロボットの場合、それを座標系の元の中心として使用すると、次のようになります。
-
X軸:フロント
-
y軸:左
-
z軸:上
- 軸を中心とした回転では、右手の定義も使用されます。
右手で座標軸を持ち、親指の方向が座標軸の正の方向を向き、4本の指の方向がこの座標軸に沿った正の回転方向を定義します。
右手の定義によれば、z軸を中心とした正の回転は反時計回りの回転です。
- ヨーを使用して、方位角と呼ばれるZ軸を中心に回転します。
- ロール角度と呼ばれるX軸を中心に回転します。ロールを使用して指示します。
- ピッチ角と呼ばれるY軸を中心に回転し、ピッチを使用して表現します。
例:
車の動きを説明するために通常使用する2次元平面は、X軸とY軸で構成される平面であるXY平面を参照します。この平面では、車の回転を説明するために使用される角度は、Z軸を中心とした回転であり、多くの場合上記の方位角。Z軸は上を向いているので、右手の法則によれば、車は左に正になり、右に負になっていることがわかります。
- 座標系の定義
空間内の同じ位置で、異なる座標系では座標値が異なります。
上の図では、座標系Aと座標系Bの2つの座標系があり、オレンジ色の座標軸はX軸(前方)を表し、青色の座標軸はY軸(左側)を表します。座標系Aの場合、ピンク色の点の座標は**(3、-3)、座標系Bの場合、ピンク色の点の座標は(5、1)**
- 測定単位:
ROSはメートル法を使用します:
>線形速度:m / s
>角速度:rad / s
線形速度= 0.5m / sは、屋内ロボットではかなり速い速度です。角速度= 1.0rad / sは、6秒の回転を意味します。
参照する:
https://www.cnblogs.com/hiram-zhang/p/10392877.html
https://blog.csdn.net/shixiaolu63/article/details/78496457
https://blog.csdn.net/autolabor/article/details/85120806
6.3.2座標系の分類
通常、ロボットシステムには複数の3次元参照座標系があり、これらの座標系間の相対関係は時間とともに変化します。この関係と変更を説明する実際のロボットアプリケーションシナリオの例を次に示します。
- グローバル世界座標系:通常、レーザースラムによって構築されたラスターマップの座標系マップ。
- ロボットシャーシ座標系:通常、ロボットシャーシ座標系base_footprintまたはbase_link。
- ロボットの各コンポーネントの座標系:LIDAR、IMU、その他のセンサー独自の座標系、base_laser_link、imu_linkなど。
これらの座標系間の関係には、静的なものと動的なものがあります。ロボットシャーシが移動すると、ロボットシャーシと世界地図-> base_footprintの相対関係は動的になります。
ロボットシャーシにインストールされているLIDARやIMUなどのセンサーとロボットシャーシの相対的な関係base_footprint-> base_laser_link、base_footprint-> imu_linkは静的です。
6.3.3ロボットTFのセットアップ
http://wiki.ros.org/navigation/Tutorials/RobotSetup/TF
https://www.ros.org/reps/rep-0105.html