[Isaac sim] collision 설정 알아보기

choonsikmom·2025년 6월 5일
0

simulations

목록 보기
1/1
post-thumbnail

Isaac Sim에서 가정용 로봇을 위한 가정 환경을 조성하다가, 콜리젼 설정을 기본 설정으로 해놨는데 로봇이 다리가 있는 가구들을 통과하지 못하는 문제가 발생했다.

이러한 문제 해결을 위해, Isaac Sim의 콜리젼 설정에 대해 조사하고 실제로 콜리젼 설정을 변경해가면서 실험해 보았다.

[Isaac Sim 공식 문서]

👉🏻 Physics Collsion 설정 개요
Isaac Sim은 NVIDIA PhysX 엔진을 기반으로 하며, 물리 시뮬레이션에서 정확하고 효율적인 충돌 감지를 위해 다양한 collision approximation 방법을 제공한다. 실제 3D Mesh의 모든 폴리곤을 사용한 충돌 감지는 계산 비용이 매우 높기 때문에, 근사화된 형태를 사용하여 성능과 정확도의 균형을 맞춘다.


Collision Approximation

실험 대상: 식탁과 의자 다리 등.. 이 있으나 여기서는 식탁만 정리해 보겠다.

1. Convex Hull

작동 원리: 원본 메쉬의 모든 점들을 포함하는 가장 작은 볼록한 형태를 생성

  • 장점:
    • 비교적 정확한 충돌 감지
    • 안정적인 물리 시뮬레이션
    • PhysX에서 최적화됨
  • 단점:
    • 오목한 부분이 무시됨
    • 복잡한 형태에서는 부정확할 수 있음
  • 사용 사례: 일반적인 객체, 캐릭터 모델

콜리젼을 적용하면 default로 적용되는 approximation 방법이다.

  • 콜리젼 적용 시각화

Convex Hull을 적용하면 책상 다리 내부 영역이 polygon으로 덮이게 된다.

  • 충돌/통과 테스트 : 충돌

시각화 모양으로 예상했지만 역시 내부를 통과하지 못하고 충돌한다.

2. Triangle Mesh (Exact Mesh)

작동 원리: 원본 메쉬의 모든 삼각형을 그대로 사용

  • 장점:

    • 가장 정확한 충돌 감지
    • 복잡한 형태 완벽 재현
  • 단점:

    • 매우 높은 계산 비용
    • 동적 객체에는 사용 불가 (정적 객체만 가능)
    • 메모리 사용량 높음
  • 사용 사례: 지형, 건물 등 정적 환경

  • 콜리젼 적용 시각화

  • 충돌/통과 테스트 : 충돌

생긴거 보고 당연히 될 줄 알았는데.. 어디서 걸리는지 모르겠다 🤔

3.Convex Decomposition

작동 원리: 복잡한 오목한 형태를 여러 개의 볼록한 부분으로 분해

  • 장점:

    • 오목한 형태도 비교적 정확하게 표현
    • 동적 객체에 사용 가능
  • 단점:

    • 높은 계산 비용
    • 분해 품질에 따라 성능 차이 큼
    • 설정이 복잡함
  • 사용 사례: 복잡한 형태의 동적 객체

  • 콜리젼 적용 시각화

  • 충돌/통과 테스트 : 통과

4. Bounding Sphere

작동 원리: 객체를 완전히 감싸는 가장 작은 구를 생성

  • 장점:
    • 매우 빠른 충돌 감지
    • 메모리 사용량 최소
    • 회전에 불변
  • 단점:
    • 매우 부정확한 충돌 감지
    • 대부분의 경우 과도하게 큰 충돌 영역
  • 사용 사례: 간단한 근사 계산, 프로토타이핑
  • 콜리젼 적용 시각화
  • 충돌/통과 테스트 : 실패
    시각화만 봐도 설명될 것만 같아서 실험영상은 PASS,,,

5. Bounding Box (Cube)

작동 원리: 객체를 완전히 감싸는 직육면체를 생성

  • 장점:
    • 빠른 충돌 감지
    • 구현이 간단
    • 메모리 효율적
  • 단점:
    • 회전 시 부정확해짐
    • 둥근 객체에는 부적합
  • 사용 사례: 박스 형태 객체, 간단한 근사
  • 콜리젼 적용 시각화
  • 충돌/통과 테스트 : 충돌

6. Mesh Simplification

작동 원리: 원본 메쉬의 폴리곤 수를 줄여 단순화된 버전을 생성

  • 장점:
    • 원본 형태 유지하면서 성능 향상
    • 디테일 레벨 조절 가능
  • 단점:
    • 여전히 높은 계산 비용 (삼각형 메쉬 대비)
    • 단순화 과정에서 정확도 손실
  • 사용 사례: 중간 정도의 정확도가 필요한 경우
  • 콜리젼 적용 시각화
  • 충돌/통과 테스트 : 충돌

