Main Content

setFixedTransform

조인트의 고정 변환 속성 설정

설명

setFixedTransform(jointObj,tform)은 지정된 동차 변환 tform을 사용하여 rigidBodyJoint 객체의 JointToParentTransform 속성을 직접 설정합니다.

setFixedTransform(jointObj,dhparams,"dh")는 DH(Denavit-Hartenberg) 파라미터를 사용하여 ChildToJointTransform 속성을 설정합니다. JointToParentTransform 속성은 단위 행렬로 설정됩니다. DH 파라미터는 [a alpha d theta] 순서로 지정됩니다.

회전 조인트의 경우 theta 입력값에 해당하는 각도는 조인트 컨피규레이션에 따라 달라지므로 조인트 간의 고정 변환을 지정할 때 무시됩니다. 직선 조인트의 경우 d 입력값이 무시됩니다. 자세한 내용은 강체 트리 로봇 모델 항목을 참조하십시오.

예제

setFixedTransform(jointObj,mdhparams,"mdh")는 수정된 DH 파라미터를 사용하여 JointToParentTransform 속성을 설정합니다. ChildToJointTransform 속성은 단위 행렬로 설정됩니다. 수정된 DH 파라미터는 [a alpha d theta] 순서로 지정됩니다.

예제

모두 축소

Puma560® 로봇의 DH(Denavit-Hartenberg) 파라미터를 사용하여 로봇을 빌드합니다. 각 강체는 한 번에 하나씩 추가되며, joint 객체로 자식-부모 변환이 지정됩니다.

DH 파라미터는 각 강체가 부모에 연결되는 관계를 나타내는 로봇의 기하를 정의합니다. 편의를 위해 Puma560 로봇의 파라미터를 행렬로 설정합니다[1]. Puma 로봇은 직렬 체인 매니퓰레이터입니다. DH 파라미터는 이전 조인트 연결에 해당하는 행렬의 이전 행을 기준으로 합니다.

dhparams = [0   	pi/2	0   	0;
            0.4318	0       0       0
            0.0203	-pi/2	0.15005	0;
            0   	pi/2	0.4318	0;
            0       -pi/2	0   	0;
            0       0       0       0];

로봇을 빌드할 강체 트리 객체를 만듭니다.

robot = rigidBodyTree;

첫 번째 강체를 만들고 로봇에 추가합니다. 강체를 추가하려면 다음을 수행하십시오.

  1. rigidBody 객체를 만들고 고유한 이름을 지정합니다.

  2. rigidBodyJoint 객체를 만들고 고유한 이름을 지정합니다.

  3. setFixedTransform으로 DH 파라미터를 사용하여 바디-바디 변환을 지정합니다. DH 파라미터의 마지막 요소인 theta의 경우 이에 해당하는 각도는 조인트 위치에 따라 달라지므로 무시됩니다.

  4. addBody를 호출하여 로봇의 베이스 프레임에 첫 번째 바디 조인트를 연결합니다.

body1 = rigidBody('body1');
jnt1 = rigidBodyJoint('jnt1','revolute');

setFixedTransform(jnt1,dhparams(1,:),'dh');
body1.Joint = jnt1;

addBody(robot,body1,'base')

나머지 강체를 만들고 로봇에 추가합니다. addBody 호출하여 연결할 때 이전 바디 이름을 지정합니다. 각 고정 변환은 이전 조인트 좌표 프레임을 기준으로 합니다.

body2 = rigidBody('body2');
jnt2 = rigidBodyJoint('jnt2','revolute');
body3 = rigidBody('body3');
jnt3 = rigidBodyJoint('jnt3','revolute');
body4 = rigidBody('body4');
jnt4 = rigidBodyJoint('jnt4','revolute');
body5 = rigidBody('body5');
jnt5 = rigidBodyJoint('jnt5','revolute');
body6 = rigidBody('body6');
jnt6 = rigidBodyJoint('jnt6','revolute');

