Deutsch English

LIDAR Altimeter

LIDAR Höhenmesser

Zusammenfassung und Inhaltsverzeichnis

Hier wird kurz die Funktion eines LIDAR Höhenmessers mit Audioansage für UL-Fliegerei erläutert.

Hinweis:Dies ist noch eine Baustelle und das Gerät noch nicht fertig, Wer mag, darf gern ab und zu vorbei schauen. HINWEIS: Bei diesem Hobbyprojekt handelt es sich um einen Prototypen einer Idee und nicht um ein fertiges Produkt. Insbesondere die Flugsicherheit darf bei der Benutzung niemals vernachlässigt werden, es handelt sich nur um ein Informationsgerät welches unvorhersagbar falsche Werte ausgeben kann! Ich kann keinerlei Verantwortung für den Nachbau und die Benutzung eines solchen Geräts übernehmen. Nachbau und Verwendung erfolgen auf eigenes Risiko!!!

Summary and table of contents

This website portrays the development of a LIDAR altimeter based voice assistant for LSA/Microlight plane use (my own "Barking Bob").
Note:This is currently a work in progress, so stay tuned.

DISCLAIMER: This is a hobbyist project that is not meant for use as a safety instrument. This is a purely informational assistant system that does not guarantee for accuracy. I cannot claim any liability for its use, if you choose to replicate this build, you are doing so at your own risk!!

Allgemeines

Beim Betrieben des Flugsports kommt man immer wieder einmal ins Grübeln über die eigene Landetechnik. Gerade wenn man mehrere Flugzeugklassen (z.B. Segelflugzeuge und Ultraleicht) fliegt, sind andere Schwerpunkte bei der Landung zu erkennen. Allein schon der Unterschied zwischen den im motorgetriebenen Flug üblichen Wöbklappen (Flower-Klappen) und den im Segelflug gebräuchlichen Bremsklappen (Schempp-Hirth-Klappen) ist in der Wirkungsweise und dem Flugverhalten in der Landung immens.

Daher beneidet man schnell die Verkehrsflieger um die automatische Computerstimme, die ihnen während des Landeanflugs zu aktuelle Höhe über Grund zuruft. Ziel dieses Projekts ist es, diese durch einfach zu beschaffende Technik auch dem Hobbypiloten zur Verfügung zu stellen.

Funktionsbeschreibung

Mittels eines käuflich zu erwerbenden vollintegrierten Moduls der Firma Garmin, sind heute Laserentfernungsmesser recht einfach in Microcontroller-Anwendungen zu integrieren

Wo es früher nur den berühmten "Disto" gab, kann man heute für kleines Geld ein Modul erwerben, dass (angeblich) Entfernungen bis zu 40m erkennen kann. Dieses Wunderwerk der Hochintegration misst die Laufzeit eines Laserimpulses und errechnet daraus die Entfernung zu einem Objekt, in diesem Fall idealerweise dem Boden.

Schaltplan des LIDAR Höhenmessers

Schaltplan des Hoehenmessers

Das PWM-Signal des μCs wird durch R1/C8 geglättet und somit zu einem normalen Audiosignal gewandelt.

Wirklich interessant ist in dieser Schaltung nur, dass der Audio-Ausgang vollständig differentiell ausgeführt werden kann. Wenn Tr1 bestückt und C10/C11 weg gelassen werden, so kann man einen 600 Ω-Übertrager verwenden, um das Signal zu symmetrieren. Den Übertrager könnte man notfalls auch aus einem alten Telefon bekommen, im konkreten Falle wurde er aber bei einem Einzelhandelsversender beschafft.
Dieser Ausgang kann dann am z.B. am Funkgerät an den AUX-Eingang und Masse angeschlossen werden, somit ergibt sich eine Art Stromschleife die wesentlich weniger von elektromagnetischer Einstrahlung betroffen wird.
Alternativ kann auch Tr1 wegelassen werden und stattdessen C10/C11 bestückt werden, dann erhält man einen normalen asymmetrischen Tonausgang, welcher dann eher störanfällig ist. Damit entfält jedoch der Vorteil der erhöhten Störicherheit.

Um einen Betrieb mit zwei Betriebsspannungen (positiv und negativ) zu vermeiden, wird ausgenutzt, dass der Ruhepegel des unsigned PWM-Signals sowieso bei 50%, d.H. bei etwa 2.5V liegt. So wird die zweite Seiten des Übertragers auch auf 2.5V gehalten, damit wird auch eine Gleichspannungsbelastung und evtl. Sättigung des Kerns vermieden. Das erfolgt über den zweiten OPV in U3, welcher mittels eine Spannungsteilers bei ca. 2.5V gehalten wird.

