Raspberry als Hivemind - Robotik

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Kael
User
Beiträge: 33
Registriert: Freitag 2. September 2016, 01:20

Hallo zusammen!
Ich Frage hier, weil je mehr ich mich mit dem Thema beschäftige desto mehr Fragen kommen auf. Vor allem welche Module dafür nützlich wären und wie man diese gut umsetzt ist eine große Frage für mich.

Worum geht es mir da überhaupt?

Ich würde gern ein kleines System bauen was anfänglich mit 1-2 selbstgebauten kleinen Bots kommuniziert. Sei es nur das erstmal nur ein "#Bot001 dockt an RPi3 an" - aber auch das die kleinen Roboter selbstständig zum Aufladen wieder zum RPi3 fahren.

Das wäre zumindest mein Hauptziel! Es wird schon schwierig genug sein und auch erstmal eine Art 'Alpha' dafür zu bauen.
Deswegen wollte ich Fragen ob es hier ein paar wenige gibt die vielleicht Interesse hätten mit Rat und Tat etwas zur Seite zu stehen? Bei der Modulauswahl, auch eventuell beim Design und falls ich Probleme habe einen Code vernünftig umzusetzen!.

Das Konzept selbst:
Hier einmal eine Auflistung was 'möglich' wäre.

Hivemind
Priorität: A
Typ: Großbot
System: Rpi3
Energie: Batterie / Direktanschluss / Solar
Bewegung: Stationär
Sensoren: Noch keine genaue Idee
Speicher: min. 32GB
Module:
-Aufladestation Kleinrbots
-Aufladestation Mittelbots
-Leuchtfeuermodul(z.B. Funk, Wlan oder Bluetooth)
-Kommunikationsmodul (z.B. Funk, Kontakt etc.)

Grundidee:
Der Hivemind ist so gesehen das 'teure' an dem ganzen. Er ist das Speichermedium, verarbeitet einkommende Daten und gibt sie an die Kleinbots hinaus. Genauso dokumentiert er was alles Ein- und Ausgegangen ist. Er ist eben das 'Gehirn' des ganzen.

Secondmind
Priorität: C
Typ: Mittelbot
System: Arduino?
Energie: Batterie/Akku
Bewegung: Mobil - Räder
Sensoren:
-Sichtsensoren(Kamera oder Sonarsystem)
Module:
-Leuchtfeuermodul
-Kommunikationsmodul
-Aufladestation Kleinbots
-Motoren

Grundidee:
Das Secondmind ist etwas was man auch als 'Gebietserweiterung' bezeichnen kann. Und auch eher etwas was ich viiiiiiiiiiel später hinzufügen wollen würde. Die Idee dahinter ist ganz einfach: Wenn die Kleinbots öfter aus dem Leuchtfeuer-Radius hinausfahren dann soll ein Secondmind hinausfahren welcher nicht die gleiche Leistung bringt, allerdings als zweite Aufladestation und als weiteres 'Orientierungsleuchtfeuer' dienen kann.

Sammelbot
Priorität: A
Typ: Kleinbot
System: -Noch keins-
Energie: Akkubatterie
Bewegung: Mobil - Räder
Sensoren:
-Sichtsensoren(Kamera oder Sonarsystem)
-Geräuschsensor (Optional)
-Flüssigkeitssensor (Optional)
-Drucksensor(Optional)
Module:
-Lademodul
-Aufnahmemodul(Greifer oder Magnete)
-Kommunikationsmodul
-Motoren

Grundidee:
Die Sammelbots sind im Prinzip die kleinsten Bots. Sie fahren hinaus und suchen nach 'Ressourcen', laden sie ein und laden sie dann beim Hivemind ab. Die Sammelbots müssen deswegen mit dem Hivemind kommunizieren und auch untereinander kommunizieren können.
Weswegen sie auch verschiedene Speicherbereiche haben - einmal den "Basis"Bereich wo so gesehen alle Grunddaten wie Bewegung, Verhalten im Fall von X vorkommen, dann einmal den Anweisungsbereich, wo vom Hivemind immer eine Anweisung eingespeichert und die alte gelöscht wird.

