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)

    thanks
     
    Kyokushin likes this.
  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.
     
    Kyokushin and tor like this.
  3. lin

    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.
     
    Kyokushin likes this.