Main Content

show

Figure에 로봇 모델 표시

설명

예제

show(robot)은 미리 정의된 홈 컨피규레이션을 사용하여 Figure에 로봇 모델의 바디 프레임을 플로팅합니다. FramesVisuals가 모두 자동으로 표시됩니다.

show(robot,configuration)configuration에 지정된 조인트 위치를 사용하여 로봇 바디 프레임을 표시합니다.

show(___,Name=Value)는 위에 열거된 구문의 입력 인수 조합 외에 하나 이상의 이름-값 쌍 인수를 사용하여 옵션을 지정합니다. 예를 들어 Frames="off"는 Figure에서 강체 프레임을 숨깁니다.

ax = show(___)는 로봇이 플로팅된 axes 핸들을 반환합니다.

예제

모두 축소

URDF(Unified Robot Description format) 파일과 연결된 .stl 파일이 있는 로봇을 가져와서 로봇의 시각적 기하 도형을 설명할 수 있습니다. 각 강체에는 개별 시각적 기하 도형이 지정되어 있습니다. importrobot 함수는 URDF 파일을 구문 분석하여 로봇 모델과 시각적 기하 도형을 가져옵니다. 이 함수는 로봇의 시각적 기하 도형과 충돌 기하 도형이 동일하다고 간주하고, 시각적 기하 도형을 대응하는 바디의 충돌 기하 도형으로 할당합니다.

show 함수를 사용하여 Figure에 로봇 모델의 시각적 기하 도형과 충돌 기하 도형을 표시합니다. 그런 다음 구성요소를 클릭하여 검사하고 마우스 오른쪽 버튼으로 클릭하여 가시성을 전환함으로써 모델과 상호 작용할 수 있습니다.

로봇 모델을 URDF 파일로 가져옵니다. .stl 파일 위치는 이 URDF에 올바르게 지정되어 있어야 합니다. 개별 강체에 다른 .stl 파일을 추가하려면 addVisual 항목을 참조하십시오.

robot = importrobot('iiwa14.urdf');

연결된 시각적 모델을 사용하여 로봇을 시각화합니다. 바디 또는 프레임을 검사하려면 마우스 왼쪽 버튼으로 클릭합니다. 각 시각적 기하 도형의 가시성을 전환하려면 바디를 마우스 오른쪽 버튼으로 클릭합니다.

show(robot,Visuals="on",Collisions="off");

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 29 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.

연결된 충돌 기하 도형을 사용하여 로봇을 시각화합니다. 바디 또는 프레임을 검사하려면 마우스 왼쪽 버튼으로 클릭합니다. 각 충돌 기하 도형의 가시성을 전환하려면 바디를 마우스 오른쪽 버튼으로 클릭합니다.

show(robot,Visuals="off",Collisions="on"); 

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 29 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_6_coll_mesh, iiwa_link_7_coll_mesh.

rigidBodyTree 모델을 사용하여 만든 로봇의 여러 다른 컨피규레이션을 표시합니다. homeConfiguration 함수 또는 randomConfiguration 함수를 사용하여 모든 조인트 위치를 정의하는 구조체를 생성합니다.

Robotics System Toolbox™ loadrobot 함수를 사용하여 FANUC LR Mate 200ib를 불러옵니다. 이는 rigidBodyTree 객체로 반환됩니다.

robot = loadrobot("fanucLRMate200ib");
showdetails(robot)
--------------------
Robot: (9 bodies)

 Idx     Body Name            Joint Name            Joint Type     Parent Name(Idx)   Children Name(s)
 ---     ---------            ----------            ----------     ----------------   ----------------
   1          base        base_link-base                 fixed         base_link(0)   
   2        link_1               joint_1              revolute         base_link(0)   link_2(3)  
   3        link_2               joint_2              revolute            link_1(2)   link_3(4)  
   4        link_3               joint_3              revolute            link_2(3)   link_4(5)  
   5        link_4               joint_4              revolute            link_3(4)   link_5(6)  
   6        link_5               joint_5              revolute            link_4(5)   link_6(7)  
   7        link_6               joint_6              revolute            link_5(6)   flange(8)  tool0(9)  
   8        flange        joint_6-flange                 fixed            link_6(7)   
   9         tool0          link_6-tool0                 fixed            link_6(7)   
--------------------

