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 メッセージへの適用
この例では、変換ツリー情報に基づいて 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 ネットワークからのバッファーされた変換の取得
この例では、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/
入力引数
tftree
— ROS 変換ツリー
TransformationTree
オブジェクト ハンドル
ROS 変換ツリー。TransformationTree
オブジェクト ハンドルとして指定します。変換ツリーは、関数 rostf
を呼び出すことによって作成できます。
targetframe
— ターゲット座標系
string スカラー | 文字ベクトル
エンティティの変換先のターゲット座標系。string スカラーまたは文字ベクトルとして指定します。tftree.AvailableFrames
を呼び出すと、変換に使用可能な座標系を表示できます。
entity
— 初期メッセージ エンティティ
Message
オブジェクト ハンドル
初期メッセージ エンティティ。Message
オブジェクト ハンドルとして指定します。
サポートされているメッセージは次のとおりです。
geometry_msgs/PointStamped
geometry_msgs/PoseStamped
geometry_msgs/QuaternionStamped
geometry_msgs/Vector3Stamped
sensor_msgs/PointCloud2
sourcetime
— ROS 時間またはシステム時間
スカラー | Time
オブジェクト ハンドル
ROS 時間またはシステム時間。スカラーまたは Time
オブジェクト ハンドルとして指定します。スカラーは、rostime
を使用して Time
オブジェクトに変換されます。
出力引数
tfentity
— 変換後のエンティティ
Message
オブジェクト ハンドル
変換後のエンティティ。Message
オブジェクト ハンドルとして返されます。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用に関するメモと制限:
ビルド タイプ
Executable
でのみサポートされます。MATLAB Function ブロックでの使用はサポートされていません。
バージョン履歴
R2019b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)