Street View Car mit Raspberry Pi
So bauen Sie Ihr eigenes Street View Auto zusammen
Raspberry Pi bietet kreativen Menschen eine enorme Vielfalt an Einsatzmöglichkeiten: Bauen Sie mit PC Magazin Professional Ihre eigene Version eines "Street View Car".

Fast jeder kennt die Google Street View-Cars, mit denen der amerikanische Suchmaschinen-Anbieter die Aufnahmen für das Projekt Google Earth auch in einigen deutschen Städten gemacht hat. In diesem Projekt soll nun ein Spielzeugauto mithilfe des Raspberry Pi nahezu dieselben Aufgaben übernehmen wie das Original. Wer einen ersten Blick auf die kleine Platine des Raspberry Pi wirft, wird neben den Schnittstellen für USB und das Netzwerk auf jeden Fall auch die sogenannte GPIO-Pinnsteckleiste (General Purpose Input/Output) bemerken. Durch diese GPIO-Ein- und Ausgänge sowie kleine und handliche Erweiterungen sind die Einsatzmöglichkeiten des Raspberry Pi enorm.
So ist dann auch das gleichzeitige Verarbeiten von verschiedenen Dingen für den verbauten Prozessor kein Problem. Zudem können Anwender dank der verfügbaren USB-Anschlüsse unproblematisch externe Geräte wie beispielsweise eine Webcam und einen WLAN-Stick zusätzlich in Betrieb nehmen und diese dann mithilfe von Skripten steuern. Dabei können Sie die GPIO-Leiste für die Steuerung eines herkömmlichen Funkautos (RC-Cars) nutzen, während die USB Anschlüsse für den Einsatz der Webcam auf dem Autodach Verwendung finden. Schließen nutzen wir einen WLAN-USB-Stick für die Verbindung vom Steuercomputer zum Raspberry Pi, der per Akku-Pack betrieben und sich ebenfalls im oder auf dem Funkauto befindet.
Neben der USB- und Netzwerkschnittstelle lädt vor allem die GPIO-Schnittstelle des Raspberry Pi zum Basteln und zum Ausprobieren ein. So bringen Sie nicht nur innerhalb kurzer Zeit etwa eine LED auf einem Steckboard zum Leuchten, sondern realisieren ganze Schaltungen und Fernbedienungen mit dem Einplatinen-Computer. Eine Grundvoraussetzung dafür ist es, dass Sie den Zugriff per Software auf die Schnittstelle, beziehungsweise die Funktionen der einzelnen GPIO-Pins in Ihrem Projekt realisieren.
Start Selbstbau-Projekts
- Raspberry Pi,
- USB-Kamera (für rund 10 Euro erhältlich),
- WLAN-USB-Stick für Raspberry Pi (rund 12 Euro),
- Funkauto (steht bereits in der 30-Euro-Klasse zur Verfügung),
- Akku-Pack für Raspberry Pi (5V, idealerweise 700-1000 mA, Kosten rund 30 bis 40 Euro),
- Schaltung für Fernbedienung (IC ULN2803A, circa 60 Cent),
- natürlich die entsprechenden Werkzeuge: Schraubendreher-Set, Lötkolben (dünne Spitze, nicht mehr als 250 Watt!), besser ist auf jeden Fall eine Lötstation,
- diverse Kleinteile wie Klebeband, Flachbandkabel und Steckverbindung,
- sowie nicht zuletzt etwas handwerkliches Geschick.
Unabhängig davon, wie viel handwerkliches Geschick und Geduld Sie auch mitbringen - der Umgang mit einem Lötkolben sollte bei Ihnen keine schlaflosen Nächte auslösen, wenn Sie sich an dieses Selbstbau-Projekt wagen. Wer keine ruhige Hand und kein gutes Auge hat, sollte jemanden an die Sache heranlassen, der damit Erfahrung hat, oder die Fernbedienung von einem Bekannten konfektionieren lassen. Hier wird die einfachste Lösung mithilfe des IC-Bausteins ULN2803A vorgestellt, da Sie in diesem Fall nur die nötigsten Kabel zu verbinden beziehungsweise auf der Platine löten müssen.
GPIO-Pin-Belegung aufgeklärt
In Abhängigkeit von der gekauften Raspberry-Pi-Version sind die Pin-GPIO-Bezeichnungen leicht unterschiedlich: Um nach dem Kauf und Lieferung zu kontrollieren, welche genaue Version des Raspberry Pi geliefert wurde, können Sie die Kommandozeile nutzen. Mit dem Linux-Befehl:
cat /proc/cpuinfo
Lassen Sie sich die Hardwareinformationen - hier handelt es sich um die Prozessorinformationen - auf dem Bildschirm ausgeben. In der tabellarischen Ausgabe suchen Sie dann nach dem Eintrag "Revision" - an dieser Stelle steht dann beispielsweise für den Code 1 das Modell A. Für den B-Nachfolger nutzt das System den Code 2 beziehungsweise eine weitere unwesentlich geänderte Revision 3. Für das Modell B Revision 2 verwendet der Hersteller die Codes 4, 5 und 6. Für die Nummerierung der Pins auf der Platine ist es hingegen egal, welche Revision der Raspberry Pi hat - die Zählrichtung ausgehend von Pin 1 ist immer dieselbe.
In diesem Zusammenhang ist ein Tipp ganz wichtig: Geht es um die C-Programmierung und den Shell-Zugriff, so lohnt es sich, die kostenlose Wiring- PI-API näher zu betrachten. Sie bieten dem Anwender ganz ähnlich der oft zum Einsatz kommenden Python-Bibliothek einen einfacheren Zugriff auf die GPIO-Pins des Raspberry Pi. In diesem Projekt kommt jedoch die herkömmliche, "traditionelle" Methode für den Zugriff auf die GPIO-Pins zum Einsatz.

