작성자 : 김한결 / 석박통합과정 (gksruf621@postech.ac.kr)
MJCF 파일 분석(2)에 이어서 environment를 만들어 보려고 한다.
처음에는 아래 링크에 reference가 아주 친절하게 나와있기 때문에 만만히 봤는데, API가 C++ 기반으로 작성되었다보니 생각보다 까다로웠다. 그래도 mujoco 라이브러리안에 "robotics"나 "mujoco"를 참고하면 비교적 쉽게 따라할 수 있으며, mujoco-py 1.50.0버전 refer도 제공하고 있다.
https://mujoco.readthedocs.io/en/latest/APIreference.html#mjmodel
https://openai.github.io/mujoco-py/build/html/reference.html
그래서 이번 글은 mujoco 함수들을 예시와 함께 기록하려고 한다.
참고로 여기서 env는 gym wraper로 한번 감싼 형태이며 다른 refer는 볼 필요 없이 Data structure 부분만을 이용해 observation design, reward design을 할 것이기 때문에 해당 부분과 관련된 함수를 위주로 언급한다
1. body name으로 index 가져오고 해당 body pos 접근하기(찾아보니 body pos는 변경할 수 없다고 한다. 또 막상써보니 refer에 있는 get body xpos가 훨씬 나은것 같다...) (Baxter로 pick&place를 만들때는 object의 position을 변경시켜도 반영이 되지않았는데 Indy7의 open door는 변경이 잘 됩니다...혼란을 드려 죄송합니다)
self.env.sim.model.body_pos[self.env.sim.model.body_name2id("target0")]
<body pos 변경하는 법>
#=====================init object pos==================
init_obj_pos = np.array([0.0, 0.0, 0.0], dtype=np.float32)
init_obj_pos[:2] += 0.2*(np.random.rand(2)-0.5)
self.sim.model.body_pos[self.model.body_name2id('object')] = init_obj_pos
#=======================================================
2. site name으로 index 가져오고 해당 site pos 접근하기(변경 가능)
site_id = self.env.sim.model.site_name2id("object0")
self.env.sim.model.site_pos[site_id]
3. site position data로 한번에 접근하기(이건 refer에도 있어서 예시용)
self.sim.data.get_site_xpos("l_gripper_l_finger")
Pick and Place를 구현해보려고 1,2 번 사용하는데 나름 애를 먹었는데(document에 없음) 어려웠던 부분들에 대해 막상 글을 써보니 다른 것들은 전부 레퍼에 있고 쓸만한게 없는 것 같다...
추후에 또 추가할 사항이 있으면 추가해야겠다.
이번 글은 여기까지.
'Others' 카테고리의 다른 글
Mujoco 환경 세팅 - 참고용 (0) | 2022.06.29 |
---|---|
MJCF 파일 분석(5) - 나만의 Manipulator task를 mujoco에서 만들자 (0) | 2022.04.03 |
MJCF 파일 분석(4) - 나만의 Manipulator task를 mujoco에서 만들자 (0) | 2022.03.29 |
MJCF 파일 분석(2) - 나만의 Manipulator task를 mujoco에서 만들자 (0) | 2022.03.29 |
MJCF 파일 분석(1) - 나만의 Manipulator task를 mujoco에서 만들자 (0) | 2022.03.25 |