그냥은 안되는데, 실행하고 approximation 다른 걸로 바꿨다가 돌리니깐 됐다..? (되고 안되고가 메트릭 옵션이랑은 상관 없는 듯 하다)

근데 물리엔진 에러 난다.

"PhysX Error: attachShape: non-SDF triangle mesh, tetrahedron mesh, heightfield or plane geometry shapes configured as SIMULATION_SHAPE are only supported on kinematic or static rigid bodies or in cooking for triangle meshes."

에러 메시지 관련해서 알아보니 triangle mesh 같은 복잡한 형태는 kinematic, static 강체에서만 지원된다고 한다. 아마 이래서 triangle mesh도 통과가 안된 것 같은데... triangle mesh랑 mesh simplification은 rigid body를 제거하고 써야 하나 보다.

7. SDF (Signed Distance Field) Mesh

작동 원리: 3D 공간의 각 점에서 표면까지의 거리를 저장하는 필드를 사용

  • 장점:
    • 부드러운 충돌 감지
    • 변형 가능한 객체에 적합
    • 고품질 렌더링 가능
  • 단점:
    • 높은 메모리 사용량
    • 생성 시간이 오래 걸림
    • 복잡한 구현
  • 사용 사례: 변형 가능한 객체, 유체 시뮬레이션
  • 콜리젼 적용 시각화
  • 충돌/통과 테스트 : 통과

8. Sphere Approximation

작동 원리: 객체를 여러 개의 구체 조합으로 근사화

  • 장점:
    • 빠른 충돌 감지
    • 유연한 형태 표현
    • 안정적인 물리 시뮬레이션
  • 단점:
    • 각진 형태에는 부적합
    • 구체 개수에 따른 성능 차이
  • 사용 사례: 캐릭터의 관절, 부드러운 형태의 객체
  • 콜리젼 적용 시각화
  • 충돌/통과 테스트 : 통과

일단 통과는 했는데 테이블 다리 콜리젼이 바닥이랑 충돌했는지 테이블이 바닥에 살짝 떠서 기울어진다.


💡 정리

연산 속도 우선 순위:
1.Bounding Sphere/Box → 2. Convex Hull → 3. Sphere Approximation → 4. Mesh Simplification → 5. Convex Decomposition → 6. SDF → 7. Triangle Mesh

정확도 우선 순위:
1.Triangle Mesh → 2. SDF → 3. Convex Decomposition → 4. Mesh Simplification → 5. Convex Hull → 6. Sphere Approximation → 7. Bounding Box/Sphere


Enable CCD (Continuous Collision Detection)

연속 충돌 감지(Continuous Collision Detection, CCD) : 물리 시뮬레이션에서 발생하는 "터널링(Tunneling)" 문제를 해결하기 위한 기술

  • 터널링(Tunneling) 현상이란?
    빠르게 움직이는 객체가 얇은 벽이나 작은 객체를 뚫고 지나가는 현상

일반적인 물리 시뮬레이션은 이산적(discrete) 충돌 감지를 사용한다. 매 프레임마다 객체의 현재 위치에서만 충돌을 확인하므로, 빠르게 움직이는 객체가 얇은 벽이나 작은 객체를 뚫고 지나가는 문제가 발생하게 된다. (통과해 버려서 충돌로 감지되지 않음)

CCD는 연속적인 경로 추적을 통해 이러한 문제를 해결한다.

  1. Swepth Volume 계산
  • 객체가 이동하는 전체 경로를 하나의 "쓸린 부피(Swept Volume)"로 계산
  • 시작점과 끝점 사이의 모든 위치를 고려
  1. Time of Impact (TOI) 계산
  • 충돌이 발생하는 정확한 시간을 계산
  • 0과 1 사이의 값 (0=시작점, 1=끝점)
  1. 정확한 충돌 지점 결정
  • TOI를 사용하여 실제 충돌이 발생한 지점에서 객체를 정지시킴

이러한 CCD가 유용한 상황은 다음과 같다.

  • 고속 발사체 : 총알, 화살 등의 빠르게 움직이는 객체가 얇은 표적을 관통하지 않도록 보장함
  • 얇은 장애물 : 종이처럼 얇은 벽이나 철망, 격자 구조
  • 작은 객체와의 충돌 : 작은 부품의 정밀한 조립, 탁구와 같이 작은 볼과 패들의 충돌
  • 로봇 그리퍼 : 얇은 객체를 집을 때, 정밀한 파지 동작

CCD를 사용하면 터널링 현상을 완전 방지할 수 있지만, 일반적인 충돌 감지보다 높은 계산 비용을 필요로 하고 메모리 사용량을 증가시키므로 터널링이 문제가 되는 객체에만 선택적으로 적용하는 것이 좋다.


Advanced Options

콜리전의 Advanced 섹션에는 위와 같이 몇가지 옵션들이 더 있다. 선택하는 Approximation 방법에 따라 지원되는 파라미터 종류가 다르다 (지원되지 않는 옵션들은 inactive 섹션에 있다). 위 옵션은 convex hull 기준이다.

