Relays on Navigator

Autopilot Relay Setup

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

    1. setting RELAY1_FUNCTION to Relay
    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
      • There is a known bug that can mean they don’t get configured correctly when first created

  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
4 Likes