Make switch statements over enums in engine source use a typed expression to support compiler checking of full coverage.
PiperOrigin-RevId: 556854229 Change-Id: I36a5d146d776e10b946e2f9b51ace4ef3866471b
This commit is contained in:
committed by
Copybara-Service
parent
13490962a8
commit
e4dddea42a
@@ -58,7 +58,7 @@ void mjccd_support(const void *obj, const ccd_vec3_t *_dir, ccd_vec3_t *vec) {
|
|||||||
mju_rotVecMatT(dir, _dir->v, d->geom_xmat+9*g);
|
mju_rotVecMatT(dir, _dir->v, d->geom_xmat+9*g);
|
||||||
|
|
||||||
// compute result according to geom type
|
// compute result according to geom type
|
||||||
switch (m->geom_type[g]) {
|
switch ((mjtGeom) m->geom_type[g]) {
|
||||||
case mjGEOM_SPHERE:
|
case mjGEOM_SPHERE:
|
||||||
mju_scl3(res, dir, size[0]);
|
mju_scl3(res, dir, size[0]);
|
||||||
break;
|
break;
|
||||||
@@ -877,21 +877,21 @@ void mjc_fixNormal(const mjModel* m, const mjData* d, mjContact* con, int g1, in
|
|||||||
|
|
||||||
// get geom ids and types
|
// get geom ids and types
|
||||||
int gid[2] = {g1, g2};
|
int gid[2] = {g1, g2};
|
||||||
int type[2];
|
mjtGeom type[2];
|
||||||
for (int i=0; i < 2; i++) {
|
for (int i=0; i < 2; i++) {
|
||||||
type[i] = m->geom_type[gid[i]];
|
type[i] = m->geom_type[gid[i]];
|
||||||
|
|
||||||
// set to -1 if type cannot be processed
|
// set to mjGEOM_NONE if type cannot be processed
|
||||||
if (type[i] != mjGEOM_SPHERE &&
|
if (type[i] != mjGEOM_SPHERE &&
|
||||||
type[i] != mjGEOM_CAPSULE &&
|
type[i] != mjGEOM_CAPSULE &&
|
||||||
type[i] != mjGEOM_ELLIPSOID &&
|
type[i] != mjGEOM_ELLIPSOID &&
|
||||||
type[i] != mjGEOM_CYLINDER) {
|
type[i] != mjGEOM_CYLINDER) {
|
||||||
type[i] = -1;
|
type[i] = mjGEOM_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// neither type can be processed: nothing to do
|
// neither type can be processed: nothing to do
|
||||||
if (type[0] < 0 && type[1] < 0) {
|
if (type[0] == mjGEOM_NONE && type[1] == mjGEOM_NONE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -904,7 +904,7 @@ void mjc_fixNormal(const mjModel* m, const mjData* d, mjContact* con, int g1, in
|
|||||||
// process geoms in type range
|
// process geoms in type range
|
||||||
int processed[2] = {0, 0};
|
int processed[2] = {0, 0};
|
||||||
for (int i=0; i < 2; i++) {
|
for (int i=0; i < 2; i++) {
|
||||||
if (type[i] >= 0) {
|
if (type[i] != mjGEOM_NONE) {
|
||||||
// get geom mat and size
|
// get geom mat and size
|
||||||
mjtNum* mat = d->geom_xmat + 9*gid[i];
|
mjtNum* mat = d->geom_xmat + 9*gid[i];
|
||||||
mjtNum* size = m->geom_size + 3*gid[i];
|
mjtNum* size = m->geom_size + 3*gid[i];
|
||||||
@@ -984,6 +984,9 @@ void mjc_fixNormal(const mjModel* m, const mjData* d, mjContact* con, int g1, in
|
|||||||
nrm[2] = 0;
|
nrm[2] = 0;
|
||||||
processed[i] = 1;
|
processed[i] = 1;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
// do nothing: only sphere, capsule, ellipsoid and cylinder are processed
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// normalize and map normal to global frame
|
// normalize and map normal to global frame
|
||||||
|
|||||||
@@ -408,7 +408,7 @@ void mj_instantiateEquality(const mjModel* m, mjData* d) {
|
|||||||
NV2 = 0;
|
NV2 = 0;
|
||||||
|
|
||||||
// process according to type
|
// process according to type
|
||||||
switch (m->eq_type[i]) {
|
switch ((mjtEq) m->eq_type[i]) {
|
||||||
case mjEQ_CONNECT: // connect bodies with ball joint
|
case mjEQ_CONNECT: // connect bodies with ball joint
|
||||||
// find global points
|
// find global points
|
||||||
for (int j=0; j < 2; j++) {
|
for (int j=0; j < 2; j++) {
|
||||||
@@ -898,7 +898,7 @@ void mj_diagApprox(const mjModel* m, mjData* d) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// process according to constraint type
|
// process according to constraint type
|
||||||
switch (d->efc_type[i]) {
|
switch ((mjtConstraint) d->efc_type[i]) {
|
||||||
case mjCNSTR_EQUALITY:
|
case mjCNSTR_EQUALITY:
|
||||||
// process according to equality-constraint type
|
// process according to equality-constraint type
|
||||||
switch (m->eq_type[id]) {
|
switch (m->eq_type[id]) {
|
||||||
@@ -1003,7 +1003,7 @@ static void getsolparam(const mjModel* m, const mjData* d, int i,
|
|||||||
mju_zero(solreffriction, mjNREF);
|
mju_zero(solreffriction, mjNREF);
|
||||||
|
|
||||||
// extract solver parameters from corresponding model element
|
// extract solver parameters from corresponding model element
|
||||||
switch (d->efc_type[i]) {
|
switch ((mjtConstraint) d->efc_type[i]) {
|
||||||
case mjCNSTR_EQUALITY:
|
case mjCNSTR_EQUALITY:
|
||||||
mju_copy(solref, m->eq_solref+mjNREF*id, mjNREF);
|
mju_copy(solref, m->eq_solref+mjNREF*id, mjNREF);
|
||||||
mju_copy(solimp, m->eq_solimp+mjNIMP*id, mjNIMP);
|
mju_copy(solimp, m->eq_solimp+mjNIMP*id, mjNIMP);
|
||||||
@@ -1079,7 +1079,7 @@ static void getposdim(const mjModel* m, const mjData* d, int i, mjtNum* pos, int
|
|||||||
*pos = d->efc_pos[i];
|
*pos = d->efc_pos[i];
|
||||||
|
|
||||||
// change (dim, distance) for special cases
|
// change (dim, distance) for special cases
|
||||||
switch (d->efc_type[i]) {
|
switch ((mjtConstraint) d->efc_type[i]) {
|
||||||
case mjCNSTR_CONTACT_ELLIPTIC:
|
case mjCNSTR_CONTACT_ELLIPTIC:
|
||||||
*dim = d->contact[id].dim;
|
*dim = d->contact[id].dim;
|
||||||
break;
|
break;
|
||||||
@@ -1104,6 +1104,10 @@ static void getposdim(const mjModel* m, const mjData* d, int i, mjtNum* pos, int
|
|||||||
*dim = 3;
|
*dim = 3;
|
||||||
*pos = mju_norm(d->efc_pos+i, 3);
|
*pos = mju_norm(d->efc_pos+i, 3);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// already handled
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1368,7 +1372,7 @@ static inline int mj_ne(const mjModel* m, mjData* d, int* nnz) {
|
|||||||
NV2 = 0;
|
NV2 = 0;
|
||||||
|
|
||||||
// process according to type
|
// process according to type
|
||||||
switch (m->eq_type[i]) {
|
switch ((mjtEq) m->eq_type[i]) {
|
||||||
case mjEQ_CONNECT:
|
case mjEQ_CONNECT:
|
||||||
size = 3;
|
size = 3;
|
||||||
if (!nnz) {
|
if (!nnz) {
|
||||||
@@ -1419,6 +1423,9 @@ static inline int mj_ne(const mjModel* m, mjData* d, int* nnz) {
|
|||||||
NV = 2;
|
NV = 2;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
// might occur in case of the now-removed distance equality constraint
|
||||||
|
mjERROR("unknown constraint type type %d", m->eq_type[i]); // SHOULD NOT OCCUR
|
||||||
}
|
}
|
||||||
ne += mj_addConstraintCount(m, size, NV);
|
ne += mj_addConstraintCount(m, size, NV);
|
||||||
nnze += size*NV;
|
nnze += size*NV;
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ void mj_kinematics(const mjModel* m, mjData* d) {
|
|||||||
// get joint id, qpos address, joint type
|
// get joint id, qpos address, joint type
|
||||||
int jid = m->body_jntadr[i] + j;
|
int jid = m->body_jntadr[i] + j;
|
||||||
int qadr = m->jnt_qposadr[jid];
|
int qadr = m->jnt_qposadr[jid];
|
||||||
int jtype = m->jnt_type[jid];
|
mjtJoint jtype = m->jnt_type[jid];
|
||||||
|
|
||||||
// compute axis in global frame; ball jnt_axis is (0,0,1), set by compiler
|
// compute axis in global frame; ball jnt_axis is (0,0,1), set by compiler
|
||||||
mju_rotVecQuat(xaxis, m->jnt_axis+3*jid, quat);
|
mju_rotVecQuat(xaxis, m->jnt_axis+3*jid, quat);
|
||||||
@@ -228,7 +228,7 @@ void mj_comPos(const mjModel* m, mjData* d) {
|
|||||||
|
|
||||||
// create motion dof
|
// create motion dof
|
||||||
int skip = 0;
|
int skip = 0;
|
||||||
switch (m->jnt_type[j]) {
|
switch ((mjtJoint) m->jnt_type[j]) {
|
||||||
case mjJNT_FREE:
|
case mjJNT_FREE:
|
||||||
// translation components: x, y, z in global frame
|
// translation components: x, y, z in global frame
|
||||||
mju_zero(d->cdof+da, 18);
|
mju_zero(d->cdof+da, 18);
|
||||||
@@ -281,7 +281,9 @@ void mj_camlight(const mjModel* m, mjData* d) {
|
|||||||
int id1 = m->cam_targetbodyid[i];
|
int id1 = m->cam_targetbodyid[i];
|
||||||
|
|
||||||
// adjust for mode
|
// adjust for mode
|
||||||
switch (m->cam_mode[i]) {
|
switch ((mjtCamLight) m->cam_mode[i]) {
|
||||||
|
case mjCAMLIGHT_FIXED:
|
||||||
|
break;
|
||||||
case mjCAMLIGHT_TRACK:
|
case mjCAMLIGHT_TRACK:
|
||||||
case mjCAMLIGHT_TRACKCOM:
|
case mjCAMLIGHT_TRACKCOM:
|
||||||
// fixed global orientation
|
// fixed global orientation
|
||||||
@@ -341,7 +343,9 @@ void mj_camlight(const mjModel* m, mjData* d) {
|
|||||||
int id1 = m->light_targetbodyid[i];
|
int id1 = m->light_targetbodyid[i];
|
||||||
|
|
||||||
// adjust for mode
|
// adjust for mode
|
||||||
switch (m->light_mode[i]) {
|
switch ((mjtCamLight) m->light_mode[i]) {
|
||||||
|
case mjCAMLIGHT_FIXED:
|
||||||
|
break;
|
||||||
case mjCAMLIGHT_TRACK:
|
case mjCAMLIGHT_TRACK:
|
||||||
case mjCAMLIGHT_TRACKCOM:
|
case mjCAMLIGHT_TRACKCOM:
|
||||||
// fixed global orientation
|
// fixed global orientation
|
||||||
@@ -644,7 +648,7 @@ void mj_transmission(const mjModel* m, mjData* d) {
|
|||||||
gear = m->actuator_gear+6*i;
|
gear = m->actuator_gear+6*i;
|
||||||
|
|
||||||
// process according to transmission type
|
// process according to transmission type
|
||||||
switch (m->actuator_trntype[i]) {
|
switch ((mjtTrn) m->actuator_trntype[i]) {
|
||||||
case mjTRN_JOINT: // joint
|
case mjTRN_JOINT: // joint
|
||||||
case mjTRN_JOINTINPARENT: // joint, force in parent frame
|
case mjTRN_JOINTINPARENT: // joint, force in parent frame
|
||||||
// slide and hinge joint: scalar gear
|
// slide and hinge joint: scalar gear
|
||||||
@@ -1269,7 +1273,7 @@ void mj_comVel(const mjModel* m, mjData* d) {
|
|||||||
// cvel = cvel_parent + cdof * qvel, cdofdot = cvel x cdof
|
// cvel = cvel_parent + cdof * qvel, cdofdot = cvel x cdof
|
||||||
for (int j=0; j < m->body_dofnum[i]; j++) {
|
for (int j=0; j < m->body_dofnum[i]; j++) {
|
||||||
// compute cvel and cdofdot
|
// compute cvel and cdofdot
|
||||||
switch (m->jnt_type[m->dof_jntid[bda+j]]) {
|
switch ((mjtJoint) m->jnt_type[m->dof_jntid[bda+j]]) {
|
||||||
case mjJNT_FREE:
|
case mjJNT_FREE:
|
||||||
// cdofdot = 0
|
// cdofdot = 0
|
||||||
mju_zero(cdofdot, 18);
|
mju_zero(cdofdot, 18);
|
||||||
@@ -1506,7 +1510,7 @@ void mj_rnePostConstraint(const mjModel* m, mjData* d) {
|
|||||||
mjtNum* eq_data = m->eq_data + mjNEQDATA*id;
|
mjtNum* eq_data = m->eq_data + mjNEQDATA*id;
|
||||||
mjtNum pos[3];
|
mjtNum pos[3];
|
||||||
int k;
|
int k;
|
||||||
switch (m->eq_type[id]) {
|
switch ((mjtEq) m->eq_type[id]) {
|
||||||
case mjEQ_CONNECT:
|
case mjEQ_CONNECT:
|
||||||
case mjEQ_WELD:
|
case mjEQ_WELD:
|
||||||
// cfrc = world-oriented torque:force vector
|
// cfrc = world-oriented torque:force vector
|
||||||
|
|||||||
@@ -344,7 +344,7 @@ static void mjd_comVel_vel_dense(const mjModel* m, mjData* d, mjtNum* Dcvel, mjt
|
|||||||
|
|
||||||
// Dcvel += D(cdof * qvel), Dcdofdot = D(cvel x cdof)
|
// Dcvel += D(cdof * qvel), Dcdofdot = D(cvel x cdof)
|
||||||
for (int j=m->body_dofadr[i]; j < m->body_dofadr[i]+m->body_dofnum[i]; j++) {
|
for (int j=m->body_dofadr[i]; j < m->body_dofadr[i]+m->body_dofnum[i]; j++) {
|
||||||
switch (m->jnt_type[m->dof_jntid[j]]) {
|
switch ((mjtJoint) m->jnt_type[m->dof_jntid[j]]) {
|
||||||
case mjJNT_FREE:
|
case mjJNT_FREE:
|
||||||
// Dcdofdot = 0
|
// Dcdofdot = 0
|
||||||
mju_zero(Dcdofdot+j*6*nv, 18*nv);
|
mju_zero(Dcdofdot+j*6*nv, 18*nv);
|
||||||
@@ -554,7 +554,7 @@ static void mjd_comVel_vel(const mjModel* m, mjData* d, mjtNum* Dcvel, mjtNum* D
|
|||||||
int Jadr = (j < nv - 1 ? m->dof_Madr[j + 1] : m->nM) - (m->dof_Madr[j] + 1);
|
int Jadr = (j < nv - 1 ? m->dof_Madr[j + 1] : m->nM) - (m->dof_Madr[j] + 1);
|
||||||
|
|
||||||
// Dcvel += D(cdof * qvel), Dcdofdot = D(cvel x cdof)
|
// Dcvel += D(cdof * qvel), Dcdofdot = D(cvel x cdof)
|
||||||
switch (m->jnt_type[m->dof_jntid[j]]) {
|
switch ((mjtJoint) m->jnt_type[m->dof_jntid[j]]) {
|
||||||
case mjJNT_FREE:
|
case mjJNT_FREE:
|
||||||
// Dcdofdot = 0 (already cleared)
|
// Dcdofdot = 0 (already cleared)
|
||||||
|
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ void mj_stepSkip(const mjModel* m, mjData* d, int skipstage, int skipsensor) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// use selected integrator
|
// use selected integrator
|
||||||
switch (m->opt.integrator) {
|
switch ((mjtIntegrator) m->opt.integrator) {
|
||||||
case mjINT_EULER:
|
case mjINT_EULER:
|
||||||
mj_EulerSkip(m, d, skipstage >= mjSTAGE_POS);
|
mj_EulerSkip(m, d, skipstage >= mjSTAGE_POS);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ void mj_fwdActuation(const mjModel* m, mjData* d) {
|
|||||||
prm = m->actuator_dynprm + i*mjNDYN;
|
prm = m->actuator_dynprm + i*mjNDYN;
|
||||||
|
|
||||||
// compute act_dot according to dynamics type
|
// compute act_dot according to dynamics type
|
||||||
switch (m->actuator_dyntype[i]) {
|
switch ((mjtDyn) m->actuator_dyntype[i]) {
|
||||||
case mjDYN_INTEGRATOR: // simple integrator
|
case mjDYN_INTEGRATOR: // simple integrator
|
||||||
d->act_dot[j] = ctrl[i];
|
d->act_dot[j] = ctrl[i];
|
||||||
break;
|
break;
|
||||||
@@ -276,7 +276,7 @@ void mj_fwdActuation(const mjModel* m, mjData* d) {
|
|||||||
prm = m->actuator_gainprm + mjNGAIN*i;
|
prm = m->actuator_gainprm + mjNGAIN*i;
|
||||||
|
|
||||||
// handle according to gain type
|
// handle according to gain type
|
||||||
switch (m->actuator_gaintype[i]) {
|
switch ((mjtGain) m->actuator_gaintype[i]) {
|
||||||
case mjGAIN_FIXED: // fixed gain: prm = gain
|
case mjGAIN_FIXED: // fixed gain: prm = gain
|
||||||
gain = prm[0];
|
gain = prm[0];
|
||||||
break;
|
break;
|
||||||
@@ -321,7 +321,7 @@ void mj_fwdActuation(const mjModel* m, mjData* d) {
|
|||||||
prm = m->actuator_biasprm + mjNBIAS*i;
|
prm = m->actuator_biasprm + mjNBIAS*i;
|
||||||
|
|
||||||
// handle according to bias type
|
// handle according to bias type
|
||||||
switch (m->actuator_biastype[i]) {
|
switch ((mjtBias) m->actuator_biastype[i]) {
|
||||||
case mjBIAS_NONE: // none
|
case mjBIAS_NONE: // none
|
||||||
bias = 0.0;
|
bias = 0.0;
|
||||||
break;
|
break;
|
||||||
@@ -511,7 +511,7 @@ void mj_fwdConstraint(const mjModel* m, mjData* d) {
|
|||||||
d->solver_iter = 0;
|
d->solver_iter = 0;
|
||||||
|
|
||||||
// run main solver
|
// run main solver
|
||||||
switch (m->opt.solver) {
|
switch ((mjtSolver) m->opt.solver) {
|
||||||
case mjSOL_PGS: // PGS
|
case mjSOL_PGS: // PGS
|
||||||
mj_solPGS(m, d, m->opt.iterations);
|
mj_solPGS(m, d, m->opt.iterations);
|
||||||
break;
|
break;
|
||||||
@@ -883,7 +883,7 @@ void mj_step(const mjModel* m, mjData* d) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// use selected integrator
|
// use selected integrator
|
||||||
switch (m->opt.integrator) {
|
switch ((mjtIntegrator) m->opt.integrator) {
|
||||||
case mjINT_EULER:
|
case mjINT_EULER:
|
||||||
mj_Euler(m, d);
|
mj_Euler(m, d);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -1746,7 +1746,7 @@ const char* mj_validateReferences(const mjModel* m) {
|
|||||||
for (int i=0; i < m->neq; i++) {
|
for (int i=0; i < m->neq; i++) {
|
||||||
int obj1id = m->eq_obj1id[i];
|
int obj1id = m->eq_obj1id[i];
|
||||||
int obj2id = m->eq_obj2id[i];
|
int obj2id = m->eq_obj2id[i];
|
||||||
switch (m->eq_type[i]) {
|
switch ((mjtEq) m->eq_type[i]) {
|
||||||
case mjEQ_JOINT:
|
case mjEQ_JOINT:
|
||||||
if (obj1id >= m->njnt || obj1id < 0) {
|
if (obj1id >= m->njnt || obj1id < 0) {
|
||||||
return "Invalid model: eq_obj1id out of bounds.";
|
return "Invalid model: eq_obj1id out of bounds.";
|
||||||
@@ -1778,12 +1778,13 @@ const char* mj_validateReferences(const mjModel* m) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
// might occur in case of the now-removed distance equality constraint
|
||||||
mjERROR("unknown equality constraint type.");
|
mjERROR("unknown equality constraint type.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i=0; i < m->nwrap; i++) {
|
for (int i=0; i < m->nwrap; i++) {
|
||||||
int wrap_objid = m->wrap_objid[i];
|
int wrap_objid = m->wrap_objid[i];
|
||||||
switch (m->wrap_type[i]) {
|
switch ((mjtWrap) m->wrap_type[i]) {
|
||||||
case mjWRAP_NONE:
|
case mjWRAP_NONE:
|
||||||
case mjWRAP_PULLEY:
|
case mjWRAP_PULLEY:
|
||||||
// wrap_objid not used.
|
// wrap_objid not used.
|
||||||
@@ -1810,7 +1811,7 @@ const char* mj_validateReferences(const mjModel* m) {
|
|||||||
int actuator_trntype = m->actuator_trntype[i];
|
int actuator_trntype = m->actuator_trntype[i];
|
||||||
int id = m->actuator_trnid[2*i];
|
int id = m->actuator_trnid[2*i];
|
||||||
int idslider = m->actuator_trnid[2*i+1];
|
int idslider = m->actuator_trnid[2*i+1];
|
||||||
switch (actuator_trntype) {
|
switch ((mjtTrn) actuator_trntype) {
|
||||||
case mjTRN_JOINT:
|
case mjTRN_JOINT:
|
||||||
case mjTRN_JOINTINPARENT:
|
case mjTRN_JOINTINPARENT:
|
||||||
if (id < 0 || id >= m->njnt) {
|
if (id < 0 || id >= m->njnt) {
|
||||||
@@ -1835,6 +1836,11 @@ const char* mj_validateReferences(const mjModel* m) {
|
|||||||
return "Invalid model: actuator_trnid out of bounds.";
|
return "Invalid model: actuator_trnid out of bounds.";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case mjTRN_BODY:
|
||||||
|
if (id < 0 || id >= m->nbody) {
|
||||||
|
return "Invalid model: actuator_trnid out of bounds.";
|
||||||
|
}
|
||||||
|
break;
|
||||||
case mjTRN_UNDEFINED:
|
case mjTRN_UNDEFINED:
|
||||||
// actuator_trnid not used.
|
// actuator_trnid not used.
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ void mj_passive(const mjModel* m, mjData* d) {
|
|||||||
int padr = m->jnt_qposadr[i];
|
int padr = m->jnt_qposadr[i];
|
||||||
int dadr = m->jnt_dofadr[i];
|
int dadr = m->jnt_dofadr[i];
|
||||||
|
|
||||||
switch (m->jnt_type[i]) {
|
switch ((mjtJoint) m->jnt_type[i]) {
|
||||||
case mjJNT_FREE:
|
case mjJNT_FREE:
|
||||||
// apply force
|
// apply force
|
||||||
d->qfrc_passive[dadr+0] -= stiffness*(d->qpos[padr+0] - m->qpos_spring[padr+0]);
|
d->qfrc_passive[dadr+0] -= stiffness*(d->qpos[padr+0] - m->qpos_spring[padr+0]);
|
||||||
|
|||||||
@@ -742,7 +742,7 @@ mjtNum mj_rayMesh(const mjModel* m, const mjData* d, int id,
|
|||||||
// intersect ray with pure geom, no meshes or hfields
|
// intersect ray with pure geom, no meshes or hfields
|
||||||
mjtNum mju_rayGeom(const mjtNum* pos, const mjtNum* mat, const mjtNum* size,
|
mjtNum mju_rayGeom(const mjtNum* pos, const mjtNum* mat, const mjtNum* size,
|
||||||
const mjtNum* pnt, const mjtNum* vec, int geomtype) {
|
const mjtNum* pnt, const mjtNum* vec, int geomtype) {
|
||||||
switch (geomtype) {
|
switch ((mjtGeom) geomtype) {
|
||||||
case mjGEOM_PLANE:
|
case mjGEOM_PLANE:
|
||||||
return ray_plane(pos, mat, size, pnt, vec);
|
return ray_plane(pos, mat, size, pnt, vec);
|
||||||
|
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ static void apply_cutoff(const mjModel* m, mjData* d, mjtStage stage) {
|
|||||||
|
|
||||||
|
|
||||||
// get xpos and xmat pointers to an object in mjData
|
// get xpos and xmat pointers to an object in mjData
|
||||||
static void get_xpos_xmat(const mjData* d, int type, int id, int sensor_id,
|
static void get_xpos_xmat(const mjData* d, mjtObj type, int id, int sensor_id,
|
||||||
mjtNum **xpos, mjtNum **xmat) {
|
mjtNum **xpos, mjtNum **xmat) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case mjOBJ_XBODY:
|
case mjOBJ_XBODY:
|
||||||
@@ -163,7 +163,7 @@ static void get_xpos_xmat(const mjData* d, int type, int id, int sensor_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get global quaternion of an object in mjData
|
// get global quaternion of an object in mjData
|
||||||
static void get_xquat(const mjModel* m, const mjData* d, int type, int id, int sensor_id,
|
static void get_xquat(const mjModel* m, const mjData* d, mjtObj type, int id, int sensor_id,
|
||||||
mjtNum *quat) {
|
mjtNum *quat) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case mjOBJ_XBODY:
|
case mjOBJ_XBODY:
|
||||||
@@ -216,7 +216,7 @@ void mj_sensorPos(const mjModel* m, mjData* d) {
|
|||||||
adr = m->sensor_adr[i];
|
adr = m->sensor_adr[i];
|
||||||
|
|
||||||
// process according to type
|
// process according to type
|
||||||
switch (m->sensor_type[i]) {
|
switch ((mjtSensor) m->sensor_type[i]) {
|
||||||
case mjSENS_MAGNETOMETER: // magnetometer
|
case mjSENS_MAGNETOMETER: // magnetometer
|
||||||
mju_mulMatTVec(d->sensordata+adr, d->site_xmat+9*objid, m->opt.magnetic, 3, 3);
|
mju_mulMatTVec(d->sensordata+adr, d->site_xmat+9*objid, m->opt.magnetic, 3, 3);
|
||||||
break;
|
break;
|
||||||
@@ -376,7 +376,7 @@ void mj_sensorPos(const mjModel* m, mjData* d) {
|
|||||||
|
|
||||||
// velocity-dependent sensors
|
// velocity-dependent sensors
|
||||||
void mj_sensorVel(const mjModel* m, mjData* d) {
|
void mj_sensorVel(const mjModel* m, mjData* d) {
|
||||||
int type, objtype, objid, reftype, refid, adr, nusersensor = 0;
|
int objtype, objid, reftype, refid, adr, nusersensor = 0;
|
||||||
int ne = d->ne, nf = d->nf, nefc = d->nefc;
|
int ne = d->ne, nf = d->nf, nefc = d->nefc;
|
||||||
mjtNum xvel[6];
|
mjtNum xvel[6];
|
||||||
|
|
||||||
@@ -395,7 +395,7 @@ void mj_sensorVel(const mjModel* m, mjData* d) {
|
|||||||
|
|
||||||
if (m->sensor_needstage[i] == mjSTAGE_VEL) {
|
if (m->sensor_needstage[i] == mjSTAGE_VEL) {
|
||||||
// get sensor info
|
// get sensor info
|
||||||
type = m->sensor_type[i];
|
mjtSensor type = m->sensor_type[i];
|
||||||
objtype = m->sensor_objtype[i];
|
objtype = m->sensor_objtype[i];
|
||||||
objid = m->sensor_objid[i];
|
objid = m->sensor_objid[i];
|
||||||
refid = m->sensor_refid[i];
|
refid = m->sensor_refid[i];
|
||||||
@@ -564,7 +564,7 @@ void mj_sensorVel(const mjModel* m, mjData* d) {
|
|||||||
|
|
||||||
// acceleration/force-dependent sensors
|
// acceleration/force-dependent sensors
|
||||||
void mj_sensorAcc(const mjModel* m, mjData* d) {
|
void mj_sensorAcc(const mjModel* m, mjData* d) {
|
||||||
int rootid, bodyid, type, objtype, objid, body1, body2, adr, nusersensor = 0;
|
int rootid, bodyid, objtype, objid, body1, body2, adr, nusersensor = 0;
|
||||||
int ne = d->ne, nf = d->nf, nefc = d->nefc;
|
int ne = d->ne, nf = d->nf, nefc = d->nefc;
|
||||||
mjtNum tmp[6], conforce[6], conray[3];
|
mjtNum tmp[6], conforce[6], conray[3];
|
||||||
mjContact* con;
|
mjContact* con;
|
||||||
@@ -584,7 +584,7 @@ void mj_sensorAcc(const mjModel* m, mjData* d) {
|
|||||||
|
|
||||||
if (m->sensor_needstage[i] == mjSTAGE_ACC) {
|
if (m->sensor_needstage[i] == mjSTAGE_ACC) {
|
||||||
// get sensor info
|
// get sensor info
|
||||||
type = m->sensor_type[i];
|
mjtSensor type = m->sensor_type[i];
|
||||||
objtype = m->sensor_objtype[i];
|
objtype = m->sensor_objtype[i];
|
||||||
objid = m->sensor_objid[i];
|
objid = m->sensor_objid[i];
|
||||||
adr = m->sensor_adr[i];
|
adr = m->sensor_adr[i];
|
||||||
@@ -803,7 +803,7 @@ void mj_energyPos(const mjModel* m, mjData* d) {
|
|||||||
stiffness = m->jnt_stiffness[i];
|
stiffness = m->jnt_stiffness[i];
|
||||||
padr = m->jnt_qposadr[i];
|
padr = m->jnt_qposadr[i];
|
||||||
|
|
||||||
switch (m->jnt_type[i]) {
|
switch ((mjtJoint) m->jnt_type[i]) {
|
||||||
case mjJNT_FREE:
|
case mjJNT_FREE:
|
||||||
mju_sub3(dif, d->qpos+padr, m->qpos_spring+padr);
|
mju_sub3(dif, d->qpos+padr, m->qpos_spring+padr);
|
||||||
d->energy[0] += 0.5*stiffness*mju_dot3(dif, dif);
|
d->energy[0] += 0.5*stiffness*mju_dot3(dif, dif);
|
||||||
|
|||||||
@@ -1342,7 +1342,7 @@ void mj_differentiatePos(const mjModel* m, mjtNum* qvel, mjtNum dt,
|
|||||||
int padr = m->jnt_qposadr[j];
|
int padr = m->jnt_qposadr[j];
|
||||||
int vadr = m->jnt_dofadr[j];
|
int vadr = m->jnt_dofadr[j];
|
||||||
|
|
||||||
switch (m->jnt_type[j]) {
|
switch ((mjtJoint) m->jnt_type[j]) {
|
||||||
case mjJNT_FREE:
|
case mjJNT_FREE:
|
||||||
for (int i=0; i < 3; i++) {
|
for (int i=0; i < 3; i++) {
|
||||||
qvel[vadr+i] = (qpos2[padr+i] - qpos1[padr+i]) / dt;
|
qvel[vadr+i] = (qpos2[padr+i] - qpos1[padr+i]) / dt;
|
||||||
@@ -1376,7 +1376,7 @@ void mj_integratePos(const mjModel* m, mjtNum* qpos, const mjtNum* qvel, mjtNum
|
|||||||
int padr = m->jnt_qposadr[j];
|
int padr = m->jnt_qposadr[j];
|
||||||
int vadr = m->jnt_dofadr[j];
|
int vadr = m->jnt_dofadr[j];
|
||||||
|
|
||||||
switch (m->jnt_type[j]) {
|
switch ((mjtJoint) m->jnt_type[j]) {
|
||||||
case mjJNT_FREE:
|
case mjJNT_FREE:
|
||||||
// position update
|
// position update
|
||||||
for (int i=0; i < 3; i++) {
|
for (int i=0; i < 3; i++) {
|
||||||
|
|||||||
@@ -423,7 +423,7 @@ mjtNum mju_wrap(mjtNum* wpnt, const mjtNum* x0, const mjtNum* x1,
|
|||||||
// all 3 semi-axes of a geom
|
// all 3 semi-axes of a geom
|
||||||
void mju_geomSemiAxes(const mjModel* m, int geom_id, mjtNum semiaxes[3]) {
|
void mju_geomSemiAxes(const mjModel* m, int geom_id, mjtNum semiaxes[3]) {
|
||||||
mjtNum* size = m->geom_size + 3*geom_id;
|
mjtNum* size = m->geom_size + 3*geom_id;
|
||||||
switch (m->geom_type[geom_id]) {
|
switch ((mjtGeom) m->geom_type[geom_id]) {
|
||||||
case mjGEOM_SPHERE:
|
case mjGEOM_SPHERE:
|
||||||
semiaxes[0] = size[0];
|
semiaxes[0] = size[0];
|
||||||
semiaxes[1] = size[0];
|
semiaxes[1] = size[0];
|
||||||
@@ -782,7 +782,7 @@ int mju_round(mjtNum x) {
|
|||||||
|
|
||||||
// convert type id to type name
|
// convert type id to type name
|
||||||
const char* mju_type2Str(int type) {
|
const char* mju_type2Str(int type) {
|
||||||
switch (type) {
|
switch ((mjtObj) type) {
|
||||||
case mjOBJ_BODY:
|
case mjOBJ_BODY:
|
||||||
return "body";
|
return "body";
|
||||||
|
|
||||||
@@ -992,7 +992,7 @@ const char* mju_writeNumBytes(size_t nbytes) {
|
|||||||
const char* mju_warningText(int warning, size_t info) {
|
const char* mju_warningText(int warning, size_t info) {
|
||||||
static mjTHREADLOCAL char str[1000];
|
static mjTHREADLOCAL char str[1000];
|
||||||
|
|
||||||
switch (warning) {
|
switch ((mjtWarning) warning) {
|
||||||
case mjWARN_INERTIA:
|
case mjWARN_INERTIA:
|
||||||
mjSNPRINTF(str, "Inertia matrix is too close to singular at DOF %zu. Check model.", info);
|
mjSNPRINTF(str, "Inertia matrix is too close to singular at DOF %zu. Check model.", info);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ float mjv_rbound(const mjvGeom* geom) {
|
|||||||
|
|
||||||
// compute rbound according to type
|
// compute rbound according to type
|
||||||
const float* s = geom->size;
|
const float* s = geom->size;
|
||||||
switch (geom->type) {
|
switch ((mjtMouse) geom->type) {
|
||||||
case mjGEOM_SPHERE:
|
case mjGEOM_SPHERE:
|
||||||
return s[0];
|
return s[0];
|
||||||
|
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ static void convert2D(mjtNum* res, int action, mjtNum dx, mjtNum dy, const mjtNu
|
|||||||
mjtNum vec[3];
|
mjtNum vec[3];
|
||||||
|
|
||||||
// construct 3D vector
|
// construct 3D vector
|
||||||
switch (action) {
|
switch ((mjtMouse) action) {
|
||||||
case mjMOUSE_ROTATE_V:
|
case mjMOUSE_ROTATE_V:
|
||||||
vec[0] = dy;
|
vec[0] = dy;
|
||||||
vec[1] = 0;
|
vec[1] = 0;
|
||||||
@@ -316,7 +316,7 @@ void mjv_moveCamera(const mjModel* m, int action, mjtNum reldx, mjtNum reldy,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// process action
|
// process action
|
||||||
switch (action) {
|
switch ((mjtMouse) action) {
|
||||||
case mjMOUSE_ROTATE_V:
|
case mjMOUSE_ROTATE_V:
|
||||||
case mjMOUSE_ROTATE_H:
|
case mjMOUSE_ROTATE_H:
|
||||||
cam->azimuth -= reldx * 180.0;
|
cam->azimuth -= reldx * 180.0;
|
||||||
@@ -384,7 +384,7 @@ void mjv_movePerturb(const mjModel* m, const mjData* d, int action, mjtNum reldx
|
|||||||
convert2D(vec, action, reldx, reldy, forward);
|
convert2D(vec, action, reldx, reldy, forward);
|
||||||
|
|
||||||
// process action
|
// process action
|
||||||
switch (action) {
|
switch ((mjtMouse) action) {
|
||||||
case mjMOUSE_MOVE_V:
|
case mjMOUSE_MOVE_V:
|
||||||
case mjMOUSE_MOVE_H:
|
case mjMOUSE_MOVE_H:
|
||||||
mju_addToScl3(pert->refpos, vec, pert->scale);
|
mju_addToScl3(pert->refpos, vec, pert->scale);
|
||||||
@@ -463,7 +463,7 @@ void mjv_moveModel(const mjModel* m, int action, mjtNum reldx, mjtNum reldy,
|
|||||||
mju_normalize3(roomright);
|
mju_normalize3(roomright);
|
||||||
|
|
||||||
// process action
|
// process action
|
||||||
switch (action) {
|
switch ((mjtMouse) action) {
|
||||||
case mjMOUSE_ROTATE_V:
|
case mjMOUSE_ROTATE_V:
|
||||||
case mjMOUSE_ROTATE_H:
|
case mjMOUSE_ROTATE_H:
|
||||||
// construct rotation vector
|
// construct rotation vector
|
||||||
|
|||||||
@@ -343,7 +343,7 @@ void mjv_initGeom(mjvGeom* geom, int type, const mjtNum* size,
|
|||||||
|
|
||||||
// set size (for XYZ scaling)
|
// set size (for XYZ scaling)
|
||||||
if (size) {
|
if (size) {
|
||||||
switch (type) {
|
switch ((mjtGeom) type) {
|
||||||
case mjGEOM_SPHERE:
|
case mjGEOM_SPHERE:
|
||||||
geom->size[0] = (float)size[0];
|
geom->size[0] = (float)size[0];
|
||||||
geom->size[1] = (float)size[0];
|
geom->size[1] = (float)size[0];
|
||||||
@@ -869,7 +869,7 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt,
|
|||||||
int j = m->jnt_bodyid[i];
|
int j = m->jnt_bodyid[i];
|
||||||
mjtNum* from;
|
mjtNum* from;
|
||||||
mjtNum to[3];
|
mjtNum to[3];
|
||||||
switch (m->jnt_type[i]) {
|
switch ((mjtJoint) m->jnt_type[i]) {
|
||||||
case mjJNT_FREE:
|
case mjJNT_FREE:
|
||||||
thisgeom->type = mjGEOM_BOX;
|
thisgeom->type = mjGEOM_BOX;
|
||||||
thisgeom->size[0] = thisgeom->size[1] = thisgeom->size[2] = 0.3*sz[1];
|
thisgeom->size[0] = thisgeom->size[1] = thisgeom->size[2] = 0.3*sz[1];
|
||||||
|
|||||||
Reference in New Issue
Block a user