Isaac Sim에서 가정용 로봇을 위한 가정 환경을 조성하다가, 콜리젼 설정을 기본 설정으로 해놨는데 로봇이 다리가 있는 가구들을 통과하지 못하는 문제가 발생했다.
이러한 문제 해결을 위해, Isaac Sim의 콜리젼 설정에 대해 조사하고 실제로 콜리젼 설정을 변경해가면서 실험해 보았다.
👉🏻 Physics Collsion 설정 개요
Isaac Sim은 NVIDIA PhysX 엔진을 기반으로 하며, 물리 시뮬레이션에서 정확하고 효율적인 충돌 감지를 위해 다양한 collision approximation 방법을 제공한다. 실제 3D Mesh의 모든 폴리곤을 사용한 충돌 감지는 계산 비용이 매우 높기 때문에, 근사화된 형태를 사용하여 성능과 정확도의 균형을 맞춘다.
실험 대상: 식탁과 의자 다리 등.. 이 있으나 여기서는 식탁만 정리해 보겠다.
작동 원리: 원본 메쉬의 모든 점들을 포함하는 가장 작은 볼록한 형태를 생성
콜리젼을 적용하면 default로 적용되는 approximation 방법이다.
Convex Hull을 적용하면 책상 다리 내부 영역이 polygon으로 덮이게 된다.
충돌
시각화 모양으로 예상했지만 역시 내부를 통과하지 못하고 충돌한다.
작동 원리: 원본 메쉬의 모든 삼각형을 그대로 사용
장점:
단점:
사용 사례: 지형, 건물 등 정적 환경
콜리젼 적용 시각화
충돌
생긴거 보고 당연히 될 줄 알았는데.. 어디서 걸리는지 모르겠다 🤔
작동 원리: 복잡한 오목한 형태를 여러 개의 볼록한 부분으로 분해
장점:
단점:
사용 사례: 복잡한 형태의 동적 객체
콜리젼 적용 시각화
통과
작동 원리: 객체를 완전히 감싸는 가장 작은 구를 생성
실패
작동 원리: 객체를 완전히 감싸는 직육면체를 생성
충돌
작동 원리: 원본 메쉬의 폴리곤 수를 줄여 단순화된 버전을 생성
충돌
그냥은 안되는데, 실행하고 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를 제거하고 써야 하나 보다.
작동 원리: 3D 공간의 각 점에서 표면까지의 거리를 저장하는 필드를 사용
통과
작동 원리: 객체를 여러 개의 구체 조합으로 근사화
통과
일단 통과는 했는데 테이블 다리 콜리젼이 바닥이랑 충돌했는지 테이블이 바닥에 살짝 떠서 기울어진다.
✅ 연산 속도 우선 순위:
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
연속 충돌 감지(Continuous Collision Detection, CCD) : 물리 시뮬레이션에서 발생하는 "터널링(Tunneling)" 문제를 해결하기 위한 기술
- 터널링(Tunneling) 현상이란?
빠르게 움직이는 객체가 얇은 벽이나 작은 객체를 뚫고 지나가는 현상
일반적인 물리 시뮬레이션은 이산적(discrete) 충돌 감지를 사용한다. 매 프레임마다 객체의 현재 위치에서만 충돌을 확인하므로, 빠르게 움직이는 객체가 얇은 벽이나 작은 객체를 뚫고 지나가는 문제가 발생하게 된다. (통과해 버려서 충돌로 감지되지 않음)
CCD는 연속적인 경로 추적을 통해 이러한 문제를 해결한다.
이러한 CCD가 유용한 상황은 다음과 같다.
CCD를 사용하면 터널링 현상을 완전 방지할 수 있지만, 일반적인 충돌 감지보다 높은 계산 비용을 필요로 하고 메모리 사용량을 증가시키므로 터널링이 문제가 되는 객체에만 선택적으로 적용하는 것이 좋다.
콜리전의 Advanced 섹션에는 위와 같이 몇가지 옵션들이 더 있다. 선택하는 Approximation 방법에 따라 지원되는 파라미터 종류가 다르다 (지원되지 않는 옵션들은 inactive 섹션에 있다). 위 옵션은 convex hull 기준이다.
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 : 비틀림 마찰 (torsional friction) 을 적용하기 위한 접촉 패치(contact patch) 의 반경
즉, 두 물체가 접촉하여 서로 비틀리는 힘을 받을 때, 마찰력이 계산되는 가상의 원형 영역의 크기를 지정하는 값이다.
두 값 모두 기본값은 0으로, 점 접촉으로 계산한다는 의미이다. 값 증가시 더 현실적인 비틀림 마찰(면 접촉)을 계산한다. (계산 비용 증가)
convex decomposition의 허용 오차 비율
10.0 = 10% 오차까지 허용. 높은 값일수록 더 단순한 분해(빠름, 부정확), 낮은 값일수록 더 복잡한 분해(느림, 정확)
생성할 수 있는 최대 convex hull 개수
복잡한 객체를 여러 개의 convex hull로 분해할 때 최대 개수 제한. 많을수록 정확하지만 성능 저하
convex decomposition 시작점 개수
분해 알고리즘의 시작점 수. 높을수록 더 세밀한 분해가 가능하지만 계산 시간 증가
복셀(voxel) 기반 계산의 해상도
객체를 3D 격자로 나누어 처리할 때의 정밀도. 높을수록 정확하지만 메모리와 계산 시간 증가
convex hull의 최대 꼭짓점 개수
64: 정확한 형태(기본값), 32: 단순한 형태(성능 우선), 16: 매우 단순(Dynamic Body용)
최소 두께 임계값
0.001 = 1mm보다 얇은 부분은 무시. 노이즈 제거와 안정성 향상을 위한 설정
외형 보존 단순화 활성화
복잡한 메쉬를 단순화할 때 원본의 외형을 최대한 보존하는 옵션
삼각형 개수 감소 비율
1.0: 감소 없음, 0.5: 50% 감소. 낮을수록 성능 향상되지만 정확도 감소
정점 병합 허용 오차
기본값 -inf는 전역 설정 사용. 작은 값: 정밀한 병합, 큰 값: 적극적인 병합
단순화 품질 기준
0.0: 최대 단순화(성능 우선), 1.0: 최소 단순화(품질 우선), 0.2: 균형잡힌 설정
SDF 그리드 해상도
128: 낮은 해상도(빠름), 256: 중간 해상도(기본), 512: 높은 해상도(정밀)
SDF 서브그리드 픽셀당 비트 수
BitPerPixel8: 낮은 정밀도(빠름), BitPerPixel16: 중간 정밀도(기본), BitPerPixel32: 높은 정밀도(느림)
SDF 서브그리드 세분화 수준
높을수록 더 세밀한 SDF 계산. 일반적으로 6이 기본값
SDF 기반 메쉬 재생성 활성화
비활성화: 원본 메쉬 유지, 활성화: SDF로 메쉬 재생성(더 최적화된 형태)
SDF 경계 여백
0.01 = 1cm 여백. SDF 계산 시 객체 경계에서의 안전 거리
SDF 계산 영역 두께
0.01 = 1cm 두께. 얇게: 빠른 계산(경계 근처만), 두껍게: 느린 계산(넓은 영역)
내부 채우기 방식
flood: 빠른 채우기(기본값, 권장), raycast: 정밀한 raycast 기반 채우기, exact: 가장 정확하지만 느림
구형 근사 시 최대 구 개수
객체를 여러 구로 근사할 때 사용할 수 있는 최대 구의 개수 제한