Ressource
Priorität: B
Typ: Ressource
System: Noch keins
Energie: Noch keins
Bewegung: Stationär
Sensoren: Noch keine
Module: noch keine

Grundidee:
Die Ressource sollen kleine Würfel oder Kugeln sein die von den Sammelbots erkennt und dann aufgesammelt werden. Theoretisch könnte es ein einfacher blauer Würfel sein oder ein Magnet der aufgenommen wird.



Da ich allerdings komplett Neu in dieser Materie bin, muss ich so oder so noch viiiiiiiiiiiiiel Recherche betreiben und auch: "Wie soll ich damit überhaupt erstmal anfangen?"

Eine Simulation mit einfachen Pixeln die sich von A nach B bewegen und auch die Wegfindung generieren?

Und wenn wir zum technischen Aspekt kommen stellen sich mir auch in den Modulen einige Fragen.

Vor allem bezüglich der Sicht:
Sonar-Orientierung oder direkt eine Mini-Kamera in Graustufen oder mit Blau-Grün und Roterkennung?
Eine 'Bewegungserkennung' ist ggf auch sinnvoll.

Design:
Vor allem das Design spielt dabei eine Rolle, da Klein und Mittelbots so gesehen auch immer gleich aussehen sollten, zumindest in ihrer Basisfunktion

Kommunikation mit dem Hivemind:
Eine extra kurze Funkverbindung oder wäre eine Kontaktverbindung sinnvoller? So muss der Hivemind erkennen

Kommunikation untereinander - Oder wie ich es nenne: "Schwarmintelligenz"
Das wird heutzutage ja schon mit Computern gemacht, wo sich die Rechenleistung untereinander geteilt und benutzt wird. Hier allerdings wäre vor allem der direkte Kontakt wichtig. Bedeutet: Wenn mehrere Bots aneinander 'andocken' sollen sie ihre Rechenleistung zusammen teilen und dadurch im Optimalfall eine schnellere Problemlösefähigkeit entwickeln.
Letzteres ist dabei nicht so wichtig sondern eher das die Bots bei Kontakt erkennen ob es einer von ihnen ist oder von einem anderen.

Welches System für die Kleinbots?
Micropython? Ein Arduino System oder doch was ganz anderes? Ich bin mir im Moment nicht sicher aber wohl auch weil mir die Übersicht fehlt.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da hast du dir eine umfangreiche Aufgabe ausgesucht. Schon die diversen Teilprobleme sind eine Herausforderung, in der Summe schon ein echter Happen.

Ein paar nicht besonders sortierte Gedanken dazu von jemand, der schon den ein oder anderen Roboter verschiedener Komplexitaet gebaut hat:

- mir ist nicht klar was "Hivemind" hier sein soll. Das steht ja normalerweise fuer die Kombination vieler (mehr oder minder gleichfoermiger) Agenten. Nur das dein Szenario das gar nicht hergibt. Ein Arduino ist diesbezueglich untauglich, auch mit 10000 von denen wirst du nichts tun, was nicht ein PI besser hinbekommt. Du hast statt Schwarmintelligenz einen Schwarm, und eine zentrale Intelligenz. Was ok ist, aber der Begriff Hivemind ist falsch gewaehlt.
- vieles von dem was du da vorhast basiert auf lokalisierung/kartierung, im englischen SLAM - self-localisation and mapping. Ein sehr spannendes Thema, aber etwas, was definitiv *nicht* mit einem Arduino alleine zu machen ist. Und auch eine bessere sensorische Ausstattung benoetigt auf den individuellen Robotern. Das kann zwar auch eine Kamera sein, aber fuer die braucht man dann schon recht schweres Geschuetz (wie zB keypoint-detektoren etc) um daraus Karten-Material zu erstellen. Oder man macht es "billig", zB tracking einer bestimmten Farbe. Nur hast du dann halt 5 Roboter, die alle auf denselben blauen Ball zustuermen. Sonar geht auch, ist aber auch nicht besonders praezise. So oder so sind die gewonnenen Daten nur mit genug Rechenkraft zu verarbeiten -> Arduino kann die bestenfalls ablieferen.
- die mechanische und elektrische Komplexitaet einer Ladestation ist nicht zu verachten.
- Beacons basierend auf Funktechnik sind ziemlich unpraezise und fuer eine Lokalisation nicht geeignet. IR-LEDS und Sensoren, ggf. zB mit Sichtblenden um eine praezise ausrichtung zum Beacon hin zu bekommen ist deutlich einfacher.


