How to implement realistic low-level motor dynamics (voltage-current-torque) in Isaac Sim?

Note: For any Isaac Lab topics, please submit your topic to its GitHub repo ( GitHub - isaac-sim/IsaacLab: Unified framework for robot learning built on NVIDIA Isaac Sim ) following the instructions provided on Isaac Lab’s Contributing Guidelines ( Contribution Guidelines — Isaac Lab Documentation ).

Please provide all relevant details below before submitting your post. This will help the community provide more accurate and timely assistance. After submitting, you can check the appropriate boxes. Remember, you can always edit your post later to include additional information if needed.

Isaac Sim Version

5.1.0

Operating System

Ubuntu 22.04

GPU Information

  • Model: RTX 5060 8GB
  • Driver Version: 580.95.05

Topic Description

Implementing realistic low-level actuator dynamics (full motor electrical + mechanical modeling)

Detailed Description

I am trying to implement realistic low-level actuator dynamics for a robotic manipulator in Isaac Sim, not just simple position, velocity, or torque command control. What I need is the ability to model the full electrical and mechanical behavior of a motor, including voltage-to-current dynamics, inductance, resistance, back-EMF, current saturation, nonlinear friction, damping, inertia changes due to robot configuration or payload variation, and disturbances. My ultimate goal is to compute motor-level commands (such as voltage or current) externally and have Isaac Sim generate the resulting torque through a physically realistic actuator model rather than applying idealized joint torques directly. I would also like to introduce model mismatch, noise, friction variations, and other disturbances to test robust low-level controllers.

If direct replacement of the actuator model is not supported, I would appreciate guidance on recommended approaches—such as inserting a custom callback into the articulation step, overriding joint drive behavior through an extension, or implementing a hybrid architecture where Isaac Sim computes rigid-body dynamics while a custom controller computes torques. Additionally, I am curious how researchers typically handle this kind of low-level motor simulation: whether they combine Isaac Sim with another simulator, run an external physics/motor model in parallel, or use a co-simulation setup to achieve realistic actuator behavior. Any suggestions or examples for integrating custom electrical motor dynamics into Isaac Sim—or alternative workflows commonly used in the community—would be extremely helpful.

For reference, my current setup is running on Ubuntu 22.04 with ROS2 Humble and Isaac Sim 5.1.0, using the ROS–Isaac bridge for joint command streaming. The robot model is imported as a USD articulation, and I am publishing effort commands from an external ROS2 node. PhysX is running with default settings (timestep, solver iterations, and joint drive parameters), and no custom extensions or physics overrides have been applied yet. If any of these factors influence the feasibility or recommended method for implementing low-level actuator dynamics, I would appreciate related guidance as well.

Steps to Reproduce

  1. Import manipulator as a USD articulation

  2. Connect ROS2 bridge and publish effort commands

  3. Attempt to override joint dynamics with custom actuator logic

  4. Observe that Isaac Sim still applies idealized drive-based torque behavior

(Add more steps as needed)

Error Messages

(If applicable, copy and paste any error messages you received)

Screenshots or Videos

(If applicable, add screenshots or links to videos that demonstrate the issue)

Additional Information

What I’ve Tried

  1. Publishing effort commands directly through ROS2
  2. Disabling position/velocity joint drives
  3. Exploring articulation controller graphs
  4. Searching for any way to override internal actuator behavior
  5. Reviewing PhysX documentation for custom drive functions
  6. Testing custom torque injection through extensions

Related Issues

(If you’re aware of any related issues or forum posts, please link them here)

Additional Context

  1. Running Isaac Sim in physics simulation mode with default PhysX parameters
  2. Using UR5-like robot model imported from USD
  3. Goal is to simulate realistic motor-level physics, not ideal torque control

(Add any other context about the problem here)

Hi, Isaac Sim supports physics callbacks that let you run custom Python code every simulation step. This allows you to:

  • Read existing joint states (position, velocity, etc.)
  • Compute physical effects (e.g., electrical and mechanical equations)
  • Apply custom torques or forces based on your actuator model.

An Example Workflow:

  • Disable standard Cartesian or torque controllers for the robot.
  • Set joint drive mode to “acceleration/force”(enables direct torque/force application).
  • Register a physics callback Python function that:
    • Reads commanded voltages/currents,
    • Simulates electrical and mechanical dynamics (e.g., including motor resistance, back-EMF, inertia, friction),
    • Computes torque based on these dynamics,
    • Applies the resulting torque to the joint.

Thank you for your answer

it helped me a lot