Allow plugin actuators to have activation state.
Accept new attributes on the plugin/actuator tag: - dyntype - dynprm - actlimited - actrange - actearly This addresses some of the requests in #1098. PiperOrigin-RevId: 584866281 Change-Id: I4f7559e446888216093efba4ced9119cfc0528a4
This commit is contained in:
committed by
Copybara-Service
parent
20eeb75086
commit
f2025c6abf
+18
-11
@@ -944,13 +944,9 @@ void mjCModel::SetSizes(void) {
|
||||
}
|
||||
|
||||
// nu, na
|
||||
for (int i=0; i<(int)actuators.size(); i++) {
|
||||
if (actuators[i]->dyntype == mjDYN_NONE) {
|
||||
nu++;
|
||||
} else {
|
||||
nu++;
|
||||
na += actuators[i]->actdim;
|
||||
}
|
||||
for (int i=0; i<actuators.size(); i++) {
|
||||
nu++;
|
||||
na += actuators[i]->actdim + actuators[i]->plugin_actdim;
|
||||
}
|
||||
|
||||
// nbvh, nbvhstatic, nbvhdynamic
|
||||
@@ -1811,6 +1807,7 @@ void mjCModel::CopyObjects(mjModel* m) {
|
||||
m->nconmax = nconmax;
|
||||
m->nsensordata = nsensordata;
|
||||
m->nuserdata = nuserdata;
|
||||
m->na = na;
|
||||
|
||||
// find bvh_adr after bodies
|
||||
bvh_adr = 0;
|
||||
@@ -2205,9 +2202,9 @@ void mjCModel::CopyObjects(mjModel* m) {
|
||||
m->actuator_biastype[i] = pac->biastype;
|
||||
m->actuator_trnid[2*i] = pac->trnid[0];
|
||||
m->actuator_trnid[2*i+1] = pac->trnid[1];
|
||||
m->actuator_actadr[i] = pac->dyntype == mjDYN_NONE ? -1 : adr;
|
||||
adr += pac->actdim;
|
||||
m->actuator_actnum[i] = pac->actdim;
|
||||
m->actuator_actnum[i] = pac->actdim + pac->plugin_actdim;
|
||||
m->actuator_actadr[i] = m->actuator_actnum[i] ? adr : -1;
|
||||
adr += m->actuator_actnum[i];
|
||||
m->actuator_group[i] = pac->group;
|
||||
m->actuator_ctrllimited[i] = pac->ctrllimited;
|
||||
m->actuator_forcelimited[i] = pac->forcelimited;
|
||||
@@ -2982,9 +2979,12 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) {
|
||||
// query and set plugin-related information
|
||||
{
|
||||
// set actuator_plugin to the plugin instance ID
|
||||
std::vector<std::vector<int>> plugin_to_actuators(nplugin);
|
||||
for (int i = 0; i < nu; ++i) {
|
||||
if (actuators[i]->is_plugin) {
|
||||
m->actuator_plugin[i] = actuators[i]->plugin_instance->id;
|
||||
int actuator_plugin = actuators[i]->plugin_instance->id;
|
||||
m->actuator_plugin[i] = actuator_plugin;
|
||||
plugin_to_actuators[actuator_plugin].push_back(i);
|
||||
} else {
|
||||
m->actuator_plugin[i] = -1;
|
||||
}
|
||||
@@ -3041,6 +3041,13 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) {
|
||||
this->nsensordata += nsensordata;
|
||||
}
|
||||
}
|
||||
if ((plugin->capabilityflags & mjPLUGIN_ACTUATOR) && plugin->actuator_actdim) {
|
||||
for (int actuator_id : plugin_to_actuators[i]) {
|
||||
int plugin_actdim = plugin->actuator_actdim(m, i, actuator_id);
|
||||
actuators[actuator_id]->plugin_actdim = plugin_actdim;
|
||||
this->na += plugin_actdim;
|
||||
}
|
||||
}
|
||||
}
|
||||
m->npluginstate = stateadr;
|
||||
}
|
||||
|
||||
@@ -3775,6 +3775,7 @@ mjCActuator::mjCActuator(mjCModel* _model, mjCDef* _def) {
|
||||
forcelimited = 2;
|
||||
actlimited = 2;
|
||||
actdim = -1;
|
||||
plugin_actdim = 0;
|
||||
trntype = mjTRN_UNDEFINED;
|
||||
dyntype = mjDYN_NONE;
|
||||
gaintype = mjGAIN_FIXED;
|
||||
|
||||
@@ -1099,6 +1099,7 @@ class mjCActuator : public mjCBase {
|
||||
int forcelimited; // are force limits defined: 0 false, 1 true, 2 auto
|
||||
int actlimited; // are activation limits defined: 0 false, 1 true, 2 auto
|
||||
int actdim; // dimension of associated activations
|
||||
int plugin_actdim; // actuator state size for plugins
|
||||
mjtDyn dyntype; // dynamics type
|
||||
mjtTrn trntype; // transmission type
|
||||
mjtGain gaintype; // gain type
|
||||
|
||||
Reference in New Issue
Block a user