Main Content

미리 정의된 로봇 모델 불러오기

일반적인 로봇 모델에 빠르게 액세스하기 위해 Universal Robots™ UR10 cobot, Boston Dynamics™ Atlas 휴머노이드, KINOVA™ Gen 3 매니퓰레이터와 같은 상업용 로봇 모델을 불러오는 loadrobot 함수를 사용합니다. 조인트 컨피규레이션을 생성하고 로봇 모델과 상호 작용하는 방법을 살펴봅니다.

고유한 URDF(Unified Robot Description Format)를 가져오려면 importrobot 함수를 참조하십시오.

로봇 모델 유형을 loadrobot 함수에 string형으로 지정합니다. 입력값을 제공된 모델 목록에서 선택하려면 탭 완성을 활용합니다.

조인트 컨피규레이션에 열 벡터를 사용하기 위해 데이터 형식을 "column"으로 지정합니다.

ur10 = loadrobot("universalUR10");
atlas = loadrobot("atlas");
gen3 = loadrobot("kinovaGen3","DataFormat","column");

loadrobot 함수는 각 로봇 모델의 기구학과 동역학을 나타내는 rigidBodyTree 객체를 반환합니다. 일부 모델은 바디의 동역학과 관성 속성을 함께 가져오지 못할 수도 있습니다. Bodies 속성 또는 getBody 함수를 사용하여 개별 강체를 검사합니다.

disp(gen3);
  rigidBodyTree with properties:

     NumBodies: 8
        Bodies: {[1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]}
          Base: [1x1 rigidBody]
     BodyNames: {'Shoulder_Link'  'HalfArm1_Link'  'HalfArm2_Link'  'ForeArm_Link'  'Wrist1_Link'  'Wrist2_Link'  'Bracelet_Link'  'EndEffector_Link'}
      BaseName: 'base_link'
       Gravity: [0 0 0]
    DataFormat: 'column'

show를 호출하여 홈 컨피규레이션에 있는 로봇 모델을 시각화합니다. 다른 모델을 시각화하려면 gen3 객체를 다른 모델로 바꿉니다.

show(gen3);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh.

show(atlas);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 169 objects of type patch, line. These objects represent pelvis, ltorso, mtorso, utorso, l_clav, l_scap, l_uarm, l_larm, l_ufarm, l_lfarm, l_hand, l_hand_force_torque, l_situational_awareness_camera_link, l_situational_awareness_camera_optical_frame, head, center_bottom_led_frame, center_top_led_frame, left_camera_frame, left_camera_optical_frame, left_led_frame, pre_spindle, pre_spindle_cal_x, pre_spindle_cal_y, pre_spindle_cal_z, pre_spindle_cal_roll, pre_spindle_cal_pitch, pre_spindle_cal_yaw, post_spindle, post_spindle_cal_x, post_spindle_cal_y, post_spindle_cal_z, post_spindle_cal_roll, post_spindle_cal_pitch, hokuyo_link, head_hokuyo_frame, right_camera_frame, right_camera_optical_frame, right_led_frame, r_clav, r_scap, r_uarm, r_larm, r_ufarm, r_lfarm, r_hand, r_hand_force_torque, r_situational_awareness_camera_link, r_situational_awareness_camera_optical_frame, l_uglut, l_lglut, l_uleg, l_lleg, l_talus, l_foot, r_uglut, r_lglut, r_uleg, r_lleg, r_talus, r_foot, ltorso_mesh, mtorso_mesh, utorso_mesh, l_clav_mesh, l_scap_mesh, l_uarm_mesh, l_larm_mesh, l_ufarm_mesh, l_lfarm_mesh, l_hand_force_torque_mesh, l_situational_awareness_camera_link_mesh, head_mesh, hokuyo_link_mesh, r_clav_mesh, r_scap_mesh, r_uarm_mesh, r_larm_mesh, r_ufarm_mesh, r_lfarm_mesh, r_hand_force_torque_mesh, r_situational_awareness_camera_link_mesh, l_uglut_mesh, l_lglut_mesh, l_uleg_mesh, l_lleg_mesh, l_talus_mesh, l_foot_mesh, r_uglut_mesh, r_lglut_mesh, r_uleg_mesh, r_lleg_mesh, r_talus_mesh, r_foot_mesh, pelvis_mesh.

