Screenshots direcs1

 

Zwei aktuelle Screenshots – einmal der erste Test mit dem neuen ARM-Board unter Linux in der Debian-VM (Parallels unter Mac OS X), der zweite nativ auf dem Mac.
15.04.2012

Erste Experimente mit der Microsoft Kinect Kamera und dem OpenKinect / libfreenect Sourcecode.
30.12.2010

Größeres Redesing: Grafischen Heartbeat korrigiert, Roboter-Motor-Status wird nun grafisch rechts oben angezeigt (mit GUI LEDs), Änderung der Hauptfenstergröße zur Anzeigen auf dem MacBook Pro.
30.11.2010

Kleine Verbesserungen in der GUI: Grafische LEDs über den Zustand diverser Module im „state“ Bereich rechts oben, Gitternetzlinien innerhalb der Plot-Fenster (Batteriespannungen) und ein grafischer Heartbeat (rot).
14.11.2010

[1316 Aufrufe]

coding, coding, coding…

Nachdem es in der Vergangenheit öfter Probleme mit der seriellen Übertragung gab, fiel der Entschluss, alle Übertragungen zwischen dem Atmelboard und dem Computer nicht mehr in Binärform sondern in reinem ASCII zu senden. Dazu wurde im git Repository ein neuer Branch namens AtmelSerialClearText angelegt und seit Mitte August immer mal wieder daran gearbeitet. Nun ist es endlich soweit, nahezu alle Funktionen sind komplett auf die neue Übertragungsmethode umgestellt – sowohl auf Computer, als auch auf Atmel-Seite. Wie man sieht, waren dazu doch einige Änderungen nötig:

Merge made by recursive.

 direcs-avr/adconv.c         |   33 ++

 direcs-avr/adconv.h         |    6 +

 direcs-avr/main.c           | 1040 +++++++++++++++++++++++++++++————–

 direcs-avr/main.h           |   13 +-

 direcs-avr/micromag.c       |    4 +

 direcs-avr/usart.c          |  174 ++++++–

 direcs-avr/usart.h          |   38 ++-

 direcs/direcs.tag           |  193 ++++++–

 direcs/src/circuit.cpp      |  112 ++++-

 direcs/src/circuit.h        |   39 ++-

 direcs/src/direcs.cpp       |  127 +++++-

 direcs/src/direcs.h         |   19 +-

 direcs/src/direcsSerial.cpp |   65 ++–

 direcs/src/direcsSerial.h   |    2 +-

 direcs/src/gui.cpp          |   79 ++++-

 direcs/src/gui.h            |   37 ++-

 direcs/src/interfaceAvr.cpp |   98 ++++

 direcs/src/interfaceAvr.h   |   58 ++-

 direcs/src/mainWindow.ui    |   86 +++-

 direcs/src/motor.cpp        |  792 +++++++++++++++++++++———–

 direcs/src/motor.h          |   46 +-

 direcs/src/plotThread.cpp   |   47 ++-

 direcs/src/plotThread.h     |   14 +-

 direcs/src/sensorThread.cpp |  495 +++++++++++———-

 direcs/src/sensorThread.h   |   27 +-

 25 files changed, 2540 insertions(+), 1104 deletions(-)

Zusätzlich wurde das serielle Verfahren auf dem Atmel ebenfalls vollständig neu geschrieben und arbeitet nun – anstatt in einer Endlosschleife auf den Empfang eines Zeichens zu warten – vollständig interruptbasiert.

Wie aber weiß nun der Atmel, wann eine Übertragung für ihn anfängt oder abgeschlossen ist? ganz einfach: Jede Übertragung muss mit einem ‚*‘ starten und mit einem ‚#‘ enden. Alle anderen Zeichenketten werden ignoriert. Eine Signalisierung über LEDs auf der Platine findet ebenfalls statt: Bei jedem empfangenen Zeichen blinkt die rote LED abwechselnd und sobald das Ende eines Befehls mit # erkannt wurde (und zuvor auch mit * startete!) wird dieses über eine grüne LED angezeigt.