로봇의 홈 컨피규레이션을 위한 구조체를 만듭니다. 구조체는 로봇 모델의 각 바디에 대한 조인트 이름과 위치를 가집니다.

config = homeConfiguration(robot)
config=1×6 struct array with fields:
    JointName
    JointPosition

show를 사용하여 홈 컨피규레이션을 표시합니다. 컨피규레이션 입력값을 지정할 필요는 없습니다.

show(robot);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 26 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, flange, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh.

컨피규레이션을 수정하고 두 번째 조인트 위치를 pi/2로 설정합니다. 변경된 로봇 컨피규레이션을 표시합니다.

config(2).JointPosition = pi/2;
show(robot,config);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 26 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, flange, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh.

무작위 컨피규레이션을 만들고 표시합니다.

show(robot,randomConfiguration(robot));

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 26 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, flange, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh.

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;

첫 번째 강체를 만들고 로봇에 추가합니다. 강체를 추가하려면 다음을 수행하십시오.

  1. rigidBody 객체를 만들고 고유한 이름을 지정합니다.

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

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

  4. 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 Computer. Soc. Press, 1994, pp. 1608–13. DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.

로봇 모델을 불러와서 충돌 메시를 수정합니다. 기존 충돌 메시를 지우고, 단순한 collision 객체 프리미티브를 추가하고, 특정 컨피규레이션이 충돌하는지 확인합니다.

로봇 모델 불러오기

loadrobot 함수를 사용하여 사전 구성된 로봇 모델을 작업 공간에 불러옵니다. 이 모델에는 이미 각 바디에 지정된 충돌 메시가 있습니다. 모든 강체 요소를 반복하고 기존 충돌 메시를 지웁니다. 기존 메시가 사라졌는지 확인합니다.

robot = loadrobot("kukaIiwa7",DataFormat="column");

for i = 1:robot.NumBodies
    clearCollision(robot.Bodies{i})
end

show(robot,Collisions="on",Visuals="off");

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 21 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.

충돌 원통 추가하기

충돌 원통을 각 바디에 반복적으로 추가합니다. 이 특정 모델의 일부 바디는 중첩되고 항상 엔드 이펙터(바디 10)와 충돌하므로 건너뜁니다.

collisionObj = collisionCylinder(0.05,0.25);

for i = 1:robot.NumBodies
    if i > 6 && i < 10
        % Skip these bodies.
    else
        addCollision(robot.Bodies{i},collisionObj)
    end
end

show(robot,Collisions="on",Visuals="off");

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 28 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_ee_kuka_coll_mesh.

충돌 검사하기

일련의 무작위 컨피규레이션을 생성합니다. 각 컨피규레이션에서 로봇이 충돌하는지 검사합니다. 충돌이 있는 각 컨피규레이션을 시각화합니다.

figure
rng(0) % Set random seed for repeatability.
for i = 1:20
    config = randomConfiguration(robot);
    isColliding = checkCollision(robot,config,SkippedSelfCollisions="parent");
    if isColliding
        show(robot,config,Collisions="on",Visuals="off");
        title("Collision Detected")
    else
        % Skip non-collisions.
    end
end

Figure contains an axes object. The axes object with title Collision Detected, xlabel X, ylabel Y contains 28 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_ee_kuka_coll_mesh.

입력 인수

모두 축소

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

로봇 컨피규레이션으로, 로봇 모델의 모든 바디에 대한 조인트 이름과 위치를 나타내는 구조체 또는 조인트 위치 벡터로 지정됩니다. homeConfiguration(robot), randomConfiguration(robot)을 사용하거나 구조체에 조인트 위치를 직접 지정하여 컨피규레이션을 생성할 수 있습니다. 벡터 형식의 configuration을 사용하려면 robotDataFormat 속성을 "row" 또는 "column"으로 설정합니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 버전에서는 쉼표를 사용하여 각 이름과 값을 구분하고 따옴표로 Name을 묶으십시오.

예: Frames="off"는 Figure에서 강체 프레임을 숨깁니다.

좌표축의 부모로, 로봇이 그려지는 Axes 객체로 지정됩니다. 기본적으로 로봇은 활성 좌표축에 플로팅됩니다.

