Jekyll2021-11-30T06:30:30+00:00https://www.dirkkoller.de/feed.xmldirkkoller.deRaspberry Pi - ESP32 ESP8266 - Deep Learning - Python - Micropython - RTK - GPS -Drohnen -GIS - Java - SpringAsciiDoc: Wenn Markdown an die Grenzen kommt2021-05-18T00:00:00+00:002021-05-18T00:00:00+00:00https://www.dirkkoller.de/asciidoc<p>Die meisten Texte werden 2021 immer noch mit Microsoft Word oder einem der Konkurrenten (OpenOffice Writer, Libre Office Writer, TextMaker oder AbiWord) geschrieben. Die Vorteile dieser WYSIWYG-Editoren liegen auf der Hand; der Text sieht schon beim Editieren so aus, wie er am Ende ausgedruckt aussehen wird (zumindest sollte das der Fall sein).</p>
<p>Trotzdem hat sich in den vergangenen 15 Jahren mit dem von John Gruber, Betreiber des bekannten Blogs <em>Daring Fireball</em>, entwickelten <a href="https://daringfireball.net/projects/markdown/">Markdown</a> eine Alternative etabliert, bei der das nicht der Fall ist. Markdown ist eine sogenannte <em>vereinfachte Auszeichnungssprache</em>, bei der der Schreiber seinen Text mit leicht kryptischen Formatierungsanweisungen anreichert, und das Ergebnis während des Erstellen bestenfalls in einem Preview neben dem eigentlichen Text zu sehen bekommt.</p>
<p>Der Grund für diesen scheinbaren Rückschritt ist die Tatsache, dass immer mehr Texte in unleserlichen Formaten wie PDF, HTML oder EPUB benötigt werden. Im Vergleich zu diesen ist Markdown aus menschlicher Sicht einfach zu lesen und zu schreiben, und dient somit als Grundlage für die Konvertierungen in die Zielformate, die dann meist maschinell - vom Browser, vom PDF-Viewer, vom Ebook-Reader usw. - ausgewertet werden. Darüber hinaus ist Markdown gänzlich plattformunabhängig, sehr leichtgewichtig und es erlaubt dem Autor/Blogger seinen Lieblingseditor zu verwenden.</p>
<p>Damit der Text leicht zu lesen ist, sind die Markierungen in Markdown sehr einfach gehalten. Eine Überschrift wird mit einer oder mehreren Rauten(#) eingeleitet, ein Wort durch umschließende Asterisk(*) kursiv gesetzt, ein Link durch spitze Klammern gekennzeichnet, um ein paar Beispiele zu nennen. Diese einfache Syntax, die Markdown zum Erfolg verholfen hat, steckt aber auch die Grenzen des Projekts.</p>
<h2 id="asciidoc-markdown">AsciiDoc: Markdown++</h2>
<p>Markdown ist schnell überfordert, wenn es doch etwas komplexer werden muss, wenn etwa eine Fußnote, ein Index oder ein Querverweis benötigt wird. In der Praxis existiert für diese Fälle zwar eine Reihe von Dialekten (<em>Flavours</em>), diese sind aber untereinander nicht kompatibel und weichen das Format dadurch auf. Als Beispiel sei das oft verwendete <a href="https://github.github.com/gfm/"><em>GitHub Flavored Markdown</em></a> genannt.</p>
<p>Eine Alternative, die die genannten Aufgaben aus dem Stand beherrscht, ist <a href="https://asciidoc.org">AsciiDoc</a>, ebenfalls ein Vertreter der vereinfachten Auszeichnungssprachen. Ähnlich alt wie Markdown, aber längst nicht so bekannt, bietet es seine Dienste als “mature, plain-text writing format for authoring notes, articles, documentation, books, ebooks, web pages, slide decks, blog posts, man pages and more” an. AsciiDoc ist ebenfalls leicht zu schreiben, die Lesbarkeit des Textes ist gefühlt ein klein wenig schlechter als die eines Markdown-Textes.</p>
<p>Das Projekt besteht aus zwei Teilen: Der Spezifikation des Formats und einem Konverter, mit dessen Hilfe sich der Rohtext in das Zielformat überführen lässt. Kosten fallen für die Software keine an, AsciiDoc ist freie Software und steht unter der GPLv2-Lizenz.</p>
<h2 id="asciidoc-grundlagen">AsciiDoc-Grundlagen</h2>
<p>Die AsciiDoc-Syntax ist auf der Homepage des Projekts ausführlich erklärt, um einen Eindruck zu bekommen, werden hier die wichtigsten Formatierungen vorgestellt.</p>
<p>Die Gliederung eines Dokuments in Sektionen, Subsektionen usw. erfolgt in AsciiDoc mit Gleichzeichen (=). Der Titel des Dokuments mit einem Gleichzeichen, die erste Ebene mit zweien und so weiter. Diese Sektionen werden im Normalfall auch als Überschriften angezeigt. Die oberste Überschrift, der Dokumenttitel, ist dabei Teil des Headers, in dem sich bei Bedarf ergänzende Informationen wie zum Beispiel der Name des Autors und ein Untertitel unterbringen lässt.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>= Dokumenttitel (Teil des Header)
== 1. Gliederungsebene
== 2. Gliederungsebene
</code></pre></div></div>
<p>Das Wort Paragraph wird in der deutschen Sprache meist mit einem Gesetzestext in Zusammenhang gebracht. Ein Paragraph in AsciiDoc ist aber einfach ein Textabschnitt (vergleichbar mit <code class="language-plaintext highlighter-rouge"><p></code> in HTML). Hier ist wenig zu beachten, es sind keine besonderen Formatierungsanweisungen erforderlich. Vom darauf folgenden Textabschnitt wird er durch eine Leerzeile getrennt.</p>
<p>Innerhalb des Textes müssen oft Wörter hervorgehoben werden, dies geschieht durch Schriftstilvarianten. Variiert werden kann die <strong>Stärke</strong> (fett), die <em>Lage</em> (kursiv) und die <code class="language-plaintext highlighter-rouge">Breite</code> (monospaced) der Schrift:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Variiert werden kann die *Stärke* (fett), die _Lage_(kursiv) und die `Breite` (monospaced) der Schrift.
</code></pre></div></div>
<p>Natürlich sind auch Kombinationen von Hervorhebungen erlaubt.</p>
<p>Listeneinträge werden wie in Markdown durch vorangestellte Asteriske gekennzeichnet:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>* ein Eintrag
* ein weiterer Eintrag
* und ein Dritter
</code></pre></div></div>
<p>Auch für Links bietet AsciiDoc eine im Rohtext gut zu lesende Syntax. Das Linkziel wird in den Text eingefügt und der statt der URL darzustellende Text in eckigen Klammern direkt hinter dem Link aufgeführt. Ein <a href="https://asciidoc.org">Link auf die AsciiDoc-Webseite</a> sieht also beispielsweise folgendermaßen aus:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Ein https://asciidoc.org[Link auf die AsciiDoc-Webseite] sieht also beispielsweise folgendermaßen aus:
</code></pre></div></div>
<p>Bilder werden durch ein vorangestelltes <em>image</em> gekennzeichnet. Hinter zwei Doppelpunkten folgen dann Pfad und Name des Bildes und bei Bedarf ein alternativer Text in eckigen Klammern. Eventuell vorhandene Bildunterschriften werden durch einen vorangestellten Punkt markiert:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>image::atom.png[Atom]
.AsciiDoc-Preview in Atom
</code></pre></div></div>
<p>Die Darstellung von Quellcode mit Syntax-Highlighting erfolgt durch Einschliessen des Codes in mindestens vier aufeinanderfolgende Bindestriche. Die verwendete Programmiersprache wird dabei als Stilanweisung vor den Block gestellt:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[source, java]
----
@Data
@Entity
public class Address {
@Id @GeneratedValue(strategy=GenerationType.AUTO) # <1>
private Long id;
private String firstname;
...
----
<1> Identifier, wird automatisch erzeugt
</code></pre></div></div>
<p>Mit Hilfe sogenannter <em>Callouts</em> lassen sich einzelne Zeilen des Quellcodes erklären. Die Zeile bekommt zu diesem Zweck eine Nummer in spitzen Klammern und wird im Anschluss an den Codeabschnitt erläutert:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[source, java]
--------------------------------------
@Data
@Entity
public class Address {
@Id @GeneratedValue(strategy=GenerationType.AUTO) # <1>
private Long id;
private String firstname;
--------------------------------------
<1> Mit diesem Callout lässt sich die Zeile näher beschreiben
</code></pre></div></div>
<h2 id="asciidoc-für-fortgeschrittene">AsciiDoc für Fortgeschrittene</h2>
<p>Damit sind die Formatierungsanweisungen für den Großteil aller Texte beschrieben. Bis hierhin ist Markdown ähnlich leistungsfähig und wegen der weiteren Verbreitung zu bevorzugen. Wer aber eine Diplomarbeit, ein Fachbuch oder eine komplexe Dokumentation schreiben möchte, kommt mit Markdown an die Grenzen. Hier spielen dann Themen wie Fußnoten, Querverweise, Literaturverzeichnis, Index, Glossar, Anhang und Inhaltsverzeichnis eine wichtige Rolle. Alle diese Aufgaben (und noch viele mehr) lassen sich mit AsciiDoc perfekt lösen, das Format wurde eigens konzipiert, um damit Bücher zu schreiben.</p>
<p>Ein Inhaltsverzeichnis beispielsweise lässt sich relativ leicht aus den erwähnten Sektionen (Überschriften) generieren. Um das Inhaltsverzeichnis anzuzeigen, ist die Anweisung :toc: nach dem Header erforderlich:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>= AsciiDoc: Wenn Markdown an die Grenzen kommt
Von Dirk Koller
:toc:
</code></pre></div></div>
<p>Zumindest für ein gedrucktes Fachbuch wird man sicher einen Index benötigen, der die Stichworte in alphabetischer Reihenfolge auflistet. Das ist mit AsciiDoc ein Kinderspiel, das betroffene Wort wird einfach an der Stelle, die im Index gelistet werden soll, in doppelte runde Klammern gesetzt. Ans Ende des Dokuments kommt noch eine Level1-Sektion mit dem Stil <em>index</em>, die dafür sorgt das der Index an dieser Stelle im PDF oder DocBook generiert wird:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[index]
== Index
</code></pre></div></div>
<p>Ähnlich einfach ist das Anfertigen eines Literaturverzeichnis. Das Verzeichnis wird mit [bibliography] eingeleitet. Ein Eintrag, also etwa ein Buch mit Verlag, Erscheinungsjahr usw. erhält ein Label, das in dreifach eckige Klammern gepackt wird:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[bibliography]
[[[headfirst]]] Kathy Sierra & Bert Bates. Head First Java (A Brain Friendly Guide). OReilly and Associates. 2005.
</code></pre></div></div>
<p>Dort, wo im Text auf die Literaturquelle verwiesen werden soll, wird das Label in doppelte, spitze Klammern verpackt:</p>
<p>Meine Empfehlungen für den Einstieg in die Java-Programmierung sind <em>Head First Java</em> <code class="language-plaintext highlighter-rouge"><<headfirst>></code> von Kathy Sierra und Bert Bates […].</p>
<p>In umfangreichen wissenschaftlichen Arbeiten werden die Literaturquellen gerne mit einer Software wie Citavi oder Zotero verwaltet. Über den BibTeX-Export können diese mächtigen Programme auch als Datenquelle für AsciiDoc-Dokumente genutzt werden. Weitere Informationen dazu findet man beim GitHub-Projekt <a href="https://github.com/asciidoctor/asciidoctor-bibtex">asciidoctor-bibtex</a>.</p>
<h2 id="konvertierung-mit-asciidoctor">Konvertierung mit Asciidoctor</h2>
<p>Um aus dem Rohtext nun ein PDF, eine Webseite oder gar ein Buch zu generieren, ist ein AsciiDoc-Konverter erforderlich. Dabei hat man die Wahl zwischen dem ursprünglichen, in Python geschrieben, AsciiDoc-Script, oder dem neueren <a href="https://asciidoctor.org">Asciidoctor</a>.</p>
<p>Asciidoctor ist eine in Ruby geschriebene Open-Source-Implementierung von AsciiDoc. Diese hat eine Reihe von Vorteilen, wobei vor allem die 25-fach schnellere Verarbeitung eine deutliche Verbesserung darstellt. Aber auch die Möglichkeit, AsciiDoc in Java oder Maven nutzen zu können, dürfte den einen oder anderen interessieren. Hier wird im folgenden Asciidoctor beschrieben.</p>
<p>Die Installation des Tools hängt vom verwendeten Betriebssystem ab und ist im <a href="https://asciidoctor.org/docs/install-toolchain/#installing-the-asciidoctor-rubygem">Abschnitt Installation</a> der Dokumentation beschrieben. In den meisten Fällen wird das mit gem, Rubys Paketsystem, erfolgen. Wenn Ruby installiert ist (lässt sich prüfen mit <code class="language-plaintext highlighter-rouge">ruby --version</code>), geschieht das mit folgendem Befehl, der gegebenenfalls mit Admin-Rechten ausgeführt werden muss:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gem install asciidoctor
</code></pre></div></div>
<p>Auf Debian- oder Ubuntu-Systemen kann man Asciidoctor dagegen einfach mit Hilfe des Paketmanagers apt installieren:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install asciidoctor
</code></pre></div></div>
<p>Danach sollte die Eingabe von <code class="language-plaintext highlighter-rouge">asciidoctor --version</code> zu einer Ausgabe der Versionsnummer (und nicht zu einer Fehlermeldung) führen.</p>
<p>Asciidoctor enthält Prozessoren für eine Vielzahl an Ausgabeformaten:</p>
<ul>
<li>html</li>
<li>docbook</li>
<li>manpage</li>
<li>pdf</li>
<li>latex</li>
<li>epub3</li>
</ul>
<p>Für einige dieser Formate ist allerdings ein weiteres Gem erforderlich.</p>
<p>Die Verwendung ist denkbar einfach. Um beispielsweise ein HTML-Dokument aus einem Text zu machen, ist der folgende Befehl auszuführen:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>asciidoctor text.adoc
</code></pre></div></div>
<p>Natürlich lässt sich das Ergebnis mit Hilfe eines eigenen CSS gestalten, man muss also nicht mit dem Standard-Output leben. Näheres dazu findet sich in der Dokumentation.</p>
<p>Um ein DocBook aus dem Text zu generieren, ist die folgende Eingabe erforderlich:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>asciidoctor -b docbook text.adoc
</code></pre></div></div>
<p>Zum Erzeugen eines PDF aus dem gleichen Text wird das asciidoctor-pdf-Gem benötigt:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gem install asciidoctor-pdf
</code></pre></div></div>
<p>Die Konvertierung erfolgt dann mit dem folgenden Kommando:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>asciidoctor-pdf text.adoc
</code></pre></div></div>
<p>Die Anweisungen zur Konvertierung in andere Formate funktionieren ähnlich und sind in der Dokumentation von Asciidoctor im Abschnitt <a href="https://asciidoctor.org/docs/user-manual/#processing-your-content">Processing Your Content</a> beschrieben.</p>
<h2 id="jedem-seinen-editor">Jedem seinen Editor</h2>
<p>Da AsciiDoc zu den leichtgewichtigen Markupsprachen gehört, wird eigentlich kein besonderer Texteditor benötigt. Der Text lässt sich mit einem beliebigen Editor bearbeiten und nach der Fertigstellung in das gewünschte Format konvertieren. Empfehlenswert ist auf alle Fälle ein Editor mit Syntax-Highlighting, der die geschilderten Formatierungsansweisungen farblich hervorhebt. Das können eine ganze Menge Editoren, genannt seien TextMate für macOS, Notepad++ für Windows oder Vim und Emacs für Linux-Systeme. In der Praxis wird man außerdem dankbar für eine Vorschau auf das Endergebnis sein.</p>
<p>Ein großartiger Texteditor, der sowohl Syntax-Highlighting als auch Vorschau für AsciiDoc bietet und, darüber hinaus, gleich für alle genannten Plattformen verfügbar ist, ist Atom. Der Editor lässt sich mit Plugins erweitern und die Pluginsammlung <em>asciidoctor</em> enthält mehrere Werkzeuge, die die Arbeit mit AsciiDoc erleichtern. Auf dem folgenden Screenshot sind sowohl Syntax-Highlighting (links) als auch die Vorschau (rechts) erkennbar.</p>
<p><img src="/images/asciidoc/atom.png" alt="AsciiDoc-Syntax-Highlighting und -Preview in Atom" /></p>
<p>Atom ist kostenlos auf der <a href="https://atom.io">Webseite des Projekts</a> erhältlich.</p>
<h2 id="fazit">Fazit</h2>
<p>Für einfache Texte wie Blog-Posts oder diesen Beitrag ist Standard-Markdown vollkommen ausreichend und perfekt geeignet. Mit dem Dokumentkonverter <a href="https://pandoc.org">Pandoc</a> lässt sich auch Markdown in alle gängigen Formate überführen.</p>
<p>Wer aber vor einem größeren Projekt steht, einer Studienarbeit, einem Fachbuch oder einer komplexen technischen Dokumentation, sollte sich AsciiDoc auf jeden Fall anschauen. Dieser Beitrag hat nur einen kleinen Teil der Features von AsciiDoc vorgestellt, das Format ist ausgereift und bietet erstaunliche Möglichkeiten. Mit Atom und dem Plugin asciidoc-preview (Teil der asciidoctor-PluginSammlung) steht ein Editor zur Verfügung, der eine großartige Unterstützung für das Format bietet. Atom hat darüber hinaus eine gelungene Git-Integration, so dass die Arbeit auch gleich gesichert oder mit Co-Autoren geteilt werden kann.</p>
<p><img src="https://vg08.met.vgwort.de/na/7bc4d97bc7644b56aa64473f7734e649" width="1" height="1" alt="" /></p>Die meisten Texte werden 2021 immer noch mit Microsoft Word oder einem der Konkurrenten (OpenOffice Writer, Libre Office Writer, TextMaker oder AbiWord) geschrieben. Die Vorteile dieser WYSIWYG-Editoren liegen auf der Hand; der Text sieht schon beim Editieren so aus, wie er am Ende ausgedruckt aussehen wird (zumindest sollte das der Fall sein).Atom, der Editor für das 21. Jahrhundert2021-01-19T00:00:00+00:002021-01-19T00:00:00+00:00https://www.dirkkoller.de/atom-editor<h2 id="vom-schreiben-und-coden">Vom Schreiben und Coden</h2>
<p>Schreibprogramme lassen sich grob in Editoren und Textverarbeitungen unterteilen. Ein Editor hat dabei nur eingeschränkte Layout- und Formatierungsfunktionen und ein einfaches Textformat, ASCII oder UTF-8.</p>
<p>In der Vergangenheit nutzte man Editoren bevorzugt, um Computerprogramme zu schreiben oder Config-Files zu bearbeiten. Bekannte Editoren wie Emacs wurden dabei mit Funktionen wie Kalender, News- und Mailreader, einer eingebauten Shell, und gar Webbrowser und Spielen zum alternativen Betriebssystem für Entwickler. Größere Texte mit Überschriften, Tabellen und formatiertem Text waren dagegen eher Textverarbeitungen wie MS Word, Pages oder Libre Writer vorbehalten.</p>
<p>Seit dem Aufkommen von Auszeichnungssprachen wie Markdown verschwimmt die Grenze zwischen Editor und Textverarbeitung, zumindest in eine Richtung: Auch mit einem Editor lassen sich Blogbeiträge, Zeitschriftenartikel, Universitätsarbeiten oder ganze Bücher schreiben. Grade wenn das Ergebnis in verschiedenen Formaten wie html, pdf, epub benötigt wird, ist das einfache Textformat dem Output einer Textverarbeitung mit den enthaltenen Formatanweisungen überlegen.</p>
<p>Der Editor wird also nicht etwa zwischen Entwicklungsumgebung auf der einen und Textverarbeitung auf der anderen Seite erdrückt, gute Editoren schicken sich vielmehr an, die Arbeit dieser beiden etablierten Anwendungen zu übernehmen. Und um einen solchen guten Editor soll es hier gehen, um <em>Atom</em>, den “hackable text editor for the 21st Century”.</p>
<h2 id="made-by-github">Made by Github</h2>
<p>Atom ist ein kostenloser Editor, der von GitHub, der bekannten Hosting-Plattform für Softwareprojekte, entwickelt wird. Das Programm ist in JavaScript mit dem plattformübergreifenden Framework <em>Electron</em> geschrieben und deshalb für zahlreiche Betriebssysteme wie Windows, macOS, Linux und ChromeOS verfügbar. Auf der <a href="https://atom.io">Homepage des Projekts</a> kann man derzeit Atom in der Version 1.50.0 laden. Die Philosophie des Projekts ist, Erweiterbarkeit wie man sie von Emacs oder Vim kennt, mit Benutzbarkeit zu verknüpfen. Atom soll einfach sein für den Anfänger und mitwachsen mit zunehmender Erfahrung und Ansprüchen. Und das ist ganz hervorragend gelungen!</p>
<h2 id="einfach-einfach">Einfach einfach</h2>
<p>Das User Interface von Atom ist übersichtlich und aufgeräumt. Kein Ribbon Interface, das versucht die wichtigsten Funktionen zu verstecken und kein Wizard, der helfen soll ein neues Dokument in eine ungewollte Form zu zwängen. Der Editor ist grundsätzlich untergliedert in drei Bereiche: Dem Editor-Bereich (in der Mitte), der Tree-View (links) und dem Git Tab (rechts).</p>
<p><img src="/images/atom-editor/atom.png" alt="Aufbau von Atom" /></p>
<p>Geöffnete Dateien werden in Form von Reitern im mittleren Bereich, den Editor Pane, angezeigt. Das ist der Hauptarbeitsbereich, die Reiter können bei Bedarf horizontal oder vertikal aufgesplittet werden.</p>
<p>Links daneben findet sich die Tree View. Hier werden geöffnete Dateien oder Ordner in Form einer Baumansicht dargestellt. Entwickler werden diese Art der Darstellung aus Ihrer IDE kennen. Die Tree View ist mit einem kleinen Button ein- und ausfahrbar, bei der Arbeit mit einem Text blendet man sie am besten aus, um den vollen Platz zur Verfügung zu haben.</p>
<p>Ebenfalls ausblendbar sind die beiden Git-Reiter, die im rechten Bereich angezeigt werden. Hier lässt sich die Arbeit schnell und unkompliziert in einer Versionsverwaltung sichern. Die Git-Integration in den Editor ist hervorragend gelöst und eines der großen Highlights von Atom.</p>
<p>Mit Strg + Shift + P lässt sich die Command Palette einblenden, die Zugriff auf alle Aktionen bietet, die sich in Atom ausführen lassen. Nach Eingabe von <em>find</em> und Auswahl von <em>Find And Replace: Show</em> aus der Liste der angebotenen Optionen lässt sich beispielsweise die leistungsfähige Suchoption am unteren Fensterrand einblenden.</p>
<p><img src="/images/atom-editor/command.png" alt="Command Palette" /></p>
<h2 id="erweiterbar---packages-und-themes">Erweiterbar - Packages und Themes</h2>
<p>Atom funktioniert Plugin-basiert. Es gibt Pakete, die Features und Funktionen nachrüsten und Themes, mit denen sich das UI und das Syntax-Highlighting komplett umgestalten lässt. Für beides existieren Core-Pakete, die mit der Installation mitgeliefert werden und zahlreiche Community-Projeke. Durch das Installieren der benötigten Pakete wird Atom immer mehr zum persönlichen Editor. Zum Installieren neuer Pakete File > Preferences und dann Install lässt sich nach Paketen suchen. Unter https://atom.io/themes bzw. https://atom.io/packages findet man auch eine Auflistung im Netz. Die zahlreichen Pakete lassen sich ohne Sorgen um einen verunstalteten Editor ausprobieren. Durch Löschen des Ordners <em>.atom</em> im Benutzerverzeichnis wird Atom wieder in den Ursprungszustand zurückversetzt.</p>
<h2 id="zen-des-schreibens">Zen des Schreibens</h2>
<p>Atom eignet sich bestens für Autoren und Blogger. Bereits zum Start, also als Core-Paket enthalten, ist die Rechtschreibprüfung <em>spell-check</em>. In den Settings können gewünschte Sprache und Wörterbuch angegeben werden. Wie man das aus anderen Editoren kennt, werden erkannte Fehler unterstrichen und lassen sich durch das Kontextmenü korrigieren.
Ebenfalls als Core-Paket ist eine Markdown-Preview enthalten, die Ansicht kann mit <em>Packages > Markdown Preview > Toggle Preview</em> als Reiter im Editor Pane eingeblendet werden:</p>
<p><img src="/images/atom-editor/markdown-preview.png" alt="Markdown Preview" /></p>
<p>Sehr praktisch für die Arbeit mit Markdown sind auch die Snippets, die es ermöglichen, kompliziertere Markdown-Elemente in den Text einzufügen, ohne die genaue Syntax dafür zu kennen. Um beispielsweise eine Tabelle einzufügen, gibt man einfach <em>table</em>, gefolgt von der Tab-Taste ein. Dabei wird das folgende Snippet eingefügt:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>| Header One | Header Two |
| :------------- | :------------- |
| Item One | Item Two |
</code></pre></div></div>
<p>Das funktioniert genauso für viele andere Elemente wie zum Beispiel Codeblöcke (code), Bilder (img) oder Links (l).</p>
<p>Im wissenschaftlichen Umfeld wird gerne Latex oder AsciiDoc genutzt. Auch dafür gibt es mit atom-latex bzw. asciidoc-preview entsprechende Community-Pakete, die sich nachrüsten lassen. Die Integration von Literaturverwaltungen wie Zotero oder Citavi ist durch verschiedene Bibtex-Pakete ebenso gegeben.</p>
<p>Für Schreiber ganz hilfreich ist das Community-Paket <em>wordcount</em>, mit dem sich die Anzahl der Wörter und Anschläge in die Statusleiste am unteren Bildschirmrand einblenden lässt.</p>
<p><img src="/images/atom-editor/wordcount.png" alt="wordcount" /></p>
<p>Beim Schreiben gibt es oft Stellen die noch recherchiert werden müssen, an denen noch ein Bild eingefügt werden muss oder Ähnliches. Diese lassen sich mit einer Reihe von Schlüsselworten markieren: TODO, FIXME, CHANGED, XXX, IDEA, HACK, NOTE, REVIEW, NB, BUG, QUESTION, COMBAK, TEMP, DEBUG, OPTIMIZE, und WARNING: Mit Hilfe des Paktes <em>todo-show</em> werden diese in einer Listenansicht aufgeführt und sind sogar durch einen Klick auf einen Eintrag direkt anspringbar. Das Feature kommt eigentlich aus der Entwicklung, leistet aber auch bei der Arbeit an einem Text großartige Dienste.</p>
<p>Wer sich von den wenigen UI-Elementen wie Statusbar oder Tab noch gestört fühlt und deshalb unter Schreibblockade leidet, installiert das Paket <em>zen</em>. Es präsentiert den Text im ablenkungsfreien puristischen Look. Jetzt gibt es keine Ausreden mehr.</p>
<p><img src="/images/atom-editor/zen.png" alt="zen" /></p>
<h2 id="atom-für-entwickler">Atom für Entwickler</h2>
<p>Atom ist keine ausgewachsene IDE. Wer eine solche sucht wird enttäuscht sein. Atom ist ein leichtgewichtiger, schneller Editor, der aber gut mit Code umgehen kann. Aus dem Stand verfügbar sind beispielsweise Syntax-Highlighting und Snippets für JavaScript:</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">ShowMessage</span><span class="p">()</span> <span class="p">{</span>
<span class="nx">alert</span><span class="p">(</span><span class="dl">"</span><span class="s2">Hello World!</span><span class="dl">"</span><span class="p">);</span>
<span class="p">}</span>
<span class="nx">ShowMessage</span><span class="p">();</span>
</code></pre></div></div>
<p>Weitere Features für alle möglichen Programmiersprachen lassen sich in Form von Paketen nachrüsten. Dazu gehören zum Beispiel Pakete, die die Arbeit mit den großen JavaScript-Frameworks wie Angular, React oder Vue erleichtern, aber auch Spring Boot-Support für Java-Entwickler oder Tools für Python. Auch hier lässt sich also Atom toll an die eigenen Anforderungen anpassen und erschlägt den Nutzer nicht mit einer Vielzahl an Features, die gar nicht gebraucht werden.</p>
<p>Trotz tausender Pakete ist Atom aber doch nicht der beste Editor für Entwickler. Nicht weil Atom schlecht wäre, Nein, das ganz und gar nicht. Sondern einfach weil das ganz ähnlich aufgebaute Visual Studio Code ziemlich perfekt ist.</p>
<h2 id="fazit">Fazit</h2>
<p>Für mich ist Atom derzeit der perfekte Editor, zumindest zum Schreiben. Atom ist schlicht und lenkt nicht ab. Der komplette Platz lässt sich für die Arbeit nutzen und alle wichtigen Kommandos sind, hat man sicher erst mal das Arbeiten mit der Command Palette angewöhnt, über die Tastatur erreichbar.</p>
<p>Dennoch ist Atom mächtig, wenn etwas fehlt, findet es man mit einiger Wahrscheinlichkeit in den Tausenden von Community-Paketen. Und im extremen Notfall kann man es sogar selber schreiben (oder zumindest schreiben lassen).</p>
<p>Die Git-Integration ermöglicht einen tollen Workflow, der nicht nur Entwickler begeistern dürfte. Mit <em>Teletype</em> ist dabei sogar das gleichzeitige Arbeiten an einem Dokument mit anderen möglich.</p>
<p><img src="https://vg08.met.vgwort.de/na/2f397182ae9e4bfeb9055cb8611f53a0" width="1" height="1" alt="" /></p>Vom Schreiben und Coden3D-Modelle auf der Webseite2020-09-11T00:00:00+00:002020-09-11T00:00:00+00:00https://www.dirkkoller.de/3d-modelle-webseite<p>Hochauflösende 3D-Modelle wie man sie mit Hilfe von Lascerscanning oder Photogrammetrie erzeugen kann werden schnell recht groß. Anders als ein “von Hand” (also zum Beispiel mit Blender) erzeugtes Modell besteht ein Gebäudemodell schnell aus Millionen von Flächen und ist viele Megabyte groß. Um solch ein riesiges 3d-Modell auf der Webseite trotzdem performant anzuzeigen, eignet sich der <em>3D Heritage Online Presenter</em>, kurz <em>3DHOP</em>. Das Javascript-Projekt wurde vom italienischen Istituto di Scienza e Tecnologie dell’Informazione “A. Faedo” entwickelt und bietet die Möglichkeit große Modelle auflösungsabhängig in mehrere kleinere Modelle aufzuteilen.</p>
<p>Der Viewer lädt dann selbständig während des Betrachtens die erforderlichen Teile nach. 3DHOP nutzt intern WebGL 2, das von Safari nicht unterstützt wird. Wer diese Seite also mit einem Apple-Gerät anzeigt sollte dies mit Chrome oder Firefox tun um die 3D-Präsentation auch zu sehen.</p>
<p>Die Integration von 3DHOP erfolgt, indem zunächst die im Download im Verzeichnins <em>minimal</em> enthaltenen Ordner js, css und skins dem Webprojekt zugefügt werden. Anschließend sind die css- und js-Dateien im Head-Bereich des HTML-Codes einzubinden.</p>
<p>Ist das geschehen, wird der Viewer mit Hilfe eines div-Tags eingebunden. Diesen Bereich kann man anpassen. Es ist zum Beispiel möglich nur einen Teil der Stuerungselemente anzuzeigen oder den Hintergrund auszuwechseln. Details dazu finden sich auf der Webseite des Projekts.</p>
<p>Zu guter Letzt muss der Viewer mit Hilfe eines JavaScripts initialisiert werden. An dieser Stelle wird auch definiert, wo das anzuzeigende Modell zu finden ist.</p>
<!--STYLESHEET-->
<link type="text/css" rel="stylesheet" href="3dhop/stylesheet/3dhop.css" />
<!--SPIDERGL-->
<script type="text/javascript" src="3dhop/js/spidergl.js"></script>
<!--JQUERY-->
<script type="text/javascript" src="3dhop/js/jquery.js"></script>
<!--PRESENTER-->
<script type="text/javascript" src="3dhop/js/presenter.js"></script>
<!--3D MODELS LOADING AND RENDERING-->
<script type="text/javascript" src="3dhop/js/nexus.js"></script>
<script type="text/javascript" src="3dhop/js/ply.js"></script>
<!--TRACKBALLS-->
<script type="text/javascript" src="3dhop/js/trackball_sphere.js"></script>
<script type="text/javascript" src="3dhop/js/trackball_turntable.js"></script>
<script type="text/javascript" src="3dhop/js/trackball_turntable_pan.js"></script>
<script type="text/javascript" src="3dhop/js/trackball_pantilt.js"></script>
<!--UTILITY-->
<script type="text/javascript" src="3dhop/js/init.js"></script>
<div id="3dhop" class="tdhop" onmousedown="if (event.preventDefault) event.preventDefault()"><div id="tdhlg"></div>
<div id="toolbar">
<img id="home" title="Home" src="3dhop/skins/dark/home.png" /><br />
<img id="zoomin" title="Zoom In" src="3dhop/skins/dark/zoomin.png" /><br />
<img id="zoomout" title="Zoom Out" src="3dhop/skins/dark/zoomout.png" /><br />
<img id="light_on" title="Disable Light Control" src="3dhop/skins/dark/lightcontrol_on.png" style="position:absolute; visibility:hidden;" />
<img id="light" title="Enable Light Control" src="3dhop/skins/dark/lightcontrol.png" /><br />
<img id="full_on" title="Exit Full Screen" src="3dhop/skins/dark/full_on.png" style="position:absolute; visibility:hidden;" />
<img id="full" title="Full Screen" src="3dhop/skins/dark/full.png" />
</div>
<canvas id="draw-canvas" style="background-image: url(3dhop/skins/backgrounds/dark.jpg)" />
</div>
<script type="text/javascript">
var presenter = null;
function setup3dhop() {
presenter = new Presenter("draw-canvas");
presenter.setScene({
meshes: {
"Gargoyle" : {
url: "3dhop/models/full.nxz",
transform: { scale : [15, 15, 15]}
}
},
modelInstances : {
"Model2" : {
mesh : "Gargoyle"
}
}
});
}
function actionsToolbar(action) {
if(action=='home') presenter.resetTrackball();
else if(action=='zoomin') presenter.zoomIn();
else if(action=='zoomout') presenter.zoomOut();
else if(action=='light' || action=='light_on') { presenter.enableLightTrackball(!presenter.isLightTrackballEnabled()); lightSwitch(); }
else if(action=='full' || action=='full_on') fullscreenSwitch();
}
$(document).ready(function(){
init3dhop();
setup3dhop();
});
</script>
<p><img src="https://vg08.met.vgwort.de/na/39863c183c614df7b46ddc8a5aff58d8" width="1" height="1" alt="" /></p>Hochauflösende 3D-Modelle wie man sie mit Hilfe von Lascerscanning oder Photogrammetrie erzeugen kann werden schnell recht groß. Anders als ein “von Hand” (also zum Beispiel mit Blender) erzeugtes Modell besteht ein Gebäudemodell schnell aus Millionen von Flächen und ist viele Megabyte groß. Um solch ein riesiges 3d-Modell auf der Webseite trotzdem performant anzuzeigen, eignet sich der 3D Heritage Online Presenter, kurz 3DHOP. Das Javascript-Projekt wurde vom italienischen Istituto di Scienza e Tecnologie dell’Informazione “A. Faedo” entwickelt und bietet die Möglichkeit große Modelle auflösungsabhängig in mehrere kleinere Modelle aufzuteilen.MicroPython auf dem ESP82662020-06-07T00:00:00+00:002020-06-07T00:00:00+00:00https://www.dirkkoller.de/micropython-esp8266<p>Kein Text</p>Kein TextJetson Nano Headless betreiben2020-05-18T00:00:00+00:002020-05-18T00:00:00+00:00https://www.dirkkoller.de/jetson-nano-headless<p>Die graphische Oberfläche des <a href="https://amzn.to/2Mc3cdG">Jetson Nano</a> ist hinreichend schnell und ganz gut benutzbar. Trotzdem werden viele Nutzer wahrscheinlich gerne auf eine weitere Maus, Tastatur, Monitor oder entsprechende Umschaltmöglichkeiten auf dem Schreibtisch verzichten. Kein Problem, der Nano lässt sich <em>headless</em> betreiben, der Zugang erfolgt also von einem anderen Rechner via <em>ssh</em> oder <em>putty</em>.</p>
<p>Der kleine Rechner muss dazu über ein 5V-Netzteil mit Strom versorgt werden (dazu ist ein Jumper erforderlich, der die beiden Pins zwischen Kamera- und Netzteil-Anschluss überbrückt) und über Micro-USB mit dem Host-Rechner verbunden sein. Außerdem ist ein Netzwerkanschluss zum Beispiel über Ethernetkabel notwendig. Ein Monitor darf dagegen nicht angeschlossen sein, sonst startet der normale graphische Installer. Die Anleitung geht außerdem von einer frisch geflashten SD-Karte aus. Das Jetson Nano Developer Kit SD Card Image erhält man im Jetson Download Center unter https://developer.nvidia.com/embedded/downloads. Momentan ist die Version JP 4.4 vom 21.4.2020 aktuell.</p>
<p>Nach dem Einschalten des Nano sucht man auf dem Linux- oder MacOS-Host in /dev nach dem USB-Gerät. Hier im Beispiel ist das tty.usbmodemFD133. Mit diesem Device wird sich dann mit Hilfe des Terminal Emulators <em>screen</em> verbunden:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>screen /dev/tty.usbmodemFD133 115200
</code></pre></div></div>
<p>Unter Windows funktioniert das ähnlich, die USB-Verbindung wird als COM-Port angelegt und kann mit <a href="https://putty.org/">Putty</a> über eine serielle Verbindung angesprochen werden.</p>
<p><img src="/images/jetson-nano-headless/jetson-nano-headless.jpg" alt="Jetson Nano im Headless-Mode" /></p>
<p>Bei erfolgreicher Verbindung fragt der Installationsassistent <em>oem-config</em> dann über diesen Weg die erforderlichen Daten (Sprache, Location, Keyboard, Zeitzone, Username und -passwort, Partitionsgröße, Netzwerk, Hostname) ab. Ist das geschehen, kann man sich über ssh oder putty mit dem Nano verbinden:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh dirk@jetson-nano
</code></pre></div></div>
<p>Der Vorgang ist ausführlicher im <a href="https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fflashing.html%23wwpID0E0KD0HA">NVIDIA Jetson Linux Developer Guide</a> beschrieben.</p>
<p><img src="https://vg08.met.vgwort.de/na/ce4b815a8fa74c71af183f2633209dfd" width="1" height="1" alt="" /></p>Die graphische Oberfläche des Jetson Nano ist hinreichend schnell und ganz gut benutzbar. Trotzdem werden viele Nutzer wahrscheinlich gerne auf eine weitere Maus, Tastatur, Monitor oder entsprechende Umschaltmöglichkeiten auf dem Schreibtisch verzichten. Kein Problem, der Nano lässt sich headless betreiben, der Zugang erfolgt also von einem anderen Rechner via ssh oder putty.Python mit Anaconda2020-05-13T00:00:00+00:002020-05-13T00:00:00+00:00https://www.dirkkoller.de/anacondaPython mit Jupyter Notebook2020-05-13T00:00:00+00:002020-05-13T00:00:00+00:00https://www.dirkkoller.de/python-jupyter-notebookTensorFlow auf dem Jetson Nano2020-05-12T07:53:28+00:002020-05-12T07:53:28+00:00https://www.dirkkoller.de/tensorflow-jetson-nano<p>Auf Nvidias Jetson-Plattform lassen sich die bekannten Machine Learning-Frameworks wie TensorFlow, PyTorch, Caffee/Caffee2, MXNet und Keras in Form der nativen Vollversionen installieren. In diesem Beitrag wird die Installation des wohl bekanntesten Frameworks, <a href="https://www.tensorflow.org/">TensorFlow</a> von Google, auf dem <a href="https://amzn.to/2Mc3cdG">Jetson Nano</a> gezeigt.</p>
<p>Die Installation ist in dem PDF-Dokument <a href="https://docs.nvidia.com/deeplearning/frameworks/pdf/Install-TensorFlow-Jetson-Platform.pdf">Installing TensorFlow For Jetson Platform</a> beschrieben. Weil alle Mitglieder der Jetson-Familie, also Nano, TX2 und Xavier auf der gleichen Softwareplattform, dem <em>JetPack</em> beruhen, läuft die Installation auch für alle gleich ab.</p>
<p>Davon ausgehend, dass die aktuelle Jetpack-Version (derzeit 4.4) installiert ist, sind die folgenden Schritte durchzuführen:</p>
<p>Installieren der für TensorFlow erforderlichen System-Bibliotheken:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get update
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
</code></pre></div></div>
<p>Installieren und Updaten des Paketmanagers pip3:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install python3-pip
sudo pip3 install -U pip testresources setuptools
</code></pre></div></div>
<p>Installieren diverser Python-Abhängigkeiten:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo pip3 install -U numpy==1.16.1 future==0.17.1 mock==3.0.5 h5py==2.9.0 keras_preprocessing==1.0.5 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11
</code></pre></div></div>
<p>Installieren der aktuellen TensorFlow-Version:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v44 tensorflow
</code></pre></div></div>
<p>Das Ausführen aller Anweisungen benötigt auf dem Nano etwa zwei Stunden. Ob die Installation erfolgreich war, erkennt man daran, dass der Import von TensorFlow in einem Python-Fenster keine Fehler produziert:</p>
<p><img src="/images/tensorflow-jetson-nano/tensorflow-jetson-nano.png" alt="Erfolgreiche Installation von TensorFlow" /></p>
<p>Ist das der Fall, ist TensorFlow einsatzbereit.</p>
<p><img src="https://vg08.met.vgwort.de/na/dc20656f2df942b3bfc32408814a7e50" width="1" height="1" alt="" /></p>Auf Nvidias Jetson-Plattform lassen sich die bekannten Machine Learning-Frameworks wie TensorFlow, PyTorch, Caffee/Caffee2, MXNet und Keras in Form der nativen Vollversionen installieren. In diesem Beitrag wird die Installation des wohl bekanntesten Frameworks, TensorFlow von Google, auf dem Jetson Nano gezeigt.RTKLIB auf dem Raspberry Pi2019-07-23T00:00:00+00:002019-07-23T00:00:00+00:00https://www.dirkkoller.de/rtklib-auf-raspberrypi<p>Im Beitrag <a href="/dgps-mit-rtklib">DGPS mit RTKLIB</a> wurde gezeigt, wie man mit der offenen Software <a href="http://www.rtklib.com">RTKLIB</a> und einem ublox M8T-Empfänger mit geeigneter Antenne GPS-Koordinaten exakt, also im Zentimeterbereich bestimmen kann. Da man nun unterwegs nicht immer das Windows-Notebook mitnehmen möchte (oder womöglich gar keins besitzt) ist die Installation der Software auf einem Raspberry Pi eine portable und günstige Alternative. Der Beitrag erläutert die Schritte von der Installation des Betriebssystems auf dem Pi Zero W bis hin zum ersten Fix.</p>
<h2 id="benötigte-komponenten">Benötigte Komponenten</h2>
<p>Zum Nachvollziehen ist folgendes Equipment erforderlich:</p>
<ul>
<li>Rasperry Pi Zero W (oder ein anderer Pi der WLAN beherrscht )</li>
<li>SD-Karte für den Pi (am besten mind. 8 GB)</li>
<li>u-blox LEA M8T-Empfänger auf einem Board mit USB-Anschluss</li>
<li>eine leistungsfähige GPS-Antenne (z.B. TW3710 von Tallysman)</li>
</ul>
<h2 id="installieren-von-raspbian-lite">Installieren von Raspbian Lite</h2>
<p>Das gängige Betriebssystem für den Pi ist <em>Raspian</em>. Da keine Desktopumgebung benötigt wird (es gibt keine grafischen RTKLIB-User Interfaces für Linux) genügt hier die <a href="https://www.raspberrypi.org/downloads/raspbian/">Lite-Variante von Raspian</a>. Nach dem Download wird das Image auf die Speicherkarte geschrieben, zum Beispiel mit <em>Etcher</em>. Genaue Anweisungen dazu finden sich unter <a href="https://www.raspberrypi.org/documentation/installation/installing-images">https://www.raspberrypi.org/documentation/installation/installing-images</a>.</p>
<h2 id="ssh-zugang-einrichten">SSH-Zugang einrichten</h2>
<p>Vor dem ersten Start muss das Image noch konfiguriert werden, damit man sich mit SSH mit dem Pi verbinden kann.
Dazu legt man eine leere Datei mit Namen <code class="language-plaintext highlighter-rouge">ssh</code> (ohne Endung) im Verzeichnis /boot der Karte an.
Im gleichen Verzeichnis wird außerdem die Datei wpa_supplicant.conf mit folgendem Inhalt angelegt:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="WLAN-Name"
psk="WLAN-Passwort"
}
</code></pre></div></div>
<p>Der Pi ist damit in der Lage sich in das heimische Netzwerk einzuklinken und über SSH erreichbar. Das probiert man am besten aus indem man den Pi startet (SD-Karte einschieben, Stromversorgung an den äußeren Micro-USB-Port anschließen) und anpingt:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ping raspberrypi.local
</code></pre></div></div>
<p>Erscheint hier eine passende Antwort (Reply from …) sollte man sich auch mit SSH anmelden können:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh pi@raspberrypi.local
</code></pre></div></div>
<p>Das Standard-Passwort für den SSH-Zugriff ist <em>raspberry</em> und kann mit sudo raspi-config geändert werden.</p>
<h2 id="rtklib-installieren">RTKLIB installieren</h2>
<p>Der Quellcode für RTKLIB liegt bei Github (https://github.com/tomojitakasu/RTKLIB). Der Pi muss also erst mal um Git-Kung Fu erweitert werden:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt install git
</code></pre></div></div>
<p>Danach kann dann RTKLIB in der stabilen Version 2.4.2 ausgecheckt werden:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/tomojitakasu/RTKLIB.git
</code></pre></div></div>
<p>Und das benötige Programm rtkrcv gebaut werden:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd RTKLIB/app/rtkrcv/gcc
make
</code></pre></div></div>
<p>Die auftretenden Warnungen können ignoriert werden. Zeit für Kaffee, das dauert auf dem Pi ein paar Minuten …</p>
<h2 id="device-herausfinden">Device herausfinden</h2>
<p>Der ublox-Empfänger wird mit der (inneren) Micro-USB-Buche des Pi mit Hilfe eines USB OTG-Kabel verbunden.
Nun muss das Device rausgefunden werden, unter dem der Empfänger erreichbar ist (ttyUSB0, ttyUSB1, ttyACM0 usw).</p>
<p>Am besten probiert man das vermutete Device mit cat /dev/ttyACM0 aus. Im Erfolgsfall sollten Daten des GPS-Empfängers ähnlich den folgenden geliefert werden:</p>
<p>$GNTXT,01,01,02,u-blox AG - www.u-blox.com*4E
$GNTXT,01,01,02,HW UBX-M80xx 00080000 *43cd
…</p>
<h2 id="anpassen-der-config">Anpassen der Config</h2>
<p>Als Nächstes wird eine config-Datei benötigt, mit der rtkrcv gestartet wird. Ein Beispiel liegt unter /RTKLIB/app/rtkrcv/rtkrcv.conf</p>
<p>Am besten fertigt man sich eine Kopie davon an, die man dann mit dem Editor der Wahl (z.B. pico) anpassen kann:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cp rtkrcv.conf my.conf
</code></pre></div></div>
<p>Die Konfiguration von RTKLIB ist recht komplex, hier werden nur die erforderlichen Änderungen aufgeführt:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>inpstr1-type =serial # Inputstream 1 ist der Empfänger am seriellen Port
inpstr1-path =ttyACM0:115200:8:n:1:off # hier gegebenenfalls das herausgefundene Device anpassen
inpstr1-format =ubx # Der Empfänger liefert ubx Raw-Daten
file-cmdfile1 =../../../data/ubx_m8t_glo_raw_5hz.cmd # hier das passende cmd file einsetzen, in dem der Receiver konfiguriert wird (in RTKLIB enthalten)
pos1-navsys =5 # GNSS auswählen, 5=GPS+GLONASS
pos1-posmode =static # Der Empfänger steht still und wird nicht etwa herumgefahren
</code></pre></div></div>
<p>Den Eintrag pos1-snrmask im Conf-File ist anscheinend veraltet (siehe auch Conf-Beispiel in der RTKLIB-Doku), er wird ersetzt durch:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pos1-snrmask_r =off # (0:off,1:on)
pos1-snrmask_b =off # (0:off,1:on)
pos1-snrmask_L1 =35,35,35,35,35,35,35,35,35
</code></pre></div></div>
<p>Die anderen Streams und Logs am besten auf <em>off</em> setzen, um unnötige Fehlermeldungen zu vermeiden.</p>
<p>Dann fehlen noch zwei Rechte zum Ausführen von Dateien:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>chmod +x rtkstart.sh
chmod +x rtkshut.sh
</code></pre></div></div>
<h2 id="start-ohne-korrektur">Start ohne Korrektur</h2>
<p>Nun kann rtkrcv mit der Konfigurationsdatei gestartet werden (am einfachsten aus dem Verzeichnis, in dem sich auch die conf-Datei befindet). Die Antenne sollte vorher mit dem Empfänger verbunden werden und sich außerhalb von Gebäuden befinden.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rtkrcv -o my.conf
</code></pre></div></div>
<p>Dann wird der Server gestartet:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>start
</code></pre></div></div>
<p>Und der Status angezeigt und automatisch aktualisiert (deshalb die 2):</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>status 2
</code></pre></div></div>
<p>In der Statusanzeige sollten valide Satelliten auftauchen und die Position (pos) berechnet werden.</p>
<h2 id="rtklib-fix-mit-korrekturdaten">RTKLIB Fix mit Korrekturdaten</h2>
<p>Nun zur Königsdisziplin der RTK-Vermessung, dem Fix, der zentimetergenauen Position.</p>
<p>Die Antenne sollte dafür von einer Metallscheibe gegen Reflexionen von unten abgeschirmt sein und tolle Rundumsicht haben. In einer Häuserschlucht wird man zumindest mit diesem Einphasen-Empfänger keine fixe Position erhalten.</p>
<p>Wie im <a href="/dgps-mit-rtklib">Beitrag DGPS mit RTKLIB</a> ausführlicher erläutert werden Korrekturdaten zur Bestimmung der fixen Position benötigt. Diese kann man mit einem zweiten Empfänger selber generieren oder von einem Anbieter (z.B. <em>SAPOS</em> in Hessen) via <em>NTRIP</em> über das Internet beziehen. Hier wird letzterer Weg beschritten. Zur Einbindung der Korrekturdaten sind die folgenden Änderungen an der Config erforderlich:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>inpstr2-type =ntripcli # Inpustream 2 ist ein NTRIP-Client
inpstr2-path =username:password@160.44.207.225:2101/VRS_3_2G_HE # Die Zugagnsdaten für SAPOS Hessen
inpstr2-format =rtcm3 # Das Format, in dem die Daten verschickt werden
inpstr2-nmeareq =single # Die eigene Position wird an den Korrekturdienst verschickt
ant2-postype =rtcm # Die Antennenposition der Basis kommt mit den Korrekturdaten
pos2-armode =fix-and-hold # Die gewählte Strategie zur Lösung der Phasen-Mehrdeutigkeiten
</code></pre></div></div>
<p>Ein erneuter Start von <em>rtkrcv</em> zeigt in der Statusanzeige zunächst die eingehenden Korrekturdaten an und führt nach ein paar Minuten zum Fix.</p>
<p><img src="/images/rtklib_pi_fix.jpg" alt="Positions" /></p>
<p><img src="https://vg08.met.vgwort.de/na/0e122578408e4095abf45a7d732e7db4" width="1" height="1" alt="" /></p>Im Beitrag DGPS mit RTKLIB wurde gezeigt, wie man mit der offenen Software RTKLIB und einem ublox M8T-Empfänger mit geeigneter Antenne GPS-Koordinaten exakt, also im Zentimeterbereich bestimmen kann. Da man nun unterwegs nicht immer das Windows-Notebook mitnehmen möchte (oder womöglich gar keins besitzt) ist die Installation der Software auf einem Raspberry Pi eine portable und günstige Alternative. Der Beitrag erläutert die Schritte von der Installation des Betriebssystems auf dem Pi Zero W bis hin zum ersten Fix. Benötigte Komponenten Zum Nachvollziehen ist folgendes Equipment erforderlich: Rasperry Pi Zero W (oder ein anderer Pi der WLAN beherrscht ) SD-Karte für den Pi (am besten mind. 8 GB) u-blox LEA M8T-Empfänger auf einem Board mit USB-Anschluss eine leistungsfähige GPS-Antenne (z.B. TW3710 von Tallysman) Installieren von Raspbian Lite Das gängige Betriebssystem für den Pi ist Raspian. Da keine Desktopumgebung benötigt wird (es gibt keine grafischen RTKLIB-User Interfaces für Linux) genügt hier die Lite-Variante von Raspian. Nach dem Download wird das Image auf die Speicherkarte geschrieben, zum Beispiel mit Etcher. Genaue Anweisungen dazu finden sich unter https://www.raspberrypi.org/documentation/installation/installing-images. SSH-Zugang einrichten Vor dem ersten Start muss das Image noch konfiguriert werden, damit man sich mit SSH mit dem Pi verbinden kann. Dazu legt man eine leere Datei mit Namen ssh (ohne Endung) im Verzeichnis /boot der Karte an. Im gleichen Verzeichnis wird außerdem die Datei wpa_supplicant.conf mit folgendem Inhalt angelegt: ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="WLAN-Name" psk="WLAN-Passwort" } Der Pi ist damit in der Lage sich in das heimische Netzwerk einzuklinken und über SSH erreichbar. Das probiert man am besten aus indem man den Pi startet (SD-Karte einschieben, Stromversorgung an den äußeren Micro-USB-Port anschließen) und anpingt: ping raspberrypi.local Erscheint hier eine passende Antwort (Reply from …) sollte man sich auch mit SSH anmelden können: ssh pi@raspberrypi.local Das Standard-Passwort für den SSH-Zugriff ist raspberry und kann mit sudo raspi-config geändert werden. RTKLIB installieren Der Quellcode für RTKLIB liegt bei Github (https://github.com/tomojitakasu/RTKLIB). Der Pi muss also erst mal um Git-Kung Fu erweitert werden: sudo apt install git Danach kann dann RTKLIB in der stabilen Version 2.4.2 ausgecheckt werden: git clone https://github.com/tomojitakasu/RTKLIB.git Und das benötige Programm rtkrcv gebaut werden: cd RTKLIB/app/rtkrcv/gcc make Die auftretenden Warnungen können ignoriert werden. Zeit für Kaffee, das dauert auf dem Pi ein paar Minuten … Device herausfinden Der ublox-Empfänger wird mit der (inneren) Micro-USB-Buche des Pi mit Hilfe eines USB OTG-Kabel verbunden. Nun muss das Device rausgefunden werden, unter dem der Empfänger erreichbar ist (ttyUSB0, ttyUSB1, ttyACM0 usw). Am besten probiert man das vermutete Device mit cat /dev/ttyACM0 aus. Im Erfolgsfall sollten Daten des GPS-Empfängers ähnlich den folgenden geliefert werden: $GNTXT,01,01,02,u-blox AG - www.u-blox.com*4E $GNTXT,01,01,02,HW UBX-M80xx 00080000 *43cd … Anpassen der Config Als Nächstes wird eine config-Datei benötigt, mit der rtkrcv gestartet wird. Ein Beispiel liegt unter /RTKLIB/app/rtkrcv/rtkrcv.conf Am besten fertigt man sich eine Kopie davon an, die man dann mit dem Editor der Wahl (z.B. pico) anpassen kann: cp rtkrcv.conf my.conf Die Konfiguration von RTKLIB ist recht komplex, hier werden nur die erforderlichen Änderungen aufgeführt: inpstr1-type =serial # Inputstream 1 ist der Empfänger am seriellen Port inpstr1-path =ttyACM0:115200:8:n:1:off # hier gegebenenfalls das herausgefundene Device anpassen inpstr1-format =ubx # Der Empfänger liefert ubx Raw-Daten file-cmdfile1 =../../../data/ubx_m8t_glo_raw_5hz.cmd # hier das passende cmd file einsetzen, in dem der Receiver konfiguriert wird (in RTKLIB enthalten) pos1-navsys =5 # GNSS auswählen, 5=GPS+GLONASS pos1-posmode =static # Der Empfänger steht still und wird nicht etwa herumgefahren Den Eintrag pos1-snrmask im Conf-File ist anscheinend veraltet (siehe auch Conf-Beispiel in der RTKLIB-Doku), er wird ersetzt durch: pos1-snrmask_r =off # (0:off,1:on) pos1-snrmask_b =off # (0:off,1:on) pos1-snrmask_L1 =35,35,35,35,35,35,35,35,35 Die anderen Streams und Logs am besten auf off setzen, um unnötige Fehlermeldungen zu vermeiden. Dann fehlen noch zwei Rechte zum Ausführen von Dateien: chmod +x rtkstart.sh chmod +x rtkshut.sh Start ohne Korrektur Nun kann rtkrcv mit der Konfigurationsdatei gestartet werden (am einfachsten aus dem Verzeichnis, in dem sich auch die conf-Datei befindet). Die Antenne sollte vorher mit dem Empfänger verbunden werden und sich außerhalb von Gebäuden befinden. rtkrcv -o my.conf Dann wird der Server gestartet: start Und der Status angezeigt und automatisch aktualisiert (deshalb die 2): status 2 In der Statusanzeige sollten valide Satelliten auftauchen und die Position (pos) berechnet werden. RTKLIB Fix mit Korrekturdaten Nun zur Königsdisziplin der RTK-Vermessung, dem Fix, der zentimetergenauen Position. Die Antenne sollte dafür von einer Metallscheibe gegen Reflexionen von unten abgeschirmt sein und tolle Rundumsicht haben. In einer Häuserschlucht wird man zumindest mit diesem Einphasen-Empfänger keine fixe Position erhalten. Wie im Beitrag DGPS mit RTKLIB ausführlicher erläutert werden Korrekturdaten zur Bestimmung der fixen Position benötigt. Diese kann man mit einem zweiten Empfänger selber generieren oder von einem Anbieter (z.B. SAPOS in Hessen) via NTRIP über das Internet beziehen. Hier wird letzterer Weg beschritten. Zur Einbindung der Korrekturdaten sind die folgenden Änderungen an der Config erforderlich: inpstr2-type =ntripcli # Inpustream 2 ist ein NTRIP-Client inpstr2-path =username:password@160.44.207.225:2101/VRS_3_2G_HE # Die Zugagnsdaten für SAPOS Hessen inpstr2-format =rtcm3 # Das Format, in dem die Daten verschickt werden inpstr2-nmeareq =single # Die eigene Position wird an den Korrekturdienst verschickt ant2-postype =rtcm # Die Antennenposition der Basis kommt mit den Korrekturdaten pos2-armode =fix-and-hold # Die gewählte Strategie zur Lösung der Phasen-Mehrdeutigkeiten Ein erneuter Start von rtkrcv zeigt in der Statusanzeige zunächst die eingehenden Korrekturdaten an und führt nach ein paar Minuten zum Fix.Mapping mit dem H5202019-02-04T07:53:28+00:002019-02-04T07:53:28+00:00https://www.dirkkoller.de/Mapping-mit-dem-H520<p><img src="https://www.dirkkoller.de/images/data-pilot.jpg" alt="Data Pilot" /></p>
<p>Drohnen sind zu einem wichtigen Werkzeug in der Vermessung geworden. Noch kommen die Ergebnisse in Form georeferenzierter Karten oder 3D-Modelle nicht ganz an die Genauigkeit heran, die mit herkömmlichen Instrumenten wie Tachymeter oder Theodolit erreicht wird. Für viele Anwendungszwecke genügt aber die erreichbare Auflösung. Die Geschwindigkeit, mit der auch größere Flächen erfasst werden können ist auf jeden Fall ein gewichtiges Argument für die Drohnenvermessung.</p>
<!--more-->
<p>Der typische Workflow der Bilderfassung soll hier am Beispiel des YUNEEC H520 vorgestellt werden. Der Hexakopter des chinesischen Unternehmens wurde unter anderem für Bau-, Vermessungs- und Kartierungsanwendungen konzipiert. Er lässt sich mit verschiedenen Kameras ausstatten, unter anderem auch mit einer hochauflösenden Wärmebild- und Restlichtkamera. Für 3D Mapping/Modelling kommt hier die Weitwinkelkamera E90, ebenfalls von YUNEEC zum Einsatz.</p>
<h3 id="ground-control-points">Ground Control Points</h3>
<p>Um georeferenzierte Karten zu erhalten, werden Geokoordinaten benötigt. Die E90 speichert diese in den Exif-Informationen des Bildes ab. Allerdings handelt es sich dabei um herkömmliche GPS-Koordinaten mit der üblichen Ungenauigkeit von ca. 5 Metern. Für Vermessungsaufgaben ist das nicht brauchbar, sodass vor der Befliegung Passpunkte, (engl. Ground Control Points, GCP) ausgelegt werden müssen. Dabei handelt es sich um eingemessene Markierungen, die aus der Luft mit fotografiert werden und später in der Software mit den zugehörigen Koordinaten versehen werden.</p>
<figure style="float: right;" hspace="20">
<img vspace="5" width="200" caption="GCP" src="/images/ground-control-point.jpg" alt="Ground Control Point" />
<figcaption> Ground Control Point</figcaption>
</figure>
<p>Das Einmessen der Kontrollpunkte muss möglichst exakt, also zum Beispiel mit RTK GPS (Genauigkeit etwa 1 cm) erfolgen. Für eine gute Georeferenzierung werden zwischen fünf und acht gleichmäßig verteilte GCPs benötigt. Weitere eingemessene Punkte verbessern das Ergebnis nicht, können aber zur abschließenden Qualitätskontrolle als Checkpoints verwendet werden. Steht ein spezieller Ort wie zum Beispiel ein Gebäude im Fokus der Vermessung, ist ein Kontrollpunkt in der Nähe dieses Orts von Vorteil.</p>
<p>Die Kontrollpunkte sollten aus der Luft gut erkennbar und am Boden fixiert sein. Je nach Flughöhe ist ein flaches Objekt etwa in der Größe eines Bierdeckels gut geeignet. Nicht optimal sind die oft vorhandenen rot lackierten Absteckpfähle auf Baustellen. Die vertikale Ausdehnung (die 3-Dimensionalität) des Pflocks erschwert erfahrungsgemäß das Erkennen und genaue Markieren in der Software.</p>
<h3 id="einstellungen-für-den-automatischen-flug">Einstellungen für den automatischen Flug</h3>
<p>Der Flugcontroller des H520 ermöglich autonome Fotoflüge mit automatischem Start und Landung. Die Arbeit des Piloten liegt eher bei der Vorbereitung des Flugs. Die Planung wird mit der Software <em><a href="http://de.commercial.yuneec.com/comm-de-datapilot">DataPilot</a></em>, entweder auf dem Display der Fernbedienung oder komfortabler auf dem Desktop mit der Mac- oder Windows-Version von DataPilot durchgeführt. Das Markieren des Fluggebietes erfolgt im Survey-Modus, bei dem ein Raster mit dem zu befliegenden Areal auf eine Karte gezogen wird (siehe Abbildung oben).</p>
<p>Im rechts eingeblendeten Fenster sind die Flugparameter einzugeben. Neben der Überlappung - mindestens 75% frontal und 60% seitlich für gute Ergebnisse – ist die Flughöhe ein wichtiger Parameter. Sie hat direkte Auswirkungen auf die Genauigkeit des Ergebnisses. Umso tiefer geflogen wird, umso detaillierter sind die Fotos und später das resultierende Artefakt. Umso länger dauert allerdings auch der Flug, was zu Problemen mit dem Akku führen könnte. Beim H520 hält der Akku fast 30 Minuten und kann sogar während einer Befliegung gewechselt werden. Die erwartete Genauigkeit bei der eingestellten Höhe wird in Form der Ground resolution (auch <em>Ground Sampling Distance</em>, GSD) berechnet. Ein Wert von 1 cm/px bedeutet, dass ein realer Zentimeter als 1 Pixel im Modell abgebildet wird. Wer Wert auf hohe Genauigkeit legt, sollte noch die Kreuzbefliegung aktivieren (Refly at 90 degree offset), bei der das Areal zusätzlich im 90°-Winkel beflogen wird. Auch dieser Punkt wirkt sich auf die Flugzeit aus, die ebenfalls im Vorhinein berechnet wird. Darüber hinaus sollte die Anzahl der resultierenden Fotos bedacht werden. 500 Bilder einer Befliegung mögen ein tolles Modell liefern, könnten aber bei der Auswertung den Rechner überfordern.</p>
<p>Entsprechen alle Einstellungen den Wünschen müssen die Flugdaten noch auf die Fernbedienung bzw. das Fluggerät übertragen werden. Dort harrt die Mission dann bis zum Tag der Befliegung, die möglichst an einem etwas bewölkten Tag durchgeführt wird um harte Schatten auf den Fotos zu vermeiden.</p>
<p>Im nächsten Beitrag wird dann die Verarbeitung des Bildmaterials mit der Photogrammetriesoftware <a href="https://www.pix4d.com">Pix4D</a> vorgestellt.</p>
<p><img src="https://vg08.met.vgwort.de/na/5c6489c3a0784a958ef37ff539da5df9" width="1" height="1" alt="" /></p>Drohnen sind zu einem wichtigen Werkzeug in der Vermessung geworden. Noch kommen die Ergebnisse in Form georeferenzierter Karten oder 3D-Modelle nicht ganz an die Genauigkeit heran, die mit herkömmlichen Instrumenten wie Tachymeter oder Theodolit erreicht wird. Für viele Anwendungszwecke genügt aber die erreichbare Auflösung. Die Geschwindigkeit, mit der auch größere Flächen erfasst werden können ist auf jeden Fall ein gewichtiges Argument für die Drohnenvermessung. Der typische Workflow der Bilderfassung soll hier am Beispiel des YUNEEC H520 vorgestellt werden. Der Hexakopter des chinesischen Unternehmens wurde unter anderem für Bau-, Vermessungs- und Kartierungsanwendungen konzipiert. Er lässt sich mit verschiedenen Kameras ausstatten, unter anderem auch mit einer hochauflösenden Wärmebild- und Restlichtkamera. Für 3D Mapping/Modelling kommt hier die Weitwinkelkamera E90, ebenfalls von YUNEEC zum Einsatz. Ground Control Points Um georeferenzierte Karten zu erhalten, werden Geokoordinaten benötigt. Die E90 speichert diese in den Exif-Informationen des Bildes ab. Allerdings handelt es sich dabei um herkömmliche GPS-Koordinaten mit der üblichen Ungenauigkeit von ca. 5 Metern. Für Vermessungsaufgaben ist das nicht brauchbar, sodass vor der Befliegung Passpunkte, (engl. Ground Control Points, GCP) ausgelegt werden müssen. Dabei handelt es sich um eingemessene Markierungen, die aus der Luft mit fotografiert werden und später in der Software mit den zugehörigen Koordinaten versehen werden. Ground Control Point Das Einmessen der Kontrollpunkte muss möglichst exakt, also zum Beispiel mit RTK GPS (Genauigkeit etwa 1 cm) erfolgen. Für eine gute Georeferenzierung werden zwischen fünf und acht gleichmäßig verteilte GCPs benötigt. Weitere eingemessene Punkte verbessern das Ergebnis nicht, können aber zur abschließenden Qualitätskontrolle als Checkpoints verwendet werden. Steht ein spezieller Ort wie zum Beispiel ein Gebäude im Fokus der Vermessung, ist ein Kontrollpunkt in der Nähe dieses Orts von Vorteil. Die Kontrollpunkte sollten aus der Luft gut erkennbar und am Boden fixiert sein. Je nach Flughöhe ist ein flaches Objekt etwa in der Größe eines Bierdeckels gut geeignet. Nicht optimal sind die oft vorhandenen rot lackierten Absteckpfähle auf Baustellen. Die vertikale Ausdehnung (die 3-Dimensionalität) des Pflocks erschwert erfahrungsgemäß das Erkennen und genaue Markieren in der Software. Einstellungen für den automatischen Flug Der Flugcontroller des H520 ermöglich autonome Fotoflüge mit automatischem Start und Landung. Die Arbeit des Piloten liegt eher bei der Vorbereitung des Flugs. Die Planung wird mit der Software DataPilot, entweder auf dem Display der Fernbedienung oder komfortabler auf dem Desktop mit der Mac- oder Windows-Version von DataPilot durchgeführt. Das Markieren des Fluggebietes erfolgt im Survey-Modus, bei dem ein Raster mit dem zu befliegenden Areal auf eine Karte gezogen wird (siehe Abbildung oben). Im rechts eingeblendeten Fenster sind die Flugparameter einzugeben. Neben der Überlappung - mindestens 75% frontal und 60% seitlich für gute Ergebnisse – ist die Flughöhe ein wichtiger Parameter. Sie hat direkte Auswirkungen auf die Genauigkeit des Ergebnisses. Umso tiefer geflogen wird, umso detaillierter sind die Fotos und später das resultierende Artefakt. Umso länger dauert allerdings auch der Flug, was zu Problemen mit dem Akku führen könnte. Beim H520 hält der Akku fast 30 Minuten und kann sogar während einer Befliegung gewechselt werden. Die erwartete Genauigkeit bei der eingestellten Höhe wird in Form der Ground resolution (auch Ground Sampling Distance, GSD) berechnet. Ein Wert von 1 cm/px bedeutet, dass ein realer Zentimeter als 1 Pixel im Modell abgebildet wird. Wer Wert auf hohe Genauigkeit legt, sollte noch die Kreuzbefliegung aktivieren (Refly at 90 degree offset), bei der das Areal zusätzlich im 90°-Winkel beflogen wird. Auch dieser Punkt wirkt sich auf die Flugzeit aus, die ebenfalls im Vorhinein berechnet wird. Darüber hinaus sollte die Anzahl der resultierenden Fotos bedacht werden. 500 Bilder einer Befliegung mögen ein tolles Modell liefern, könnten aber bei der Auswertung den Rechner überfordern. Entsprechen alle Einstellungen den Wünschen müssen die Flugdaten noch auf die Fernbedienung bzw. das Fluggerät übertragen werden. Dort harrt die Mission dann bis zum Tag der Befliegung, die möglichst an einem etwas bewölkten Tag durchgeführt wird um harte Schatten auf den Fotos zu vermeiden. Im nächsten Beitrag wird dann die Verarbeitung des Bildmaterials mit der Photogrammetriesoftware Pix4D vorgestellt.