주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

addSubtree

로봇에 하위 트리 추가

설명

addSubtree(robot,bodyname,subtreerobot)bodyname에 의해 지정된 바디에서 기존 로봇 모델 robot에 로봇 모델 newSubtree를 연결합니다. 하위 트리 베이스는 바디로 추가되지 않습니다.

예제

addSubtree(___,ReplaceBase=MODE)MODE가 true로 설정되었을 때 하위 트리의 현재 베이스를 bodyname으로 바꿉니다. MODE는 기본적으로 true입니다.

예제

예제

모두 축소

기존 rigidBodyTree 객체를 변경합니다. 강체 트리에서 조인트, 바디, 하위 트리를 바꿀 수 있습니다.

Robotics System Toolbox™ loadrobot 함수를 사용하여 ABB IRB-120T 매니퓰레이터를 불러옵니다. 이는 rigidBodyTree 객체로 지정됩니다.

manipulator = loadrobot("abbIrb120T");

show를 사용해서 로봇을 표시하고 showdetails를 사용해서 로봇의 세부 정보를 읽어옵니다.

show(manipulator);
showdetails(manipulator)

속성을 검사할 바디를 가져옵니다. link_3 바디의 자식은 link_4 바디뿐입니다. 특정 바디를 복사할 수도 있습니다.

body3 = getBody(manipulator,"link_3");
childBody = body3.Children{1}
body3Copy = copy(body3);

link_3 바디의 조인트를 바꿉니다. 다운스트림 바디의 기하 도형이 영향을 받지 않도록 하려면 새 Joint 객체를 만들고 replaceJoint를 사용해야 합니다. 바디 간의 변환을 정의하기 위해 필요한 경우 디폴트 단위 행렬을 사용하는 대신 setFixedTransform을 호출합니다.

newJoint = rigidBodyJoint("prismatic");
replaceJoint(manipulator,"link_3",newJoint);

showdetails(manipulator)

removeBody를 사용하여 전체 바디를 제거하고, 결과로 생성된 하위 트리를 가져옵니다. 제거된 바디는 하위 트리에 포함됩니다.

subtree = removeBody(manipulator,"link_4")
show(subtree);

수정된 link_3 바디를 제거합니다. 복사한 원래 link_3 바디를 link_2 바디에 추가한 다음, 반환된 하위 트리를 추가합니다. 로봇 모델은 동일하게 유지됩니다. 자세한 비교는 showdetails를 통해 확인하십시오.

removeBody(manipulator,"link_3");
addBody(manipulator,body3Copy,"link_2")
addSubtree(manipulator,"link_3",subtree)

showdetails(manipulator)

Robotics System Toolbox™ loadrobot 함수를 사용하여 UR10 로봇 매니퓰레이터를 불러옵니다. 이는 rigidBodyTree 객체로 지정됩니다.

ur10 = loadrobot("universalUR10");

Robotiq 2F-85 그리퍼를 불러와 매니퓰레이터 팔에 연결합니다.

gripper = loadrobot("robotiq2F85");

그리퍼를 UR10 팔의 끝부분에 연결합니다.

addSubtree(ur10, 'tool0', gripper, ReplaceBase=false);

show를 사용해서 로봇을 표시하고 showdetails를 사용해서 로봇의 세부 정보를 읽어와 rigidBodyTree 객체의 수정된 조인트를 봅니다.

show(ur10)

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 61 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, robotiq_arg2f_base_link, left_outer_knuckle, left_outer_finger, left_inner_finger, left_inner_finger_pad, left_inner_knuckle, right_inner_knuckle, right_outer_knuckle, right_outer_finger, right_inner_finger, right_inner_finger_pad, 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, robotiq_arg2f_base_link_mesh, left_outer_knuckle_mesh, left_outer_finger_mesh, left_inner_finger_mesh, left_inner_finger_pad_mesh, left_inner_knuckle_mesh, right_inner_knuckle_mesh, right_outer_knuckle_mesh, right_outer_finger_mesh, right_inner_finger_mesh, right_inner_finger_pad_mesh.

