Skip to content

Multi-Vehicle Simulation with JMAVSim

This topic explains how to simulate multiple UAV (multicopter) vehicles using JMAVSim and SITL. All vehicle instances are started at the same position in the simulation.


This is the easiest way to simulate multiple vehicles running PX4. It is suitable for testing multi-vehicle support in QGroundControl (or the MAVSDK, etc.). Multi-Vehicle Simulation with Gazebo should be used for swarm simulations with many vehicles, or for testing features like computer vision that are only supported by Gazebo.

How to Start Multiple Instances

To start multiple instances (on separate ports):

  1. Build PX4

    make px4_sitl_default
  2. Run, specifying the number of instances to start (e.g. 2):

    ./Tools/ 2
  3. Start the first instance in the same terminal (this will run in the foreground):

    ./Tools/simulation/jmavsim/ -l
  4. Open a new terminal for each subsequent instance, specifying the simulation TCP port for the instance:

    ./Tools/simulation/jmavsim/ -p 4560 -l

    The port should be set to 4560+i where i iterates for each instance (from 0 to N-1)

QGroundControl should automatically connect to all the new vehicle instances (all GCS traffic is sent to PX4's remote UDP port: 14550 from all instances). The vehicle that is currently being controlled is displayed in the application to bar; you can select this vehicle text to display a selection list of all of the (simulated) connected vehicle instances (Vehicle 1, Vehicle 2, etc.) and choose a new vehicle to control.

Developer APIs such as MAVSDK or MAVROS can connect to individual instances by listening on sequentially allocated PX4 remote UDP ports from 14540 (first instance) to 14549. Additional instances all connect to port 14549.

Tip The script starts a separate process for each vehicle. To restart the simulations after killing one of them, you must call again, and also restart each of the individual instances in their own terminals.

Additional Resources

  • See Simulation for more information about the port configuration.