Ich wuerde erstmal *deutlich* kleiner anfangen, und einen deiner Sammelbots bauen - aber basierend auf einem Raspberry PI. Wenn du es damit hinbekommst, innerhalb einer Packung Planung von Aufgaben und deren Abarbeitung hinzubekommen, hast du einen Ueberblick, was du an sensorischen und algorithmischen Vorraussetzungen hast. Und kannst dann entscheiden, ob du "kleiner" werden kannst was die Leistung des Systems angeht.
Kael
User
Beiträge: 33
Registriert: Freitag 2. September 2016, 01:20

Hallo deets!
Erstmal danke für die Antwort.

Möglicherweise ist das Wort 'Hivemind' eventuell auch ein falsch gewähltes Wort. Es ist nur das was mir am ehesten eingefallen ist.

Komme ich aber zur Erklärung was ich damit hauptsächlich meinte:

Der 'Hivemind'
Der Hivemind stellt dahingehend den 'Haupt-Rechner' dar. So gesehen den 'größten Kopf' im System.
Es stellt diverse Berechnungen an und gibt Aufgaben Ein und aus. So sollen alle Berechnungen auf diesen 'Hivemind' ausgelegt werden die bei den kleinen Robotern notwendig sind.
So benötigen die kleinen Roboter keine dauerhaften Informationen sondern sollen vor allem minimalistisch orientiert sein.
Muss z.B. ein kleiner Roboter dauernd aktualisiert werden damit er weiß 'was' sich im Hivemind befindet? Eigentlich nicht.
Der Kleinroboter soll nur diverse Informationen speichern - z.B. in welcher Entfernung zum Leuchtfeuer sich eine Ressourcenquelle befindet - und bei der Rückfahrt diese Information an den Hivemind übergeben. Dieser 'speichert' dann die Information und könnte dann weitere zurückkehrende Bots auf die entsprechende Quelle lotsen.

Nehmen wir an das Ressourcenfeld wäre 'abgebaut'. Die Roboter treffen auf dem Feld ein. Weil sie allerdings nichts finden, gehen sie zurück zum Hivemind und teilen mit "Keine Ressourcen am Ort" -Das wird dann gespeichert und alle wieder zurückkehrenden Roboter bekommen die Meldung das an diesem Ressourcenfeld keine weiteren Ressourcen vorhanden sind.

Der mobile 'Leuchtpunkt'
Du meinst ein Arduino als 'zweiten Verteilerpunkt' - also ein Roboter der nur an eine Position fahren muss, dort 'stehen bleibt' und dann aktiviert wird, so gesehen auch als zweiter Leuchtpunkt? Eigentlich nahm ich an das ein Arduino bezüglich der Leistung dafür genau richtig wäre. Man benötigt nicht viel Rechenleistung für so etwas - soweit ich zumindest im Kopf habe...

Oder man macht es "billig", zB tracking einer bestimmten Farbe.
So 'billig' würde ich das nicht nennen. Auch Tiere, z.B. Bienen, orientieren sich seeeeehr stark an Farben und fliegen explizit nur die Farben an die für sie Interessant sind. Was für mein System gar nicht soooo schlecht wäre. Auch die 'Auflösung' wäre nicht so wichtig. Ggf könnte man mit einer Art Sonar in Kombination mit einer Kamera zur Entfernungsmessung etwas machen...aber das wäre eher ein späterer Zeitpunkt...


