Cartesian end-effector control using site transmission.
- Added `refsite` attribute to actuators with `site` transmission. - Such actuators now have a well defined length and can be used for e.g., Cartesian end-effector control. - Added example models and documentation describing the new feature. PiperOrigin-RevId: 471561218 Change-Id: I538f09af9600d5c53992c4a9fed325648aab4fa3
This commit is contained in:
committed by
Copybara-Service
parent
834e8dd506
commit
46da1285af
@@ -3358,6 +3358,7 @@ mjCActuator::mjCActuator(mjCModel* _model, mjCDef* _def) {
|
||||
cranklength = 0;
|
||||
target.clear();
|
||||
slidersite.clear();
|
||||
refsite.clear();
|
||||
userdata.clear();
|
||||
|
||||
// clear private variables
|
||||
@@ -3499,7 +3500,16 @@ void mjCActuator::Compile(void) {
|
||||
break;
|
||||
|
||||
case mjTRN_SITE:
|
||||
// get site
|
||||
// get refsite, copy into trnid[1]
|
||||
if (!refsite.empty()) {
|
||||
ptarget = model->FindObject(mjOBJ_SITE, refsite);
|
||||
if (!ptarget) {
|
||||
throw mjCError(this, "reference site '%s' not found for actuator %d", refsite.c_str(), id);
|
||||
}
|
||||
trnid[1] = ptarget->id;
|
||||
}
|
||||
|
||||
// proceed with regular site target
|
||||
ptarget = model->FindObject(mjOBJ_SITE, target);
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user