こちらはmujocoのv3系統についての基本操作の備忘録になります。
mujocoの情報は英語がほとんどなので、英語弱者の筆者としては日本語情報を増やしていきたいところ。
論文の実装済リポジトリなどではインターフェースがmujoco-pyを使用していることも多く、最新バージョンのmujocoを動かす際にどうやって置き換えれば良いかなども残していきたいと思っています。
目次
オブジェクトの情報取得
基本的な情報としてオブジェクトの位置情報を取得したい。
位置情報の取得はmjModel.body_pos
で出来ます。mjModel.body_pos
の戻り値としてはnumpy.array
でnbody×3
次元で返ってきます。
nbody=4の場合の例としては以下のような感じ。行ごとに各bodyの位置情報、0列目がx, 1列目がy, 2列目がzを表しています。
array([[0. , 0. , 0. ],
[0. , 0. , 0. ],
[-2. , 2. , 0. ],
[0. , 0. , 0.8 ]])
この時に各行のbodyってどれを指してるのか知りたくなりますよね。
そういった時はmujoco.mj_id2name
メソッドを使用します。mujoco.mj_id2name
はメソッド名通りオブジェクトidからオブジェクト名を返してくれるメソッドになります。
引数はmjModel
とtype
とid
、mjModel
とid
はいいとしてtype
ってなんぞ!?って私はなりました。
そういう時はちゃんとドキュメントを読みましょう(自省)。ドキュメントを読むとmjtObj type
と書いてありますね。
じゃあmjtObj type
ってなんぞ!?ってなりますがこれもドキュメントに書いてありました。
丸っとコピペすると以下の通り。bodyについて知りたければtype=1
を指定しておけば良いということですね。
typedef enum mjtObj_ { // type of MujoCo object
mjOBJ_UNKNOWN = 0, // unknown object type
mjOBJ_BODY, // body
mjOBJ_XBODY, // body, used to access regular frame instead of i-frame
mjOBJ_JOINT, // joint
mjOBJ_DOF, // dof
mjOBJ_GEOM, // geom
mjOBJ_SITE, // site
mjOBJ_CAMERA, // camera
mjOBJ_LIGHT, // light
mjOBJ_FLEX, // flex
mjOBJ_MESH, // mesh
mjOBJ_SKIN, // skin
mjOBJ_HFIELD, // heightfield
mjOBJ_TEXTURE, // texture
mjOBJ_MATERIAL, // material for rendering
mjOBJ_PAIR, // geom pair to include
mjOBJ_EXCLUDE, // body pair to exclude
mjOBJ_EQUALITY, // equality constraint
mjOBJ_TENDON, // tendon
mjOBJ_ACTUATOR, // actuator
mjOBJ_SENSOR, // sensor
mjOBJ_NUMERIC, // numeric
mjOBJ_TEXT, // text
mjOBJ_TUPLE, // tuple
mjOBJ_KEY, // keyframe
mjOBJ_PLUGIN // plugin instance
} mjtObj;
コメント