Was ich dahingehend vorhatte:
Mein erster Schritt dahingehend wäre im Moment das ich versuche das ganze auf Basis mit Python zu 'simulieren' - Also im Prinzip fast schon eine Art 'Spiel' mit 3 verschiedenen 'Einheiten' die entsprechende Fähigkeiten aufweisen, wodurch ich auch simulieren könnte 'was' denn für Sensoren und Co ich dafür benötige. Mir fehlt es im Moment allerdings an dem Punkt aka 'Wie soll ich damit tatsächlich anfangen?'. Also ich stehe bei 0 komme aber nicht auf 1 ^^

Auch könnte man dadurch testen 'worauf' man sich bei den Kleinrobotern spezialisiert (z.B auf Kamera mit Farbe welche auf Farben reagiert oder eher mit reinen Sensoren die durch 'anstupsen' informationen erhalten könnten)
Im Moment habe ich z.B: einen Ultraschall-Sensor welchen man bei einem Testbot für die Distanzmessung nutzen könnte.

Beacons basierend auf Funktechnik sind ziemlich unpraezise und fuer eine Lokalisation nicht geeignet. IR-LEDS und Sensoren, ggf. zB mit Sichtblenden um eine praezise ausrichtung zum Beacon hin zu bekommen ist deutlich einfacher.
Jap, dass klingt für mich so gesehen ziemlich gut. Nur eben das die Bots dann theoretisch immer einen Sichtkontakt zum Leuchtfeuer haben müssten und falls der Kontakt zum Beacon unterbrochen wird, sollten die Roboter automatisch versuchen einen anderen Weg finden sich wieder in die Reichweite zu begeben.
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Hej!
Als ich deine Beschreibung gelesen habe, ist mir gleich folgendes Szenario in den Kopf gekommen .

Der Hivemind ist ein Pi oder besser noch ein Odroid (mag ich mehr ;) )
Und die Sammelroboter könnten ja Anis Cozmo sein.
Link zum Cozmo
Da der zum einen verschiedene Sensoren besitzt und zum anderen eine Python Anbindung hat.
Zusätzlichweise kann er ja "Kisten" Transportieren und diese zum Hivemind bringen .
Vielleicht wäre das ja etwas für dich .

Auf jedenfall krasses Projekt .Erinnert mich an "Survive Mars" in Real.
Kael
User
Beiträge: 33
Registriert: Freitag 2. September 2016, 01:20

Hallo Tholo!

Cozmo ist mir auch ein Begriff, er ist nur schlicht und ergreifend viiiiiiiiiiiiel zu teuer und Überladen und soweit ich weiß kann er 'andere Roboter' nicht erkennen. Bedeutet ich müsste ihn aufschrauben und noch 'Erkennungsmodule' mit einbauen, wie das Geht ist dann so eine Sache.

Deswegen entspricht es nicht meiner minimalistischen Denkweise für die Kleinroboter...

Für die Arbeitsbots steht im moment folgendes auf dem Plan:

ESP32 Development Board
2 Servomotoren
Rad / Kettenantrieb
Ultraschallsensor - Frontal

ESP32 halte ich vor allem nützlich weil man MicroPython darauf installieren kann wodurch eine umständliche Übersetzung von Python 3 auf eine andere Sprache verhindert wird.

Dann muss man später sehen ob man z.B. mehr Speicherplatz benötigt und eine SD-Karte hinzufügen muss. Aber für die 'Basis-Sachen' sollte ein ESP32 vollkommen ausreichen.

Mein Problem beim Bau ist eher das ich noch kein 'Chassis' o.ä. besitze und auch woher ich es kriegen könnte. Ich kenne vor allem Conrad, aber die haben nicht die Teile die ich haben will.
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Das stimmt. Der Cozmo ist sehr teuer aber kam mir halt gleich in den Sinn.

Ohne wirklich Kenntnis darüber zu haben aber kann man mit einem Wifi Mesh System das ganze nicht noch verbessern? Hirngespinst meinerseits...