show(ur10);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 28 objects of type patch, line. These objects represent world, base_link, base, shoulder_link, upper_arm_link, forearm_link, wrist_1_link, wrist_2_link, wrist_3_link, ee_link, tool0, base_link_mesh, shoulder_link_mesh, upper_arm_link_mesh, forearm_link_mesh, wrist_1_link_mesh, wrist_2_link_mesh, wrist_3_link_mesh.

조인트 컨피규레이션 생성하기

KINOVA Gen3 로봇에 대한 무작위 컨피규레이션을 생성합니다. randomConfiguration 함수는 모델의 제한 내에서 무작위 조인트 위치를 출력합니다. 모델이 예상대로 작동하는지 확인하기 위해 네 가지 컨피규레이션 집합을 시각화합니다.

for i = 1:4
    subplot(2,2,i)
    config = randomConfiguration(gen3);
    show(gen3,config);
end

Figure contains 4 axes objects. Axes object 1 with xlabel X, ylabel Y contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh. Axes object 2 with xlabel X, ylabel Y contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh. Axes object 3 with xlabel X, ylabel Y contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh. Axes object 4 with xlabel X, ylabel Y contains 25 objects of type patch, line. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh.

로봇 모델과 상호 작용하기

로봇 모델을 움직이게 하고 동작을 검사하기 위해 대화형 강체 트리 GUI를 불러옵니다. 타깃 엔드 이펙터 위치를 설정하고, 수동으로 조인트를 움직이고, 모델에서 다양한 요소를 선택할 수 있습니다.

interactiveGUI = interactiveRigidBodyTree(gen3);

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

중심 디스크를 클릭하여 끌어서 놓는 방식으로 타깃 엔드 이펙터 위치를 자유롭게 이동합니다. GUI는 역기구학을 사용하여 각 바디의 조인트 위치에 대한 해를 구합니다. 좌표축을 사용하여 선형으로 이동하고, 원을 사용하여 축을 중심으로 회전합니다.

특정 파라미터를 보려면 rigidBody를 클릭합니다.

마우스 오른쪽 버튼을 클릭하여 다른 타깃 마커 바디를 설정합니다. 타깃 바디를 변경하면 역기구학 솔버의 엔드 이펙터가 업데이트됩니다.

조인트를 수동으로 제어하려면 마우스 오른쪽 버튼을 클릭하고 마커 제어 방법을 전환합니다.

선택한 바디의 회전 조인트의 회전을 제어하려면 노란색 원을 클릭하여 끌어서 놓습니다.

조인트 컨피규레이션 저장하기

StoredConfigurations 속성에 현재 조인트 위치를 저장하는 addConfiguration 함수를 사용하여, 설정한 특정 컨피규레이션을 저장합니다. 이 예제에서는 저장하기 전에 무작위 컨피규레이션을 설정합니다.

interactiveGUI.Configuration = randomConfiguration(gen3);

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

addConfiguration(interactiveGUI)
disp(interactiveGUI.StoredConfigurations)
   -0.4218
   -1.6647
    1.3419
   -2.0818
    1.8179
   -0.4140
   -1.4517

다음 단계

MATLAB®에서 모델을 빌드했으므로 다양한 작업을 수행할 수 있습니다.

  • 역기구학을 수행하여 목표 엔드 이펙터 위치를 기반으로 조인트 컨피규레이션을 구합니다. 모델 파라미터 외에 조준 제약 조건이나 카테시안 범위 또는 자세 타깃을 비롯한 추가적인 로봇 제약 조건을 지정합니다.

  • 사다리꼴 속도 프로파일 궤적, B-스플라인 궤적, 다항식 궤적에 웨이포인트와 다른 여러 파라미터를 기반으로 궤적 생성을 생성합니다.

  • 로봇 모델과 RRT(Rapidly-exploring Random Tree) 경로 플래너를 활용하여 매니퓰레이터 계획을 수행합니다.

  • 로봇의 안전하고 효율적인 모션을 보장하기 위해 환경에 존재하는 장애물에 대해 충돌 감지을 수행합니다.