Relays on Navigator

Autopilot Relay Setup

  1. In BlueOS, configure a relay pin in the autopilot parameters by

    1. setting RELAY1_FUNCTION to Relay (1)
    2. setting SERVO4_FUNCTION to GPIO (-1)
    3. rebooting the autopilot
      • required if the relay function was previously set to None, so it can load the relevant configuration options
    4. setting RELAY1_PIN to 4
      • must match the SERVOn_FUNCTION n value


Basic Relay ON/OFF Control

  1. Go to Settings / Actions and set up two separate custom MAVLink message Actions, for on and off MAV_CMD_DO_SET_RELAY commands (using the COMMAND_LONG message type)

    • Relays in MAVLink are 0-indexed, so Relay 1 is controlled by 0 in parameter 1
    • The desired state is in parameter 2, and should be 0 for off, and 1 for on


  2. Test the Actions

    • You can press the play buttons in the Actions menu
    • It may be helpful to set up a plotter widget, with SERVO_OUTPUT_RAW/servo4_raw (or whichever pin you’re using) to see the relay state in real time, especially if you don’t have hardware connected to it
    • If the Actions aren’t working as expected, you may need to edit them to make sure the parameters are set correctly

  3. Connect the Actions to your interface(s) of choice

Relay Toggle Control

  1. Go to Tools / Data-Lake via the sidebar menu, and create a new compound variable (top right, “Add compound variable”) to invert the reported pin output

    • 0 and 1 can be inverted with an exclusive-OR (xor: ^) operation with 1
    • MAVLink commands only accept numerical values, so we need the Number type (not boolean)

  2. Create a new DO_SET_RELAY custom MAVLink Action (like in the ON/OFF Control section), but this time set parameter 2 using the new compound variable, so it always inverts the currently reported value

  3. Test the Action, and connect it to interfaces as detailed above.

Momentary Relay Control

:light_bulb: Momentary control is currently only possible with joystick buttons, not on-screen ones.

  1. Go to Tools / Data-Lake and add a new variable, to represent the joystick button state

    • Buttons are boolean
    • Set the initial value to 0, because buttons normally start un-pressed

  2. Go to Settings / Actions and create a new custom MAVLink Action, using your variable as the output value

  3. Add a link to the Action, so it triggers automatically when the variable value changes


  4. Go to Settings / Joystick and connect a joystick button to control your data-lake variable

  5. Confirm the functionality is working as expected

Momentary PWM toggling

  1. In BlueOS, configure the relevant SERVOn_FUNCTION to Disabled (0), so it can be used for custom functionality

    • I’ll assume this was done with n=5 (for controlling pin 5)
  2. In Cockpit, go to Tools / Data-Lake and add a new variable, to represent the joystick button state

  3. Now add a compound variable, to convert the joystick button state to the desired PWM values

  4. Copy (or remember) the variable ID
    Screenshot 2025-08-07 at 11.26.02 pm

  5. Go to Settings / Actions and add a custom MAVLink message action, using the MAV_CMD_DO_SET_SERVO command

    • Specify the output channel you want to control (e.g. 5 for pin 5)
    • Use the compound variable for the commanded value

  6. Set up an automated trigger for the Action when the variable changes value

  7. Go to Settings / Joystick and map a button function to control the base variable

  8. Close the joystick configurator, and test to make sure the functionality works as intended

    • It may help to set up a plotter widget, with SERVO_OUTPUT_RAW/servo5_raw (or whichever pin you’re using) to see the PWM state in real time, especially if you don’t have hardware connected to it