기구학 DH 파라미터를 사용하여 매니퓰레이터 로봇 빌드하기
Puma560® 매니퓰레이터 로봇의 DH(Denavit-Hartenberg) 파라미터를 사용하여 강체 트리 로봇 모델을 단계적으로 빌드합니다. 조인트를 연결할 때 각 조인트의 상대 DH 파라미터를 지정합니다. 로봇 프레임을 시각화하고 최종 모델과 상호 작용합니다.
DH 파라미터는 각 강체가 조인트를 통해 부모에 연결되는 방식에 대한 기하 도형을 정의합니다. 파라미터는 다음 네 가지 변환 규칙을 따릅니다.
— 두 z축에 사이에 있으면서 두 축 모두에 대해 수직인 공통 법선의 길이
— 공통 법선의 회전 각도
— 법선 방향(부모에서 자식으로)으로 z축 상의 오프셋
— 이전 z축을 기준으로 x축이 회전한 각도
Puma560 로봇[1]의 파라미터를 행렬로 지정합니다.
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];
rigid body tree 객체를 만듭니다.
robot = rigidBodyTree;
rigid body 객체에 대한 셀형 배열을 만들고 joint 객체에 대해 또 다른 셀형 배열을 만듭니다. 다음 프로세스를 수행하여 DH 파라미터를 처음부터 끝까지 반복합니다.
고유한 이름을 가진
rigidBody
객체를 만듭니다.회전
rigidBodyJoint
객체를 만들고 이름을 지정합니다.setFixedTransform
과 함께 DH 파라미터를 사용하여 조인트의 바디-바디 변환을 지정합니다. 바디의 각도가 조인트 위치에 따라 달라지므로 이 함수는 DH 파라미터의 마지막 요소인theta
를 무시합니다.addBody
를 사용하여 강체 트리에 바디를 연결합니다.
bodies = cell(6,1); joints = cell(6,1); for i = 1:6 bodies{i} = rigidBody(['body' num2str(i)]); joints{i} = rigidBodyJoint(['jnt' num2str(i)],"revolute"); setFixedTransform(joints{i},dhparams(i,:),"dh"); bodies{i}.Joint = joints{i}; if i == 1 % Add first body to base addBody(robot,bodies{i},"base") else % Add current body to previous body by name addBody(robot,bodies{i},bodies{i-1}.Name) end end
showdetails
함수 또는 show
함수를 사용하여 로봇이 올바르게 빌드되었는지 확인합니다. showdetails
함수는 MATLAB® 명령 창에 로봇의 모든 바디를 나열합니다. show
함수는 지정된 컨피규레이션(기본적으로 홈 컨피규레이션)으로 로봇을 표시합니다.
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) --------------------
figure(Name="PUMA Robot Model")
show(robot);
로봇 모델과 상호 작용하기
로봇 모델의 크기를 확인하기 위해 interactiveRigidBodyTree
객체를 사용하여 로봇 모델을 시각화합니다.
figure(Name="Interactive GUI")
gui = interactiveRigidBodyTree(robot,MarkerScaleFactor=0.5);
엔드 이펙터의 위치를 변경하려면 대화형 GUI에서 마커를 클릭하여 끌어서 놓습니다. GUI는 역기구학을 사용하여 지정된 엔드 이펙터 위치와 최대한 일치하는 조인트 위치를 구합니다. 특정 바디 프레임을 마우스 오른쪽 버튼으로 클릭하여 타깃 마커 바디로 설정하거나 특정 조인트 위치를 설정하기 위한 제어 방법을 변경합니다.
다음 단계
MATLAB®에서 모델을 빌드했으므로 이어서 진행할 수 있는 다음 단계는 아래와 같습니다.
역기구학을 수행하여 목표 엔드 이펙터 위치를 기반으로 조인트 컨피규레이션을 구합니다. 모델 파라미터 외에도 조준 제약 조건, 카테시안 범위, 자세 타깃을 비롯한 로봇 제약 조건을 지정합니다.
궤적 생성은 사다리꼴 속도 프로파일 궤적, B-스플라인 궤적, 다항식 궤적에 웨이포인트와 다른 여러 파라미터를 기반으로 이루어집니다.
로봇 모델과 RRT(Rapidly-exploring Random Tree) 경로 플래너를 활용하여 매니퓰레이터 계획을 수행합니다.
로봇이 안전하고 효율적으로 움직이도록 환경에 존재하는 장애물에 대해 충돌 감지를 사용합니다.
참고 문헌
[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, 1608–13. San Diego, CA, USA: IEEE Computer Soc. Press, 1994. https://doi.org/10.1109/ROBOT.1994.351360.