Fernbedienung für das Auto modden
Grundsätzlich zapfen Sie die Steuerung für die Fernbedienung des Autos an. Je nach Art der verwendeten Funkfernbedienung benötigen Sie zum Öffnen des Gehäuses eventuell ein Spezialwerkzeug: Bei manchen Modellen kommen Sie mit einem normalem Schlitz- oder Kreuzschlitzschraubendreher nicht weit, denn die Hersteller verwenden hier spezielle Torx-Schrauben.
Öffnen Sie also die Funkfernbedienung/Steuerung des Autos mit dem jeweils passenden Werkzeug. Drehen Sie dafür die Fernbedienung auf den Rücken, entnehmen die Batterien und arbeiten sich dann weiter vor, bis die Platine zu sehen ist. Anfassen sollten Sie die Platine allerdings erst dann, wenn Sie die Batterien aus der Fernbedienung entfernt haben! Nun heben Sie die Platine vorsichtig aus dem Gehäuse: Dazu ist es manchmal noch notwendig, dass Sie ein paar kleine Schrauben lösen, bevor Sie die Platine problemlos anheben können. Danach können Sie die Platine vom Gehäuse lösen und genauer inspizieren. In der Regel ist der Chip mit einer Typenbezeichnung samt Nummer beschriftet, manchmal ist auch der Hersteller samt Logo angegeben. Notieren Sie an dieser Stelle unbedingt alle relevanten Informationen.

Wer das Gehäuse der Fernbedienung geöffnet hat, muss sich daran anschließend auf die Suche nach dem IC machen, der für die Steuerung beziehungsweise für die Funkübertragung der Signale zur Steuerung zuständig ist. Betrachten Sie den IC-Chip auf der Platine genauer, dann sehen Sie an der Seite (s. o. im Bild "Modden" der Fernbedienung) eine Einkerbung, mit der die Richtung der Pins bestimmt wird. So können Sie später mit einem vorliegenden Datenblatt und der Zählrichtung die Funktion der einzelnen Beinchen des ICs bestimmen.
Wichtiger Schritt: den Schaltplan besorgen
Haben Sie auf der Platine den richtigen IC gefunden, kennen Sie aber immer noch nicht die Pin Belegung sowie die Leistungswerte des Chips. Dafür ist ein Datenblatt des ICs unabdingbar, denn nur so können Sie beurteilen, ob sich eine gewünschte Schaltung mit den vorhandenen Mitteln überhaupt realisieren lässt.