setFixedTransform(jnt2,dhparams(2,:),'dh');
setFixedTransform(jnt3,dhparams(3,:),'dh');
setFixedTransform(jnt4,dhparams(4,:),'dh');
setFixedTransform(jnt5,dhparams(5,:),'dh');
setFixedTransform(jnt6,dhparams(6,:),'dh');

body2.Joint = jnt2;
body3.Joint = jnt3;
body4.Joint = jnt4;
body5.Joint = jnt5;
body6.Joint = jnt6;

addBody(robot,body2,'body1')
addBody(robot,body3,'body2')
addBody(robot,body4,'body3')
addBody(robot,body5,'body4')
addBody(robot,body6,'body5')

showdetails 함수 또는 show 함수를 사용하여 로봇이 올바르게 빌드되었는지 확인합니다. showdetails 함수는 MATLAB® 명령 창에 모든 바디를 나열합니다. show 함수는 주어진 컨피규레이션에서의(기본적으로 홈 컨피규레이션) 로봇을 표시합니다. axis 호출로 축 제한을 수정하고 축 레이블을 숨깁니다.

showdetails(robot)
--------------------
Robot: (6 bodies)

 Idx    Body Name   Joint Name   Joint Type    Parent Name(Idx)   Children Name(s)
 ---    ---------   ----------   ----------    ----------------   ----------------
   1        body1         jnt1     revolute             base(0)   body2(2)  
   2        body2         jnt2     revolute            body1(1)   body3(3)  
   3        body3         jnt3     revolute            body2(2)   body4(4)  
   4        body4         jnt4     revolute            body3(3)   body5(5)  
   5        body5         jnt5     revolute            body4(4)   body6(6)  
   6        body6         jnt6     revolute            body5(5)   
--------------------
show(robot);
axis([-0.5,0.5,-0.5,0.5,-0.5,0.5])
axis off

Figure contains an axes object. The hidden axes object with xlabel X, ylabel Y contains 13 objects of type patch, line. These objects represent base, body1, body2, body3, body4, body5, body6.

참고 문헌

[1] Corke, P. I., and B. Armstrong-Helouvry. “A Search for Consensus among Model Parameters Reported for the PUMA 560 Robot.” Proceedings of the 1994 IEEE International Conference on Robotics and Automation, IEEE Computer. Soc. Press, 1994, pp. 1608–13. DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.

입력 인수

모두 축소

rigidBodyJoint 객체로, 핸들로 지정됩니다.

동차 변환으로, 4×4 행렬 또는 se3 객체로 지정됩니다. 이 변환은 ChildToJointTransform 속성으로 설정됩니다. JointToParentTransform 속성은 단위 행렬로 설정됩니다.

DH(Denavit-Hartenberg) 파라미터로, 요소를 4개 가진 벡터 [a alpha d theta]로 지정됩니다. 이러한 파라미터는 ChildToJointTransform 속성을 설정하는 데 사용됩니다. JointToParentTransform 속성은 단위 행렬로 설정됩니다.

theta 입력값에 해당하는 각도는 조인트 컨피규레이션에 따라 달라지므로 조인트 간의 고정 변환을 지정할 때 무시됩니다. 자세한 내용은 강체 트리 로봇 모델 항목을 참조하십시오.

수정된 DH(Denavit-Hartenberg) 파라미터로, 요소를 4개 가진 벡터 [a alpha d theta]로 지정됩니다. 이러한 파라미터는 JointToParentTransform 속성을 설정하는 데 사용됩니다. ChildToJointTransform은 단위 행렬로 설정됩니다.

theta 입력값에 해당하는 각도는 조인트 컨피규레이션에 따라 달라지므로 조인트 간의 고정 변환을 지정할 때 무시됩니다. 자세한 내용은 강체 트리 로봇 모델 항목을 참조하십시오.

참고 문헌

[1] Craig, John J. Introduction to Robotics: Mechanics and Control. Reading, MA: Addison-Wesley, 1989.

[2] Siciliano, Bruno. Robotics: Modelling, Planning and Control. London: Springer, 2009.

확장 기능

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

버전 내역

R2016b에 개발됨

모두 확장