get position of known object

Discussion in 'Modeling' started by Ana_Ha, Jun 7, 2017.

  1. hi emo,

    we would like to get the position and orientation of a known object within the xml file while manipulating it.
    how can we get it's pos and quat throughout the simulation ?
    (i can get the object id and name using mj_id2name and mj_name2id respectively)

  2. Emo Todorov

    Emo Todorov Administrator Staff Member

    Assuming the body id is n, the 3D position is at mjData.xpos+3n and the quaternion orientation is at mjData.xquat+4*n. You can also get the orientation as a 3x3 orthonormal matrix at mjData.xmat+9*n.

    Note that all these quantities are computed by forward kinematics, which is called from within forward dynamics (with mj_forward). If you call mj_step, it will advance the state (qpos, qvel) while the kinematics (xpos, xquat) still correspond to the previous state.
    tor likes this.
  3. lin


    I'm confused about this sentence. After loading a model, I check the values of xpos, and they are 0s. Then, I set mjData.ctrl to a random vector, and call mj_step. The values of xpos change when I check again. Could you explain "the kinematics still correpsond to the previous state"?
  4. Emo Todorov

    Emo Todorov Administrator Staff Member

    Before mj_step() you have qpos(t), qvel(t), xpos(t-1) which may be 0 if t = 0. After mj_step() you have qpos(t+1), qvel(t+1), xpos(t). This is because mj_step() calls mj_forward() to compute everything at time t. Then it advances qpos and qvel to t+1 but does not recompute anything else at t+1.