# 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.

TIP

This is the easiest way to simulate multiple vehicles running PX4. It is suitable for testing multi-vehicle support in QGroundControl (or the MAVSDK (opens new window), 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 sitl_multiple_run.sh, specifying the number of instances to start (e.g. 2):
    ./Tools/sitl_multiple_run.sh 2
    
  3. Start the first instance in the same terminal (this will run in the foreground):
    ./Tools/jmavsim_run.sh -l
    
  4. Open a new terminal for each subsequent instance, specifying the simulation TCP port for the instance:
    ./Tools/jmavsim_run.sh -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 instnaces (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 sitl_multiple_run.sh script starts a separate process for each vehicle. To restart the simulations after killing one of them, you must call sitl_multiple_run.sh again, and also restart each of the individual instances in their own terminals.

# Additional Resources

  • See Simulation for more information about the port configuration.