# AP_Scripting

## Enabling Scripting Support in Builds

To enable scripting the `--enable-scripting` flag must be passed to waf.
The following example enables scripting and builds the ArduPlane firmware for the Cube.

```
$ waf configure --enable-scripting --board=CubeBlack

$ waf plane
```

To run SITL you can simply use the `sim_vehicle.py` script which will wrap the configuration, compilation,
and launching of the simulation into one command for you.


```
$ Tools/autotest/sim_vehicle.py --waf-configure-arg --enable-scripting -v ArduPlane
```

## Adding Scripts

The vehicle will automatically look for and launch any scripts that are contained in the `scripts` folder when it starts.
On real hardware this should be inside of the `APM` folder of the SD card. In SITL this should be in the working directory (typically the main `ardupilot` directory).

An example script is given below:

```lua
function update () -- periodic function that will be called
  distance = ahrs:position():distance(ahrs:home()) -- calculate the distance from home
  if distance > 1000 then -- if more then 1000 meters away
    distance = 1000;      -- clamp the distance to 1000 meters
  end
  servo.set_output_pwm(96, 1000 + distance) -- set the servo assigned function 96 (scripting3) to a proportional value

  return update, 1000 -- request to be rerun again 1000 milliseconds (1 second) from now
end

return update, 0 -- immediately run the update function
```