Zylindrischer Hausroboter
Hallo zusammen,
so, das ist mein erster Beitrag, ich probiere mich mal darin, mein ersonnenes Projekt zu beschreiben und würde mich über Anregungen und Tipps sehr freuen.
Mein Ziel ist es, einen "Hausroboter" zu entwickeln. Das ganze soll ein Familienprojekt werden und den Großvater (handwerklich) und die 10jährige Tochter (gestalterisch, spielerisches Ranführen ans Programmieren) einbinden.
Meine persönlichen Erfahrungen sind eher im unteren Bereich anzusiedeln. ;-) Daher ist immer auch ein bisschen die unterschwellige Frage: Übernimmt man sich mit so einem Projekt schon, oder ist gerade die modulare Vorgehensweise (siehe unten) eigentlich ganz gut und sinnvoll, um die einzelnen "Lektionen" zu lernen. Ich bin einigermaßen flexibel, was den Softwareteil angeht (immer privat und beruflich mit IT in Berührung gewesen, brauchbare Kenntnisse in C/C++ (etwas eingestaubt), Java, Javascript, Perl, PHP, etc.. Python kann ich zumindest einordnen und Code lesen und verstehen und sehe mich auch in der Lage, das soweit aufzumöbeln, wie ggf. für die Programmierung der Logik des Roboters nötig). Ich habe letztens meine erste Raspberry Pi Erfahrungen gesammelt (habe ein Busy Light nachgebaut, welches von Microsoft Teams den Anwesenheitsstatus abfragt und dann auf eine LED-Phat überträgt und so meiner Tochter vor dem Home Office-Raum anzeigt ob ich verfügbar (grün) oder busy (rot) oder away (gelb) bin). Elektrotechnik beschränkt sich auf den Kosmos-Kasten in der Kindheit und Einlesen in den letzten Wochen. ;-)
Mein Ziel ist das folgende: Einen Roboter zu bauen, der auf einer vermutlich runden Chassis aufgebaut ist und als Grundform zylindrisch ist (ein bisschen wie R2D2, ohne den Anspruch zu haben, diesen nachzumodellieren). Als "Korpus" schwebt mir da in der Tat ein Drahtgeflecht-Papierkorb nach diesem Muster vor: https://www.amazon.de/-/en/Relaxdays...843686&sr=8-13 Die Außenhülle kann durch die Tochter später laminiert und gestaltet werden.
Ich möchte gerne modular vorgehen und die folgenden Fähigkeiten in den beschriebenen Ausbaustufen ergänzen:
1. Ausbaustufe: Grundstruktur (Chassis noch ohne Verkleidung) und Vorwärts/Rückwärtsbewegen sowie Kurven. Dazu sollen zwei Räder mit Motoren verbaut werden sowie 1x Gleitkugel (also ein "Tricycle"-Aufbau). Steuerung zunächst per WLAN, entweder einfach über Terminal Session oder je nach Lust und Laune mit einer einfachen Web-Bedienoberfläche. Fahrten natürlich innerhalb der Wohnung nur langsam notwendig. Das Gewicht des ganzen Roboters sollte m. E. künftig 5 kg nicht übersteigen.
2a. Ausbaustufe: Ergänzen der zylindrischen Verkleidung (also das Drahtgepflecht-Papierkorbs o. Ä.) sowie Anbau erster Sensoren um Objekte im Fahrtweg festzustellen (Ultraschall Sensor, Infrarot Sensor, o. Ä.) sowie ein einfaches Display um Gemütszustände auszudrücken (kleines OLED, oder LED-Matrix, o. Ä.).
2b. Ausbaustufe: Weitere Pheriperie - Geräusche wahrnehmen (Mikrofon) und darauf reagieren, Äußerungen ausgeben (Lautsprecher), Dinge sehen (Kamera) (im "Gesichtsbereich"des Roboters, als vorne oben im Zylinder)
3. Ausbaustufe: Sprechen, Sprache verstehen (Richtung digitaler Assistent als Alexa-Ersatz)
4. Ausbaustufe: Autonome Navigation in der Wohnung, Autonomes Verhalten (Begrüßen wenn er Leute sieht o. Ä.), Smarthome-Geräte kontrollieren
5. Ausbaustufe: Ladestation mit autonomem Laden (hier bin ich noch unsicher, ob wir das wollen und ob das "sicher" zu bewerkstelligen ist. Ich habe großen Respekt vor LiPos)
Meine große Frage ist aktuell, mit welchen Komponenten beginne ich mit Stufe 1, so dass ich uns für die folgenden Stufen nichts verbaue.
Als Basis möchte ich nach Möglichkeit wieder einen Raspberry (Zero? Oder doch eher größer?) verwenden. Ansonsten bin ich gerade recht viel auf joy-it.net unterwegs und bin der Meinung, dass hier recht viele sinnvolle Komponenten zu haben sind. Aber ich scheitere ein wenig an der Auswahl, etwa der Motoren. Und dann auch die Frage der Motorenansteuerung. Brauche ich für das obenbeschriebene Szenario einen separaten Microcontroller (die Anfängerfrage schlechthin?) und welcher ist am besten mit dem RPi kombinierbar, ohne dass ich mir eine Sackgasse baue. Hier im Roboternetz habe ich zwar viele Infos dazu gefunden - habe aber das Gefühl, dass die "Wiki"-Texte oft viele Jahre alt sind (keine Kritik) und bin mir dann nicht sicher, ob die Infos so noch gelten.
Halter ihr den Ansatz grundsätzlich für machbar? Ich möchte ungern erst ein "Wegwerfprodukt" als Zwischenlösung zum Lernen bauen, sondern eben lieber modular aufbauen. Ich bin der Meinung, dass die beschriebene Form eine recht einfach realisierbare Form ist, die auch im Innenraum des Zylinders viel Platz bietet. Ich fand es bei der Recherche erstaunlich, dass ich wenig bis keine vergleichbare Projekte gefunden habe.
Danke für Einschätzungen, Tipps, Warnungen, Teile-Empfehlungen etc! :)
Schönen 4. Restadvent und Grüße
Patrick
Liste der Anhänge anzeigen (Anzahl: 2)
die stromversorgung, sprich akku, ist letztendlich immer ein kompromiss zwischen der roboterform, der gewollten aktionsdauer und dem was auf dem markt zu bekommen ist...
Hier der ministaubsauger (erstmal nur das fahrgestell)
https://youtu.be/cuWUW7My57U
Anhang 35680 Anhang 35681
Liste der Anhänge anzeigen (Anzahl: 1)
Moin zusammen,
hier mal zum neuen (frohen) Jahr ein Update.
Über die Feiertage waren die diversen bestellten Teile langsam eingetrudelt. Ich hatte dann gleich auch noch einige weitere Seeed Grove Sensoren/Module bestellt, da die einzeln ja doch recht günstig sind. Somit habe ich nun von Grove ein Mikrofon, einen Speaker, ein Accelerometer, eine LED-Matrix und eben den US-Sensor vorliegen. Zusätzlich auch das Kameramodul mit Infrarot (hauptsächlich, weil es so toll nach Roboter aussieht, um ehrlich zu sein).
Dann haben wir im neuen Jahr den Zusammenbau begonnen und ich bin überrascht, wie gut das soweit funktioniert hat. Wir haben die erste oben beschriebene Ausbaustufe und etwas mehr ohne größere Rückschläge hinbekommen. Die Montage des Chassis war schnell gemacht. Beim wenigen erforderlichen Löten (nur der Motor Controller) musste ich zunächst ein wenig üben (das letzte Mal in der Schule, ewig her), hat aber am Ende gut geklappt. In den Abendstunden hab ich mir jeweils Python angelesen und dann nach erfolgreicher OS-Installation auf dem Pi und der Montage die ersten Programme erstellt.
Damit haben wir eine fertige Chassis, die sich (aktuell natürlich weder autonom, aber auch noch nicht über eine hübsche Web Oberfläche, sondern per Remote Desktop aus der Python IDE Thonny heraus) in 4 Richtungen bewegen kann (Vor, Rück, Rechts, Links), die sich in beide Richtungen im Kreis um die eigene Achse drehen kann, die bei Hinderniserkennung nach vorne (bei 20 cm) anhält, einen Signalton ausgibt und eine Info über das Hindernis ins Terminal schreibt.
Das Bild ist nicht ganz aktuell, mittlerweile sind mehr Sensoren etc. angebaut:
Anhang 35729
Da das Ausprobieren am Netzkabel doch etwas hinderlich ist, habe ich am Wochenende eine ausreichend dimensionierte Powerbank ergänzt für den Raspberry. Die Motoren werden eh von 6 AA-Batterien seperat bestromt. Beides (die Batterien und die Powerbank) liegen zumindest fürs Experimentieren einigermaßen komfortabel auf Etage 1 des Chassis, während die weiteren Bauteile größtenteils auf Etage 2 angebracht sind. Später möchte ich die Energiezufuhr am Korpus (ggf. außen als "Rucksack") befestigen. Ob wir bei der Powerbank bleiben, weiß ich noch nicht. Blöd wäre ja bei wirklich einigermaßen autonomem Betrieb, dass der Pi einfach irgendwann ausgehen würde.
Weitere aktuelle To Dos sind die Bedien und Info-Weboberfläche sowie die Befestigung des Korpus aka Papierkorbs. Zu letzterem haben wir Opa eingebunden und er ist am Thema dran...
Aktuell habe ich folgende Fragen/Problemchen:
Ich scheitere noch etwas an der wackelfreien und zukunftssicheren Befestitung der Komponenten an der Chassis. Die verfügbaren Löcher in der Chassis passen ganz gut für M3 Schrauben. Für den Raspberry braucht es M2.5 und die Grove-Elemente M2. Außerdem müssen manche Sensoren ja im 90%-Winkel anbegracht werden. Irgendwie fehlt es mir da an den richtigen Adaptern, Passtücken um das sinnvoll zu verbinden. Und dann wäre auch die Frage, wie man da am geschicktesten mit Unterlegscheiben arbeitet, an welchen Stellen machen die Sinn, damit sich die Schräubchen im Betrieb nicht ständig lösen. Winkel im Baumarkt und Online sind selten oder nie mit M2-Löchern zu finden, da man wohl in der Regel eher Schränke und Tische damit verbindet. ;-)
Der Lautsprecher kann im Prinzip über PWM oder Digital GPIO angesteuert werden. PWM habe ich nicht zum Laufen bekommen, über GPIO bekomme ich einfache "Buzzer"-artige Töne hin. Hat jemand Erfahrung damit, einen Lautsprecher, der nicht über die normale Audio-Schnittstelle des Raspberry verbunden ist, zur Wiedergabe von Audio-Dateien zu verwenden? Mir geht es ja letztlich um Sprachausgabe. Die kann ruhig blechern klingen, aber nur Buzzer-Töne reichen nicht. Ich habe dieses Teil: https://www.seeedstudio.com/Grove-Sp...us-p-4592.html Lautstärke ist erstaunlich gut, dafür dass es kein mit externer Stromversorgung betriebener aktiver Speaker ist..
Liste der Anhänge anzeigen (Anzahl: 1)
was schrauben betrifft, in china gibt es ja bekanntlich alles. es kann sich aber im laufe der zeit ansammeln:
Anhang 35730
Liste der Anhänge anzeigen (Anzahl: 3)
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:
Anhang 35833
Anhang 35832
Anhang 35831
- - - 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.
Liste der Anhänge anzeigen (Anzahl: 3)
hallo allerseits,
ich beschäftige mich seit einiger zeit mit diesem thema.
Anhang 35844 Anhang 35845
Da bleibt das thema akku nicht aussen vor, ich denke es wird - auch was die sicherheit betrifft - überbewertet. Das hängt irgendwie auch mit dem zeitgeist zusammen - ja kein risiko eingehen, wenn jemand fragt, besser abraten, oder sein lassen sich mit solchen dingen auch nur zu beschäftigen...
in meinem roboter habe ich diesen akku eingebaut, funktioniert problemlos, mein haus steht immer noch...
der akku kann - so lange der roboter auf dem schreibtisch steht über eine normale ladebuchse geladen werden, die ladeelektronik ist mit drin, oder induktiv, oder per solarpanel., alles dazu- schaltbar, oder abschaltbar... Aus diesem akku werden alle erforderlichen arbeitsspannungen per stepdown erzeugt - 12V direkt an die motoren, 5V und 3.3V wo es auch immer gebraucht wird...
bei der auslegung des roboters bin ich am anfang auch vom raspi (zero) ausgegangen, bin aber inzwischen davon weg. Eignet sich m.e. nach überhaupt nicht z.b. zur motorsteuerung. Natürlich funktioniert eine motorsteuerung damit, ist aber ein sinnloser overshoot, jeder ESP ist da besser geeignet. Selbst das hochfahren des zero dauert viel zu lange...
Anhang 35843
jedes kästchchen auf dem bild entspricht einem modul, jedes modul hat einen wifi-fähigen microcontroler, meistens einen ESP8266, nur dort wo motoren gesteuert werden ist auch ein nano. Beim einschalten des roboters geht zunächst das ortungsmodul an, von dem aus können weitere module dazu oder auch wieder abgeschaltet werden. jetzt zunächstmal vom smartphone aus, später auch von einem zero aus, der die befehlsgewalt - neben der fernbedienung - haben soll. Aber keine sensoren, cameras, oder motoren direkt, dazu hat er seine "sklaven"...