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 명령 창에 입력하십시오. 웹 브라우저는 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)