Refactor articulation actuator ownership - #6839
Draft
AntoineRichard wants to merge 20 commits into
Draft
Conversation
Add ActuatorCollection as the backend-neutral owner for actuator state and command APIs. Route legacy articulation target and gain setters through the collection with deprecation warnings. Move common articulation actuator-control forwarding into a shared helper and keep backend adapters focused on command submission, friction writes, and native actuator paths for PhysX, OVPhysX, and Newton. Add changelog fragments and focused ActuatorCollection tests.
Describe how Newton actuator authoring will reuse the shared asset cache to resolve remote neural-network checkpoints before PyTorch loads them.
Define the scoped implementation and real-task verification steps for cached remote actuator-network checkpoints.
Treat generated actuator plots as opaque image assets so Git and GitHub do not report their XML serialization as reviewable line churn. Mark them as generated so GitHub collapses the files by default.
Resolve actuator-network paths through the shared asset cache before PyTorch adds Newton metadata. This lets remote MLP and LSTM checkpoints load through the Newton actuator adapter.
Keep temporary workflow documents out of the Sphinx source tree so strict documentation builds do not report orphan warnings.
Separate actuator-model inputs from processed joint commands so the public API uses precise terminology across physics backends. Update the migration guide, tutorials, pipeline diagrams, and actuator parameter tool to match.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description
This PR gives actuator behavior one backend-neutral runtime owner:
ActuatorCollection. It is rebased ontodevelopafter the articulation-ordering work in #6784 merged.Previously, each backend articulation simultaneously owned simulated state, actuator groups, raw targets, processed targets, telemetry, gain resolution, actuator-model execution, joint-order conversion, and backend submission. That duplicated one control pipeline across PhysX, Newton, and OVPhysX and made the Newton-native actuator path difficult to integrate cleanly.
The refactor separates those responsibilities:
ActuatorCollectionowns actuator groups, input commands, processed joint commands, telemetry, resolved gains, and model lifecycle.ActuatorControldefines the narrow backend contract.PhysxActuatorControl,NewtonActuatorControl, andOvPhysxActuatorControlhandle only backend ordering, staging, native-actuator integration, property writes, and command submission.Articulationremains responsible for simulated joint/body state, topology, and lifecycle orchestration.Public API and terminology
The new API distinguishes the two sides of the actuator model:
All public arrays remain expressed on the simulated joint side and indexed in articulation public joint order. “Actuator command” names the receiving component; it does not imply motor-shaft indexing.
Existing articulation target/gain methods and
ArticulationDatacommand/torque properties remain available as deprecated forwarding aliases. This PR does not remove a previously released public API.Backend behavior
PhysxActuatorWrapper. Mixed implicit/explicit groups retain solver-drive commands where required.Neural actuator checkpoints
Newton MLP/LSTM actuator checkpoints are now resolved through Isaac Lab's shared
retrieve_file_path()cache before PyTorch loads and re-saves them with Newton metadata. This enables remote HTTP/Nucleus-style checkpoint paths without adding a dependency, while retaining support for local TorchScript and dictionary checkpoints.Documentation
actuators.command.tools/actuator_parameters.py.Dependencies
Type of change
Screenshots
The actuator documentation includes generated pipeline diagrams, parameter curves, and comparison clips for stiffness, damping, armature, friction, effort limit, velocity limit, delay, and implicit-versus-explicit behavior.
Validation
Command and backend equivalence
int64index writes, mask writes, processed-command submission, resolved gains, and actuator metadata.2e-3position,1e-2velocity, and1e-3computed/applied torque (with the corresponding relative tolerances defined by the suites).Training evidence
The long-form runs used PhysX physics, 4096 environments, RSL-RL, seed 42, and 500 learning iterations. “PhysX + Newton actuators” changes actuator execution, not the physics backend.
develop, regular PhysX actuatorsThe controlled Go2 pair reached comparable reward and episode length. Mean throughput was 2.1% lower in that single Newton-actuator run; this is “same ballpark” evidence, not a statistically rigorous performance claim. The other robot runs establish that their explicit actuator configurations complete meaningful training, not matched per-robot performance parity.
Post-rebase checks
./isaaclab.sh -p -m pytest source/isaaclab/test/actuators/test_actuator_collection.py source/isaaclab/test/assets/test_articulation_iface.py::TestArticulationDataAliases -k 'cpu or test_actuator_collection'— 32 passed, 24 deselected./isaaclab.sh -d— Sphinx warning-as-error build succeeded./isaaclab.sh -f— all repository-wide hooks passed./isaaclab.sh -p tools/actuator_parameters.py --list_parameters— completed successfullyOvPhysxActuatorControlGPU-dependent interface coverage could not be rerun in the final post-rebase environment because CUDA and OVPhysX were unavailable. This is separate from the successful GPU equivalence and training runs collected during development.
Checklist
pre-commitchecks with./isaaclab.sh --formatsource/<pkg>/changelog.d/for every touched packageCONTRIBUTORS.md