Main Content

transformtraj

두 변환 사이의 궤적 생성

설명

예제

[tforms,vel,acc] = transformtraj(T0,TF,tInterval,tSamples)는 시간 간격과 주어진 시간 샘플에 기반한 점을 사용하여 두 개의 동차 변환 T0TF 사이를 보간하는 궤적을 생성합니다.

[tforms,vel,acc] = transformtraj(T0,TF,tInterval,tSamples,Name=Value)는 이름-값 인수를 사용하여 추가 파라미터를 지정합니다.

예제

모두 축소

두 개의 방향과 위치에서 변환을 만듭니다. 보간을 위한 시간 간격과 시간으로 구성된 벡터를 지정합니다.

t0 = axang2tform([0 1 1 pi/4])*trvec2tform([0 0 0]);
tF = axang2tform([1 0 1 6*pi/5])*trvec2tform([1 1 1]);
tInterval = [0 1];
tvec = 0:0.01:1;

점 사이를 보간합니다. plotTransforms를 사용하여 궤적을 플로팅합니다. 변환을 쿼터니언 회전과 선형 천이로 변환합니다. Figure가 좌표 프레임의 모든 중간 변환을 보여줍니다.

[tfInterp, v1, a1] = transformtraj(t0,tF,tInterval,tvec);

rotations = tform2quat(tfInterp);
translations = tform2trvec(tfInterp);

plotTransforms(translations,rotations)
xlabel('X')
ylabel('Y')
zlabel('Z')

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 404 objects of type patch, line.

축-각 회전에서 첫 번째 변환을 구축하고 축-각 회전과 변환 모두에서 마지막 변환을 구축합니다.

t0 = se3([0 1 1 pi/4],"axang");
tF = se3([1 0 1 6*pi/5],"axang")*se3([1 1 1],"trvec"); 

보간을 위한 시간 간격과 시간으로 구성된 벡터를 지정합니다.

tInterval = [0 1];
tvec = 0:0.01:1; 

변환 사이를 보간합니다. plotTransforms를 사용하여 궤적을 플로팅합니다.

[tfInterp] = transformtraj(t0,tF,tInterval,tvec); 
plotTransforms(tfInterp(1:10:end))

Figure contains an axes object. The axes object contains 44 objects of type patch, line.

입력 인수

모두 축소

초기 변환으로, 4×4 동차 변환 또는 스칼라 se3 객체로 지정됩니다. 함수는 초기 변환 T0에서 시작하여 최종 변환 TF로 이동하는 궤적을 생성합니다.

T0TF는 동일한 유형이어야 합니다. 예를 들어 T0이 스칼라 se3 객체이면 TF도 스칼라 se3 객체여야 합니다.

데이터형: single | double

최종 변환으로, 4×4 동차 변환 또는 스칼라 se3 객체로 지정됩니다. 함수는 초기 변환 T0에서 시작하여 최종 변환 TF로 이동하는 궤적을 생성합니다.

T0TF는 동일한 유형이어야 합니다. 예를 들어 T0이 스칼라 se3 객체이면 TF도 스칼라 se3 객체여야 합니다.

데이터형: single | double

궤적의 시작 시간과 종료 시간으로, 요소를 2개 가진 벡터로 지정됩니다(단위: 초).

예: [0 10]

데이터형: single | double

궤적에 대한 시간 샘플로, 요소를 m개 가진 벡터로 지정됩니다(단위: 초).

예: 0:0.01:10

데이터형: single | double

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 버전에서는 쉼표를 사용하여 각 이름과 값을 구분하고 따옴표로 Name을 묶으십시오.

예: TimeScaling=[0 1 1; 0 1 0; 0 0 0]

시간 스케일링 벡터와 1계 2계 도함수로, 3×m 행렬로 지정됩니다. 여기서 m은 tSamples의 길이입니다. 기본적으로 시간 스케일링은 tInterval의 시간 지점 사이의 선형 시간 스케일링입니다.

비선형 시간 스케일링의 경우 시간 지점의 값을 첫 번째 행에 위치 시간 스케일링으로 지정합니다. 두 번째 행과 세 번째 행은 각각 첫 번째 행의 첫 번째 도함수(1/s)와 두 번째 도함수(1/s2)입니다. 예를 들어 중간 지점까지는 선형 속도로 경로를 따라가고 종료 지점까지는 급하게 빨라지도록 하는 경우 시간 스케일링이 다음과 같습니다.

s(1,:) = [0 0.25 0.5 1 1 1] % Position time scaling, s(t)
s(2,:) = [1    1   1 0 0 0] % Velocity time scaling, ds/dt
s(3,:) = [0    0   0 0 0 0] % Acceleration time scaling, d^2s/dt^2
첫 번째 행의 모든 요소는 범위 [0, 1] 내에 있어야 합니다.

데이터형: single | double

출력 인수

모두 축소

변환 궤적으로, 4×4×m 동차 변환 행렬 배열 또는 se3 객체로 구성된 m개 요소를 가진 배열로 반환됩니다. 여기서 m은 tSamples의 점 개수입니다.

변환 속도로, 6×m 행렬로 반환됩니다(단위: m/s). 여기서 m은 tSamples의 점 개수입니다. 처음 세 요소는 각속도이고 두 번째 세 요소는 시간의 속도입니다.

변환 가속도로, 6×m 행렬로 반환됩니다(단위: m/s2). 여기서 m은 tSamples의 점 개수입니다. 처음 세 요소는 각가속도이고 두 번째 세 요소는 시간의 가속도입니다.

참고 문헌

[1] Lynch, Kevin M., and Frank C. Park. Modern Robotics: Mechanics, Planning, and Control. Cambridge University Press, 2017.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2019a에 개발됨

모두 확장