Being able to see what the autopilot is thinking in real time is a valuable tool for tuning autopilot behaviour. FPV is normally used for this but I can't use it on my aircraft. A good solution is to use minimOSD on the ground driving a video monitor. I have had a few flights with this and it works very nicely. minimOSD is amazing but still limited in what it can do.
The raspberry pi is very cheap, has a composite output and a good graphics accelerator. I need the composite video for the pirate eye monocle I use. Using a laptop and HDMI->composite converter is not reliable and very poor quality. To get a reasonable frame rate (~20fps) the openGL ES2 3d graphics capability of RPi needs enabling. The amazing pi3d python library was the obvious choice. It will also run on an x86 linux machine running x so development time is quick.
There has been a bit of optimising to get reasonable performance. The resulting python module is a functional proof of concept but it is a way from finished. At 20fps it consumes 70% of the processor time. That leaves plenty of capacity for drawing all of the status items and some capacity for drawing more 3d objects.
I do have my own plans to add to the raspiHUD. What would you put on the display? Proximity warnings with 3d position? Ground elevation map? Local weather conditions?
With some advanced fiddling RPi might be encouraged to put its camera output on the background, then it would become a proper (but large and heavy) in flight FPV HUD. I don't plan to do this myself.
More raspiHUD details and documentation available here (LINK FIXED)
The pirateeye monocle from paya technology. HUD flying without the need for a buddy.
ps. if anyone else thinks my hud design looks like it is smiling face then you are not alone.
Comments
Matt,
Sometimes the obvious things just will not come to mind, but this one just dawned on me... How about windspeed at the current altitude. Perfect to see what the wind is doing, maybe to see if it is time to call it a day (and save the plane in the process ;) ).
I will be adding this to my RPI python code soon.
Cheers,
Kees
@Bill, I agree about not doing draw every frame. That was the disaster that I tried first before going for openGL.
There is a style choice on how to create the graphics. SVG is nice but someone still needs to draw it. I decided to write the python code to draw vector stuff which is also parametric. For example, on the roll indicator the radius, teeth spacing and tooth length are parameters the user can modify to taste.
The code draws the parametric shapes to an off screen texture. The texture is then attached to a Sprite (giving it position in 3d space). The sprite/texture combination is drawn onto a layer which is also an off screen texture. Different layers get their content redrawn at different intervals. All layers are drawn to the main screen on every frame. The result is a minimum number of shape draws per screen frame.
I did look at Qt5. People have added opengl support but it looked messy and I was not convinced by following any of them. pi3d is getting great support, installs easily and has proven performance. Qt might have the edge in terms of performance but that is no good if it doesn't run on RPi
@GliderUAV
All those items are possible or already in progress. It is quite quick to add new things but it is not nicely organised yet. Configuration files is one thing I need to figure out. Ideally the HUD module has no hard configuration coding and everything is flexible.
I do like the idea of a flight timer including a total motor runtime. It should be easy to do a flight timer based on minimum airspeed.
@Alain,
Since the RPi is running linux it can run mavproy and mavproxy modules. This is much more powerful than the ardustation. You would need a keyboard but that makes it easier to use. raspiHUD should sit on top of mavproxy ok. raspiHUD still needs much work before it becomes public usable. Configuration is not so clean as minimOSD.
Thanks for pointing out the broken link. I will fix it later. Got to go flying now.
Hi Matt,
Very nice and interesting project! Thanks for sharing it.
I wonder if it would be possible to build a Ground Control Station, something like the ardustation (https://code.google.com/p/ardu-station/), added with your HUD ?
I am thinking of hooking up a LCD screen (like here or maybe better here ) which would be used to access and tune the autopilot, as with the ardustation, and using your HUD for flight monitoring.
Regards
Alain
PS: It seems there's something wrong with the first link provided at the end of your post, I end up in the same page as the 2nd one (the Pi3d documentation)
Hi Matt,
That's a nice layout for a HUD. I may want to switch to this setup as well.
What would I put on the display?
- Altitude in M
- Climbrate in M/s
- Airspeed Km/h
- Motor on or off
- Battery voltage in V
- Flighttime (starts with motor on)
- LOGO subroutine name
Regards,
Kees
That should work with raspiHUD. The fonts may need to be larger but they are all scalable. It might be a more readable alternative to minimOSD at that resolution.
I have been using the Eyetop Centra http://www.vrealities.com/products/featured/eyetop-centra
set up ,it is cheaper lower resolution but diopter adj with dial and low profile .