ans = 
  Axes (Primary) with properties:

             XLim: [-1.5000 1.5000]
             YLim: [-1.5000 1.5000]
           XScale: 'linear'
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [0.1300 0.1100 0.7750 0.8150]
            Units: 'normalized'

  Use GET to show all properties

showdetails(ur10)
--------------------
Robot: (21 bodies)

 Idx                      Body Name                            Joint Name                            Joint Type                      Parent Name(Idx)   Children Name(s)
 ---                      ---------                            ----------                            ----------                      ----------------   ----------------
   1                      base_link                           world_joint                                 fixed                              world(0)   base(2)  shoulder_link(3)  
   2                           base            base_link-base_fixed_joint                                 fixed                          base_link(1)   
   3                  shoulder_link                    shoulder_pan_joint                              revolute                          base_link(1)   upper_arm_link(4)  
   4                 upper_arm_link                   shoulder_lift_joint                              revolute                      shoulder_link(3)   forearm_link(5)  
   5                   forearm_link                           elbow_joint                              revolute                     upper_arm_link(4)   wrist_1_link(6)  
   6                   wrist_1_link                         wrist_1_joint                              revolute                       forearm_link(5)   wrist_2_link(7)  
   7                   wrist_2_link                         wrist_2_joint                              revolute                       wrist_1_link(6)   wrist_3_link(8)  
   8                   wrist_3_link                         wrist_3_joint                              revolute                       wrist_2_link(7)   ee_link(9)  tool0(10)  
   9                        ee_link                        ee_fixed_joint                                 fixed                       wrist_3_link(8)   
  10                          tool0        wrist_3_link-tool0_fixed_joint                                 fixed                       wrist_3_link(8)   robotiq_arg2f_base_link(11)  
  11        robotiq_arg2f_base_link           robotiq_arg2f_base_link_jnt                                 fixed                             tool0(10)   left_outer_knuckle(12)  left_inner_knuckle(16)  right_inner_knuckle(17)  right_outer_knuckle(18)  
  12             left_outer_knuckle                          finger_joint                              revolute           robotiq_arg2f_base_link(11)   left_outer_finger(13)  
  13              left_outer_finger               left_outer_finger_joint                                 fixed                left_outer_knuckle(12)   left_inner_finger(14)  
  14              left_inner_finger               left_inner_finger_joint                              revolute                 left_outer_finger(13)   left_inner_finger_pad(15)  
  15          left_inner_finger_pad           left_inner_finger_pad_joint                                 fixed                 left_inner_finger(14)   
  16             left_inner_knuckle              left_inner_knuckle_joint                              revolute           robotiq_arg2f_base_link(11)   
  17            right_inner_knuckle             right_inner_knuckle_joint                              revolute           robotiq_arg2f_base_link(11)   
  18            right_outer_knuckle             right_outer_knuckle_joint                              revolute           robotiq_arg2f_base_link(11)   right_outer_finger(19)  
  19             right_outer_finger              right_outer_finger_joint                                 fixed               right_outer_knuckle(18)   right_inner_finger(20)  
  20             right_inner_finger              right_inner_finger_joint                              revolute                right_outer_finger(19)   right_inner_finger_pad(21)  
  21         right_inner_finger_pad          right_inner_finger_pad_joint                                 fixed                right_inner_finger(20)   
--------------------

입력 인수

모두 축소

로봇 모델로, rigidBodyTree 객체로 지정됩니다.

부모 바디 이름으로, string형 스칼라 또는 문자형 벡터로 지정됩니다. 부모 바디는 로봇 모델에 이미 존재해야 합니다. 새 바디는 이 부모 바디에 연결됩니다.

데이터형: char | string

하위 트리 로봇 모델로, rigidBodyTree 객체로 지정됩니다.

MODEtrue로 지정되었을 때 하위 트리의 현재 베이스를 bodyname으로 바꿉니다. MODE의 디폴트 값은 true로 설정되어 있습니다

데이터형: logical

확장 기능

모두 확장

버전 내역

R2016b에 개발됨

모두 확장