Simplify controlling models with PIDs #231
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
core.JointControlMode_position
is among the supported joint control modes we have implemented. Given a model, it can be enabled model-wise as follows:However, this was not enough. In order to insert the PIDs in the simulation, the user also had to add the
JointController
plugin to the model as follows:The main reason is that, similarly to custom controllers (#167), also the JointController is a plugin that runs in its own thread. This was done in this way to allow running Python code at a lower rate than the controller and the physics (by executing multiple iterations every
GazeboSimulator.run
).However, this plugin insertion is quite a low-level detail, and it requires the user to downcast the
scenario.bindings.core.Model
object to ascenario.bindings.gazebo.Model
. This PR loads the plugin automatically as soon as either Position or Velocity control modes are enabled to any of the model joints.