heise online
  • c't
  • iX
  • Technology Review
  • Mac & i
  • mobil
  • Security
  • Netze
  • Open Source
  • Developer
  • c't-TV
  • Download
  • Telepolis
  • Resale
  • Foto
  • Autos
  • Preisvergleich
  • Stellenmarkt
  • Abo
  • weitere Angebote
    • Shop
    • Artikel-Archiv
    • Veranstaltungen
    • Whitepapers
    • heise-marktplatz
    • IT-Markt
    • Tarifrechner
    • Jobs bei Heise

c't Magazin
  • Startseite
  • Artikel
  • c't-Projekte
  • Hotline & FAQ
  • Treiber & mehr
  • Kolumnen
Software zu Projekten Allgemeine Hinweise
Archiv-Suche Newsletter RSS-FeedRSS

c't › c't-Projekte

Trac
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • Start Page
  • Index
  • History
  • Last Change

  1. CPU-Erweiterung für den c't-Bot
    1. Einleitung
    2. Idee
    3. Voraussetzungen
    4. Hardware
      1. BeagleBoard
        1. Technische Daten / Versionen
        2. Reference Manuals
        3. Links
      2. WLAN
        1. Getestete Geräte
        2. Konfiguration
      3. Interface-Board
        1. Komponenten
        2. Schaltplan
      4. Kamera
      5. Montage
    5. Toolchain
      1. Cross-Compiler Linux
      2. Cross-Compiler Mac OS X
      3. Cross-Compiler Windows
      4. Libraries
        1. Boost
        2. Flite, Alsa
    6. Software
      1. Ubuntu (ARM)
        1. Installation
        2. Anpassungen
          1. U-Boot
          2. Kernel
        3. Konfiguration
      2. Low-level Bot-Code für ATmega
      3. High-level Bot-Code für ARM
      4. Proxy-Server
          1. Schnelleinstieg
      5. Socat
      6. BeagleBoard-Emulation

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:

  1. 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)
  1. 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)
  1. 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

  •  BeagleBoard Reference Manual
  •  BeagleBoard-xM Reference Manual
  •  BeagleBone Reference Manual

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

BezeichnerTyp
C1100nF
C2100nF
C3100nF
C4100nF
C5100nF
C6100nF
C722pF
C822pF
C9100nF
C1022µF
C12100µF
C13100µF
C14100nF
C15100nF
C16220µF
C17220µF
C18100nF
C19100nF
D11N4148
D21N4148
D31N4148
D41N4148
IC1 ATmega1284P
IC2 SN74AVC4T774
IC3 TXB0104
IC4TDA2822M
J41x8
J51x8
J61x8
J71x8
J81x8
JP1BB-Extension
JP2Audio-In 1x3
JP3Speaker 1x4
JP4ISP 2x5
JP5LDDR/BPS 1x3
L1100µH
L2100µH
Q1BS170
Q220MHz
R110k
R210k
R310k
R44R7
R54R7
R610k
R7220
R8220
R92k7
R104k7
R112k7
R124k7
R1310k

Schaltplan

Schaltplan v0.1
Download

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:

  1. Den Bot-Code aus dem Devel-Zweig des SVN in Revision 1685 auschecken
  2. Diesen Patch herunterladen, entpacken und auf das Bot-Projekt anwenden (ToDo: mit aktuellem Code mergen)
  3. Falls gewünscht die bereits compilierte Version der Flite-Bibliothek  herunterladen oder selbst übersetzen
  4. Flite-Bibliothek nach ct-Bot/contrib/flite entpacken oder verlinken bzw. dorthin kopieren, ct-Bot.h-Schalter für Flite lautet FLITE_AVAILABLE
  5. 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

  • ct-Bot-proxy
  • config.xml
  • run.sh

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 Download (228.3 KB) - added by ip 7 months ago. Schaltplan v0.1

Download in other formats:

  • Plain Text

Trac Powered

Powered by Trac 0.11.7
By Edgewall Software.

http://www.ctmagazin.de/
http://www.ctmagazin.de/projekte/

  • Datenschutzhinweis
  • Impressum
  • Kritik, Anregungen bitte an c't-WWW
  • Mediadaten
  • Copyright © 2011 Heise Zeitschriften Verlag
  • International: The H, The H Security, The H Open Source