Nun können Sie am Computer die Recherche-Tätigkeit aufnehmen: Wer im Internet sucht, findet in der Regel zu den gängigsten ICs und Chips die passenden Datenblätter und Schaltdiagramme und damit dann auch die weiteren Informationen, die er für seine Schaltung benötigt. Bei den Modellen aus China ist dies meist ein Chip aus der TX-2B-Familie, der für den "Versand" der Steuerungsinformationen zuständig ist. Für den Empfang befindet sich im Auto selbst das passende Gegenstück - der RX-2B-Chip. In diesem Fall suchen wir einfach per Suchmaschine nach der IC-Chipbezeichnung der geöffneten Fernbedienung: Mit den Suchbegriffen "TX2 Datasheet " steht schnell eine Datei im PDF-Format bereit , die eine genaue Pin-Belegung des Chips beinhaltet.
Im nächsten Schritt muss ein Bastler nun also die Pins notieren, die für die Schaltung notwendig sind: Die wichtigsten Anschlüsse sind dabei neben der sogenannten Masse (GND) die eigentliche Steuerung mit den Pins für Links, Rechts, Vor und Zurück (s. o. Bild Rasperry PI Modell B ). Um die Stromversorgung für den Chip kümmern sich dabei die eingebauten Batterien in der Fernbedienung. Das von uns für diesen Test verwendete Modellfahrzeug besaß keine Turbo-Funktion, sodass der Turbo-Pin hier auch nicht weiter betrachtet wird. Im nächsten Schritt benötigen Sie nun eine Schaltung, mit deren Hilfe Sie die Steuerfunktionen der Fernbedienung mit den GPIO-Ein- und Ausgängen des Raspberry Pi koppeln können. Die Übersetzung beziehungsweise Zuordnung der GPIOs zu den entsprechenden Steuereingängen der Fernbedienung übernimmt hier der flexible ULN2803A-IC. Wie dieser mit der GPIO-Platine verbunden wird, ist im oberen Teil des Kastens auf der Seite 123 zu sehen. In diesem Kasten finden Sie auch die Information dazu, wie Sie eine notwendige Leitung vom Raspberry Pi zur Platine der Fernbedienung aufbauen müssen und wie Sie die Leitungen von den Ausgängen der IC-Schaltung des ULN2803A an die Pins des Handsenders führen. Mit diesen Informationen sind Sie nun dafür gerüstet, die Schaltung zum Test auch auf die Platine zu bringen.
Schaltung zusammenbauen
Das Schaltungsdesign ist nur der erste Schritt, die nächste Herausforderung ist das Zusammenbauen der Schaltung: Grundsätzlich benötigen Sie eine ruhige Hand beim Anlöten der Kabel - vor allem dann, wenn die Kabel direkt am IC auf einer Platine angelötet werden wollen. Hier können Sie einfach ein ausrangiertes IDE-Kabel nutzen und dort eine Kabelader einzeln herunterziehen und entfernen, doch auch normale Kabellitzen aus Kupferdraht sind sehr gut geeignet. Das Löten selbst sollte für geübte und ruhige Hände kein Problem darstellen, vorausgesetzt das Equipment stimmt. Beim Verlöten beziehungsweise für die Vorbereitungen der Kabelverbindungen gehen Sie grundsätzlich wie folgt vor: Die Kabel, mit denen Sie den Steuerchip anzapfen möchten, werden zunächst mit einem Messer oder einer Abisolierzange am Ende abisoliert und mit den Fingern die kleinen Einzeldrähtchen zu einem Ganzen verdrillt.
Damit verhindern Sie, dass einzelne Drähtchen beim Verlöten abstehen und so der Schaltkreis nicht funktioniert, weil dieses noch auf einen anderen Kontakt verbunden ist. Das Löten auf der Platine verlangt höchste Konzentration bei der Arbeit. Sind sämtliche Anschlüsse verlötet, fixieren Sie die Kabel mit einem Klebestreifen, damit die einzelnen Kabel beim späteren Zusammenbau der Fernbedienung nicht abgerissen oder irgendwo eingeklemmt werden können. Sind die Kabel fein säuberlich verlötet, kann es langsam, aber sicher wieder an den Zusammenbau der Fernbedienung gehen. Die Königslösung ist natürlich ein Selbstbau samt Motorensteuerung, wie es beispielsweise auf der Blog-Webseite anschaulich demonstriert wird, sie würde jedoch den Rahmen dieses Artikels sprengen.
Per Terminal: RaspiCAR-Erlkönig unterwegs
Mit dem RaspiCAR steuern Sie nun das Funkauto mittels der "angezapften" Fernbedienung mithilfe von Raspberry Pi: Dabei können Sie zunächst hier ein Terminal in Form von einfachen Shell-Kommandos nutzen und so mit der Zeit dafür entsprechende Skripte und Bibliotheken entwickeln. Viele Nutzer wählen einen anderen Weg: Sie entscheiden sich für eine Raspberry Pi-taugliche Sprache wie Python oder C, mit denen sich auch umfangreichere Projekte stemmen lassen. Für den Funktionstest und die Probefahrt des modifizierten RaspiCAR-Erlkönigs reicht hier ein Shell-Skript völlig aus. Dabei werden zunächst sämtliche Buttons der Fernbedienung, die auf einen GPIOPort geführt sind, per Shell-Skript initialisiert. Damit initialisieren Sie zunächst die notwendigen Pins, stellen die Richtung derselben ein und erlauben per Befehl "chmod" die Verwendung der virtuellen Dateien auch für den Raspberry Pi, die keine Root-Rechte besitzen. Sie können eine derartige Skript-Datei mithilfe des nano-Editors schnell erstellen. Dazu rufen Sie den Befehl:
nano streetview-init.sh
und tragen dort zunächst die Befehle ein, die zur Initialisierung der Steuerung des RaspiCARs beziehungsweise der Pins der Fernbedienung notwendig sind. Sie finden die Datei streetview-init.sh zusammen mit den anderen Programmdateien des Projekts in einer ZIP-Datei mit dem Namen Streetview_Projekt.zip auf unserem Server. Nach dem Speichern und Beenden dieses Shell-Skripts setzen Sie zunächst die Rechte der Dateien auf Ausführen und können es anschließend starten: Das geschieht mit den folgenden Befehlen von der Kommandozeile aus:
chmod +x streetview-init.sh sudo ./streetview-init.sh
Auch das Vorwärtsfahren und Stoppen können Sie nun direkt von der Kommandozeile aus starten:
echo "1" > /sys/class/gpio/gpio23/value echo "0" > /sys/class/gpio/gpio23/value

