Hallo zusammen,
fast 9 Monate später, wird es mal wieder Zeit für ein Update - damit das hier nicht zu einem dieser verwaisten Threads verkommt, die mal angefangen, aber nicht weitergeführt werden.
Beim Roboterprojekt hat es in der Tat einige Verzögerungen (musste zwischendurch kurz heiraten) und auch Rückschläge gegeben (ich habe mir einmal die SD-Karte versaut und musste von vorne beginnen, hatte zum Glück eine Sicherung des bis dahin entwickelten Python Codes und wir mussten eine ganze Zeit frickeln, bis wir den Papierkorb wackelfrei und sicher am Chassis befestigt hatten), aber mittlerweile nimmt der Roboter (er heisst Kurt) echt Form an. Natürlich steckt weiterhin noch viel Arbeit drin, insbesondere in der weiteren Programmierung.
Mal eine kurze Beschreibung, wie der aktuelle Entwicklungsstand ist:
- Die weiter oben erwähnte, zweigeschossige, dreieckige Metallchassis mit den drei omnidirektionalen Rädern und drei 9V DC Motoren bildet weiterhin die Basis des Projekts.
- Das "Gehirn" ist der oben bereits erwähnte Raspberry Pi 4 - bisher habe ich noch keine Verwendung für einen seperaten Microcontroller zur Motorsteuerung gefunden.
- Auf dem Raspberry Pi sind die folgenden HATS - in der Reihenfolge - im Einsatz:
* Adafruit Motor HAT um die drei Motoren zu kontrollieren. Die 9VMotoren werden aktuell einfach durch 6 x 1.5 AAA Alkaline Batterien angetrieben, das gefällt mir noch nicht. Siehe unten -> Offene Themen
* Seeed Grove Base Hat - zur Anbindung von Sensoren. Aktuellen sind aus dem Grove-Universum drei US-Sensoren (unterhalb der Chassis in alle drei Richtungen montiert), ein Kompass, ein Accelerometer montiert. Richtig nutze ich bisher nur einen US Sensor. Mit der Genauigkeit ds Kompass und des Accelerometers bin ich noch nicht zufrieden, hatte aber auch noch nicht genug Zeit, mich wirklich damt zu beschäftigen.
* PiJuice zur Stromversorgung. Den PiJuice kann man als Uninterrupted Power Supply verwenden, ich habe aktuell noch testweise eine 5000 mah Li-Ion Batterie angeschlossen (ebenfalls siehe unten -> Offene Themen). Man kann hier dann einfach zum Laden oder für den Netzbetrieb den PiJuice über microUSB mit Strom versorgen, ohne dass zwischendurch der Pi ausgeschaltet werden müsste (wie bei der alten Lösung mit simpler Powerbank). Zusätzlich bietet der PiJuice Status-LEDs für die Stromversorgung und eine User-programmierbare LED, mit der ich den Roboterstatus anzeige (Betriebsmodi) und mehrere Buttons und eine Buttonschnittstelle. Da die Buttons durch den Papierkorb nicht mehr erreichbar sind, habe ich als "Masterswitch" einen simplen Button unterhalb der Chassis, bequem mit der Hand zu erreichen, montiert und verbunden. Damit kann ich den Raspi hochfahren (und das kurt.py Script mit dem Bootvorgang starten lassen) sowie runterfahren (long press) oder hard reset (very long press) initieren. Gefällt mir in Summe sehr gut!
* Seeed ReSpeaker 4mic Array. Das Array funktioniert deutlich besser zur Audio-Aufnahme als das zuvor verwendete USB Mikrofon. Zusätzlich ist eine Richtungserkennung möglich, damit möchte ich implementieren, dass der Roboter sich bei Ansprache in Richtung des Sprechers dreht. Funktioniert noch nicht ganz sauber, wird aber. Zum Schluss verfügt das Mic Array über 8 LEDs, mit denen sich ein Alexa-ähnliches visuelles Feedback während des Gesprächs (oder auch in anderen Situationen) erzeugen lässt. Zugunsten dieser Lösung haben wir auf eine außerhalb des Mülleimers montierte LED, LCD oder sonstige Display-Vorrichtung verzichtet.
- Weiterhin angeschlossen sind ein einfacher USB Speaker zur Audio Ausgabe sowie die Raspi Kamera. Die Kamera ist die aktuell einzige Komponente, die außerhalb des Mülleimers montiert ist, das flache Kabel wird durch eine gefeilte Aussparung im Papierkorb geführt und durch eine Deko-Fliege abgedeckt.
Software-seitig kommen neben der eigenen Python-Programmierung insbesondere espeak-ng zur Sprachausgabe ohne Cloud Anbindung sowie die Porcupine und Rhino Wake-Word und Speech2Intent Engines (ebenfalls ohne Cloud Anbindung rein lokal) zum Einsatz. Einzige Cloud-Anwendung aktuell ist die Gesichtserkennung (To Do für die nächsten Tage: Objekterkennung).
Die Fähigkeiten des Roboters aktuell sind:
- Wie bisher Bewegungen in vier Richtungen, gesteuert über Spracheingabe ("Hey Kurt, fahre vorwärts!" , "Hey Kurt, drehe Dich um Kreis!" -> "Okay, drehe mich im Kreis!")
- Allgemein kurze Unterhaltungen ("Hey Kurt, wer bist Du?" -> "Ich bin Kurt, ohne Helm und ohne Gurt!")
- Gesichtserkennung bei Ansprache oder bei Frage "Wen siehst Du?" ("Hey, Kurt!" -> "Hallo, Patrick!")
- Hinderniserkennung vorwärts (stoppt bei 20 cm, mittels Ultraschallsensor)
- Selbstständigws Verändern der Betriebsmodi (d.h. bei Inaktivität geht der Roboter in einen "Sleep" Modus über, wo die Spracherkennung etc. nicht weiterlaufen und nur einige Sensoren aktiv bleiben)
- Web Oberfläche zum monitoren. Noch nicht ganz fertig, zeigt aktuell die ausgegebenen Log Infos (die sonst in der Shell angezeigt werden) im Web Browser an und wird künftig zusätzlich Batteriesstand/Temperatur (über API vom PiJuice verfügbar), letztes mit der Kamera aufgenommenes Bild (oder Video Stream) sowie die Navigationskarte (bei autonomem Navigieren, ganz große Baustelle noch) anzeigen und einen "Notaus" Button (falls man den physikalischen Button nicht erreichen kann und Kurt sich irgendwo verzettelt) enthalten. Web Oberfläche natürlich nur im heimischen LAN nutzbar.
Wer bis hierher gelesen hat, wird mit einigen bunten Bildern belohnt:
- - - Aktualisiert - - -
In Summe bin ich superzufrieden mit dem bisherigen Fortschritt. Ich hätte mit deutlich mehr und nachhaltigeren Problemchen gerechnet.
Nächste Schritte:
Neben der autonomen Navigation (ich plane, die Hall Effect Sensoren der Motoren an die Digital Ports des Grove Base HATS anzuschließen und somit die RPM der einzelnen Motoren zu erhalten, um einen besseren Geradeauslauf zu realisieren sowie auch um die zurückgelegte Distanz näherungsweise zu ermitteln), habe ich aktuell eher für mich schwierige Knackpunkte hinsichtlich der Energieversorgung.
Die Batterie für den PiJuice wird grundsätzlich mit einem JST-Stecker geliefert (dreipolig). Man muss den abtrennen und die einzelnen Drähte an das Batterieterminal schrauben. Da ich die Batterie künftig auf dem Mülleimer (also der umgekehrten Unterseite) und unterhalb des Huts befestigen möchte, muss ich die Verbindung verlängern. Hier hat mein erster Versuch (mit eigenen Lüsterklemmen) nicht funktioniert, da scheint nicht genug Strom anzukommen. Bin nicht sicher, woran das liegt.. ggf zu dünne Drähte. Gibt es hier Empfehlungen, welche Drähte/Kabel zu verwenden sind? Spielt hier die Länge der Kabel (also im Bereich von ca 15 cm im Original bis zu vielleicht 30-40 cm in der verlängerten Variante) eine signifikante Rolle? Eher nicht, oder?
Mein aktuell größtes Problem: Ziel ist es, dass Kurt sich selbstständig laden kann. Für die Raspi Stromversorgung über den PiJuice werde ich dazu ein induktives (wireless) Lademodul unten anbringen und eine passende Ladestation bauen (bzw. 3D-drucken lassen). Das induktive Lademodul (beide Parts) habe ich bereits. Es lädt mit 5V, 1.3. A max. Für den PiJuice sollte das in Ordnung gehen, der wird auch in vielen Szenarien über Solarzellen gespeist, das sehe ich mal als vergleichbar an (von der Stabilität des Ladestroms her).
Wie aber gehe ich mit der Stromversorgung für die drei Motoren um? Ständig 6 AAA Batterien auszutauschen ist erstens nicht autonom und auch nicht besonders nachhaltig. Im Idealfall würde Kurt an der Ladestation auch neuen Strom für die Motoren bekommen. Ich spiele hier mit dem Gedanken, einen 11.1V Lipo (also dreizellig á 3.7V) zu verwenden. Die Motoren sind in einer Spezifikation mit 9V und in einer anderen Spezifikation mit 9-12V beschrieben, daher würde ich mal optimistisch denken, dass sie mit einem 11.1V Lipo gut (oder sogar besser als aktuell?) betreibbar sind. Aber wie bekomme ich das Ladeszenario umgesetzt? Das Laden des 11.1V Lipos alleine fordert m. E. mindestens schon einen Balancer (so dass die drei Zellen gleichmäßig geladen werden) und entsprechende Overcharge-Protektion (oder gibt es vernünftige Lipos, die das bereits eingebaut haben?). Habe ich irgendeine Chance, den Eingangsstrom des induktiven Lademoduls erstens zu splitten und einen Teil zum PiJuice zu senden und einen Teil dann noch per Voltage Regulator von 5 V auf z.B. 12 Volt zum Laden des 11.1V Lipos anzuheben? Oder ist das völlig illusorisch? Hier kommt wieder meine relative Elektronik-Ahnungslosigkeit ins Spiel, aber ich möchte auch ungern riskante Experimente mit Lipos eingehen und einen Brand im Haus riskieren. Alternativ zum Splitten wäre ggf. noch eine zeitliche Unterscheidung denkbar, dass der Roboter selbstständig zunächst den Akku für den Raspi lädt und dann, per Relais o. Ä., den Charger für den Motor-Lipo aktiviert. Fragezeichen.
Lesezeichen