Move a Servo¶
This page explains how MAVLink can be used by a ground station or companion computer to move a servo. The user wiki pages for servos is here.
Set the Servo position with MAV_CMD_DO_SET_SERVO¶
The servo’s position can be set by sending a COMMAND_LONG with the command, param1 and param2 fields set as specified for the MAV_CMD_DO_SET_SERVO command.
Command Field | Type | Description |
---|---|---|
target_system | uint8_t | System ID of flight controller or just 0 |
target_component | uint8_t | Component ID of flight controller or just 0 |
command | uint16_t | MAV_CMD_DO_SET_SERVO=183 |
confirmation | uint8_t | 0 |
param1 | float | Servo instance number |
param2 | float | PWM (normally between 1000 and 2000) |
param3 | float | not used |
param4 | float | not used |
param5 | float | not used |
param6 | float | not used |
param7 | float | not used |
Note
“ServoRelayEvent: Channel x is already in use” will be displayed if you try to move a servo that is configured for use as a control surface or for some other feature. Check the SERVOx_FUNCTION parameter value and ensure it is 0 (“Disabled”), 1 (“RCPassThru”), 22 (“SprayerPump”), 23 (“SprayerSpinner”), or between 51 (“RCIN1”) and 66 (“RCIN16”)
Example
The example commands below can be copy-pasted into MAVProxy (aka SITL) to test this command. Before running these commands enter:
module load message
module load graph
graph SERVO_OUTPUT_RAW.servo8_raw
Example MAVProxy/SITL Command |
Description |
---|---|
|
Move servo output 8 to 1200 |
Cycle the Servo position with MAV_CMD_DO_REPEAT_SERVO¶
The servo’s position can be set to cycle (i.e. toggle) between a PWM value and SERVOx_TRIM by sending a COMMAND_LONG with fields set as specified for the MAV_CMD_DO_REPEAT_SERVO command.
Command Field | Type | Description |
---|---|---|
target_system | uint8_t | System ID of flight controller or just 0 |
target_component | uint8_t | Component ID of flight controller or just 0 |
command | uint16_t | MAV_CMD_DO_REPEAT_SERVO=184 |
confirmation | uint8_t | 0 |
param1 | float | Servo instance number |
param2 | float | PWM (normally between 1000 and 2000) |
param3 | float | Cycle count |
param4 | float | Cycle time (in milliseconds) |
param5 | float | not used |
param6 | float | not used |
param7 | float | not used |
The example commands below can be copy-pasted into MAVProxy (aka SITL) to test this command. Before running these commands enter:
module load message
module load graph
graph SERVO_OUTPUT_RAW.servo8_raw
Example MAVProxy/SITL Command |
Description |
---|---|
|
Cycle servo output 8 between 1200 and 1500 3 times at 1hz |