이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
rigidBodyTree
트리 구조의 로봇 만들기
설명
rigidBodyTree
는 조인트와 강체의 연결을 나타냅니다. MATLAB®에서 로봇 매니퓰레이터 모델을 빌드하려면 이 클래스를 사용합니다. URDF(Unified Robot Description Format)를 사용하여 지정한 로봇 모델이 있다면 importrobot
을 사용하여 로봇 모델을 가져옵니다.
강체 트리 모델은 강체로 구성되어 있으며, 여기서 강체는 rigidBody
객체로 표현됩니다. 각 강체에는 부모 바디를 기준으로 움직일 수 있는 방식을 정의하는 rigidBodyJoint
객체가 연결되어 있습니다. setFixedTransform
을 사용하여 조인트의 프레임과 인접한 바디 중 하나의 프레임 사이의 고정 변환을 정의합니다. RigidBodyTree
클래스의 메서드를 사용하여 모델에서 강체를 추가하거나 바꾸거나 제거할 수 있습니다.
로봇 동역학 계산도 가능합니다. 로봇 모델의 각 rigidBody
에 대해 Mass
, CenterOfMass
, Inertia
속성을 지정합니다. 외력이 있거나 없는 상태에서 정동역학과 역동역학을 계산하고, 주어진 로봇 조인트 모션과 조인트 입력값으로 동역학적 양을 계산할 수 있습니다. 동역학 관련 함수를 사용하려면 DataFormat
속성을 "row"
또는 "column"
으로 설정합니다.
주어진 강체 트리 모델의 경우 로봇 모델을 사용하여 로보틱스 역기구학 알고리즘을 통해 원하는 엔드 이펙터 위치에 도달하기 위한 조인트 각도를 계산할 수도 있습니다. inverseKinematics
또는 generalizedInverseKinematics
를 사용할 때 강체 트리 모델을 지정하십시오.
show
메서드는 바디 메시의 시각화를 지원합니다. 메시는 .stl
파일로 지정되며 addVisual
을 사용하여 개별 강체에 추가할 수 있습니다. 또한 기본적으로 importrobot
함수는 URDF 로봇 모델에 지정된 액세스 가능한 모든 .stl
파일을 불러옵니다.
생성
속성
NumBodies
— 바디 개수
정수
읽기 전용 속성입니다.
로봇 모델의 바디 개수(베이스 제외)로, 정수로 반환됩니다.
Bodies
— 강체 목록
핸들로 구성된 셀형 배열
읽기 전용 속성입니다.
로봇 모델에 포함된 강체의 목록으로, 핸들로 구성된 셀형 배열로 반환됩니다. 이 목록을 사용하여 모델의 특정 RigidBody
객체에 액세스할 수 있습니다. 또한 getBody
를 호출하여 바디 이름으로 바디를 가져올 수 있습니다.
BodyNames
— 강체의 이름
string형 스칼라로 구성된 셀형 배열 | 문자형 벡터로 구성된 셀형 배열
읽기 전용 속성입니다.
강체의 이름으로, 문자형 벡터로 구성된 셀형 배열로 반환됩니다.
BaseName
— 로봇 베이스의 이름
'base'
(디폴트 값) | string형 스칼라 | 문자형 벡터
로봇 베이스의 이름으로, string형 스칼라 또는 문자형 벡터로 반환됩니다.
Gravity
— 로봇에 작용하는 중력 가속도
[0 0 0]
m/s2 (디폴트 값) | [x y z]
벡터
로봇에 작용하는 중력 가속도로, [x y z]
벡터로 지정됩니다(단위: 제곱 초당 미터). 각 요소는 베이스 로봇 프레임의 해당 방향에서의 가속도에 대응됩니다.
DataFormat
— 기구학 함수와 동역학 함수의 입력/출력 데이터 형식
"struct"
(디폴트 값) | "row"
| "column"
기구학 함수와 동역학 함수의 입력/출력 데이터 형식으로, "struct"
, "row"
또는 "column"
으로 지정됩니다. 동역학 함수를 사용하려면 "row"
와 "column"
중 하나를 사용해야 합니다.
객체 함수
addBody | 로봇에 바디 추가 |
addSubtree | 로봇에 하위 트리 추가 |
centerOfMass | 무게 중심 위치와 야코비 행렬 |
checkCollision | Check if robot is in collision |
copy | 로봇 모델 복사 |
externalForce | 베이스를 기준으로 외력 행렬 구성 |
forwardDynamics | 조인트 토크와 조인트 상태가 주어질 경우 조인트 가속도 |
geometricJacobian | 로봇 컨피규레이션에 대한 기하 야코비 행렬 |
gravityTorque | 중력을 보상하는 조인트 토크 |
getBody | 이름으로 로봇 바디 핸들 가져오기 |
getTransform | 바디 프레임 간의 변환 구하기 |
homeConfiguration | 로봇의 홈 컨피규레이션 구하기 |
inverseDynamics | 주어진 모션에 필요한 조인트 토크 |
massMatrix | 조인트-공간 질량 행렬 |
randomConfiguration | 로봇의 무작위 컨피규레이션 생성 |
removeBody | Remove body from robot |
replaceBody | Replace body on robot |
replaceJoint | Replace joint on body |
show | Figure에 로봇 모델 표시 |
showdetails | 로봇 모델의 세부 정보 표시 |
subtree | Create subtree from robot model |
velocityProduct | 속도에서 유발된 힘을 상쇄하는 조인트 토크 |
writeAsFunction | Create rigidBodyTree code generating function |
예제
강체 트리에 강체와 조인트 연결하기
강체 트리에 강체와 해당 조인트를 추가합니다. 각 rigidBody
객체는 rigidBodyJoint
객체를 포함하며 addBody
를 사용하여 rigidBodyTree
에 추가해야 합니다.
강체 트리를 만듭니다.
rbtree = rigidBodyTree;
고유한 이름을 가진 강체를 만듭니다.
body1 = rigidBody('b1');
회전 조인트를 만듭니다. 기본적으로 rigidBody
객체에는 고정 조인트가 함께 합니다. body1.Joint
속성에 새 rigidBodyJoint
객체를 할당하여 조인트를 바꿉니다.
jnt1 = rigidBodyJoint('jnt1','revolute'); body1.Joint = jnt1;
강체를 트리에 추가합니다. 강체를 연결할 바디 이름을 지정합니다. 이 바디가 첫 번째 바디이므로 트리의 베이스 이름을 사용합니다.
basename = rbtree.BaseName; addBody(rbtree,body1,basename)
트리에서 showdetails
를 사용하여 강체와 조인트가 제대로 추가되었는지 확인합니다.
showdetails(rbtree)
-------------------- Robot: (1 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 b1 jnt1 revolute base(0) --------------------
Denavit-Hartenberg 파라미터를 사용하여 매니퓰레이터 로봇 빌드하기
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;
첫 번째 강체를 만들고 로봇에 추가합니다. 강체를 추가하려면 다음을 수행하십시오.
rigidBody
객체를 만들고 고유한 이름을 지정합니다.rigidBodyJoint
객체를 만들고 고유한 이름을 지정합니다.setFixedTransform
으로 DH 파라미터를 사용하여 바디-바디 변환을 지정합니다. DH 파라미터의 마지막 요소인theta
의 경우 이에 해당하는 각도는 조인트 위치에 따라 달라지므로 무시됩니다.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
참조
[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 Comput. Soc. Press, 1994, pp. 1608–13. DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.
로봇 강체 트리 모델 수정하기
기존 rigidBodyTree
객체를 변경합니다. 강체 트리에서 조인트, 바디, 하위 트리를 바꿀 수 있습니다.
예제 로봇을 rigidBodyTree
객체로 불러옵니다.
load exampleRobots.mat
showdetails
를 사용하여 Puma 로봇의 세부 정보를 봅니다.
showdetails(puma1)
-------------------- Robot: (6 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 jnt3 revolute L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------
속성을 검사하기 위해 특정 바디를 가져옵니다. L3
바디의 자식은 L4
바디뿐입니다. 특정 바디도 복사할 수 있습니다.
body3 = getBody(puma1,'L3');
childBody = body3.Children{1}
childBody = rigidBody with properties: Name: 'L4' Joint: [1x1 rigidBodyJoint] Mass: 1 CenterOfMass: [0 0 0] Inertia: [1 1 1 0 0 0] Parent: [1x1 rigidBody] Children: {[1x1 rigidBody]} Visuals: {} Collisions: {}
body3Copy = copy(body3);
L3
바디의 조인트를 바꿉니다. 다운스트림 바디의 기하 도형이 영향을 받지 않도록 하려면 새 Joint
객체를 만들고 replaceJoint
를 사용해야 합니다. 바디 간의 변환을 정의하기 위해 필요한 경우 디폴트 단위 행렬을 사용하는 대신 setFixedTransform
을 호출합니다.
newJoint = rigidBodyJoint('prismatic'); replaceJoint(puma1,'L3',newJoint); showdetails(puma1)
-------------------- Robot: (6 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 prismatic fixed L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------
removeBody
를 사용하여 전체 바디를 제거하고, 결과로 생성된 하위 트리를 가져옵니다. 제거된 바디는 하위 트리에 포함됩니다.
subtree = removeBody(puma1,'L4')
subtree = rigidBodyTree with properties: NumBodies: 3 Bodies: {[1x1 rigidBody] [1x1 rigidBody] [1x1 rigidBody]} Base: [1x1 rigidBody] BodyNames: {'L4' 'L5' 'L6'} BaseName: 'L3' Gravity: [0 0 0] DataFormat: 'struct'
수정된 L3
바디를 제거합니다. 복사한 원래 L3
바디를 L2
바디에 추가한 다음 반환된 하위 트리를 추가합니다. 로봇 모델은 동일하게 유지됩니다. 자세한 비교는 showdetails
를 통해 확인하십시오.
removeBody(puma1,'L3'); addBody(puma1,body3Copy,'L2') addSubtree(puma1,'L3',subtree) showdetails(puma1)
-------------------- Robot: (6 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 jnt3 revolute L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------
강체 트리에 동역학 속성 지정하기
동역학 함수를 사용하여 조인트 토크와 조인트 가속도를 계산하기 위해 rigidBodyTree
객체와 rigidBody
에 대한 동역학 속성을 지정합니다.
강체 트리 모델을 만듭니다. 연결할 두 개의 강체를 만듭니다.
robot = rigidBodyTree('DataFormat','row'); body1 = rigidBody('body1'); body2 = rigidBody('body2');
바디에 연결할 조인트를 지정합니다. body2
의 고정 변환을 body1
로 설정합니다. 이 변환은 x 방향으로 1미터입니다.
joint1 = rigidBodyJoint('joint1','revolute'); joint2 = rigidBodyJoint('joint2'); setFixedTransform(joint2,trvec2tform([1 0 0])) body1.Joint = joint1; body2.Joint = joint2;
두 바디에 대한 동역학 속성을 지정합니다. 로봇 모델에 두 바디를 추가합니다. 이 예제에서는 구형 질량(body2
)이 연결된 막대(body1
)에 대한 기본값이 제공됩니다.
body1.Mass = 2; body1.CenterOfMass = [0.5 0 0]; body1.Inertia = [0.001 0.67 0.67 0 0 0]; body2.Mass = 1; body2.CenterOfMass = [0 0 0]; body2.Inertia = 0.0001*[4 4 4 0 0 0]; addBody(robot,body1,'base'); addBody(robot,body2,'body1');
전체 로봇의 무게 중심 위치를 계산합니다. 로봇에 그 위치를 플로팅합니다. xy 평면 보기로 바꿉니다.
comPos = centerOfMass(robot); show(robot); hold on plot(comPos(1),comPos(2),'or') view(2)
두 번째 바디의 질량을 변경합니다. 무게 중심이 변하는 것을 알 수 있습니다.
body2.Mass = 20; replaceBody(robot,'body2',body2) comPos2 = centerOfMass(robot); plot(comPos2(1),comPos2(2),'*g') hold off
강체 트리 모델에 가해지는 외력으로 인한 정동역학 계산하기
적용된 외력과 중력으로 인한 힘을 사용해 주어진 로봇 컨피규레이션의 결과 조인트 가속도를 계산합니다. 전체 로봇에 지정된 중력과 함께 렌치가 특정 바디에 적용됩니다.
미리 정의된 KUKA LBR 로봇 모델을 불러옵니다. 이 모델은 RigidBodyTree
객체로 지정됩니다.
load exampleRobots.mat lbr
데이터 형식을 'row'
로 설정합니다. 모든 동역학 계산에서 데이터 형식은 'row'
또는 'column'
이어야 합니다.
lbr.DataFormat = 'row';
중력을 설정합니다. 기본적으로 중력은 0으로 가정합니다.
lbr.Gravity = [0 0 -9.81];
lbr
로봇의 홈 컨피규레이션을 가져옵니다.
q = homeConfiguration(lbr);
로봇에 작용하는 외력을 나타내는 렌치 벡터를 지정합니다. externalForce
함수를 사용하여 외력 행렬을 생성합니다. 로봇 모델, 렌치가 작용되는 엔드 이펙터, 렌치 벡터, 현재 로봇 컨피규레이션을 지정합니다. wrench
는 로봇 컨피규레이션 q
를 지정해야 하는 'tool0'
바디 프레임을 기준으로 적용됩니다.
wrench = [0 0 0.5 0 0 0.3];
fext = externalForce(lbr,'tool0',wrench,q);
lbr
이 홈 컨피규레이션에 있을 때 엔드 이펙터 'tool0'
에 적용된 외력을 감안하여 중력으로 인한 결과 조인트 가속도를 계산합니다. 조인트 속도와 조인트 토크는 0으로 가정합니다(비어 있는 벡터 []
로 입력).
qddot = forwardDynamics(lbr,q,[],[],fext);
정적 조인트 컨피규레이션에서 역동역학 계산하기
inverseDynamics
함수를 사용하여 특정 로봇 컨피규레이션을 정적으로 유지하기 위해 필요한 조인트 토크를 계산합니다. 기타 구문을 사용하여 조인트 속도, 조인트 가속도, 외력을 지정할 수도 있습니다.
미리 정의된 KUKA LBR 로봇 모델을 불러옵니다. 이 모델은 RigidBodyTree
객체로 지정됩니다.
load exampleRobots.mat lbr
데이터 형식을 'row'
로 설정합니다. 모든 동역학 계산에서 데이터 형식은 'row'
또는 'column'
이어야 합니다.
lbr.DataFormat = 'row';
Gravity
속성을 설정하여 특정 중력 가속도를 제공합니다.
lbr.Gravity = [0 0 -9.81];
lbr
에 대한 무작위 컨피규레이션을 생성합니다.
q = randomConfiguration(lbr);
lbr
이 해당 컨피규레이션을 정적으로 유지하기 위해 필요한 조인트 토크를 계산합니다.
tau = inverseDynamics(lbr,q);
외력을 상쇄하기 위한 조인트 토크 계산하기
externalForce
함수를 사용하여 강체 트리 모델에 적용할 힘 행렬을 생성합니다. 힘 행렬은 m×6 벡터이며 각 행은 로봇의 각 조인트에 작용하는 요소가 6개인 렌치를 표현합니다. externalForce
함수를 사용하고 엔드 이펙터를 지정하여 렌치를 행렬의 올바른 행에 할당합니다. 여러 힘 행렬을 함께 추가하여 하나의 로봇에 여러 힘을 적용할 수 있습니다.
이러한 외력을 상쇄하는 조인트 토크를 계산하기 위해 inverseDynamics
함수를 사용합니다.
미리 정의된 KUKA LBR 로봇 모델을 불러옵니다. 이 모델은 RigidBodyTree
객체로 지정됩니다.
load exampleRobots.mat lbr
데이터 형식을 'row'
로 설정합니다. 모든 동역학 계산에서 데이터 형식은 'row'
또는 'column'
이어야 합니다.
lbr.DataFormat = 'row';
Gravity
속성을 설정하여 특정 중력 가속도를 제공합니다.
lbr.Gravity = [0 0 -9.81];
lbr
의 홈 컨피규레이션을 가져옵니다.
q = homeConfiguration(lbr);
link1
에 외력을 설정합니다. 입력 렌치 벡터는 베이스 프레임에서 표현됩니다.
fext1 = externalForce(lbr,'link_1',[0 0 0.0 0.1 0 0]);
엔드 이펙터 tool0
에 외력을 설정합니다. 입력 렌치 벡터는 tool0
프레임에서 표현됩니다.
fext2 = externalForce(lbr,'tool0',[0 0 0.0 0.1 0 0],q);
외력의 균형을 맞추는 데 필요한 조인트 토크를 계산합니다. 힘을 결합하기 위해 힘 행렬을 함께 더합니다. 조인트 속도와 조인트 가속도는 0으로 가정합니다([]
로 입력).
tau = inverseDynamics(lbr,q,[],[],fext1+fext2);
시각적 기하 도형으로 로봇 모델 표시하기
URDF(Unified Robot Description format) 파일과 연결된 .stl
파일이 있는 로봇을 가져와서 로봇의 시각적 기하 도형을 설명할 수 있습니다. 각 강체에는 개별 시각적 기하 도형이 지정되어 있습니다. importrobot
함수는 URDF 파일을 구문 분석하여 로봇 모델과 시각적 기하 도형을 가져옵니다. 이 함수는 로봇의 시각적 기하 도형과 충돌 기하 도형이 동일하다고 간주하고, 시각적 기하 도형을 대응하는 바디의 충돌 기하 도형으로 할당합니다.
show
함수를 사용하여 Figure에 로봇 모델의 시각적 기하 도형과 충돌 기하 도형을 표시합니다. 그런 다음 구성요소를 클릭하여 검사하고 마우스 오른쪽 버튼으로 클릭하여 가시성을 전환함으로써 모델과 상호 작용할 수 있습니다.
로봇 모델을 URDF 파일로 가져옵니다. .stl
파일 위치는 이 URDF에 올바르게 지정되어 있어야 합니다. 개별 강체에 다른 .stl
파일을 추가하려면 addVisual
항목을 참조하십시오.
robot = importrobot('iiwa14.urdf');
연결된 시각적 모델을 사용하여 로봇을 시각화합니다. 바디 또는 프레임을 검사하려면 마우스 왼쪽 버튼으로 클릭합니다. 각 시각적 기하 도형의 가시성을 전환하려면 바디를 마우스 오른쪽 버튼으로 클릭합니다.
show(robot,'visuals','on','collision','off');
연결된 충돌 기하 도형을 사용하여 로봇을 시각화합니다. 바디 또는 프레임을 검사하려면 마우스 왼쪽 버튼으로 클릭합니다. 각 충돌 기하 도형의 가시성을 전환하려면 바디를 마우스 오른쪽 버튼으로 클릭합니다.
show(robot,'visuals','off','collision','on');
세부 정보
동역학 속성
로봇 동역학을 사용하여 작업하는 경우 rigidBody
객체의 다음 속성을 사용하여 매니퓰레이터 로봇의 개별 바디에 대한 정보를 지정합니다.
Mass
— 강체의 질량(단위: 킬로그램).CenterOfMass
— 강체의 무게 중심 위치로,[x y z]
형식의 벡터로 지정됩니다. 이 벡터는 바디 프레임을 기준으로 강체의 무게 중심 위치를 설명합니다(단위: 미터).centerOfMass
객체 함수는 로봇의 무게 중심을 계산할 때 이 강체 속성값을 사용합니다.Inertia
— 강체의 관성으로,[Ixx Iyy Izz Iyz Ixz Ixy]
형식의 벡터로 지정됩니다. 이 벡터는 바디 프레임을 기준으로 합니다(단위: 킬로그램 제곱미터). 관성 텐서는 양의 정부호 행렬로, 형식은 다음과 같습니다.Inertia
벡터의 처음 세 요소는 관성 모멘트이며, 관성 텐서의 대각선 요소입니다. 벡터의 마지막 세 요소는 관성의 곱이며, 관성 텐서의 비대각선 요소입니다.
전체 매니퓰레이터 로봇 모델과 관련된 정보의 경우 다음 rigidBodyTree
객체 속성을 지정합니다.
Gravity
— 로봇에 작용하는 중력 가속도로,[x y z]
벡터로 지정됩니다(단위: m/s2). 기본적으로 중력 가속도는 없습니다.DataFormat
— 기구학 함수와 동역학 함수의 입력/출력 데이터 형식으로,"struct"
,"row"
또는"column"
으로 지정됩니다.
동역학 방정식
매니퓰레이터 강체 동역학은 다음 방정식에 의해 결정됩니다.
또는 다음과 같이 표기합니다.
각 요소는 다음과 같습니다.
— 현재의 로봇 컨피규레이션에 기반한 조인트-공간 질량 행렬입니다. 이 행렬은
massMatrix
객체 함수를 사용하여 계산합니다.— 속도 곱을 계산하기 위해 를 곱한 코리올리 항입니다. 속도 곱은
velocityProduct
객체 함수를 사용하여 계산합니다.— 모든 조인트가 지정된 중력
Gravity
에서 위치를 유지하는 데 필요한 중력 토크와 중력 힘입니다. 중력 토크는gravityTorque
객체 함수를 사용하여 계산합니다.— 지정된 조인트 컨피규레이션에 대한 기하 야코비 행렬입니다. 기하 야코비 행렬은
geometricJacobian
객체 함수를 사용하여 계산합니다.— 강체에 가해지는 외력의 행렬입니다. 외력은
externalForce
객체 함수를 사용하여 생성합니다.— 각 조인트에 벡터로 직접 가해지는 조인트 토크와 조인트 힘입니다.
— 개별 벡터로, 각각 조인트 컨피규레이션, 조인트 속도, 조인트 가속도입니다. 회전 조인트의 경우 각각 라디안, rad/s, rad/s2 단위로 값을 지정합니다. 직선 조인트의 경우 미터, m/s, m/s2 단위로 지정합니다.
동역학을 직접 계산하려면 forwardDynamics
객체 함수를 사용합니다. 이 함수는 상기 입력값들의 지정된 조합에 대한 조인트 가속도를 계산합니다.
일련의 특정 모션을 구현하려면 inverseDynamics
객체 함수를 사용합니다. 이 함수는 지정된 컨피규레이션, 속도, 가속도, 외력을 구현하는 데 필요한 조인트 토크를 계산합니다.
참고 문헌
[1] Craig, John J. Introduction to Robotics: Mechanics and Control. Reading, MA: Addison-Wesley, 1989.
[2] Siciliano, Bruno, Lorenzo Sciavicco, Luigi Villani, and Giuseppe Oriolo. Robotics: Modelling, Planning and Control. London: Springer, 2009.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 사항 및 제한 사항:
rigidBodyTree
객체를 만들 때 MaxNumBodies
로 로봇 모델에 추가할 수 있는 바디의 상한을 지정하는 구문을 사용하십시오. 또한 DataFormat
속성을 이름-값 쌍으로 지정해야 합니다. 예를 들면 다음과 같습니다.
robot = rigidBodyTree("MaxNumBodies",15,"DataFormat","row")
데이터 사용량을 최소화하기 위해 모델에서 예상되는 바디 개수에 가까운 수로 상한을 설정하십시오. 코드 생성 시 모든 데이터 형식이 지원됩니다. 동역학 함수를 사용하기 위해 데이터 형식을 "row"
또는 "column"
으로 설정해야 합니다.
show
및 showdetails
는 코드 생성을 지원하지 않습니다.
버전 내역
R2016b에 개발됨R2019b: rigidBodyTree
로 변경된 이름
객체 이름이 robotics.RigidBodyTree
에서 rigidBodyTree
로 바뀌었습니다. 모든 객체 생성에 rigidBodyTree
를 사용하십시오.
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)