Physics/friction settings for 4-wheel differential drive?

I’m trying to simulate a 4-wheel differential drive.

It can spin in place just fine and move forward/backward in a straight line.

However, combining the two - moving forward while turning - has proved to be challenging. The robot turns very little when the “yaw” is set to something like 90 degrees / second.

I’ve reproduced the problem with both the “jackal” and “limo” 4-wheel robots.

This issue is similar to Using IsaacGym to simulate differential drive of a four-wheel robot . I’m using the same basic formula to calculate the needed angular velocities for the wheels based on “forward speed” and “yaw speed”:

left_wheel_angular_vel = (desired_linear_vel - 0.5 * wheel_base * desired_turning_vel_radians_per_sec) / wheel_radius

right_wheel_angular_vel = (desired_linear_vel + 0.5 * wheel_base * desired_turning_vel_radians_per_sec) / wheel_radius

I’ve tried tweaking the physics material’s dynamic and static friction value for the wheels to no avail.

Any ideas on where the problem lies?

Hi, Your code looks correct. If turning is insufficient, it is not caused by the kinematics.

Common Causes for Poor Turning

  • Wheel Friction/Slip Settings: If the wheel friction is too high (very “sticky” tires), or too low (very “slippery” tires), the robot may struggle to achieve the desired rotational velocity, especially for high yaw rates.
  • Physics Time Step: Large time steps or low solver iterations can cause inaccurate dynamics, especially at high accelerations or rotations.
  • Actuator Limits: The maximum torque or speed configured for your wheel actuators may prevent reaching desired angular velocities. Double-check limits in your configuration or USD file.
  • Controller Latency/Bandwidth: A slow update rate or significant controller lag (between sending the command and the wheel responding) can cause sluggish response, making high yaw difficult to track.
  • Mass Distribution or Center of Mass: If your robot’s center of mass is not near the wheel axis, or if the robot is very heavy compared to its motor power, this could cause poor turning.

Steps to Diagnose and Fix

  1. Check Friction Settings: Set up realistic values for dynamic/static friction on your wheel materials and floor surface (e.g., static 0.8~1.0, dynamic 0.7~0.9 for rubber on concrete).
  2. Check Wheel Joint Drive Strength: Ensure the “drive strength” and “damping” of the wheel joints are high enough for rapid response, but not over-damped or under-powered.
  3. Increase Physics Quality: Ensure your physics solver is set for a small enough time step (e.g., 60~120Hz) and sufficient solver iterations for joint and contact constraints.
  4. Log Wheel Speeds: Print the simulated wheel angular velocities (not just commanded). Do they match your expectations? If they’re lower, it’s likely actuator limit or physics constraint.
  5. Try a Lower Yaw Rate: Test with a lower turning rate and see if the robot’s response is better. If so, the issue is likely actuator torque or solver timestep.