Für das Chassis kannst du doch verschiedene Anbieter von 3D Druck bemühen. Ich habe da allerdings auch keine Erfahrung.(mir fällt gerade auf, dass ich das ziemlich oft sagen muss...)
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt eine Vielzahl von kleinen Roboterkits. So etwas würde ich mir kaufen. Wenn du noch die Komplexität einer Konstruktion obendrauf packst, wird’s nur noch schwerer.

Nochmal kurz zum Hivemind: dein Pi ist das Gehirn eines Schwarms. Das ist was anderes als ein Gehirn, das durch einen Schwarm gebildet wird. Und letzteres meint Hivemind.
Kael
User
Beiträge: 33
Registriert: Freitag 2. September 2016, 01:20

Über die Wi-Fi Mesh Systeme mache ich mir im Moment noch gar keine Gedanken muss ich gestehen. Ich hab es aber mal als Option notiert!

@Deets
ja dann war das von eminer Seite ggf eine falsch angenommene Übersetzung.

Hast du eine Empfehlung für ein Roboterkit auf Chassis-Basis? Ich kenne nur die von Conrad und die einzigen die mir da in den Sinn kamen war einmal eine Acrylglas-Auto Set mit 4 Motoren (was ich nicht möchte) und ein 2 Räder-Chassis was allerdings eher in der Mitte angesiedelt war.

Was ich allerdings eher suche ist eine Art 'Panzer' Konzept. Wo man 2 Servomotoren hat die hinten im Fahrzeug eingebaut werden, man dann die hinteren Reifen damit verbindet und diese über 'Gummiketten' mit den vorderen Reifen verbunden sind.

Das sollte auch nicht mehr als 10€ kosten. (wenn es den 4-Räder + 4 Servomotoren schon für 14 gibt)
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein, so billig ist nicht mein Segment. Da kenne ich nix. Und ich würde es auch so nicht machen, weil der dann außer irgendwie rumfahren nichts kann. Sondern einen Roboter nehmen, der etwa kann, um zu lernen, wie man damit umgeht. Aber du kannst das natürlich anders machen.

Simulieren kann man übrigens mit MORSE https://www.openrobots.org/wiki/morse
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Du hast auf jeden mein Interesse geweckt :D

Ich hab mal kurz rum gesucht und folgendes gefunden.
Chassis mit Ketten ohne Motor etc bei 19$

Panzerunterbau 19cm lang bei 12Euro

Wie "Einfach" das gestellt möglich sein kann, zeigt dieses Beispiel
Einfache Winkelkonstruktion mit 2 Motoren

Hast du vielleicht mal an diese Lego Technik ähnlichen Bausatze gedacht? Mir fällt gerade nicht ein wie die Heißen. Daher kein Link. Die gibt es ja auch mit "stromführenden" Lego Bausteinen. Da hab ich auch einmal ein Chassis Gestell gesehen.
Kael
User
Beiträge: 33
Registriert: Freitag 2. September 2016, 01:20

Also danke für die Links.
Ich habe mir die alle mal angesehen, empfinde sie allerdings als Basis für die kleinen Roboter als 'zu groß' oder zu 'schwer'

Ich muss gestehen das ich es mir größtenteils kleiner vorgestellt habe.

Bild

Ich habe dahingehend mal eine kleine Skizze gemacht - ich denke ich werde es anhand dem ESP32 Board ausrichten und sehen wie man die Motoren entsprechend ausbaut.

Eher hatte ich vor die kleinen Bots nach oben hin' auszurichten. UNd für die entsprechenden Module Ebenen zu bauen.
Evtl eine länge von 8-10cm und eine breite von 6-8cm. Je nachdem wie sich das umsetzen lässt.

Meine Erfahrung ist dahingehend eher auf Modellbau bezogen. Vor allem im Bereich der R-Cars mit Benzin und Elektronik habe ich früher gebaut. Weswegen ich denke ein 'Basis-Chassis' wird nun nicht so das Problem sein, vor allem wenn man sie mit entsprechenden Controllern steuern lässt.
Antworten