로봇 플롯을 유지하는 옵션으로, 논리값 1(true) 또는 0(false)으로 지정됩니다. PreservePlottrue로 지정할 경우, hold on도 사용해야 합니다. 이렇게 해야 show 함수가 앞에서 show를 호출해서 좌표축에 표시했던 이전 강체 트리 패치를 덮어쓰지 않습니다. PreservePlotfalse로 지정할 경우, 현재의 hold 값에 관계없이 show 함수가 동일한 좌표축에 있는 로봇 바디 트리의 이전 플롯을 덮어씁니다.

참고

PreservePlottrue일 경우 FastUpdate 인수는 false여야 합니다.

데이터형: logical

바디 프레임 표시로, "on" 또는 "off"로 지정됩니다. 이러한 프레임은 강체 트리에서 개별 바디의 좌표 프레임입니다.

데이터형: char | string

시각적 기하 도형 표시로, "on" 또는 "off"로 지정됩니다. Figure에서 개별 시각적 기하 도형을 마우스 오른쪽 버튼을 클릭하여 끌 수도 있습니다.

addVisual을 사용하여 개별 시각적 기하 도형을 지정합니다. 메시용 .stl 파일이 있는 URDF 로봇 모델을 가져오려면 importrobot 함수를 참조하십시오.

데이터형: char | string

충돌 기하 도형 표시로, "Collisions"와 함께 "on" 또는 "off"가 쉼표로 구분되어 지정됩니다.

addCollision 함수를 사용하여 로봇 모델의 개별 강체에 충돌 기하 도형을 추가합니다. 메시용 .stl 파일이 있는 URDF 로봇 모델을 가져오려면 importrobot 함수를 참조하십시오.

데이터형: char | string

로봇의 위치로, "Position"과 함께 [x y z yaw] 형식의 요소를 4개 가진 벡터가 쉼표로 구분되어 지정됩니다. x, y, z 요소는 미터 단위로 위치를 지정하고 yaw는 라디안 단위로 요(yaw) 각을 지정합니다.

데이터형: single | double

기존 플롯에 대한 빠른 업데이트로, 논리값 0(false) 또는 1(true)로 지정됩니다. 이 인수로 로봇 모델을 지정하기 전에, 로봇 모델을 처음 표시하기 위해서는 show 객체 함수를 사용해야 합니다.

참고

FastUpdatetrue일 경우 PreservePlot 인수는 false여야 합니다.

데이터형: logical

출력 인수

모두 축소

좌표축 그래픽 핸들로, Axes 객체로 반환됩니다. 이 객체는 로봇이 플로팅되는 Figure의 속성을 포함합니다.

로봇 모델에는 시각적 구성요소가 연결되어 있습니다. 각 rigidBody 객체는 바디 프레임으로 표시되는 좌표 프레임을 포함합니다. 각 바디에는 시각적 메시도 연결되어 있을 수 있습니다. 기본적으로 이러한 구성요소는 모두 자동으로 표시됩니다. 강체 트리 표시의 시각적 구성요소를 검사하거나 수정할 수 있습니다. 바디 프레임 또는 시각적 메시를 클릭하여 노란색으로 강조 표시한 후, 연결된 바디 이름, 인덱스, 조인트 유형을 확인합니다. 개별 구성요소의 가시성을 켜거나 끄려면 마우스 오른쪽 버튼을 클릭합니다.

  • 바디 프레임: 개별 바디 프레임은 3축 좌표 프레임으로 표시됩니다. 고정 프레임은 분홍색 프레임입니다. 움직일 수 있는 조인트 유형은 RGB 좌표축으로 표시됩니다. 바디 프레임을 클릭하면 모션 축을 볼 수 있습니다. 직선 조인트는 모션 축 방향으로 노란색 화살표를 표시하고 회전 조인트는 회전 축을 중심으로 한 원형 화살표를 표시합니다.

  • 시각적 메시: 개별 시각적 기하 도형은 addVisual을 사용하여 지정되거나 importrobot을 사용하여 .stl 또는 .dae 파일이 지정된 로봇 모델을 가져오는 방식으로 지정됩니다. Figure의 개별 바디를 마우스 오른쪽 버튼으로 클릭하여 메시를 끄거나 Visuals 이름-값 쌍을 지정하여 모든 시각적 기하 도형을 숨길 수 있습니다.

버전 내역

R2016b에 개발됨