Diese Art der Übertragung hat den Vorteil, dass man sie per Terminalprogramm gut debuggen kann, denn es werden nur ASCII-Zeichen verwendet. Zusätzlich antwortet der Atmel auch immer mit der empfangenen Zeichenkette, die wiederum vom Computer als Antwort überprüft wird. Eine neue Sicherheitsfunktion, die zuvor fehlte. Auch kann man dem Atmel so selbst mit einem Terminalprogramm Befehle senden und „sieht“ was er antwortet. Fragt man einen Wert vom Atmel ab, so antwortet er nur mit diesem Wert und dem Starter und Terminator, also z.B. mit *42#.

Und das sind die derzeitigen Befehle:

re = reset

s1 = get value from sensor 1

s8 = get value from sensor 8

s16 = get value from sensor 16

cc = check if compass module is connected. ‚ok‘ or ‚er‘

cx = get value from compass axis x

cy = get value from compass axis y

cz = get value from compass axis z

ms1 = get value from motor sensor 1

ms4 = get value from motor sensor 4

dd1 = get driven distance 1

..

dd4 = get driven distance 4

id1 = init distance 1

id4 = init distance 4

mp1of = motor power 1 off

mp4of = motor power 4 off

md1cw = motor direction 1 clockwise

md4cw = motor direction 4 clockwise

md1cc = motor direction 1 counterclockwise

md4cc = motor direction 4 counterclockwise

mv1nnn = set motor velocity 1 to nnn (0-255)

mv4nnn = set motor velocity 4 to nnn (0-255)

mv0nnn = set motor velocity for all motors to nnn (0-255)

bdf = bot drive forward

bdb = bot drive backward

bdl = bot drive left

bdr = bot drive right

btl = bot turn left

btr = bot turn right

bgo = bot go

bst = bot stop

bwa = bot wait

[799 Aufrufe]

Allgemeiner Aufbau direcs1

Auf dieser Seite sollen die einzelnen Bestandteile des Roboters direcs1 näher beschrieben werden.

Das Grundgerüst des Roboters sieht wie folgt aus:

Als Rahmen wurden Aluminium-Profile verwendet, die verhältnismäßig günstig sind:

 

Bezugsquelle: Kalms Flightcase GmbH

Die Räder sind so genannte Mecanum-Räder. Diese versetzen den Roboter in die Lage

  • sich auf der Stelle um sich selbst zu drehen
  • links und rechts seitwärts zu fahren
  • ganz normal vorwärts und rückwärts zu fahren oder
  • diagonal, also schräg nach vorne oder hinten links oder rechts zu fahren:

 

Die im rechten Bild zu sehenden Aluminium-Halter sind Eigenentwicklungen.

Bezugsquelle: About AndyMark, Inc.

Die Motoren sind vom teuren Conrad. 1-12V Getriebemotoren Modelcraft . Der Roboter besitzt vier 1-12V Getriebemotoren Modelcraft (RB350050-22723R) mit 6200 UPM und 1:50 Untersetzung was dann 110 UPM ergibt. Der Stromverbrauch beträgt je Motor maximal 0,75A wobei sie maximal 0,695 Nm leisten [und nicht 5 Nm wie im Datenblatt fälschlicherweise angegeben]:


Im Bild bereits zu sehen, dass der Motor um einen stabileren Halter aus den obigen Aluminiumprofilen erweitert wurde.

Bezugsquelle: Conrad Electronic SE

Der Antrieb wurde mittels Zahnriemen und Zahnriemenscheiben realisiert:

Bezugsquelle: Conrad Electronic SE

Die Stromversorgung des Roboters erfolgt über vier 12V-Akkus mit jeweils 7Ah zwei LiPo-Akkus: Einen 4S und einem 6S mit jeweils 5000 mAh und C30:

11-1V-30c-5000mAh-3-Cells-Li-Po-Rechargeable-Battery-With-Deans-T-Plug  Mystery_22_2V_30C_5000mAh_6S_RC_LiPo_Battery_Deans_plug

Bezugsquelle: Pollin Electronic GmbH Ebay