Mechanischer Aufbau

An die mechanische Umsetzung werden gerade bei diesem Projekt mehrere Anforderungen gestellt.

  1. Einfache Montage: Wenige Löcher im Rumpf
  2. Regensicherheit: Potentielles Regenwasser soll möglichst nicht eindringen können
  3. Niedriger Luftwiederstand: Der Einbau des Geräts an das Luftsportgerät sollte keinen unnötigen Kraftstofmehraufwand verursachen

Aussenansicht

Daher wurde ein Geäuse mittels OpenSCAD entworfen, welches auf einer hohlen Topfenform basiert. Diese solle einen recht geringen Luftwiderstand haben. Linsen des LIDAR sind in zwei Öffnungen im Boden des Gehäuses untergebracht, welches plan ist. Dieses wird dann bei der Endmontage mittels einer d&umml;nnen Acrylglasplatte (hier ist noch zu testen, ob diese bei der Wellenlänge des Lasers ausreichend transparent ist).

Uebersicht des Zusammenbaus

Im Innenren sind acht Dome angebracht, auf welche das LIDAR-Modul und die Leiterplatte aufgeschraubt werden können.

Das Ganze wird bei Montage mit vier Schrauben am Luftsportgerät fixiert.

Code für den Microrechner

Die Aufgabe des Micocontrollers ist es, die I2C-Kommunikation mit dem LIDAR-Modul zu halten und gleichzeitig dies ermittelte Höhe in Sprachansagen umzusetzen.

Um schneller zu Ergebnissen zu kommen, wurde ein Aurdino-Nano als Prototypenplattform genutzt. Hiermit war die Implementation der I2C-Kommunikation durch die von Garmin gelieferte Bibliothek sehr einfach.

Spannender gestaltet sich die Sprachausgabe auf einem einfachen 8bit Microcontroller ohne externem Speicher. Natürlich könnte man z.B. über SPI eine externes Flash-ROM nutzen, aber die Herausforderung war die Minimierung der Bauteilanzahl.

Die neuste Generation der Software verwendet ein sehr traditionsreiches Verfahren der Sprachcodierung: LPC (Linear Predictive Coding), welches schon im heute historischen Speak&Spell verwendet wurde. Die Arduino Bibliothek "Talkie" implementiert einen Bitstream-Decoder, welcher TMS 5220 Code interpretiert und als Audio per PWM ausgiebt.

