Roboter

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Ich hätte da da durchaus gelassener reagieren können. Mea culpa.

    Dinge gleichzeitig zu machen wirst du nicht drumrum kommen. Womit genau arbeitest du?

  • Es ist ein bisschen schwierig, da jetzt von fast 0 auf "komplexes System mit verschiedenen Ebenen der Kontrolle" zu springen. Ich glaube ich hatte ROS erwaehnt? Ggf. ist da etwas zu finden, das dir erlaubt, dich auf einzelne Aspekte mehr zu konzentrieren. Und bezueglich des Programmierens kannst und wirst du auch noch ein paar Schippen zulegen muessen. Dinge die auffallen:

    - schlechte Namen. l und p. Aha?

    - nutze Funkionen, und ggf. Klassen. ZB ist deine Berechnung fuer die Servo-PWM gut kapselbar in eine Klasse, die einen Pin automatisch korrekt aufsetzt.

    - frueher oder spaeter wirst du einen Scheduler brauchen. Eigentlich schon jetzt. Denn du willst viele Dinge unabhaengig, aber quasi gleichzeitig machen. Und dazu braucht man ein System, das einem erlaubt, Aufgaben zu bestimmten Zeitpunkten durchzufuehren. Ich persoenlich wuerde mit dem Python-eigenen asyncio arbeiten. Damit kannst du zB einen SweepingSensor programmieren, der eine Position anfaehrt, kurz wartet (damit das Servo die einstellt), und eine Messung macht. Das Ergebnis wird zusammen mit einem Timecode verschickt, an alle interessierten Teilnehmer. Also zB einmal einen Not-Stopp-Controller, der bei zu kurzer Distanz das System stoppt. Und einen Karten-Bau-Service, der die Daten versucht zu einem Gesamtbild zu aggregieren. Du kannst es dir aber nicht erlauben, die Zeit einfach mit time.sleep zu verschlafen. Denn dann passiert nix anderes! Du musst stattdessen sagen "await asyncio.sleep(.1)", und dann macht in der Zeit der Code was anderes, und wenn das Quantum abgelaufen ist, machst du eine Sensormessung.

  • Vielen Dank für das Feedback.


    Und bezueglich des Programmierens kannst und wirst du auch noch ein paar Schippen zulegen muessen.

    Habe ja auch vor mit dem Projekt parallen zu wachsen. Deswegen weiß ich nicht ob ROS schon das richtige ist, oder ob ich mich erstmal mit der Systematik der Programme an sich außeinander setzen muss.

    - nutze Funkionen, und ggf. Klassen. ZB ist deine Berechnung fuer die Servo-PWM gut kapselbar in eine Klasse, die einen Pin automatisch korrekt aufsetzt.

    Das jetzt war auch nur mal eben ein erster Versuch was auf die Reihe zu bekommen. Fahren, messen und das Display habe ich ja schon in Klassen.


    Wie du schon sagst, verwende ich "falsche" Aktoren, wie z.B. time.sleep, weil mir das Wissen über Alternativen fehlt, deswegen auch hier der Austausch.

    Werde mich mal mit asyncio beschäftigen und meinen code optimieren.

    frueher oder spaeter wirst du einen Scheduler brauchen. Eigentlich schon jetzt.

    Genau das ist gerade ein bisschen mein Problem ^^

    Eigentlich fehlen mir Grundlagen, aber uneigentlich müsste ich jetzt schon komplexer denken.


    Und einen Karten-Bau-Service, der die Daten versucht zu einem Gesamtbild zu aggregieren.

    Da bin ich schon dabei, einen rechteckigen Raum zu "vermessen" jedoch ist mein Roboter zu schnell und recht träge.

    Eine gerade Strecke misst er auf + 5cm genau, jedoch auch nur, wenn er schon beim Starten gut positioniert ist.

    Zum fahren an der Wand endlang (Wenn Abstand zu groß, fahr nach rechts, wenn Abstand zu klein, fahr nach links) reagiert er zu hecktisch und daher unvorhersehbar.

    Ich bin gerade leider unterwegs und kann daher nicht ausprobieren ob async da schon mehr genauigkeit rein bringt.

    Weitere Überlegung war, nach jedem Nachjustieren, automatisch wieder zurück zu lenken.

    Also z.B:

    Wenn Abstand zu klein, 0,5s nach rechts und dann 0,4s nach links um wieder gerade zu kommen um die Schwingung abzufangen.


    Werde wohl nicht drum herum kommen als nächtes einen Controller für die Motoren (L293D) zu beschaffen um langsamer zu werden.

  • Wenn du regeln willst, wirst du mit Python nicht weit kommen. Du brauchst zum einen Feedback ueber die tatsaechliche Geschwindigkeit, weil zB eine PWM einfach auf den Motor geben hoch nicht-linear ist. Und dann musst du das mit mindestens 100Hz regeln. Das Problem ist dabei zum Teil Python selbst (langsam und nicht wirklich multi-threaded), zum andern aber auch der Scheduler des Systems. Darum habe ich in einem anderen Thread hier den MD25 vorgeschlagen, wobei der natuerlich nur mit den entsprechenden Motoren zusammen arbeitet.

    Alternativ nimm einen Arduino her, und mach das mit dem. Der kann auch gleich die Sensoren betreiben & fuer die niedrigeren Level zb den Notstop und das Servo etc. erledigen. Und per serieller schnittstelle bekommst du die Sensordaten, und kannst high-level Kommandos wie Geradeausfahrt mit Geschwindigkeit v etc. angeben.

  • Wenn du regeln willst, wirst du mit Python nicht weit kommen. Du brauchst zum einen Feedback ueber die tatsaechliche Geschwindigkeit, weil zB eine PWM einfach auf den Motor geben hoch nicht-linear ist. Und dann musst du das mit mindestens 100Hz regeln. Das Problem ist dabei zum Teil Python selbst (langsam und nicht wirklich multi-threaded),

    Deswegen ja geschwindigkeit deutlich runter schrauben um erst mal die Funktionen zu erarbeiten und dann später mit einem entsprechenden Setting optimieren. Wenn ich im schleichgang fahre und dem genug Zeit zum reagieren gebe wird es erst mal funktionieren.


    Alternativ nimm einen Arduino her, und mach das mit dem. Der kann auch gleich die Sensoren betreiben & fuer die niedrigeren Level zb den Notstop und das Servo etc. erledigen. Und per serieller schnittstelle bekommst du die Sensordaten, und kannst high-level Kommandos wie Geradeausfahrt mit Geschwindigkeit v etc. angeben.

    Das habe ich auch schon gelesen und vorgesehen, dass mittel- bis langfristig einzelne Funktionen an einen (oder mehrere) Arduino ausgelagert werden.

  • Na aber wie willst du denn "Geschwindigkeit deutlich runter schrauben"? Das heisst nach meinem Verstaendnis regeln, oder mechanisch untersetzen. Der L293D erlaubt dir ja nur, die Motoren eben mit einer PWM zu beschicken. Gewonnen ist da noch nichts.

  • Der L293D erlaubt dir ja nur, die Motoren eben mit einer PWM zu beschicken. Gewonnen ist da noch nichts.

    Gewonnen habe ich dann eine geringer Geschwindigkeit. Dadurch kann das Aufschwingen durch die Regelung reduziert werden, da bei niedriger Geschwindigkeit (auch wenn sie nicht genau definiert ist) dies einfach besser funktionert.


    Ich will im aktuellen Schritt weniger die Präzision erreichen, sondern primär den allgemeinen Ablauf durchspielen.

    oder mechanisch untersetzen.

    Da die Motoren nicht synchron laufen und ich die Geschwindikeiten nicht abfragen kann würde eine gleichmäßige Untersetzung der Motoren genau so zu keinem eindeutigen Ergebnis führen.

  • Natuerlich wuerde die Unteretzung zu einem gleichmaessigen Ergebnis fuehren. Zu den nicht-linearitaeten tragen diverse Dinge bei, aber ein entscheidender Faktor ist die Relation zur Kraft des Motors, und Widerstaenden im System (Reibung, Unterschiede im Untergrund etc).

    Die Untersetzung ist hier aber irrelevant, denn eine Kraft die von aussein einwirkt, wird entsprechend geteilt am Motor ankommen. Wenn du jetzt aber die Kraft reduzierst, wird der Motor staerker eingebremst, wenn ploetzlich mehr Gegenkraft gefordert wird. Da muss ma dann eben nachgeregeln. Was du aber nicht kannst.

    Ich habe diverse male in meinem Leben so eine Ansteuerung umsetzen muessen, und ueber PWM-Ansteuerung keine verlaessliche Einstellung einer gewuenschten Geschwindigkeit hinbekommen. Anders saehe das bei einer einstellbaren Stromquelle aus! Das ist aber natuerlich ein ganz anderer Schuh.

    Aber probier's halt, vielleicht habe ich mich auch nur daemlich angestellt. Und wenn du einen entsprechend glatten Untergrund hast, mag das Ergebnis auch gut genug sein. Ich verbleibe skeptisch ;)

  • Ich habe diverse male in meinem Leben so eine Ansteuerung umsetzen muessen, und ueber PWM-Ansteuerung keine verlaessliche Einstellung einer gewuenschten Geschwindigkeit hinbekommen. Anders saehe das bei einer einstellbaren Stromquelle aus! Das ist aber natuerlich ein ganz anderer Schuh.

    Das steht hier ja auch nicht zur Diskussion ^^

    Dass eine einstellbare Stromquelle genauer ist, ist ja klar.

    Ich will aktuell auch nur meine Überlegungen testen. Ich habe gerade erst den Pi und Zubehör gekauft, da kann ich mir nicht noch eben neue Motoren etc. für über 100€ lesiten. Der L293D ist da schon eher im Budget.


    Ich habe ein sehr träges System und versuche das über Geschwindigkeit und damit längere Reaktionszeit zu kompensieren.

    Aktuell habe ich eine Geschwindigkeit von ca. 50cm/s. Wenn der von seiner Bahn abweicht und ins schwingen kommt hört der auch nicht wieder auf.

    Mein Ansatz ist daher, dass ich die Geschwindigkeit runter setze, um mehr Zeit zum reagieren zu haben.

    Wenn ich mit dem Ansatz meine Programme ansatzweise ausgeführt bekomme, werde ich mir bessere Motoren und Steuerung dafür anschaffen.


    Aktuell kann ich nur über Antrieb an oder aus regeln. Der Schritt zu PWM ist da schon eine deutliche Verbesserung, auch wenn es noch nicht die Endlösung ist.

    Und nur weil ich beide Motoren gleichmäßig untersetze, bedeutet es noch lange nicht, dass sie plötzlich synchron laufen.

  • Niemand hat behauptet, dass die Synchron laufen. Das tun sie jetzt auch nicht. Aber der Einfluss der vom Motor aufgebrachten Kraft im Verhaeltnis zu unvorhersehbaren Kraeften ist bei vollgas guenstiger, und sorgt dafuer, dass die ungefaehr gleich schnell laufen. In dem Moment, wo du die weniger Kraft entwickeln laesst, wirkt sich eben ein stoerender Einfluss staerker aus. Und weil der ueblicherweise nur einseitig wirkt, respektive seitenweise unterschiedlich, merkst du das mehr.


    Aber du kannst das ja mal selber ausprobieren und berichten. Ob er bei halber Kraft im Mittel mehr abweicht, als bei voller.

    Eine Alternative stellt natuerlich eine andere Art des Antriebs dar, bei der du mechanisch lenkst, statt durch relative Geschwindigkeiten.

  • Aber du kannst das ja mal selber ausprobieren und berichten. Ob er bei halber Kraft im Mittel mehr abweicht, als bei voller.

    Eine Alternative stellt natuerlich eine andere Art des Antriebs dar, bei der du mechanisch lenkst, statt durch relative Geschwindigkeiten.

    Dafür mache ich das alles :)

    Um zu probieren und dann den optimalen Weg zu finden.

    Ich denke, dass akteull dadurch, dass es nur drei Räder sind es schon ungenauigkeiten gibt, da das dritte Rag frei schwenken kann.

    Als nächstes würde ich auf vier Räder bzw. Ketten umsteigen wollen. Bei den Ketten hätte ich mehr Haftung und dadurch auch weniger Schlupf bei der Übtertragung der Kraft auf den Fußboden.

    Aktives Lenken über z.B. Lenkstange und Servomotor habe ich auch schon überlegt.

    Einmal editiert, zuletzt von b3nE (23. April 2020 um 19:17)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!