Vorab:
Da ich bisher nur den Plan entwickle und durchdenke, hab ich diesen Thread im Offtopic Bereich erstellt, da es noch kein richtiges Projekt ist.
Ich muss gestehen das ich etwas verwirrt bin, hier gibt es zwar schon etliche Roboter Projekte aber so wirklich steig ich da nicht durch, was man benötigt und wie das mit der Software aussieht etc.
Da ich zZt etwas Langeweile hab und auch etwas Abstand vom TinyTX Projekt brauche, hab ich mir halt überlegt was ich alternativ mal basteln könnte.
Dazu hät ich gern Eure Meinung sowie Verbesserungsvorschläge gehört
[hr]
Technischer Ablauf:
Auf der Roboter Plattform sind ein bis zwei Arduino's verbaut die das ansteuern der Sensoren und Motoren übernehmen, und an den RaspberryPI angeschlossen sind.
Die Arduino's schicken ihre Daten, was sie machen oder von den Sensoren an den RaspberryPI, aber entscheiden selber nichts sondern nur der PI.
Der RaspberryPI entscheidet dann zum Beispiel, dass das Objekt (eine Wand oder ein anderes Hindernis) zu nah ist und übermittelt an den jeweiligen Arduino mit der Motorsteuerung entsprechende Befehle das Objekt zu umfahren.
Zur Orientierung bedarf es mindestens einen Ultraschall Sensor um Hindernisse zu erkennen, bei nur einem Ultraschall Sensor auch einen Pan/Tilt.
Desweiteren benötigt man einen Kompass um die Himmelsrichtung, in die der Roboter guckt, bestimmen zu können und entsprechend zu wissen wo genau sich ein Hindernis befindet usw.
Man sollte sich aber auch auf mehrere Sensoren stützen, da nur eines nie perfekt präzise ist. Zusätzlich kämen also auch noch Odometriedaten in Frage und damit diese möglichst genau sind sollte die Roboter Plattform Reifen statt Ketten haben, denn Ketten haben einen gewissen Schlupf und rutschen...
Das schwierigste ist die Software auf dem PI.
Die Arduino's brauchen nur die Sensoren und Motoren ansprechen, die Daten über zB Serial verschicken und auch auf Befehle reagieren.
Der RaspberryPI muss diese Daten möglichst schnell und permanent empfangen (quasi in Echtzeit), aber muss gleichzeitig auch in der Lage sein etwas zurück zu schicken also Befehle für die Arduino's.
Desweiteren möchte man den Roboter ja auch mal selber steuern bzw dem PI Befehle geben die er dann umsetzt.. Dafür benötigt man bei der PI-->Arduino Kommunikation also auch noch eine Schnittstelle um über WLAN Befehle umzusetzen. Dabei erscheint mir der Weg über einen Socket-Server am einfachsten.
[hr]
Im Punkt Wegfindung und Lernmodus will ich halt sowas wie folgendes erreichen: http://www.societyofrobots.com/images/sensors_IRSLAM.gif
Dabei wird das sog. SLAM (Simultaneous Localization And Mapping) verwendet, was Bestandteil der aktuellen Robotik Forschung und sehr komplex ist...
Um also nicht gleich von 0 auf 100 durchzustarten werde ich zunächst mit dem sog. wavefront algorithm anfangen (der Link beschreibt das recht gut mit Codebeispielen)
Soweit ich das verstanden habe wird das in etwas so aussehen:
Ein Raum wird in viele kleine Quadrate eingeteilt (sog. Nodes), die von der Größe her die Abmessungen des RoPi's entsprechen (so lässt es sich präziser navigieren) und als X und Y Koordinaten festgelegt werden.
Dann werden die Quadrate in denen Objekte bzw Hindernisse stehen rot markiert bzw mit einer 1 versehen. Quadrate mit einer 0 darf er befahren, mit einer 1 nicht.
Im Algorithmus sind diese Werte allerdings etwas anders:
Nicht befahrbare Quadrate haben den Wert 255
Befahrbare Quadrate haben den Wert 0
Der Roboter selbst hat den Wert 254
Das Ziel wohin der Roboter fahren soll hat den Wert 1
Der Algorithmus fängt nun ab seiner Position (oder oben rechts) an zu zählen und geht jede einzelne Node Wellenförmig durch, ignoriert alle 255'er Werte und natürlich auch sich selbst, zählt die dann zusammen und legt den kürzesten Weg zum Ziel fest (geringste Zahl an Nodes die durchfahren werden müssen).
Auch wird der RoPi ausgebremst wenn man nach jeder Fahrbewegung stehen bleiben muss um den Bereich in Fahrtrichtung nach unbekannten Objekten zu scannen.. Aus diesem Grund möchte ich den vorderen Bereich mit 3 Ultraschall Sensoren verstehen (einer Mittig und die anderen im 45° Winkel jeweils zur Seite) und diese ständig auslesen bzw in Realtime auf Veränderungen reagieren können.
[hr]
[hr]
Ich bin mir nicht sicher ob man unbedingt ein RaspberryPI Modell-B verwenden muss, Modell-A hätte auch einen USB Port für WiFi und als Camera hätte ich zunächst an die PiCam gedacht. Auf eine LAN Buchse könnte der Robo auch verzichten und mit nur 500mA (bzw vermutlich auch ein bisschen weniger wenn man HDMI usw abschaltet) würde auch der Akku länger halten.
Auf den PI würd ich dann vermutlich das RPi-Shield-Bridge von Watterott aufstecken um eine gute Basis für Erweiterungen zu haben wo ich auch den Motortreiber in der Prototyping-Area anbringen könnte...
Möglicherweise wäre auch das RIO von Roboteq eine interessante Alternative..
Als Stromversorgung würde ich vermutlich die neuen LiFePO4 verwenden da die nicht so empfindlich wie Lithium-Ionen-Akkumulator sind, vorallem was das explodieren angeht - oder liege ich da falsch
Was mir dabei aber noch Kopfschmerzen bereitet ist das Balancing der einzelnen Zellen...
Dabei dachte ich zB an die 4S4P Konion 2250, oder taugen die nix
Zur Stabilisierung der Spannungsversorgung dachte ich zunächst an den Pololu Step-Up/Step-Down Spannungsregler S7V7F5. Der liefert konstant 5V bei einer input voltage von 2.7 bis 11.8V und liefert 1A sogern die input voltage über 5V liegt und 500mA wenn sie unter 5V liegt.... Oder kennt ihr was besseres
Denkbar wäre auch der Einsatz eines weiteren Step-Downs: http://www.amazon.de/dp/B00ENE55SQ (Affiliate-Link)
Allerdings wird dann soviel herum gewandelt das dabei vermutlich mehr Verlust als Nutzen entsteht
Als Chassis dachte ich dabei zunächst ans Rover 5 Chassis, da das Gehäuse recht günstig ist und zumindest von unten geschlossen ist und nichts "reinspritzen" könnte... Auch klingen die Rad-encodern zunächst nützlich zu haben..
So ganz zu frieden bin ich damit aber noch nicht
Als Motortreiber dachte ich da zunächst an den von Toshiba. Der hat 4 Pins für die Drehrichtung und 2 für PWM.
Hab auch schon an eine Lösung via Arduino-NANO nachgedacht aber das zunächst wieder verworfen..
Eine Alternative könnte auch der DRV8835 sein.
Soviel zur Grundausstattung.
Worüber ich mir jetzt noch nicht ganz im klaren bin ist was für Sensoren man benötigt. Welche sind für welchen Einsatz am besten geeignet usw
Zum einen sollte auch alles so kompakt wie möglich sein aber auch so wenig Gewicht wie möglich haben. Klobige Sensoren die irgendwo heraus ragen möchte ich eigentlich vermeiden.
Da der Roboter sich später auch noch (zumindest ein bisschen) Autonom bewegen können soll, dachte ich dabei auch an eine Kombination aus:
- Navilock 507ETTL GPS Empfänger (über UART) zur Bereitstellung der GPS Position umgerechnet auf Grundstückkordinaten, Datum, Uhrzeit - Alternativ mit DGPS Support: NL-652ETTL
- Beschleunigungssensor BMA020 (über I2C oder SPI)
-
Odometriedaten
- interne Karte vom Grundstück bzw Wohnung
Durch die Kombination mehrerer Daten ist es theoretisch möglich auf 0.25m² genau zu erfassen wo sich der RoPi befindet.. Limitiert wird diese Fähigkeit durch das GPS, wenn ein schlechtes Signal erkannt wird, wird nur nach Odometrie gefahren. Problematisch wird es wenn das GPS durch Reflektionen ein gutes Signal, aber mit falscher Position liefert, das kann derzeit nicht erkannt werden... Aber darum muss ich mich später kümmern.
Auch sollte sich der RoPi sich selber aufladen können, ich brauch also auch eine Überwachung und Übermittlung der Zellenspannungen sowie eine Vorrichtung wo er sich selber wieder aufladen könnte.
Zusätzlich würde ich dann aber natürlich auch noch sowas wie Abstandsmessungen benötigen damit er nirgends gegen fährt.
Da ich ihn aber auch gerne draußen einsetzen würde, sollte er auch herankommende Objekte (Fußgänger, Fahrradfahrer, Autos) erkennen - aber eins nach dem andern also darum kümmer ich mich später
Da weiß ich noch nicht genau Welche Sensoren besser geeignet wären aber vorallem auch Wieviele ich davon brauche und Wo diese angebracht werden müssten
Auch würde ich gerne eine Spracherkennung und Steuerung über Sprachbefehle einbauen, dafür muss ich mir noch ein vernünftiges Mikro raus suchen (da hab ich noch nix gescheites gefunden, was auch bei 10m Entfernung eine genügende Empfindlichkeit aufweißt)
[hr]
Folgende Seiten haben mich bei diesem Plan inspiriert:
http://www.robotiklabor.de/roboter/
http://letsmakerobots.com/node/38610
http://blog.dawnrobotics.co.uk/
http://blog.dawnrobotics.co.uk…aspberry-pi-camera-robot/
[hr]
Wegen der Software bin ich da zZt absolut ratlos, nicht wegen der Steuerung ansich sondern vielmehr bezüglich Autonomi - da bräuchte ich auch ein bisschen hilfe
[hr]
[hr]
Vorläufige Einkaufsliste:
- Rover 5 Chassis (ca. 44€)
- Alternativ 4tronix initio 4WD Robot Car Platform (ca. 48€)
- Rover 5 Expansion Plate RRC07B (Wide) Solid White (ca. 9€)
- Pololu 5V Step-Up/Step-Down Spannungsregler S7V7F5 (ca. 5€)
-
TB6612FNG Motor Driver von Sparkfun (ca. 6€) bzw TB6612FNG Motor Driver von Pololu (ca. 4€)
- Alternative wäre >dieser< (ca. 16€)
- Oder Baby Orangutan B-328 Robot Controller (ca. 20€)
- 30.000mAh PowerBank mit 1x 5V 1A und 1x 5V 2.1A Output (ca. 17€ , VSK wurde aber krass erhöht weil zZt ausverkauft.)
- 30.000mAh PowerBank gleiche Specs wie die obige (ca. 19€)
- RaspberryPI Camera rev1.3 (ca. 14€ aus China)
- Flex Cable for Raspberry Pi Camera 30cm (ca. 7€)
- 2x Fill light White 1W for Raspberry Pi Camera (ca. 6€ aus HongKong)
-
CMPS10 Kompass (ca. 28€)
- Alternativ LSM303DLM 3D Compass and Accelerometer (ca. 5€)
- 1x Ultraschall-Entfernungsmesser SRF08 (ca. 35€)
- 3x Ultraschall-Entfernungsmesser HC-SR04 (ca. 5€)
- Navigatron - I2C GPS (siehe zB hier und hier
Um erst mal eine Basis zu haben und die Software fürs Pathfinding soweit in Angriff nehmen zu können (dafür brauch ich kein Chassis):
-
CMPS10 Kompass (ca. 28€)
- default i2c address: 0x60
- 5x Ultraschall-Entfernungsmesser HC-SR04 (für 5 Stück insg. 5€)
- TB6612FNG Motor Driver von Sparkfun (ca. 6€)
- ZS-042 (DS3231 RTC @ I2C) (ca. 3€)
- default i2c address: 0x68 , default EEPROM (AT24C32) i2c address: 0x57 (Adressbits A2, A1 und A0 über Lötbrücken einstellbar)
- Auch wenn das Module 5V verträgt sollte es ausschließlich mit 3V3 betrieben werden da sonst die CR2032 3V Battery heiß wird und das PCB beschädigt! (quelle)
- Python lib: https://github.com/switchdoclabs/RTC_SDL_DS3231 Hinweis von mir zur Python Lib: http://www.forum-raspberrypi.d…-rtc?pid=119103#pid119103
- Arduino Sketch: https://github.com/kriswiner/D…DS3231RTCBasicExample.ino
- Arduino EEPROM Shield With 256K AT24C256 -- für 6,60€
- default i2c address: 0x50
- US-015 Ultrasonic distance measuring Sensor (für 2,29€)
- Weniger Working current als HC-SR04: 2.2mA vs. 15mA
- Erfassungsbereich: 2cm bis 700cm (HC-SR04: 2cm bis 400cm)
Die Links sind keine Kaufempfehlung!