공통 옵션들

Contact Offset & Rest Offset

contact offset : 접촉 반응(충돌 감지)이 일어나는 거리
rest offset : 객체들이 안정적으로 쉬는 거리

두 값 모두 기본값은 -inf 로 설정되어 있는데, 이는 PhysX의 전역 기본값을 따른다는 의미다. 일반적으로 Contact Offset은 0.02 (2cm), Rest Offset은 0.01 (1cm)로 설정되며, Contact Offset은 Rest Offset보다 더 큰 값으로 설정해야 한다. (Contact Offset > Rest Offset ≥ 0)

Torsional Patch Radius & Min Torsional Patch Radius

torsional patch radius : 비틀림 마찰 (torsional friction) 을 적용하기 위한 접촉 패치(contact patch) 의 반경
즉, 두 물체가 접촉하여 서로 비틀리는 힘을 받을 때, 마찰력이 계산되는 가상의 원형 영역의 크기를 지정하는 값이다.

두 값 모두 기본값은 0으로, 점 접촉으로 계산한다는 의미이다. 값 증가시 더 현실적인 비틀림 마찰(면 접촉)을 계산한다. (계산 비용 증가)

Convex Decomposition 관련

Error Percentage

convex decomposition의 허용 오차 비율
10.0 = 10% 오차까지 허용. 높은 값일수록 더 단순한 분해(빠름, 부정확), 낮은 값일수록 더 복잡한 분해(느림, 정확)

Max Convex Hulls

생성할 수 있는 최대 convex hull 개수
복잡한 객체를 여러 개의 convex hull로 분해할 때 최대 개수 제한. 많을수록 정확하지만 성능 저하

Seed Count

convex decomposition 시작점 개수
분해 알고리즘의 시작점 수. 높을수록 더 세밀한 분해가 가능하지만 계산 시간 증가

Voxel Resolution

복셀(voxel) 기반 계산의 해상도
객체를 3D 격자로 나누어 처리할 때의 정밀도. 높을수록 정확하지만 메모리와 계산 시간 증가

Convex Hull 관련

Hull Vertex Limit

convex hull의 최대 꼭짓점 개수
64: 정확한 형태(기본값), 32: 단순한 형태(성능 우선), 16: 매우 단순(Dynamic Body용)

Mesh 관련

Min Thickness

최소 두께 임계값
0.001 = 1mm보다 얇은 부분은 무시. 노이즈 제거와 안정성 향상을 위한 설정

Shrink Wrap

외형 보존 단순화 활성화
복잡한 메쉬를 단순화할 때 원본의 외형을 최대한 보존하는 옵션

Triangle Count Reduction

삼각형 개수 감소 비율
1.0: 감소 없음, 0.5: 50% 감소. 낮을수록 성능 향상되지만 정확도 감소

Weld Tolerance

정점 병합 허용 오차
기본값 -inf는 전역 설정 사용. 작은 값: 정밀한 병합, 큰 값: 적극적인 병합

Simplification Metric

단순화 품질 기준
0.0: 최대 단순화(성능 우선), 1.0: 최소 단순화(품질 우선), 0.2: 균형잡힌 설정

SDF (Signed Distance Field) 관련

SDF Resolution

SDF 그리드 해상도
128: 낮은 해상도(빠름), 256: 중간 해상도(기본), 512: 높은 해상도(정밀)

SDF Bits per Subgrid Pixel

SDF 서브그리드 픽셀당 비트 수
BitPerPixel8: 낮은 정밀도(빠름), BitPerPixel16: 중간 정밀도(기본), BitPerPixel32: 높은 정밀도(느림)

SDF Subgrid Resolution

SDF 서브그리드 세분화 수준
높을수록 더 세밀한 SDF 계산. 일반적으로 6이 기본값

Enable SDF Remeshing

SDF 기반 메쉬 재생성 활성화
비활성화: 원본 메쉬 유지, 활성화: SDF로 메쉬 재생성(더 최적화된 형태)

SDF Margin

SDF 경계 여백
0.01 = 1cm 여백. SDF 계산 시 객체 경계에서의 안전 거리

SDF Narrow Band Thickness

SDF 계산 영역 두께
0.01 = 1cm 두께. 얇게: 빠른 계산(경계 근처만), 두껍게: 느린 계산(넓은 영역)

기타 옵션

Fill Mode

내부 채우기 방식
flood: 빠른 채우기(기본값, 권장), raycast: 정밀한 raycast 기반 채우기, exact: 가장 정확하지만 느림

Max Spheres

구형 근사 시 최대 구 개수
객체를 여러 구로 근사할 때 사용할 수 있는 최대 구의 개수 제한

profile
춘식이랑 함께하는 개발일지.. 그런데 이제 먼작귀를 곁들인

0개의 댓글