Auf dem Roboter direcs1 stehen drei verschieden Spannungen in zwei verschiedenen Stromkreisen zur Verfügung

  • 24V für den Laserscanner in Stromversorgungskreis 1
  • 12V für das Commel Mainboard in Stromversorgungskreis 1
  • 5V für den Microcontroller und sonstige Sensoren / Schaltkreise in Stromversorgungskreis 1
  • 12V für die Motoren in einem eigenen Stromversorgungskreis 2.

Erzeugt werden diese Spannungen mittels Schaltregler auf den folgenden Platinen:

 

Bezugsquelle: reichelt elektronik GmbH & Co. KG

Die Schaltkreise sind über Sicherungen geschützt:

Bezugsquelle: reichelt elektronik GmbH & Co. KG

Über ein zentrales Panel können die Spannungen (und damit der Roboter) eingeschaltet werden. Der silberne Taster ganz links dient zum Einschalten des fit-PCs. Der Not-Aus-Schalter unterbricht lediglich die Stromzufuhr zu den Motoren:

Bezugsquelle Lochblech: Praktiker Deutschland GmbH
Bezugsquelle Bauteile: reichelt elektronik GmbH & Co. KG

Die Low-Level-Steuerung, also die Ansteuerung der Motorcontroller erfolgt über ein Atmel-Board mit einem AVR2560 STM32F4-Discovery-Board mit ARM-Prozessor:

Auf dem Bild ebenfalls erkennbar diverse Steckverbinder zu weiteren Platinen, Eingänge zum A/D-Wandler, welcher die Akkuspannungen überwacht, ein Optokoppler zum Ansteuern der Warnleuchte (siehe auch Folgefotos), diverse Spannungsversorgungsstecker und ein USB-Seriell-Wandler.

Bezugsquelle: watterott.com

Die Motorsteuerung bzw. Regelung der Geschwindigkeiten erfolgt über die folgenden Boards:

Bezugsquelle: robotikhardware.de

Ein weiterer verwendeter Sensor ist ein 3D-Kompass befindet sich mit auf dem STM32F4-Board, ist aber derzeit noch nicht im Einsatz.

Der größte „Sensor“ ist sicher der SICK Laserscanner (rechts im Bild):

Links im Bild ist noch der zuvor verwendete Laserscanner älterer Bauart (PLS 101-312) zu sehen, der aktuell durch ein moderneren namens S30B-2011BA (S300 Standard) ersetzt wurde. Dieser weist zudem eine Auflösung von 0,5° (gegenüber 1°) und ein Überwachungsfeld von 270° (gegenüber 180°) auf.

Bezugsquelle: eBay

Das eigentliche „Herz“ des Roboters ist ein fit-PC2 vollwertiges pico ITX Mainboard LP-170G von Commell mit Atom-Prozessor, 2 GB RAM, 2,5″ Festplatte, 4 USB-Ports, 2 seriellen Ports, 2 PS/2-Ports, Gigabit-LAN, WLAN, CF-Kartenleser, Audio-Ein und Ausgang und VGA-Ausgang:

  

Bezugsquelle: HRT Informationstechnik

Zur Anzeige diverser Stati und späteren Steuerung dient ein 7″ Touchscreen von Faytech dessen Eingangssignal über einen Wandler von HDMI nach VGA gewandelt wird:

  

Bezugsquelle: reichelt elektronik GmbH & Co. KG

Damit der Roboter auch etwas „sieht“, hat er eine Logitech Webcam seit neuestem eine Microsoft Kinect Kamera, deren Bild per WLAN zu eine separaten Applikation oder auf eine beliebige Webseite per motion überträgt:

 

Da direcs1 auch über eine Sprachausgabe verfügt, sind zwei Lautsprecher mit integriertem Verstärker ebenfalls vorhanden:

 

Um den Roboter über einen externen Joystick oder Gamepad manuell zu steuern, wurde eine externe USB-Buchse von Neutrik montiert (hier noch ein altes Foto mit dem alten Laserscanner rechts):

 

Bezugsquelle: reichelt elektronik GmbH & Co. KG

Als letztes hat er natürlich auch eine Warnleuchte, wie es sich für einen richtigen Roboter gehört:

Und so sieht er nun (01.09.2012) vollständig aus:

    

 

 

[8423 Aufrufe]

Testfahrt mittels Joystick

Hier die erste Testfahrt mit dem neuen Setup:

Deutlich zu sehen, dass einzelne Motoren sich noch nicht immer drehen – wie hier bereits beschrieben. Aus diesem Grund fährt der Roboter hier auch nicht sauber seitwärts oder dreht sich nicht um die eigene Achse.

Und die Kamera sollte vielleicht auch langsam mal befestigt werden… ;-)

 

[385 Aufrufe]

Test der Motoren per Joystick

Hier nun ein recht neues Video, bei dem die Ansteuerung der Motoren getestet wird:

Wie man sieht, bleibt hier gelegentlich noch der ein oder andere Motor stehen bzw. dreht sich erst gar nicht. Ursache dafür scheint ein kurzer Spannungabfall am Atmel zu sein, der nacheinander die verschiedenen Port-Bits für das Motorcontrol-Board setzt. Da er beim Spannungseinbruch sich neu startet, „kommt“ er nicht bis zum letzten Bit, was gesetzt werden soll. Als Folge dessen, werden nun alle Boards ihre 5V Spannungsversorgung über den 24V-Akku erhalten. Dieser ist nicht so großen Belastungen (Schwankungen) ausgeliefert, wie die 12V-Akkus, an denen die Motoren hängen.

Die Motoren scheinen kurzzeitig bis zu 8A Strom zu „ziehen“. Höhere Werte konnten mangels ausreichendem Netzteil noch nicht getestet werden…

 

[506 Aufrufe]

Und sie dreht sich doch… Ein HDMI auf VGA Konverter

Oder anders gesagt (und nicht mit Galileo Galileos angeblichem Zitat): Und es geht doch!

Entgegen vieler Informationen im Web kann man sehr wohl einen VGA-Monitor an einen HDMI-Ausgang anschließen – mit guter Bild-Qualität! Nach langer Suche im Web halfen dabei folgende Teile bzw. Adapter:

Da der fit-pc2 „leider“ einen echten HDMI-Ausgang hat, der Touchscreen aber nur analoge Eingänge (konkret: VGA), war ein Adapter nötig. Oder besser drei. Das Kabel ganz rechts ist ein günstiges Kabel von Reichelt welches von HDMI auf DVI-D (D = digital) wechselt.

Der entscheidende Adapter in der Mitte ist der HDFury (blue edition, das bedeutet mit VGA-Ausgang): Dieser wandelt 1A von DVI-D zu VGA!

Da der Touchscreen nur über einen VGA-Stecker am Ende des Spezial-Anschlusskabels verfügt, musste noch ein VGA-Gender-Changer dazwischen. Fertig! :-)

Anmerkung: Die Qualität des Bildes ist hier aufgrund der geringen Größe (7″) aber der hohen Auflösung sowie der davorliegen Touchscreen-Folie nicht sehr gut erkennbar.

Sicher auch für Nutzer einer Playstation 3 interessant, wenn ein hochwertiger, älterer Bildschirm ohne HDMI-Eingang angeschlossen werden soll! Nicht verschwiegen werden soll der Nachteil: Der Preis von derzeit 90 EUR für den HDFury.

[464 Aufrufe]

7″ Touchscreen erworben

Bei Reichelt wurde ein verhältnismäßig günstiger 7″-Touchscreen für den Roboter erworben. Das Gute an dem Gerät des deutschen Distributors Faytech: Es gibt Treiber, Anleitung und Software für Windows (2000, CE, XP, Vista), UNIX, Linux und, Mac OS X!

Die Original-Treiber die dabei waren, sind sehr veraltet. Auch eine große Recherche im Internet brachte in den ersten Anläufen wenig Erfolg, den Touchscreen als alleiniges Zeigegerät am fit-PC2 unter Debian mit KDE zum Laufen zu bekommen.

Die Lösung gibt es hier, beim Hersteller EETI des Touchscreens in Japan. Hier befinden sich aktuelle Treiber und ein vollautomatisches Setup-Shell-Script für die Installation. Vorbildlicher Linux-Support!

[341 Aufrufe]