Simulation

    PX4 supports both Software In the Loop (SITL) simulation, where the flight stack runs on computer (either the same computer or another computer on the same network) and Hardware In the Loop (HITL) simulation using a simulation firmware on a real flight controller board.

    Information about available simulators and how to set them up are provided in the next section. The other sections provide general information about how the simulator works, and are not required to use the simulators.

    The following simulators work with PX4 for HITL and/or SITL simulation.

    Instructions for how to setup and use the simulators are in the topics linked above. Below is a “somewhat generic” description of how the simulation infrastructure works. It is not required to use the simulators.

    All simulators communicate with PX4 using the Simulator MAVLink API. This API defines a set of MAVLink messages that supply sensor data from the simulated world to PX4 and return motor and actuator values from the flight code that will be applied to the simulated vehicle. The image below shows the message flow.

    The messages are described below (see links for specific detail).

    Message Direction Description
    NA Mode flag when using simulation. All motors/actuators are blocked, but internal software is fully operational.
    HIL_ACTUATOR_CONTROLS PX4 to Sim PX4 control outputs (to motors, actuators).
    Sim to PX4 Simulated IMU readings in SI units in NED body frame.
    HIL_GPS Sim to PX4 The simulated GPS RAW sensor value.
    Sim to PX4 Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical mouse sensor)
    HIL_STATE_QUATERNION Sim to PX4 Contains the actual “simulated” vehicle position, attitude, speed etc. This can be logged and compared to PX4’s estimates for analysis and debugging (for example, checking how well an estimator works for noisy (simulated) sensor inputs).
    Sim to PX4 The RAW values of the RC channels received.

    The diagram below shows a typical SITL simulation environment for any of the supported simulators. The different parts of the system connect via UDP, and can be on either the same computer or another computer on the same network.

    • PX4 uses a simulation-specific module to create a UDP link to the Simulator and exchange information using the Simulator MAVLink API described above. SITL and the Simulator can run on either the same computer or different computers on the same network.
    • PX4 uses the normal MAVLink module to set up UDP connections to QGroundControl and external APIs.
    • A serial connection is used to connect Joystick/Gamepad hardware via QGroundControl.
    • Only remote (server) ports are shown in the diagram. The client side port has to be set up and mapped to its associated remote port, but you don’t need to know what those ports are to use/connect the different components.

    仿真 - 图1

    If you use the normal build system SITL configuration targets (see next section) then both SITL and the Simulator will be launched on the same computer and the ports above will automatically be configured. You can configure additional MAVLink UDP connections and otherwise modify the simulation environment in the build configuration and initialisation files.

    The build system makes it very easy to build and start PX4 on SITL, launch a simulator, and connect them. For example, you can launch a SITL version of PX4 that uses the EKF2 estimator and simulate a plane in Gazebo with just the following command (provided all the build and gazebo dependencies are present!):

    1. make [CONFIGURATION_TARGET] [SIMULATOR]_[INIT_FILE]

    where:

    • CONFIGURATION_TARGET: has the format [OS]_[PLATFORM]_[FEATURE]
      • OS: posix, nuttx, qurt
      • PLATFORM: SITL (or in principle any platform supported among the different OS: bebop, eagle, excelsior, etc.)
      • FEATURE: A particular high level feature - for example which estimator to use (ekf2, lpe) or to run tests or simulate using a replay.
    • SIMULATOR: The simulator to launch and connect: gazebo, jmavsim, ?airsim
    • INIT_FILE: The specific init file to use for PX4 launch, within the associated configuration target This might define the start up for a particular vehicle, or allow simulation of multiple vehicles (we explain how to determine available init files in the next section).

    The settings for each configuration target are defined in appropriately named files in . Within each file there is a setting config_sitl_rcS_dir that defines the location of the folder where the configuration stores its init files.

    In the cmake config file for posix_sitl_ekf2 you can see that the init file will be stored in the folder: Firmware/posix-configs/SITL/init/ekf2/.

    1. set(config_sitl_rcS_dir
    2. posix-configs/SITL/init/ekf2
    3. )

    A slightly reduced version of the startup file for make posix_sitl_ekf2 gazebo_iris () is shown below.

    Note the sections that set parameters, start simulator drivers, and other modules, and that set up MAVLink ports (mavlink start) and streaming of messages (mavlink stream) to the QGroundControl UDP port.

    1. param load
    2. dataman start
    3. param set BAT_N_CELLS 3
    4. param set CAL_ACC0_ID 1376264
    5. param set CAL_ACC0_XOFF 0.01
    6. ...
    7. param set SYS_MC_EST_GROUP 2
    8. param set SYS_RESTART_TYPE 2
    9. replay tryapplyparams
    10. simulator start -s
    11. tone_alarm start
    12. gyrosim start
    13. accelsim start
    14. barosim start
    15. adcsim start
    16. gpssim start
    17. pwm_out_sim mode_pwm
    18. sensors start
    19. commander start
    20. land_detector start multicopter
    21. navigator start
    22. mc_att_control start
    23. mixer load /dev/pwm_output0 ROMFS/px4fmu_common/mixers/quad_dc.main.mix
    24. mavlink start -u 14556 -r 4000000
    25. mavlink start -u 14557 -r 4000000 -m onboard -o 14540
    26. mavlink stream -r 50 -s POSITION_TARGET_LOCAL_NED -u 14556
    27. mavlink stream -r 50 -s LOCAL_POSITION_NED -u 14556
    28. mavlink stream -r 50 -s GLOBAL_POSITION_INT -u 14556
    29. mavlink stream -r 50 -s ATTITUDE -u 14556
    30. mavlink stream -r 50 -s ATTITUDE_QUATERNION -u 14556
    31. mavlink stream -r 50 -s ATTITUDE_TARGET -u 14556
    32. mavlink stream -r 50 -s SERVO_OUTPUT_RAW_0 -u 14556
    33. mavlink stream -r 20 -s RC_CHANNELS -u 14556
    34. mavlink stream -r 250 -s HIGHRES_IMU -u 14556
    35. mavlink stream -r 10 -s OPTICAL_FLOW_RAD -u 14556
    36. logger start -e -t
    37. mavlink boot_complete
    38. replay trystart

    With Hardware-in-the-Loop (HITL) simulation the normal PX firmware is run on real hardware. QGroundControl is connected to the physical hardware over USB and acts as a gateway to forward data between the simulator, PX4 and any offboard API.

    The diagram below shows a typical HITL simulation environment:

    • A HITL configuration is selected (via QGroundControl) that doesn’t start any real sensors.
    • QGroundControl is connected to the flight controller via the USB.
    • QGroundControl is connected to the simulator and offboard API via UDP.
    • A serial connection is used to connect Joystick/Gamepad hardware via QGroundControl.

    For setup information see the QGroundControl User Guide: