Main Content

transform

메시지 엔터티를 타깃 좌표 프레임으로 변환

R2019b 이후

설명

예제

tfentity = transform(tftree,targetframe,entity)targetframeentity의 좌표 프레임 사이의 가장 최근 변환을 가져와서 지정된 유형의 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);

선택 사항: 저장된 tformapply를 함께 사용하여 이 변환을 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 객체 핸들로 반환됩니다.

확장 기능

버전 내역

R2019b에 개발됨

참고 항목

|