Custom vtol cannot takeoff (PX4 SITL with gazebo sim)

Hello everyone,

I’m running a PX4 SITL simulation and have hit a roadblock—hoping to get some advice.

Issue: My custom VTOL cannot generate enough thrust to take off.

I added the gz-sim-multicopter-motor-model-system plugin to my SDF file and calculated all constants and coefficients based on an MIT paper. In Gazebo SIM, the props spin, but no matter how much I increase throttle, the vehicle never gains altitude. I’ve concluded it simply isn’t producing enough thrust, but I can’t find a fix.

The total mass of all links is about 2.1 kg, which is even lighter than our real prototype. Hand-calculations using the plugin’s values also indicate that thrust should be sufficient.

I have tried every likely workaround, but it still won’t lift off:

  1. Set each rotor link’s <self_collide> to 0 in the SDF
  2. Added lift/drag plugins (they did nothing; now commented out)
  3. Tweaked the airframe in QGroundControl (there are no QGC parameters that directly change thrust)
  4. Calculated and injected inertial moments from the CATIA model
  5. Changed the SDF version to test plugin compatibility
  6. Added <velocity_decay/> (copied from the PX4 tiltrotor SDF; its effect is unclear)
  7. Expanded the joint limits between each rotor and the base link
  8. Set <rotorVelocitySlowdownSim> to 1 in the motor model plugin (still applied)
  9. Adjusted the mesh scale in each rotor’s <collision> tag (started at 0.001, now 0.01; no effect)
  10. Verified via gz topic that velocity commands are indeed being published
    +11. I checked the direction of the propellers, and they are properly set to generate lift.

I’m completely stumped at this point…

The only differences between the PX4 default tiltrotor SDF and mine are link structure, collision geometry, and scale. Below I’ve attached the three critical blocks from my SDF—(1) the plugin section, (2) the base‐link-to‐rotor joint, and (3) the rotor link definition.



Any insights or suggestions would be greatly appreciated. Thank you!

Maybe the model is glitched into the ground plane? As a quick test try spawning the vehicle at +0.5m in Z so that it drops into place.

I tried it, but there was no change. I even set the world’s gravity to 0 and removed the plane while gravity was 0, but it still doesn’t take off.
Based on aerodynamic knowledge, the conclusion is that there is no air in the world…

Thank you for your response!

Maybe @Jaeyoung-Lim or @ryanjAA have some ideas

The only differences between the PX4 default tiltrotor SDF and mine are link structure, collision geometry, and scale.

These seem pretty important details that needs to be correct in order for the vehicle to fly. (Especially scale).

I would suggest that you “start” from the vtol tiltrotor example and work your way backwards to get your model elements working.