Main Content

addCollision

강체에 충돌 기하 도형 추가

R2020b 이후

설명

addCollision(body,type,parameters)는 지정된 기하 유형과 파라미터의 충돌 기하 도형을 지정된 강체에 추가합니다.

addCollision(body,collisionObj)는 충돌 기하 도형 객체를 강체에 추가합니다. collision 객체는 다음 중 하나로 지정됩니다.

이 구문은 강체 프레임을 기준으로 tform*collisionObj.Pose의 상대 자세에서 충돌 기하 도형을 연결합니다.

예제

addCollision(___,tform)은 위에 열거된 구문의 입력 인수 조합 외에 강체 프레임을 기준으로 하는 충돌 기하 도형의 변환을 지정합니다.

예제

모두 축소

로봇 모델을 불러와서 충돌 메시를 수정합니다. 기존 충돌 메시를 지우고, 단순한 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.

입력 인수

모두 축소

강체로, rigidBody 객체로 지정됩니다.

충돌 기하 도형의 기하 유형으로, string형 스칼라로 지정됩니다. 지정된 유형에 따라 parameters 입력값의 형식이 결정됩니다.

  • "box"[x y z]

  • "cylinder"[radius length]

  • "capsule"[radius length]

  • "sphere"radius

  • "mesh" — 꼭짓점으로 구성된 n×3 행렬 또는 string형의 STL 파일 이름이나 DAE 파일 이름

데이터형: char | string

충돌 기하 도형 파라미터로, 숫자형 벡터, 숫자형 행렬 또는 string형 스칼라로 지정됩니다. type 입력값에 따라 이 값의 형식이 결정됩니다.

  • "box"[x y z]

  • "cylinder"[radius length]

  • "capsule"[radius length]

  • "sphere"radius

  • "mesh" — 꼭짓점으로 구성된 n×3 행렬 또는 string형의 STL 파일 이름이나 DAE 파일 이름

데이터형: single | double | char | string

충돌 기하 도형 객체로, collisionBox 객체, collisionCapsule 객체, collisionCylinder 객체, collisionSphere 객체 또는 collisionMesh 객체로 지정됩니다.

바디 프레임을 기준으로 하는 충돌 기하 도형의 변환으로, 4×4 동차 변환 행렬로 지정됩니다. collisionObj 입력을 사용하여 충돌 객체를 지정하는 경우, 이 함수는 강체 프레임을 기준으로 tform*collisionObj.Pose의 상대 자세에서 충돌 기하 도형을 연결합니다.

데이터형: single | double

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2020b에 개발됨

모두 확장