Defer sensor reference id resolution from sensor compiler to model compiler

PiperOrigin-RevId: 780070082
Change-Id: I7166f589f15bb0cd14b92e213d7a9f2a3bbad4e4
This commit is contained in:
Yuval Tassa
2025-07-07 05:36:44 -07:00
committed by Copybara-Service
parent 1742ba510c
commit 6ccc4f77bc
3 changed files with 3 additions and 9 deletions
+1 -1
View File
@@ -3447,7 +3447,7 @@ void mjCModel::CopyObjects(mjModel* m) {
m->sensor_objtype[i] = psen->objtype; m->sensor_objtype[i] = psen->objtype;
m->sensor_objid[i] = psen->obj ? psen->obj->id : -1; m->sensor_objid[i] = psen->obj ? psen->obj->id : -1;
m->sensor_reftype[i] = psen->reftype; m->sensor_reftype[i] = psen->reftype;
m->sensor_refid[i] = psen->refid; m->sensor_refid[i] = psen->ref ? psen->ref->id : -1;
m->sensor_dim[i] = psen->dim; m->sensor_dim[i] = psen->dim;
m->sensor_cutoff[i] = (mjtNum)psen->cutoff; m->sensor_cutoff[i] = (mjtNum)psen->cutoff;
m->sensor_noise[i] = (mjtNum)psen->noise; m->sensor_noise[i] = (mjtNum)psen->noise;
+2 -6
View File
@@ -6508,7 +6508,6 @@ mjCSensor::mjCSensor(mjCModel* _model) {
spec_userdata_.clear(); spec_userdata_.clear();
obj = nullptr; obj = nullptr;
ref = nullptr; ref = nullptr;
refid = -1;
// in case this sensor is not compiled // in case this sensor is not compiled
CopyFromSpec(); CopyFromSpec();
@@ -6610,7 +6609,7 @@ void mjCSensor::ResolveReferences(const mjCModel* m) {
ref = m->FindObject(reftype, refname_); ref = m->FindObject(reftype, refname_);
} }
// get objid from objtype and objname // check object
if (objtype != mjOBJ_UNKNOWN) { if (objtype != mjOBJ_UNKNOWN) {
// check for missing object name // check for missing object name
if (objname_.empty()) { if (objname_.empty()) {
@@ -6635,7 +6634,7 @@ void mjCSensor::ResolveReferences(const mjCModel* m) {
throw mjCError(this, "invalid type in sensor"); throw mjCError(this, "invalid type in sensor");
} }
// get refid from reftype and refname // check reference object
if (reftype != mjOBJ_UNKNOWN) { if (reftype != mjOBJ_UNKNOWN) {
// check for missing object name // check for missing object name
if (refname_.empty()) { if (refname_.empty()) {
@@ -6653,9 +6652,6 @@ void mjCSensor::ResolveReferences(const mjCModel* m) {
throw mjCError(this, throw mjCError(this,
"reference frame object must be (x)body, geom, site or camera in sensor"); "reference frame object must be (x)body, geom, site or camera in sensor");
} }
// get sensorized object id
refid = ref->id;
} }
spec_objname_ = objname_; spec_objname_ = objname_;
-2
View File
@@ -1764,8 +1764,6 @@ class mjCActuator : public mjCActuator_, private mjsActuator {
class mjCSensor_ : public mjCBase { class mjCSensor_ : public mjCBase {
protected: protected:
int refid; // id of reference frame
// variable-size data // variable-size data
std::string plugin_name; std::string plugin_name;
std::string plugin_instance_name; std::string plugin_instance_name;