Ardupilot control using OSD menus


I would like to fly with live video and goggles, but this makes it tough to make any changes on the mission 
planner. To avoid any need to take off the goggles I integrated a series of menus in the OSD.

My setup, as reported here, uses a second APM on the ground.It monitors the MAVLink data stream with an XBee, drives a Remzibi OSD on a second serial port, and supports an Ardustation display and keyboard as a terminal on a third serial port. To make the menu selection as simple as possible I added a quadrature encoder using three of the unused inputs on the Ardustation (nominally the analog inputs, but setup as digital). The A phase of the encoder drives an interrupt, and the resulting ISR examines the A and B phase states to determine which direction the encoder know is being turned. The encoder includes a switch (push the knob in) that is connected to the third input.

The first time the knob is pushed the top level menu is displayed on the top line of the OSD with four selections plus an "exit". Turn the knob to choose the menu item, then push to select. Each selection, in turn, has up to four available menu options. Choices are:
1. Symbology - select between four symbology formats
2. WP - read waypoints from the Ardupilot, set to first WP to restart the mission, next to skip a WP, or previous to move back one.
3. NAV - set Auto, RTL, and loiter modes (yes, easier  to use the transmitter control, but I wanted to try out more of the MAVLink commands)
4. Timer - start, stop, and reset a stopwatch timer on the OSD.

The menus are turned off automatically after five seconds of no input.

I find that that this is a fairly easy way to control the system, and it can easily be expanded to include other commands.

All of the symbology is driven with the Remzibi "$M" command strings that are a bit limited in available  characters -  seems just to be letters, digits, and a couple of others. I can't use the leading and trailing character options for the strings as they take up more space. I would have preferred using something other than "X" to indicate which menu item is being selected, but that was all I could come up with. Hopefully the minimosd will have a more complete set of command strings, or be open source to allow me to improve the presentation.

You can find a video showing the system in operation here. I was in HIL mode so no satellite count, and the GPS time clock has random data (relies on a mod to the GPS library).

Latest code can be found here. It links with the Arduplane 2.27 libraries from the repository.


E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • the minimosd puts epiosd out of the running
    there will be a lot of space to write cool firmware on this diydrones osd
    but the character matrix is pretty large :(
    I too want a vector or bitmap osd chip
    I know there are a load of Japanese composite osd chips even with high res but they appear only to be available in back up the truck quantity.
    perhaps the max chip is what we are stuck with.
    there must be a better one within reach through as the small commercial osds have decent resolution and can draw basic huds too.
    I can't find the menu video on my YouTube must have house cleaned too efficiently I will upload and link to it soon.
  • Thanks Justin. I agree that the scrolling would be the best approach - I was thinking about expanding beyond my five items (really four plus exit) by having the list scroll.  I just found your December posting, but the video doesn't seem to be available. Can you give me a link? I would like to see your approach.

    I didn't know about the (open source)  EPI OSD. I was getting excited for a moment, then I saw the price for the assembled unit. The parts, including the PCB, look reasonable enough, but I haven't done any SMD assembly. I think that I will wait for the minimosd!  What I would really like would be a true graphics OSD with vector draw commands, but it doesn't seem like there are any available, and I can't even find an equivalent to the 7456 that goes beyond characters.


  • Cool.. I did the same thing, except with custom firmware and Epi OSD

    I hope minimosd will have this feature.

    found that the best way to do menus is to take a leaf from the apple scroll wheel on an old ipod: you setup menu options in a list, and then roll through them using a spare or unimportant channel, making sure that the current option is highlighted by an invisible pointer that rolls through a much larger number range. (So you can stop the movement without overshooting).

    The most important option - manual mode - is the default option, so can be selected by hitting the select channel more than once (select .. (brings up menu) .. select (chooses first option - mode) .. select ( chooses first option - manual)). Then if you lose the OSD, you can still select manual. Or maybe RTH, whatever is most important to get to fast..

  • Cool :) very creative :)
This reply was deleted.