Main Content

기구학 DH 파라미터를 사용하여 매니퓰레이터 로봇 빌드하기

Puma560® 매니퓰레이터 로봇의 DH(Denavit-Hartenberg) 파라미터를 사용하여 강체 트리 로봇 모델을 단계적으로 빌드합니다. 조인트를 연결할 때 각 조인트의 상대 DH 파라미터를 지정합니다. 로봇 프레임을 시각화하고 최종 모델과 상호 작용합니다.

DH 파라미터는 각 강체가 조인트를 통해 부모에 연결되는 방식에 대한 기하 도형을 정의합니다. 파라미터는 다음 네 가지 변환 규칙을 따릅니다.

  • A — 두 z축에 사이에 있으면서 두 축 모두에 대해 수직인 공통 법선의 길이

  • α — 공통 법선의 회전 각도

  • d — 법선 방향(부모에서 자식으로)으로 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 파라미터를 처음부터 끝까지 반복합니다.

  1. 고유한 이름을 가진 rigidBody 객체를 만듭니다.

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

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

  4. 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);

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

로봇 모델과 상호 작용하기

로봇 모델의 치수를 확인하기 위해 interactiveRigidBodyTree 객체를 사용하여 로봇 모델을 시각화합니다.

figure(Name="Interactive GUI")
gui = interactiveRigidBodyTree(robot,MarkerScaleFactor=0.5);

Figure Interactive Visualization contains an axes object. The axes object with xlabel X, ylabel Y contains 23 objects of type patch, line, surface.

엔드 이펙터의 위치를 변경하려면 대화형 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.