티스토리 뷰

Signed Distance Field는 주어진 x와 특정 집합의 경계 사이의 직교 거리를 나타내는 필드(혹은 함수)이다. 이 거리는 점 x가 집합의 내부에 있는지 여부에 따라 부호가 결정된다. 집합 내부에서는 양수, 경계에서는 0, 외부에서는 음의 값을 가진다. 이런 SDF는 시뮬레이션에서 충돌을 계산하는 데 사용된다.
distance 함수를 만들어서 나만의 플러그인을 만들 수 있다. 이때 참고하면 좋은 사이트가 https://iquilezles.org/articles/distfunctions/

기본적인 SDF들에 대한 함수를 작성해두었다. 이를 참고하여 원하는 물체에 대한 SDF를 선언하여 MuJoCo에서 사용할 수 있다.

대충 기존 Collision mesh와는 다르게 복잡한 형상에 대한 Collision도 잘 확인해준다는 것 같은데, 항상 무조코가 그렇듯이 정확한 사용법을 모르겠다. 내가 원하는 건 섬세한 mesh의 표현이다.

 
 

오른쪽이 내가 시뮬레이션하고 싶은 물체이다. 보이는 것과 같이 내부가 비어 있는 비커 모양을 하고 있는데 이에 대한 Convex hull 모양은 왼쪽과 같다. 실제로는 내부가 비어 있지 않고 꽉찬 실린더 형태이다. 이 말은 작은 물체를 비커 내부에 넣지 못한다는 뜻이다. 이런 한계점을 SDF를 이용하여 해결할 수 있다 생각하여 공부중이다. 조금 더 확인해보고 2편으로 돌아와야겠다.

주어진 OBJ을 Finer 하게 바꿀 수 있는 방법으로는 https://github.com/SarahWeiii/CoACD

매우 간단한 형상을 Simulation 해봤다. 상자안에 작은 구슬을 넣는 형태. Fusion360으로 모델링 후 obj 파일로 추출한 다음 mjcf xml로 변경하여 mujoco에서 확인하면 위에 처럼 Visual은 제대로 나오지만 Collision은 둔탁한 형태가 된다. 이를 해결하기 위해서 CoCAD를 이용해 Collision mesh를 decomposition 해줘야 한다.

https://github.com/kevinzakka/obj2mjcf

obj2mjcf 레포는 단순히 obj 파일을 mjcf로 바꿔주는 것 말고도, Cocad를 옵션으로 사용할 수 있다. 아래 커맨드를 이용하여 Collision mesh가 decompose된 mjcf xml을 만들면 된다.

obj2mjcf --obj-dir /home/haegu/capex_ws/mj_sim/assets/test --save-mjcf --decompose --coacd-args.preprocess-resolution 70 --coacd-args.threshold 0.03
 
 

* MuJoCo Simulation 에서 숫자 2를 누르면 geom들의 visual 정보를 끌 수 있다. 3을 누르면 collision geom들의 정보를 볼 수 있다.

decompose된 collision mesh를 확인해보면 위 사진처럼 보인다. 기존에 상자 위(공중)에 떠 있던 구슬이 상자 안쪽으로 잘 들어가 있는 모습도 볼 수 있다. 물론 decompose한 geom mesh에 solref와 solimp등을 설정해줘야 한다.

 

 

혹시나 테스트 해보고 싶은 사람을 위해 zip파일을 남기려 했는데 티스토리 파일 첨부가 안보인다. 네이버 블로그 가서 다운받자.  !mesh path를 수정해줘야 한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30