Zur Herstellung solcher Audiodaten wird das Programm BlueWizard (https://github.com/patrick99e99/BlueWizard) für Mac oder plattformunabhängig mein Python-Port PythonWizard (https://github.com/ptwz/python_wizard) verwendet. Die Erstellung der Sprachsamples an sich erfolgt in MacOS über den sehr felxiblen "say" Befehl.

Ebenso ist es nicht ganz trivial, aus den Messwerten des LIDAR eine stetige, möglichst wenig Zitternde Höheninformation zu machen. Dies geschieht momentan so, dass ein Burst von bis zu 15 Messungen in einem Zeitfenster von 1/3 s ausgelöst werden. Messwerte unter 10cm und über 50 Metern werden direkt verworfen. Diese werden nach der Größe absteigend sortiert. Sind mindestens vier Werte gültig, so wird der drittgröß Wert benutzt. Dieser wird dann in Fuß umgerechnet und an die Sprachausgabe übergeben.
Beim ersten Flug mit dem Gerät wurden alle Rohmesserte ausgegeben, um die vorigen Algorithmen noch zu verbessern.

Ergebnisse des ersten Fluges

Das obige Bild zeigt die durch den beschriebenen Filteralgorithmus nachträglich ausgewerteten Höhen bei einer Landung. Das Profil sieht deshalb so seltsam aus, da sich vor dem Flugplatz eine Waldkante, ein Tal und eine Böschung befinden. All diese Geländemerkmale werden hier schön abgebildet.

About

In hobby aviation sometimes you think about your own landing technique, especially when you're flying different classes of aircraft (like gliders and microlight/LSA) which have operational differences when landing. When considering the technical implementation of landing aid available, like the spoilers mostly used in gliders are working completely different from the (Fowler) flaps used in microlight/LSA that influence the planes behavior in lading significantly.

Therefore you come to envy commercial aviators that have this automated computer voice calling ou the altitude during final descent. My goals was to bring this convenience to hobby pilots.

Functional description

Using a commercially available LIDAR module by Garmin it is nearly trivial to integrate a laser distance sensor into micro controller applications.

Back in the day, the only laser based distance measurement device available to the common public was the "Disto" made by Leica. Today you can buy a rather small module that has a claimed range of up to 130ft. Both of these technological marvels use a laser impulses travel time and give you the distance to a target. In this case hopefully it is the ground.

LIDAR Altimeter schematic

Altimeter schematic diagram

The PWM signal from the μC is smoothed out by R1/C8 to create an audio waveform for use with the op-amps.

The only really interesting part is the option of a fully differential sound output here if C10/C11 are not populated, and Tr1 is a simple 600 Ω audio transformer, which could even be salvaged from an old telephone. The one used in this model has been bought from a major german electronics distributor.
Alternatively you could also populate C10/C11 and leave Tr1 out to get single ended audio output, which might be more susceptible to electrical noise pickup.

In order to not have two power rails (one positive and one negative), the PWM output of the μC is idling at 50%. Therefore about 2.5V are to be seen at the output of U3/A, the opposite side of the transformer is held at about 2.5V by the other part of the op-amp that simply uses a voltage divider as a reference.

Mechanical implementation

The menchanical design of this device has some more constraints compared to my other projects, namly:

  1. Simple mounting: Minimize amount of holes in the fuselage
  2. Water protection: Ingress of potential rain water should be avoided
  3. Low drag: Mounting the device to our LSA should not create too much drag which would lead to decreased fuel efficency.

External view

Therefore a droplet shaped case was designed using OpenSCAD, which should help with the aerodynamic drag. The lenses of the LIDAR module go through the flattended bottom of the device, as shown above. This will propably be covered with a disc of acrylic glass (depends on how well the LIDARs wavelength can propagate through it).

Overview of assembly

On the inside, there are eight cylinders to mount both the LIDAR unit and my own PCB.

The whole device will be installed on the aircraft using four small M3 type holes.

Code for the microcontroller

The micro controllers job is to translate data aquired from the LIDAR module using I2C- to voice output.

In order to quickly build a simple prototype, an Arduino Nano was used. Especially implementing the I2C communication was quite simple, as Garmin supplied open source libraries to communicate with their units.

More challenging is making such an 8 bit micro controller speak. Sure, I could have used an SPI flash to store samples, but this would increase the BOM and I tried to keep the circuit as simple as possible..

Die neuste Generation der Software verwendet ein sehr traditionsreiches Verfahren der Sprachcodierung: LPC (Linear Predictive Coding), welches schon im heute historischen Speak&Spell verwendet wurde. Die Arduino Bibliothek "Talkie" implementiert einen Bitstream-Decoder, welcher TMS 5220 Code interpretiert und als Audio per PWM ausgiebt. The current code iteration uses quite a long established scheme of encoding speech data: LPC (Linear Predictive Coding), which was e.g. the basis of the classical Spaek"Spell toy. The "Talkie" library for Arduino implements a TMS 5220 compatible LPC bitstream decoder that plays the audio back through the AVR's PWM facility.

In order to encode audio into a TMS 5220 compatible bitstream one can either use the mac programBlueWizard (https://github.com/patrick99e99/BlueWizard) or my cross platform (command line only) python port PythonWizard (https://github.com/ptwz/python_wizard). The speech samples them selves where created using the very powerful "say" command in macOS.

Also, it is not trivial to create a nice and smooth height value out of the quite noisy LIDAR information. The module returns its height in centimeters, which makes for a nice resolution and some headroom to work with when averaging. Currently the height processing works as follows: A burst of maximum 15 height measurements is triggered within 1/3rd of a second. All values under 10cm and over 5000cm are currently discarded immediately. The resulting values are sorted in descending order, if at least five values are valid, the calculation proceeds. As it seems the LIDAR makes most mistakes towards the lower end of measurements, guessing the hight too low, the third biggest altitude is taken for further calculation. The resulting height in centimeters is converted to feet and passed to the speech routines.
During its maiden flight, all raw values where sent to my laptop on board of the plane. These have been used to fine-tune the algorithm described above.

Postprocessed results of maiden flight

The plot above shows the results of the post processed raw data of the first flight. The profile looks a bit strange, because the terrain before the runway consists of quite a high forrest, a small valley and quite a steep slope up towards the airfield. All of which has been quite well detected here.

Downloads

Alle Quellcodes stehen unter https://github.com/ptwz/lidar_altimeter zur Verfügung. All sources are available from https://github.com/ptwz/lidar_altimeter.
$Revision: 1.4 $, $Date: 2017/09/10 16:55:54 $