Sie werden sehen: Die Schaltung funktioniert grundsätzlich, doch die Sache mit dem Bremsen und Steuern muss in der Regel noch ein wenig geübt werden. Im nächsten Schritt lässt sich die Steuerung aber noch etwas optimieren: Denn wenn das Auto vorwärts fährt, kann es nicht rückwärtsfahren. Deswegen sorgen Sie sicherheitshalber dafür, dass beim Vorwärtsfahren der GPIO 18 fürs Rückwärtsfahren ausgeschaltet ist. Analog gilt dies beim Rückwärtsfahren sowie beim Lenken nach links und nach rechts. Ein entsprechendes Skript mit der Bezeichnung streetview-vorwaerts.sh finden Sie ebenfalls in der ZIP-Datei. Nach diesem Muster sollte es Ihnen dann auch nicht schwerfallen, die passenden Skripte streetview-rechts.sh, streetview-links.sh oder auch streetview-stop.sh selbst zu erstellen. Diese Skripte schalten dann jeweils nur den entsprechenden GPIOPin ein und die restlichen GPIOs aus. Für die ersten Fahrversuche reichen die Skripte völlig aus, hier können Sie diese nach Belieben erweitern und verändern. Viel Spaß nun bei der Autosteuerung mit dem selbstgebauten RaspiCAR.
Webcam einrichten und konfigurieren
Die Bildqualität unseres PC Magazin Professional Street View-Car steht und fällt mit der Optik und Lichtstärke der eingesetzten Kamera sowie deren Grafik-Engine. Naturgemäß ist der Raspberry Pi bei einfacheren Kameras wie beispielsweise der kompatiblen PS3-Webcam etwas schwach auf der Brust, wenn es um die Bildqualität geht.Das tut dem Bastelvergnügen jedoch keinen Abbruch, wir begnügen uns hier einfach mit der Pixelanzahl 320 x 240 und stellen somit eine flotte Bearbeitung auf dem Raspberry Pi sicher. Für die Nutzung der Kamera auf der Kommandozeile ist hier das Werkzeug fswebcam vorgesehen, das Sie mit dem folgenden Befehl auf dem Raspberry Pi installieren:
sudo apt-get install fswebcam
Durch Aufruf von
man fswebcam
erfahren Sie mehr über den Funktionsumfang des Werkzeugs. Verbinden Sie die USB-Webcam mit dem USB-Anschluss und prüfen dann per dmesg beziehungsweise lsusb, ob das Gerät auch ordnungsgemäß vom System erkannt worden ist. In der Regel wird die Kamera als Videodevice in /dev/video0 eingebunden. In diesem Fall starten Sie mit dem Kommando:
/usr/bin/fswebcam -r 320x240 -i 0 -d /dev/video0 --jpeg 95 --shadow --title "RaspiCAR"--subtitle "CAM-Front" --info "Monitor: Active"-v /home/pi/mailpic.jpg
eine Aufnahme und legen diese zunächst im Verzeichnis/home/pi mit der Bezeichnung mailpic.jpg ab. Prüfen Sie per ls /var/tmp-Kommando, ob fswebcam hier erfolgreich eine Aufnahme abgelegt hat. Für den regelmäßigen, wiederkehrenden Einsatz nutzen Sie den fswebcam-Befehl in einer Schleife oder koppeln das Kommando im Skript mit der Steuerung des Autos: Nur wenn das Auto per Fernbedienung bewegt wird, werden Aufnahmen gemacht. Bei einer zu klein geratenen Speicherkarte im Raspberry Pi ist auch aus Speicherplatzgründen der sofortige Versand des Bildes per WLAN eine gute Sache. Um Daten vom Raspberry Pi automatisiert auf eine Freigabe zu übertragen, reicht ein einfacher Copy-Befehl in der Konsole aus. Am bequemsten ist es jedoch, auf eine gemeinsame nutzbare Netzwerkfreigabe über Samba oder NFS im Heimnetz zuzugreifen. Dafür fügen Sie im Fotografie-Skript die folgenden Kommandos ein:
scp $DATE_FILE$FILE user@<IP-ADRESSE>:/ VERZEICHNISNAME rm $DATE_FILE$FILE
ein und passen diese auf Ihre Netzwerkumgebung an. Nach dem Kopieren per scp/cp wird die Bilddatei anschließend per rm-Kommando auf der lokalen SDKarte des Raspberry Pi gelöscht. Im nächsten Schritt werden sämtliche Komponenten zusammengeführt und auf dem Spielzeug-Auto montiert.
RaspiCAR, Webcam und Raspberry Pi vereinen
Das Wichtigste vorab: In diesem Workshop wurde auf zwei Raspberry Pi-Computer zurückgegriffen - der eine ist dabei für die Steuerung des RaspiCARs zuständig, während der andere mit Klebeband auf dem RaspiCAR montiert wurde. Er kümmert sich ausschließlich um die Fotografien sowie den Transport der gemachten Aufnahmen auf eine lokale Netzwerkfreigabe. Alternativ kann die Steuerung des RaspiCARs auch von einem lokalen Desktop-Computer erfolgen - ein Raspberry Pi ist hier also nicht zwingend notwendig. Wer auf das Modding der Fernbedienung verzichten möchte und stattdessen das Modell-Auto direkt anzapft, kann dies am einfachsten an der Funkgegenstelle - also der Empfangseinheit in Form des RX-2B-Chips im RaspiCAR - tun und spart sich hier die Funkfernbedienung. In diesem Fall würde das Auto dann über eine aktive WLAN-Funkverbindung gesteuert.
Sind Sie mit dem Raspberry Pi unterwegs und ist keine Steckdose in Sicht, dann können Sie sich idealerweise im Handy-Zubehörmarkt bedienen und den Raspberry Pi sozusagen als mobile Lösung nutzen. Wichtig ist hier die Ausgangsspannung von 5 V. Damit der Raspberry Pi entsprechend Power bekommt und auch eine Zeit lang betrieben werden kann, empfehlen wir einen Akku mit mindestens 700mAh - besser mehr.
RaspiCAR-Montage - kleben und fahren
Je nach verwendetem Raspberry Pi Gehäuse und Größe des genutzten Funkautos kommt es darauf an, wo beziehungsweise wie Sie den Raspberry Pi unterbringen. Bei größeren Modellen wie dem Modell Autobahnpolizei der Firma Dickie lässt sich der Raspberry sogar unter dem Plastikgehäuse des Funkautos unterbringen: Allerdings muss der Bastler hier für die Kabel passende Öffnungen schaffen.

