Liste der Anhänge anzeigen (Anzahl: 5)
Wild Thumper ROS Roboter
Hier mein Roboter in dritter Generation. Es ist mein erster, der von Anfang an auf ROS ausgerichtet ist.
Daten:
- Basis Chassis: Wild Thumper 4wd, aufgerüstet mit Encodern für die Motoren
- Spannungsversorgung: 2x 7.2V NiMh über LM5050-2 active ORing angebunden. Die ORing Schaltung ist skalierbar und ermöglicht damit auch die Parallelschaltung einer Docking Station zur stationären Versorgung.
- 5V via Spannungsregler LM2576 (3A)
- Hauptcomputer: Solid Run Hummingboard (i.MX6 ARM Cortex-A9 Dual Core 1GHz, 2GB RAM)
- Peripherie am Hummingboard: GPS (uart), IMU (USB), Tiefenkamera (USB), restliche Peripherie über I2C
- I2C-Peripherie: AVR Atmega32 (Steuerung Motoren), AVR Atmega328 (Arduino Nano, restliche I/O: Abfrage Ultraschall- (US) und Infrarot- (IR) Sensoren, Messung Akkuspannung)
- Anbindung des 5V I2C Bus an die 3.3V des ARM µC über einen PCA9517 "Level translating I2C-bus repeater"
- Motorsteuerung: 4x VNH2SP30 per PWM 20kHz an Atmega32. Der Atmega32 übernimmt die Geschwindigkeitsregelung (PID) und Odometrie
- IMU zur Korrektur der Odometrie über 4 Räder: Tinkerforge IMU Brick 2.0 (In den Bildern noch Razor IMU). Die Tinkerforge IMU hat den Vorteil, dass sie nahezu immun gegen magnetische Störungen von außen ist.
- Distanzsensoren: Xtion Pro Live 3D-Kamera, 2x IR 2D120X (links/rechts), 3x US SRF05 (2x vorne, 1x hinten). Die beiden US-Sensoren sind aufgrund der toten Zone der 3D-Kamera bis ca. 0.5m erforderlich.
- Software: Debian Jessie + Robot Operating System (ROS) Indigo, ROS Navigationstack läuft auf einem PC über W-Lan.
- Mehr auf Hackaday.io
Die Bilder zeigen u.a. die mehrstufige Odometrie Auswertung und Sensorabdeckung.
Autonome Navigation mit GPS: https://vimeo.com/247624371. Dort fährt der Roboter auf einem Parkplatz autonom ein Viereck über GPS Koordinaten. Front Kamera ist unten links, die Kartenansicht (rviz) ist oben links zu sehen.
Liste der Anhänge anzeigen (Anzahl: 1)
Keine Ahnung wie, vermutlich werden die Magnetometer mit den Gyros verglichen und entsprechend nachkalibriert o.ä. Es funktioniert! Hier das Video des Herstellers: https://www.youtube.com/watch?v=Aq3SqVen5AQ&t=55
Als Test ob das wirklich funktioniert habe ich die Tinkerforge IMU zusammen mit der Razor IMU im Abstand von ca. 10 cm auf den Roboter montiert und bin mit einem Magneten darüber gefahren. Das Ergebnis anhand der Yaw-Achse hängt als Bild an.
Nachteilig der Tinkerforge IMU ist der gegenüber der Razor IMU etwas größere Stromverbrauch (70mA Tinkerforge, 40mA Razor) und man ist auf die Tinkerforge Bibliothek zum Auslesen angewiesen. Das aufleuchten der IMU wie ein Weihnachtsbaum nervt auch etwas, lässt sich aber abschalten.
Liste der Anhänge anzeigen (Anzahl: 1)
Update: Habe einen 4 DoF OpenManipulator mit RealSense D435 Tiefenkamera auf den Wild Thumper gesetzt. Als Software wird natürlich MoveIt eingesetzt, damit wird die inverse Kinematik und der Pfad automatisch berechnet. In der folgenden Animation ist das sichtbar:
1. Es wird der Zielpunkt durch Ziehen mit der Maus vorgegeben
2. Mit "Plan und Execute" wird die Bewegung zum Zielpunkt ausgeführt.
Bild hier
Die Objekterkennung per Tiefenkamera habe ich allerdings noch nicht gemacht.
Liste der Anhänge anzeigen (Anzahl: 4)
Es gibt eine Basisstation über die der Roboter mit 12V versorgt wird (Dock.jpg) mit Gegenstück am Rover (wt_aft.jpg).
Die Umschaltung auf den Strom der Basisstation erfolgt über eine ORing-Schaltung. Das setzt voraus, dass die Basisstation eine höhere Spannung als die beiden Akkus liefert. Da die LSD-NiMH Batterie auf dem Roboter im angedockten Zustand abgekoppelt ist, wird sie geladen. Der Roboter stellt die aktuelle Systemspannung und den Strom über eine Message zur Verfügung.
Die Abfolge des andockens ist wie folgt:
1. Benutze die Standard Navigation um den Roboter in Richtung der Basisstation zu fahren, die Genauigkeit der Position liegt aber nur bei 15cm und 6°, die erlaubte Toleranz der Dock-Kontakte liegt aber bei 4cm. Auch könnte die Position der Basisstation geringfügig geändert worden sein.
2. Bewege die Kamera nach hinten (wt_dock_position.jpg).
3. Ermittle die Abweichung der Position des Roboters zu Basistation mittels aruco_detect, welches mir die 6-DOF Position des Fiducial-Markers (Quasi QR-Tag) liefert (wt_fiducial_dock.jpg).
4. Wenn die Y-Achse (Grüne Linie) des Fiducial eine Abweichung von der Mitte hat korrigiere die Translation durch schräges fahren
5. Wenn die Rotation um die Y-Achse nicht 0° beträgt korrigiere die Abweichung durch Drehen
6. Falls notwendig wiederhole ab Schritt 4.
7. Wenn Position des Roboters exakt vor der Basistation fahre Rückwärts bis Systemspannung über der maximalen Akkuspannung liegt.
8. Angedockt
Nachteile:
- Die Erkennung des Fiducial-Marker funktioniert nur bei Licht
- Der Widerstand der Dock-Kontakte ist sehr hoch, ich habe einen Spannungsabfall von bis zu 2V.
- Es wird derzeit nur der LSD-NiMH-Akku geladen, für den LiFePO4-Akku habe ich derzeit keine Ladeschaltung.
- Ich zähle nicht den Strom der in die Batterie fließt, sondern nur den Entladestrom. Beim Abdocken gehe ich davon aus, der Akku ist voll. Dies kann bei einem zu kurzem Dockvorgang dazu führen, dass der errechnete deutlich über dem tatsächlichem Ladeezustand liegt.
- Der Staubsaugerroboter kann die Fläche um/unter der Basisstation nicht putzen solange der Roboter angedockt ist
Liste der Anhänge anzeigen (Anzahl: 1)
Kritik angekommen. Ich habe noch eine Kupferplatte rumliegen.