2019-01-21 19:00:57 -04:00
# AP_Scripting
## Enabling Scripting Support in Builds
2019-06-17 19:24:06 -03:00
Scripting is automatically enabled on all boards with at least 1MB of flash space.
The following example enables scripting, builds the ArduPlane firmware for the Cube, and uploads it.
2019-01-21 19:00:57 -04:00
```
2019-06-17 19:24:06 -03:00
$ waf configure --board=CubeBlack
2019-01-21 19:00:57 -04:00
$ waf plane
2019-06-17 19:24:06 -03:00
$ waf plane --upload
2019-01-21 19:00:57 -04:00
```
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.
```
2019-06-17 19:24:06 -03:00
$ Tools/autotest/sim_vehicle.py -v ArduPlane
2019-01-21 19:00:57 -04:00
```
2019-06-17 19:24:06 -03:00
Once you have a vehicle flashed with scripting you need to set the `SCR_ENABLE` parameter to 1 to enable scripting and reboot.
2019-01-21 19:00:57 -04:00
## 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
2019-04-29 04:42:26 -03:00
current_pos = ahrs:get_position()
home = ahrs:get_home()
if current_pos and home then
distance = current_pos:get_distance(ahrs:get_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
2020-04-17 02:41:12 -03:00
SRV_Channels:set_output_pwm(96, 1000 + distance) -- set the servo assigned function 96 (scripting3) to a proportional value
2019-01-21 19:00:57 -04:00
end
return update, 1000 -- request to be rerun again 1000 milliseconds (1 second) from now
end
2019-04-29 04:42:26 -03:00
return update, 1000 -- request to be rerun again 1000 milliseconds (1 second) from now
2019-01-21 19:00:57 -04:00
```
2020-01-07 22:26:14 -04:00
## Working with bindings
2020-05-11 20:26:47 -03:00
Edit bindings.desc and rebuild. The waf build will automatically
re-run the code generator.