Bei unserem Erlkönig-Projekt wurde der Raspberry Pi einfach per Klebeband zusammen mit dem Akkupack auf dem Autodach befestigt. Anschließend können Sie das notwendige Zubehör wie beispielsweise die Webcam oder den WLAN-USB-Stick für die Verbindung zum beziehungsweise vom RaspiCAR einstecken. Ist der Raspberry Pi einmal fest mit einem Klebeband auf dem Dach montiert, stellt der Anschluss der weiteren Komponenten kaum noch ein Problem dar. Im nächsten Schritt nehmen Sie den RaspiCAR nun endlich in Betrieb.
Street View-Auto steuern über Webseite
Das Schalten und Steuern eines GPIO-Pins über die Konsole ist zwar machbar und möglich, in der Praxis jedoch ziemlich lästig und fehleranfällig. In der Zeit, in der Sie den Bremsbefehl eingetragen haben, ist der RaspiCAR womöglich schon mit einem Unfallschaden liegengeblieben. Bequemer ist die schnelle Steuerung mit der Maus - beispielsweise über eine Web-Seite. Wer hier schnell den einen oder anderen GPIO-Anschluss über den Web-Browser zugänglich machen möchte, kann die webiopi-API nutzen. Sie steht kostenlos zum Download und zur Nutzung zur Verfügung. Die Installation dauert nur ein paar Minuten:
wget https://webiopi.googlecode.com/files/ WebIOPi-0.5.3.tar.gz tar xvzf WebIOPi-0.5.3.tar.gz cd WebIOPi-0.5.3 sudo ./setup.sh
In unserem Beispiel war Python bereits auf dem Raspberry Pi installiert, lediglich drei Pakete wurden vom Setup-Skript nachgezogen und installiert. Nach der Installation können Sie webiopi nun über die Konsole starten. Der folgende Befehl startet es mit der neueren Python-Version V3, die leider inkompatibel zum Vorgänger V2 ist:
sudo python3 -m webiopi
Wer hingegen die Erreichbarkeit beziehungsweise die Nutzung über WebIOPi dauerhaft einschalten möchte, der nutzt den automatischen Start von WebIOPI beim Booten des Raspberry Pi. Dies gelingt mit dem Kommando:
sudo update-rc.d webiopi defaults
Um WebIOPi nun als Service beim Start des Raspberry Pi zu konfigurieren, nutzen Sie den Befehl:
sudo /etc/init.d/webiopi start
Bei einer automatisierten Nutzung des WebIOPi-Service sollten Sie aus Sicherheitsgründen das Kennwort raspberry in ein sicheres Kennwort ändern. Standardmäßig erreichen Sie nun die GPIO-Pins über die IP-Adresse des Raspberry Pi in Ihrem Heimnetz (in diesem Beispiel die 192.168.123.31), wobei Sie den Port 8000 nutzen müssen. In unserem Beispiel ist das dann die "8000/webiopi:Adresse", die den Anwender zum Login-Dialog bringt. Hier kann er sich dann mit dem Standard-Benutzer webiopi und dem Kennwort raspberry anmelden. Beachten Sie dabei bitte, dass der Web-Server und damit die Web-Seite nur solange erreichbar und nutzbar sind, solange Sie in der SSH-Konsole den Web-Server gestartet halten.
Brechen Sie die Verarbeitung des Python-Skriptes per Tastenkombination [STRG-C] im Terminal ab, dann ist keine Steuerung mehr möglich. Per Klick auf den OUT/IN-Button ändern Sie die Flußrichtung des entsprechenden GPIOs-Pins. Klicken Sie hingegen auf den Pin (die Nummer) selbst, dann ändern Sie den Status (High/Low) des entsprechenden Pins. Nach der Installation können Sie umgehend mit dem RaspiCAR loslegen:
Für die Steuerung des Wagens wurde die Funkfernbedienung bekanntlich mit den Pins des ICs verbunden, die dann wiederum mit den Pins des Raspberry Pi verbunden sind. Die Tabelle zeigt die GIOPS, die für die entsprechende Funktion definiert sind. Viel Spaß bei den ersten Fahrversuchen per Webseite und allzeit "Gute Fahrt" mit dem Street-View Car.