Defer sensor reference id resolution from sensor compiler to model compiler
PiperOrigin-RevId: 780070082 Change-Id: I7166f589f15bb0cd14b92e213d7a9f2a3bbad4e4
This commit is contained in:
committed by
Copybara-Service
parent
1742ba510c
commit
6ccc4f77bc
@@ -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;
|
||||||
|
|||||||
@@ -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_;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user