isaac gym 자료 찾다가 화나서 쓰는 글!
새로운 사실을 알아낼때마다 업데이트 할 예정이다..
누군가에게는 도움이 되길 바라면서..고!
1. IssacGymEnvs의 task 예제코드에서 action의 shape는?
(num_envs, action의 차원)
나는 env마다 compute_reward, compute_observation 등의 함수를 각자 호출하는 줄 알았어서 parameter인 action의 shape가 (action의 차원) 인줄 알았다.
그런데 그게 아니라 전체 env에 대해 호출하는거여서 shape가 (num_envs, action의 차원) 모양이다.
2. rigid_body_state는 어떤 frame에 대해 표현되는가?
self.gym.acquire_rigid_body_state_tensor(self.sim)
를 했을 때 return되는 rigid body state의 shape는 (num_of_bodies, 13)이고
[:, 0:3]는 rigid body의 position
[:, 3:7]는 rigid body의 quaternion rotation
[:, 7:10]는 rigid body의 linear velocity
[:, 10:13]는 rigid body의 angular velocity
정보를 담고 있다. 이 정보들은 global frame 기준으로 표현된다!
3. actor_root_state는 어떤 정보를 return하는가?
mjcf 파일처럼 root joint를 따로 정의하지 않는 model을 load해서 사용했을 때
self.gym.acquire_actor_root_state_tensor(self.sim)
가 return하는 정보는 rigid_body_state 중 0번 index의 정보와 같았다.
즉 제일 부모 link의 position, rotation, linear velocity, angular velocity를 global frame 기준으로 return한다.
만약 root joint를 따로 정의하는 model format을 사용한다면 해당 joint의 global frame 기준 정보를 return 할 것 같은데 확인은 해보지 않았다.
4. load한 asset에서 각 joint의 position 및 rotation 값은 어떻게 알아낼 수 있을까?
gym.get_actor_joint_transforms(envs[i], actor_handles[i])
이렇게 하면 joint 개수만큼의 길이를 가지는 List가 return 된다.
각 element는 joint의 position 및 rotation 정보를 담고 있다.
각 element의 property p(첫번째 항목)은 joint의 global position을 meter로 표현하고
각 element의 property r(두번째 항목)은 joint의 global frame에 대한 rotation 값을 quaternion으로 표현한다.
5. bodySpace 상에서 center of mass가 어디에 위치하는지 어떻게 알아낼 수 있을까?
gym.get_actor_rigid_body_properties(envs[i], actor_handles[i])
이렇게 하면 rigid body의 개수만큼의 길이를 가지는 List가 return된다.
각 element에서 com 성분을 추출하면 center of mass가 bodySpace 상에서
어디에 위치하는지 Vec3 값으로 retrun이 된다.
'연구 > isaac gym' 카테고리의 다른 글
isaac gym에서 mjcf 파일 로드 시 주의사항 (1) | 2023.02.01 |
---|