---
# System prepended metadata

title: PX4 sitl & Gazebo modeling guide
tags: [PX4]

---

# PX4 sitl & Gazebo modeling guide 
###### tags: `PX4`
## Install evironment
Follow the [instruction](https://docs.px4.io/master/en/dev_setup/dev_env_linux_ubuntu.html) to install px4 with gazebo . 
or you can simply do:
1. Download the px4 source code:
```bash=
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
```
2.Run the script:
```bash=
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh
```
### testing
After the installation, there should be a 'PX4-Autopilot' folder for px4 development. 
You can run terminal to test the installation.
Go to the folder:
```bash=
cd PX4-Autopilot
```
source setup:
```bash=
source Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
```
run simulation with [cmake](https://zh.wikipedia.org/wiki/CMake):
```bash=
make px4_sitl_default gazebo_iris
```
![](https://i.imgur.com/5vU7TbS.jpg)

## Add new model for gazebo
### step1
Models for gazebo are all in the ```PX4-Autopilot/Tools/sitl_gazebo/models``` folders. To add a new model, follow the [gazebo tutoriol](http://gazebosim.org/tutorials?cat=build_robot).
or simply modify the existed model folder.
![](https://i.imgur.com/mKyVHjc.png)

* Model config:
```xml=
<?xml version="1.0" ?>
<model>
    <name>Noah</name>             //model name
    <version>1.0</version>
    <sdf version="1.6">Noah.sdf</sdf>    //reference sdf (name should be the same as model)
    <author>
        <name></name>
        <email></email>
    </author>
    <description></description>
</model>
```
To easily modify models, try the gazebo model editor(remember to save the file):
![](https://i.imgur.com/m3Nz16i.png)
### step2
Add a world file for new model in PX4-Autopilot/Tools/sitl_gazebo/worlds folders and include new model.
![](https://i.imgur.com/HmvAiVX.png)

```xml=
<include>
      <uri>model://Noah</uri>
</include>
```

## Create new airframe for px4 sitl
1. Create [custom mixer file](https://dev.px4.io/v1.10_noredirect/en/airframes/adding_a_new_frame.html#mixer-file) under ROMFS/px4fmu_common/mixers-sitl folder.
![](https://i.imgur.com/emsTwXY.png)

2. add mixer file in ROMFS/px4fmu_common/mixers-sitl/CMakeList.txt.
```cmake=
px4_add_romfs_files(
	delta_wing_sitl.main.mix
	plane_sitl.main.mix
	over_sitl.main.mix
	standard_vtol_sitl.main.mix
	tiltrotor_sitl.main.mix
	Noah_sitl.main.mix
)
```
4. Create an [airframe file](https://dev.px4.io/v1.10_noredirect/en/airframes/adding_a_new_frame.html#config-file) under ROMFS/px4fmu_common/init.d-posix (Yet again, this can be based off the iris or solo airframe files), give it a number (for example 1043) and name it 1043_my_vehicle.
![](https://i.imgur.com/KOntVhg.png)
5. set the mixer file in airframe file.
```cmake=
set MIXER_FILE etc/mixers-sitl/Noah_sitl.main.mix
set MIXER custom
```
6. Add the airframe name (my_vehicle) to the file platforms/posix/cmake/sitl_target.cmake in the command set(models …
![](https://i.imgur.com/9DtmYNn.png)

## Run and test

Go to the folder:
```bash=
cd PX4-Autopilot
```
source setup:
```bash=
source Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
```
run simulation with [cmake](https://zh.wikipedia.org/wiki/CMake):
```bash=
make px4_sitl_default gazebo_Noah
```