transform
メッセージ エンティティからターゲット座標系への変換
構文
説明
は、tfentity
= transform(tftree
,targetframe
,entity
)targetframe
と entity
の座標系間の最新の変換を取得し、特定のタイプの ROS メッセージ entity
に適用します。tftree
は、エンティティ間の既知の変換を含む変換ツリー全体です。entity
から targetframe
への変換が存在しない場合、MATLAB® ではエラーが発生します。
は、メッセージ tfentity
= transform(tftree
,targetframe
,entity
,"msgtime")entity
のヘッダーのタイムスタンプをソース時間として使用し、変換を取得して適用します。
は、指定されたソース時間を使用し、変換を取得してメッセージ tfentity
= transform(tftree
,targetframe
,entity
,sourcetime
)entity
に適用します。
例
この例では、変換ツリー情報に基づいて ROS 変換ツリーと変換座標系を設定する方法を説明します。時間でバッファーされた変換を使用して、さまざまな時間の変換にアクセスします。
ROS 変換ツリーを作成します。rosinit
を使用して ROS ネットワークに接続します。ipaddress
を、使用している ROS ネットワーク アドレスに置き換えます。
ipaddress = '192.168.17.129';
rosinit(ipaddress,11311)
Initializing global node /matlab_global_node_14346 with NodeURI http://192.168.17.1:56312/
tftree = rostf; pause(1)
変換ツリーで使用可能な座標系を確認します。
tftree.AvailableFrames
ans = 36×1 cell
{'base_footprint' }
{'base_link' }
{'camera_depth_frame' }
{'camera_depth_optical_frame'}
{'camera_link' }
{'camera_rgb_frame' }
{'camera_rgb_optical_frame' }
{'caster_back_link' }
{'caster_front_link' }
{'cliff_sensor_front_link' }
{'cliff_sensor_left_link' }
{'cliff_sensor_right_link' }
{'gyro_link' }
{'mount_asus_xtion_pro_link' }
{'odom' }
{'plate_bottom_link' }
{'plate_middle_link' }
{'plate_top_link' }
{'pole_bottom_0_link' }
{'pole_bottom_1_link' }
{'pole_bottom_2_link' }
{'pole_bottom_3_link' }
{'pole_bottom_4_link' }
{'pole_bottom_5_link' }
{'pole_kinect_0_link' }
{'pole_kinect_1_link' }
{'pole_middle_0_link' }
{'pole_middle_1_link' }
{'pole_middle_2_link' }
{'pole_middle_3_link' }
⋮
目的の変換が使用可能になっているかどうかを確認します。この例では、'camera_link'
から 'base_link'
への変換があるかを確認します。
canTransform(tftree,'base_link','camera_link')
ans = logical
1
現時点から 3 秒間の変換を取得します。関数 getTransform
は、指定されたタイムアウトで変換が使用可能になるまで待機します。
desiredTime = rostime('now') + 3; tform = getTransform(tftree,'base_link','camera_link',... desiredTime,'Timeout',5);
変換する ROS メッセージを作成します。メッセージは、ROS ネットワークから取得することもできます。
pt = rosmessage('geometry_msgs/PointStamped'); pt.Header.FrameId = 'camera_link'; pt.Point.X = 3; pt.Point.Y = 1.5; pt.Point.Z = 0.2;
前に保存した目的の時間を使用して、ROS メッセージを 'base_link'
座標系に変換します。
tfpt = transform(tftree,'base_link',pt,desiredTime);
オプション: 格納された tform
とともに apply
を使用して、この変換を pt
メッセージに適用することもできます。
tfpt2 = apply(tform,pt);
ROS ネットワークをシャットダウンします。
rosshutdown
Shutting down global node /matlab_global_node_14346 with NodeURI http://192.168.17.1:56312/
この例では、ROS ネットワーク上の時間でバッファーされた変換にアクセスする方法を説明します。特定の時間の変換にアクセスし、目的の時間に基づいて BufferTime
プロパティを変更します。
ROS 変換ツリーを作成します。rosinit
を使用して ROS ネットワークに接続します。ipaddress
を、使用している ROS ネットワーク アドレスに置き換えます。
ipaddress = '192.168.17.129';
rosinit(ipaddress,11311)
Initializing global node /matlab_global_node_78006 with NodeURI http://192.168.17.1:56344/
tftree = rostf; pause(2);
1 秒前から変換を取得します。
desiredTime = rostime('now') - 1; tform = getTransform(tftree,'base_link','camera_link',desiredTime);
変換のバッファー時間は、既定では 10 秒です。変換ツリーの BufferTime
プロパティを変更してバッファー時間を増やし、そのバッファーが満たされるまで待機するようにします。
tftree.BufferTime = 15; pause(15);
12 秒前から変換を取得します。
desiredTime = rostime('now') - 12; tform = getTransform(tftree,'base_link','camera_link',desiredTime);
未来の時点の変換を取得することもできます。関数 getTransform
は、変換が使用可能になるまで待機します。変換が見つからない場合にエラーとなるまでのタイムアウトを指定することもできます。この例では、現時点から 3 秒の時点における変換が使用可能になるまで 5 秒待機します。
desiredTime = rostime('now') + 3; tform = getTransform(tftree,'base_link','camera_link',desiredTime,'Timeout',5);
ROS ネットワークをシャットダウンします。
rosshutdown
Shutting down global node /matlab_global_node_78006 with NodeURI http://192.168.17.1:56344/
入力引数
ROS 変換ツリー。TransformationTree
オブジェクト ハンドルとして指定します。変換ツリーは、関数 rostf
を呼び出すことによって作成できます。
エンティティの変換先のターゲット座標系。string スカラーまたは文字ベクトルとして指定します。tftree.AvailableFrames
を呼び出すと、変換に使用可能な座標系を表示できます。
初期メッセージ エンティティ。Message
オブジェクト ハンドルとして指定します。
サポートされているメッセージは次のとおりです。
geometry_msgs/PointStamped
geometry_msgs/PoseStamped
geometry_msgs/QuaternionStamped
geometry_msgs/Vector3Stamped
sensor_msgs/PointCloud2
ROS 時間またはシステム時間。スカラーまたは Time
オブジェクト ハンドルとして指定します。スカラーは、rostime
を使用して Time
オブジェクトに変換されます。
出力引数
変換後のエンティティ。Message
オブジェクト ハンドルとして返されます。
拡張機能
使用上の注意および制限:
ビルド タイプ
Executable
でのみサポートされます。MATLAB Function ブロックでの使用はサポートされていません。
バージョン履歴
R2019b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)