CPU-Erweiterung für den c't-Bot
Einleitung
Die Standard-Hardware des c't-Bots lässt sich mit dem umfangreichen Software-Framework inzwischen nahezu vollständig ausreizen. Um weitere Features implementieren zu können, entstand deshalb die Idee, den c't-Bot um eine CPU-Erweiterung zu ergänzen, die auch im c't Sonderheft c't Hardware Hacks vorgestellt wird.
Diese Wiki-Seite soll einen Einblick in die neuen Möglichkeiten bieten und grundlegende Informationen liefern, wie sich ein c't-Bot mit einem BeagleBoard erweitern lässt und welche Anpassungen an Hard- und Software dafür nötig sind. Sie enthält im Allgemeinen keine einsteigerfreundlichen und vollständigen Schritt-für-Schritt-Anleitungen, da die CPU-Erweiterung den Bastel-Aspekt des c't-Bot Projekts in den Vordergrund stellt und aktuell keine abgeschlossene Baugruppe oder fertige Software umfasst. Vielmehr geht es darum, Ideen und Lösungsansätze zusammenzutragen, um die Erweiterung auf diese Weise auszubauen und zu optimieren. Die Seite befindet sich daher erst im Aufbau und ist dementsprechend teilweise noch etwas unvollständig -- sie wird aber stetig ergänzt.
Herzlich willkommen sind neben Feedback und Fragen auch jederzeit eigene Ideen und weitere Vorschläge oder Verbesserungen: zum Support.
Idee
- Zusätzlich zur c't-Bot Hauptplatine ein BeagleBoard (BB) montieren (anstelle der offiziellen WLAN- / MMC-Erweiterung).
- ATmega des Bots führt low-level Code aus und kommuniziert mit BB über eine serielle Schnittstelle (UART, SPI).
- BB führt eine Linux-Distribution (z.B. Ubuntu für ARM) aus, ermöglicht SSH Login und Filetransfer auf dem / zum Bot, NFS mounts, Ausführung fast jeder Linux-Software.
- BB bietet weitere Schnittstellen (USB, LAN, I2C, Audio, GPIOs) für zusätzliche Hardware (WLAN USB-Stick, weitere Sensoren, Kamera).
- Funktionalität des WiPorts wird mit einem einfachen WLAN USB-Stick (einzige Voraussetzung: Treiber in Linux ab 2.6.39 enthalten) und socat bereitgestellt.
- BB GPIO-Pins steuern Reset-Leitung des ATmegas und fragen Fehler- / Batteriestatus ab.
- Audio-Ports des BBs ermöglichen Sound- und Sprachausgabe (Verstärkerschaltung nötig) sowie Mikrofon (Verstärkerschaltung nötig) oder Line-In Anschluss.
- Erweiterung des c't-Bots um eine Kamera, die über dem Kamera-Port des BB xM oder per USB angeschlossen wird.
Voraussetzungen
- Bastelinteresse in Hard- und Software.
- c't-Bot (oder kompatiblen Roboter / ähnliche Hardware).
- Linux-PC / Linux-VM (getestet: Ubuntu ab 11.04, auf anderen Distributionen vermutlich auch möglich), um Kernel und Bootloader für ARMv7-A zu übersetzen.
- Empfohlene Alternative: Fertige Binaries benutzen.
- Cross-Toolchain nach ARM-Linux: verfügbar für Linux (getestet unter Ubuntu ab 11.04, auf anderen Distributionen vermutlich auch möglich), Mac (getestet: Mac OS 10.6 und 10.7) und Windows (mit Sourcery CodeBench Litte Edition). Damit lässt sich der Bot-Code für ARM-Linux übersetzen.
- c't-Bot Toolchain installiert.
Hardware
Die CPU-Erweiterung für den c't-Bot umfasst nicht nur das CPU-Board, sondern auch ein notwendiges Interface-Board, das die Verbindung zur c't-Bot Hardware herstellt und insbesondere eine Konvertierung der Signal-Spannungspegel von 1.8 V (BeagleBoard) auf 5.0 V TTL (c't-Bot Hardware) vornimmt.
BeagleBoard
Um den c't-Bot mit einer leistungsfähigeren CPU auszustatten, fiel die Wahl auf das BeagleBoard von Texas Instruments. Diese Seite umfasst keine detaillierte Anleitung zur Einrichtung eines BeagleBoards, sondern verweist im Folgenden auf die entsprechenden (meinst englischsprachigen) Informationen der BeagleBoard-Community.
Technische Daten / Versionen
Es gibt derzeit (Stand Januar 2012) drei Versionen des BeagleBoards:
- Das originale (ursprüngliche) BeagleBoard Rev. C4, im Folgenden als BeagleBoard bezeichnet:
- Super-scalar ARM Cortex-A8 ( OMAP3530), CPU 720 MHz, DSP 520 MHz
- 256 MB LPDDR RAM
- 256 MB NAND Flash
- High-speed USB 2.0 OTG port
- High-speed (only) USB 2.0 host port
- Stereo audio out / in
- DVI-D video out
- S-video out
- SD/MMC slot
- Preis: 125 $ (zzgl. EUSt, US-Import) / 119 € (in Deutschland)
- Das BeagleBoard-xM Rev. C, welches sich im Wesentlichen durch einen schnelleren Prozessor, mehr Speicher und einen integrierten USB-Hub auszeichnet (wo der Unterschied von Bedeutung ist, ist es als BeagleBoard-xM bezeichnet):
- Super-scalar ARM Cortex-A8 ( DM3730), CPU 1 GHz, DSP 800 MHz
- 512 MB LPDDR RAM
- High-speed USB 2.0 OTG port
- On-board four-port high-speed USB 2.0 hub with 10/100 MBit Ethernet
- Stereo audio out / in
- DVI-D video out
- S-video out
- microSD slot and 4 GB microSD card
- Camera port
- Overvoltage Protection
- Preis: 149 $ (zzgl. EUSt, US-Import) / 143 € (in Deutschland)
- Das BeagleBone-Board ist das neueste Board aus der BeagleBoard-Familie. Gegenüber dem BeagleBoard C4 besitzt es keinen Video- und Soundausgang, verwendet DDR2 statt LPDDR Speicher (vermutlich höherer Energieverbrauch), besitzt keinen DSP und eine andere Pin-Belegung der Erweiterungsschnittstelle (das Interface-Board passt also derzeit nicht).
- Super-scalar ARM Cortex-A8 ( AM3358), CPU 720 MHz
- 256 MB DDR2 RAM
- Board size: 3.4" (86,4 mm) x 2.1" (53,3 mm)
- USB 2.0 flexible device port with ability to supply power
- On-board USB-to-serial/JTAG over shared USB device port
- 1-port USB 2.0 host
- On-chip 10/100 Mbit Ethernet
- microSD slot and 2 GB microSD card
- 3.3 V I/Os
- Preis: 89 $ (zzgl. EUSt, US-Import) / 78 € (in Deutschland)
Vergleichsübersicht von BeagleBoard-xM und BeagleBone.
Reference Manuals
Links
- Offizielle Webseite zum BeagleBoard
- BeagleBoard im eLinux-Wiki
- Einsteiger-Infos im eLinux-Wiki
- Ubuntu Betriebssystem für das BeagleBoard
- Ubuntu-Installation
- SPI-Interface des BeagleBoards
- Mailingliste zum BeagleBoard
- BeagleBoard FAQ 1 und BeagleBoard FAQ 2
- Deutschsprachiges Wiki und Forum zum BeagleBoard
- Cortex-A Series Programmer's Guide (Registrierung bei arm.com erforderlich)
- Interessantes Paper, welches ein älteres (600 MHz) BeagleBoard mit einem System auf Basis von Intels Atom CPU (N330) vergleicht und ein paar Hintergründe zur ARM Cortex-A8 Architektur bietet.
WLAN
Für die kabellose Verbindung zur Außenwelt wird ein handelsüblicher WLAN-USB-Stick verwendet. Wichtig ist nur, dass Linux einen Treiber für den verwendeten Chipsatz mitbringt.
Getestete Geräte
- D-Link Wireless N Nano USB Adapter (DWA-131):
- + kompakte Abmessungen (2 mm x 8 mm x 34 mm inkl. USB-Stecker)
- + relativ günstig erhältlich
- + Chipsatz von Linux unterstützt
- - eher geringe WLAN-Reichweite auf Grund der (Antennen-) Abmessungen
- Hinweise über weitere kompatible Geräte willkommen
Konfiguration
Siehe Wifi Networking on Ubuntu for ARM.
ToDo: Beispielkonfiguration / Empfehlungen
Interface-Board
Das Interface-Board bindet das BeagleBoard (BeagleBoard und BeagleBoard-xM) an die Hardware des c't-Bots an. Derzeit umfasst es die folgenden Subsysteme:
- Pegelanpassung 1.8 V <-> 5.0 V (TTL) der UART2-Signale
- Pegelanpassung 1.8 V <-> 5.0 V (TTL) für GPIO-Pins (Reset-Leitung zum ATmega, Fehler-Signal)
- Pegelanpassung 1.8 V <-> 5.0 V (TTL) der McSPI4.0-Signale
- ATmega1284P, der den originalen Prozessor des c't-Bots (IC1 @ Schaltplan c't-Bot) ersetzt. Unterschiede:
- 20 MHz Quarz / Takt
- Hardware-SPI Patch
- Anschluss für BPS-Sensor
- Pullup für Servo
- Pulldowns für Motoren (geplant)
- SPI-Anschluss für ISP oder externen MMC / SD-Slot
- Stereo Audio-Out Verstärker für zwei Lautsprecher (8 Ohm, 0.5 W)
Außerdem geplant:
- I²C Port(s)
- Stereo Mikrofon Verstärker
- Power-Modul mit leistungsfähigerem Spannungswandler und Überwachung des Batterie-Ladezustands
- Kameraanbindung
Hinweise zur derzeitigen Interface-Board Version:
- Die Anbindung des Maus-Sensors des Bots fehlt. Der Maussensor kann aktuell also nicht verwendet werden, wenn das Interface-Board installiert ist. Der Hintergrund ist, dass der Maus-Sensor den SPI-Port des ATMegas belegen würde. Alternativ ist die Anbindung des Maussensors an einen SPI-Port des BeagleBoards denkbar, erfordert aber zusätzliche Hardware.
- Es werden zwei SMD-Bauteile verwendet: IC3 im SOIC-14 Package und IC2 im TSSOP-16 Package. Auf die Bestückung des per Hand schwieriger zu lötenden IC2 kann auch verzichtet werden, dann steht allerdings keine Verbindung per SPI-Bus zwischen BeagleBoard und ATmega1284P zur Verfügung.
- Das Interface-Board lässt sich auch noch auf einer Lochraster-Platine aufbauen, auf der es dann allerdings recht gedrängt zugeht, damit sie die Abmessungen des BeagleBoards nicht stark überschreitet und auf den Bot passt.
Komponenten
Bezeichner Typ C1 100nF C2 100nF C3 100nF C4 100nF C5 100nF C6 100nF C7 22pF C8 22pF C9 100nF C10 22µF C12 100µF C13 100µF C14 100nF C15 100nF C16 220µF C17 220µF C18 100nF C19 100nF D1 1N4148 D2 1N4148 D3 1N4148 D4 1N4148 IC1 ATmega1284P IC2 SN74AVC4T774 IC3 TXB0104 IC4 TDA2822M J4 1x8 J5 1x8 J6 1x8 J7 1x8 J8 1x8 JP1 BB-Extension JP2 Audio-In 1x3 JP3 Speaker 1x4 JP4 ISP 2x5 JP5 LDDR/BPS 1x3 L1 100µH L2 100µH Q1 BS170 Q2 20MHz R1 10k R2 10k R3 10k R4 4R7 R5 4R7 R6 10k R7 220 R8 220 R9 2k7 R10 4k7 R11 2k7 R12 4k7 R13 10k
Schaltplan
Kamera
In Planung
Montage
- ATmega auf der Bot-Hauptplatine entfernen.
- Interface-Board anstelle des originalen Erweiterungsmoduls montieren, längere Abstandsbolzen verwenden, Kabel auf J4 bis J8 verbinden.
- BeagleBoard auf Interface-Board montieren, elektrische Verbindung über BB-Extension-Header.
- Display mit zusätzlichen Abstandsbolzen oberhalb des BeagleBoards anbringen.
Toolchain
Um den c't-Bot Code (oder andere Programme) für die ARM-Architektur des BeagleBoards zu übersetzen, wird ein Cross-Compiler benötigt. Alternativ lässt sich der entsprechende Code auch direkt auf dem BeagleBoard übersetzen, wenn dort gcc & Co. installiert sind, was allerdings deutlich umständlicher ist.
Cross-Compiler Linux
Unter Ubuntu (getestet 11.04 oder neuer) wird die nötige Cross-Toolchain für die BeagleBoard-Plattform arm-linux-gnueabi durch das Paket g++-arm-linux-gnueabi installiert: sudo apt-get install g++-arm-linux-gnueabi.
Andere Linux-Distributionen bieten vermutlich ähnliche Pakete an, Hinweise willkommen.
Zum Compilieren des Bot-Codes mit dem Cross-Compiler der Distribution als Target Debug-ARM-Linux auswählen und in den Projekteinstellungen für Compiler, Assembler und Linker arm-linux-gnueabi-gcc eintragen. Außerdem dort jeweils unter Miscellaneous die Zeichenkette -ccc-host-triple arm-linux-gnueabi entfernen.
Cross-Compiler Mac OS X
ToDo: Installationspaket erstellen
Cross-Compiler Windows
Die Sourcery CodeBench Lite Edition stellt einen kostenlosen Cross-Compiler für ARM-Linux unter Windows zur Verfügung.
Als Installer hier herunterladbar.
Zum Compilieren des Bot-Codes unter Windows als Target Debug-ARM-Linux auswählen und in den Projekteinstellungen für Compiler, Assembler und Linker "C:\Program Files (x86)\CodeSourcery\Sourcery G++ Lite\bin\arm-none-linux-gnueabi-gcc.exe" eintragen (bei abweichendem Installationspfad entsprechend anpassen). Außerdem dort jeweils unter Miscellaneous die Zeichenkette -ccc-host-triple arm-linux-gnueabi entfernen.
Libraries
Derzeit werden die folgenden Libraries sowohl auf der Linux-Distribution des BeagleBoards, als auch auf dem Rechner zum Cross-Compilieren benötigt:
Boost
Die C++-Bibliothek Boost wird für den Proxy-Server (s.u.) benötigt.
- Installation der bereits compilierten Bibliotheken (empfohlen): ToDo: Tarball bereitstellen
- Cross-Compilieren aus dem Boost Quelltext (getestet und mindestens erforderlich: Version 1.47). Unter Linux oder Mac OS X sind diese Schritte erforderlich:
- Archiv herunterladen und entpacken
- ./bootstrap.sh
- In project-config.jam folgende Zeile nach import feature ; ergänzen: using gcc : arm : arm-linux-gnueabi-g++ ;
- ./b2 toolset=gcc-arm target-os=linux --disable-long-double --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1
- sudo ./b2 install toolset=gcc-arm target-os=linux --prefix=/usr/local/arm-linux/arm-cortex_a8-linux-gnueabi/sysroot/usr --disable-long-double --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1
Flite, Alsa
Die Sprachsynthese-Bibliothek Flite kann optional zur Sprachausgabe benutzt werden. Dazu muss auf dem BeagleBoard die Bibliothek Alsa installiert sein (ToDo: Name des Installationspakets).
- Installation der bereits compilierten Bibliotheken (empfohlen): Tarball herunterladen und entpacken
- Cross-Compilieren aus dem Quelltext. Zuvor die Dateien libasound.la, libasound.so.2.0.0 der Alsa-Bibliothek vom BeagleBoard nach /usr/local/arm-linux/arm-cortex_a8-linux-gnueabi/sysroot/lib kopieren. Unter Linux oder Mac OS X sind diese Schritte nötig:
- Archiv herunterladen und entpacken (ToDo: Link)
- ./configure --with-audio=alsa --host=arm-linux-gnueabi --enable-shared
- make
- arm-linux-gnueabi-strip bin/flite
- arm-linux-gnueabi-strip bin/flite_time
- arm-linux-gnueabi-strip bin/t2p
- arm-linux-gnueabi-strip bin/flite_cmu_us_slt
- arm-linux-gnueabi-strip bin/flite_cmu_us_rms
- arm-linux-gnueabi-strip bin/flite_cmu_us_kal16
- arm-linux-gnueabi-strip bin/flite_cmu_us_kal
- arm-linux-gnueabi-strip bin/flite_cmu_us_awb
- arm-linux-gnueabi-strip bin/flite_cmu_time_awb
- Dateien aus lib nach ct-Bot/contrib/flite/lib/arm-linux-gnueabi/ kopieren
Software
Auf dem BeagleBoard wird eine Linux-Distribution ausgeführt, die auf der SD-Karte installiert ist.
Ubuntu (ARM)
Bisher getestete Version: 11.04 (Natty Narwhal).
Geplante Version: 12.04 (Precise Pangolin).
Installation
Siehe Installing pre-installed OMAP3/4 Server Images.
Anpassungen
Damit das BeagleBoard mit dem c't-Bot kommunizieren kann, sind ein paar Anpassungen am Bootloader und Linux-Kernel erforderlich. Sie sorgen dafür, dass die nötigen Schnittstellen auf die Erweiterungspins geroutet werden und konfigurieren die Schnittstellen entsprechend.
U-Boot
Dieses Archiv herunterladen, entpacken und das Bootloader-Binary u-boot.bin auf die erste (FAT-) Partition der SD-Karte kopieren.
Kernel
Eine Vorabversion des angepassten Kernels ist hier verfügbar.
ToDo: Aktuelles Kernel-Image und Patches bereitstellen, Installation erläutern.
Konfiguration
ToDo: Init-Skripte für GPIO-Konfiguration bereitstellen.
Low-level Bot-Code für ATmega
Der ATmega1284P auf dem Interface-Board führt den Low-level Code aus und stellt somit die Schnittstelle zur c't-Bot-Hardware bereit. Der Vorteil durch die Verwendung eines zusätzlichen Mikrocontrollers neben dem BeagleBoard besteht in der Kompatibilität zum originalen c't-Bot und der Wiederverwendbarkeit sämtlicher Treiber für die Bot-Hardware. Der Low-level Code besteht aus einer leicht modifizierten Untermenge des originalen c't-Bot Codes. Verzichtet wird dabei auf sämtlichen Verhaltenscode und weitere Features wie Kartographie oder Positionsspeicher, all das übernimmt der High-level Code, den die BeagleBoard-CPU ausführt. Zusätzlich implementiert ist eine CRC16-Prüfsumme, welche die Kommunikation mit dem BeagleBoard gegen Übertragungsfehler absichert.
Derzeit wird der angepasste Low-level Code in einer Vorabversion durch ein Git-Repository unter git://cety.de/ct-Bot-beagle bereitgestellt, das Kommando git clone git://cety.de/ct-Bot-beagle erstellt eine lokale Kopie im Arbeitsverzeichnis und checkt die letzte Version aus. ToDo: Code mit offiziellem Bot-Code mergen oder ins SVN stellen?
High-level Bot-Code für ARM
Das BeagleBoard führt den für die ARM-Linux Architektur compilierten High-level Code aus und übernimmt somit die Ausführung von Verhalten, Kartographie usw.
Um den c't-Bot Code für einen Bot mit BeagleBoard-Erweiterung zu übersetzen, sind derzeit die folgenden Schritte nötig:
- Den Bot-Code aus dem Devel-Zweig des SVN in Revision 1685 auschecken
- Diesen Patch herunterladen, entpacken und auf das Bot-Projekt anwenden (ToDo: mit aktuellem Code mergen)
- Falls gewünscht die bereits compilierte Version der Flite-Bibliothek herunterladen oder selbst übersetzen
- Flite-Bibliothek nach ct-Bot/contrib/flite entpacken oder verlinken bzw. dorthin kopieren, ct-Bot.h-Schalter für Flite lautet FLITE_AVAILABLE
- Als Build-Konfiguration in Eclipse Debug-ARM-Linux wählen
Die wesentlichen Unterschiede zum originalen ct-Bot-Code:
- CRC16-Prüfsumme für Kommunikation
- Anpassungen für Kommunikation (Synchronisation, Anmeldung als realer Bot)
- Anpassungen für Auswertung der Distanzsensoren (Umrechnung gemäß Kennlinie erfolgt bereits im Low-level Code)
- Anpassungen für Motorsteuerung (1:1 Weitergabe der Geschwindigkeit)
- Anpassungen für RC5-Code (Toggle-Bit Auswertung)
Proxy-Server
Schnelleinstieg
Von other/BeagleBoard die Dateien
herunterladen und ./run.sh ausführen, um den Proxy und anschließend den Bot-Code zu starten. Konfiguration von Serialport, Baudrate und TCP-Ports mit Hilfe der Datei config.xml.
ToDo: Code bereitstellen
Socat
socat TCP-LISTEN:10002,fork,reuseaddr /dev/ttyO1,raw,echo=0,b115200 & oder Script socat.sh verwenden.
BeagleBoard-Emulation
Ein BeagleBoard lässt sich (inkl. Linux Installation) mit Qemu emulieren. Eine Installationsanleitung für Ubuntu Hosts ist hier zu finden.
Attachments
-
Schaltplan-0.1.png
(228.3 KB) - added by ip
7 months ago.
Schaltplan v0.1

