I have started to add functions to MinimOsd code.

At first i did it for myself only. Added many functions i thought i need. Then opened this thread.

after a while, Pedro and later Miguel came, and things started to happen fast. :D

They have optimised the code and added even more things to it.

They have worked hard on CT, and it became a great tool!

Thank you Bough! :)

By now MinimOSD-Extra got a pretty advanced OSD.

Here it is in action:


- Changeable unit measurement (US, metric)

- Airspeed

- Home alt

- Battery Percent

- Battery used mah

- Current Draw

- Time From Startup (cleared at takeoff to show exact flight time)

- OSD Menu

- Variometer

- Wind horizontal speed and direction, and also the average wind speed of the last few minutes. 

- OSD on/off

- Switchable secound screen

- WP distance

- WP heading

- Crosstrack error

- Warning messages for Lost GPS fix, Stall, Overspeed, battery volt, battery Percent, RSSI

- Efficiency, glide distance & thermic notifier. 3 in one panel

- OSD Brightness

- HAM Call Sign

- After flight summary

- Trip distance

- Temperature

- Smoothened horizon

- Real heading


- Vertical speed

This functions can be turned on and off, and placed on different screens now, by the Config. tool.

Also RSSI, switching mode and channel and unit measurement, Stall speed warning, Overspeed warning, Battery warning volt, Battery percent warning, RSSI warning,  can be set in new Config Tool.

We built in a new way of setting video standards. Now OSD does not guessing anymore :). You can set it fixed from CT. It is in "Video Mode" menu.

Here is how it looks: (This video is a bit outdated, sorry. I will make a new one soon.)

The MinimOSD-Extra project is here: Link

This project is the developing version of the official Arducam OSD located here: Link

The latest stable version is: 2.2

The latest version can be downloaded from here: MinimOSD-Extra R800

Username: MinimOSD_Extra

Password: Top_Secret

CT is included. (The FW for Plane, Copter, Character upload and the character file is in the "FW & Char" directory inside CT directory)

We are sharing it to see videos you make using it! :)


Views: 281369

Reply to This

Replies to This Discussion

Well, it is possible.

Can you send me pictures?

I would like to take a look.


Hi Miguel,

I think it does not need to be pixel precise position, although it could be better, just rought way where to go displayed radar way could be useful or nice.



Hi Pavel,

What do you think would be a good range for the radar?

What heading should it point (north, curren heading...)?

I will add it to my "wish list" ;)

First I need to improve the code memory usage to fit new features.



If I may.. :) I have a radar on Suppo OSD, it scales it's range accordingly, so as you fly out, so will it increase the range and visa versa. North is up. Sample: https://www.youtube.com/watch?v=JKFPVagEaLI

I see no radar like function on the vid.

But as Miguel say, as it is not a graphical osd, and has really small memory, we are not planning cosmetic upgrades.

It already has a waypoint panel showing your distance from next waypoint, waypoint number, an arrow showing the direction to the waypoint, and allso Crosstrack error showing if you are off your predefined vector.

Also there is another problem, and i think this one is a serious one;

APM only sends navigation data trough mavlink while in auto modes.


Hi Gábor

Have a look at the little caret symbol in the center area of the screen - that's the "radar" - i.e. where you plane is relative to you facing north.

However I also agree it's not a priority for me.


Got it! :)

Well that is not that hard to make... But the space....

Ok, i will talk it over with Miguel.


Hi Hein,

Thanks for your sample.

If we use "character resolution" as in your video, it will be much lighter than what I thought :)



Hi Miguel, glad to be of help, maybe one can merge it with the artificial horizon to overcome Gabor's concern? Can you rotate individual characters?

Hi Hein,

"Hi Miguel, glad to be of help"

It's your feedback and tips that make the development worthwhile. They are much appreciated! :)


"maybe one can merge it with the artificial horizon to overcome Gabor's concern?"

One way of doing this is to merge them. The downside of doing so is that you won't be able to use them separately. But, I have some ideas ;) Have to think a little bit more about it.


"Can you rotate individual characters?"

Man! I wish I could. Unfortunatly if we want to "rotate", we have to use another character from the charset.




reading the discussion about radar, I found it a good idea and coded a little yesterday.

The GPS data in the test video is only simulated, because currently I have no time to fly.

The quad comes out of the middle at about 00:09:

If you like a plane icon more, you can change the icon in the mcm file.
We could also code that the quad or plane is shown with different heading directions, but for that we had less chars free in the mcm file (when using the artificial horizon with the better resolution).
But I will take another look for 8 free chars.

The used grid for the radar is currently configured to 14x9 chars, but this is changeable easily by defines.

And there is an auto scaling, currently set to 250m, which is also changeable easily by defines.

If you like, the code is at the same place where my artificial horizon with the better resolution is located.

The code is as follows:

// Panel  : panUAVPosition
// Needs  : X, Y locations of center
// Needs  : globals: osd_home_lat, osd_lat, osd_home_lon, osd_lon
// Output : shows the UAV position in a radar like style
// Status : do flight test

#define    STEP_WIDTH    250            // every STEP_WIDTH in [m] it is down-scaled
#define    SCALE_X        ( 7.0 / STEP_WIDTH)    // SCALE_X * 2 chars grid in which the uav is drawed
#define    SCALE_Y        ( 4.5 / STEP_WIDTH)    // SCALE_Y * 2 chars grid in which the uav is drawed

void panUAVPosition(int center_col, int center_line) {
    static int last_x = 0;
    static int last_y = 0;
    // distances from home in lat (y) and lon (x) direction in [m]
    int dy = (int)(111319.5 * (osd_home_lat - osd_lat));
    int dx = (int)(111319.5 * (osd_home_lon - osd_lon) * cos(fabs(osd_home_lat) * 0.0174532925));
    // display offset in y and x direction
    int y = (int)(dy / (((int)(abs(dy) / STEP_WIDTH) + 1) / SCALE_Y));
    int x = (int)(dx / (((int)(abs(dx) / STEP_WIDTH) + 1) / SCALE_X));
    // clear UAV
    osd.openSingle(center_col - last_x, center_line + last_y);
    osd.printf_P(PSTR(" "));
    last_x = x;
    last_y = y;
    // print UAV
    osd.openSingle(center_col - x, center_line + y);
    // print home
    osd.setPanel(center_col, center_line);

Have fun, bye

Hi Jörg,

Thank you for sharing the code.

There is something I can't understand. 250m is onr char resolution right?

Imagine UAV is 1000000m (1000Km) from home in latitude:

int y = (int)(dy / (((int)(abs(dy) / STEP_WIDTH) + 1) / SCALE_Y));

 int y = (int)(1000000 / (((int)(abs(1000000) / 250) + 1) / (4.5 / 250)));

In my calculator it is equal to 4

4 shouldn't stand for 4 x 250 = 1000m ?


My approach:

#define MAX_RANGE                      250

#define NUMBER_OF_ROWS        14




void panUAVPosition(int center_col, int center_line) {

int posRow = (osd_lat - osd_home_lat) * 111319.5 * converth / MAX_RANGE * NUMBER_OF_ROWS / 2;

int posCol = (osd_lon - osd_home_lon) * 111319.5 * converth / MAX_RANGE * NUMBER_OF_COLUMNS / 2;


//Deal with extrems









// print UAV

osd.openSingle(center_col + posCol, center_line + posRow);





Reply to Discussion


© 2017   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service