google-deepmind / mujoco

Multi-Joint dynamics with Contact. A general purpose physics simulator.
https://mujoco.org
Apache License 2.0
8.07k stars 807 forks source link

function mj_name2id has a BUG? #103

Closed chinahuangyong closed 2 years ago

chinahuangyong commented 2 years ago

1.when i simualte mini_cheetah xml file in mujoco,and use mj_name2id to get the sensor, but i get the same id. mini_cheetah.zip

image

void updatePositionSensorId(void) {
    int i = 0;
    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "fr_abad_pos"); i++;
    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "fr_thigh_pos"); i++;
    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "fr_knee_pos"); i++;

    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "fl_abad_pos"); i++;
    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "fl_thigh_pos"); i++;
    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "fl_knee_pos"); i++;

    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "hr_abad_pos"); i++;
    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "hr_thigh_pos"); i++;
    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "hr_knee_pos"); i++;

    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "hl_abad_pos"); i++;
    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "hl_thigh_pos"); i++;
    _jointPosId[i] = mj_name2id(m, mjOBJ_SENSOR, "hl_knee_pos"); i++;
}

void updateVelocitySensorId(void) {
    int i = 0;
    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "fr_abad_vel"); i++;
    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "fr_thigh_vel"); i++;
    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "fr_knee_vel"); i++;

    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "fl_abad_vel"); i++;
    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "fl_thigh_vel"); i++;
    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "fl_knee_vel"); i++;

    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "hr_abad_vel"); i++;
    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "hr_thigh_vel"); i++;
    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "hr_knee_vel"); i++;

    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "hl_abad_vel"); i++;
    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "hl_thigh_vel"); i++;
    _jointVelId[i] = mj_name2id(m, mjOBJ_SENSOR, "hl_knee_vel"); i++;
}

void updateInterialUnitSensorId(void) {
    _bodyAccId = mj_name2id(m, mjOBJ_SENSOR, "body_acc");
    _bodyGyroId = mj_name2id(m, mjOBJ_SENSOR, "body_gyro");
    _bodyPosId = mj_name2id(m, mjOBJ_SENSOR, "body_pos");
    _bodyQuatId = mj_name2id(m, mjOBJ_SENSOR, "body_quat");
}

void updateMotorActuatorId(void) {
    int i = 0;
    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "fr_abad_motor"); i++;
    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "fr_thigh_motor"); i++;
    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "fr_knee_motor"); i++;

    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "fl_abad_motor"); i++;
    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "fl_thigh_motor"); i++;
    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "fl_knee_motor"); i++;

    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "hr_abad_motor"); i++;
    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "hr_thigh_motor"); i++;
    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "hr_knee_motor"); i++;

    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "hl_abad_motor"); i++;
    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "hl_thigh_motor"); i++;
    _jointMotorId[i] = mj_name2id(m, mjOBJ_ACTUATOR, "hl_knee_motor"); i++;
}

void updateData(void) {
    // std::cout << "updateData is Running\n" <<std::endl;
    updatePositionSensorId();
    updateVelocitySensorId();
    updateInterialUnitSensorId();

    for(int i=0; i<12; i++) {
        std::cout << "joint Position Id: " << _jointPosId[i] <<std::endl;
    }
    for(int i=0; i<12; i++) {
        std::cout << "joint Vel Id: " << _jointVelId[i] <<std::endl;
    }

    std::cout << "Body Acc Id:\t" << _bodyPosId << std::endl;
    std::cout << "Body Gyro Id:\t" << _bodyGyroId << std::endl;
    std::cout << "Body Pos Id:\t" << _bodyPosId << std::endl;
    std::cout << "Body Quat Id:\t" << _bodyQuatId << std::endl;

    std::cout << "Num of Sensor:\t" << m->nsensor << std::endl;
    std::cout << "Num of SensorData:\t" << m->nsensordata << std::endl;
}
chinahuangyong commented 2 years ago

sorry, it is my mistake, when i printf, i use the corrent var.

std::cout << "Body Acc Id:\t" << _bodyPosId << std::endl;