DaKne
14.03.2023, 23:20

Ev3 ist am Ende der Programmierung unberechenbar

Liebes Forum,

folgendes Problem hat sich ergeben bei dem ich hoffe, dass ihr mir helfen könntet.

Der Ev3 soll eine Reihe von Fahrten nach vorne, nach links und rechts machen. Alles ist schön der Reihe nach einprogrammiert. Ab einer bestimmten Programmlänge führt er die rechts/links Schritte (also das Vorwärts- bzw. Rückwärtsdrehen der beiden großen Motoren) nicht mehr planmäßig aus, sondern stottert etwas, wartet, dreht dann in eine andere Richtung als gewünscht ab und bleibt irgendwann stehen. Ich verfüge über zwei EV3's. Auch der zweite macht zeigt diese Bewegungen.

Meine Fragen:
- Kann es sein, dass der EV3 eine begrenzte Programmlänge hat? Aus meiner Sicht wäre diese dann schon recht kurz. Wir reden hier von 2-3 Meter Länge der Fahrt.
- Wäre evtl. ein Systemreset und ein neues Aufspielen der Firmware eine mögliche Lösung?

Vielen Dank im Voraus für eure Tipps/Hilfen

DaKne



Micha2
15.03.2023, 11:02

Als Antwort auf den Beitrag von DaKne

+2Re: Ev3 ist am Ende der Programmierung unberechenbar

Hallo,

ohne das Programm zu kennen und Dir zu nahe treten zu wollen:
Der EV3 ist schon länger auf dem Markt, ausgiebig im Einsatz und daher doch recht "ausgereift". Sofern das von Dir beschriebene Phänomen HW- oder systembedingt sein sollte würde ich behaupten, das wäre sicherlich schon anderen vor Dir aufgefallen, insbesondere da Dein Programm nach eigener Aussage ja nicht sonderlich lang zu sein scheint.

Somit stelle ich die These auf, dass es an Deinem Programm liegt.
Aus eigener Programmiererfahrung (nicht nur mit Mindstorms, sondern allgemein) weiß ich, dass seltsame Phänomene oftmals eine ganz banale Ursache haben, auf die man vielleicht nicht sofort kommt... eine Schleife, die schlichtweg anders zählt als man dachte, irgendein blöder nicht berücksichtigter Sonderfall, falsch deklarierte Variablen, falsch übergebene Werte aus anderen Prozeduren etc.
Man sieht seinen Code an der fraglichen Stelle an, denkt "da stimmt doch alles" - und tatsächlich ist der Code vielleicht auch ok, aber das Fehlverhalten liegt an ganz anderer Stelle.
Oder, um es flapsig zu sagen: Du hast ein 95%-Problem (95% der SW-Probleme sitzen vor dem Bildschirm)

Grüße
Micha



DaKne , hassel62 gefällt das


Technicmaster0
15.03.2023, 12:10

Als Antwort auf den Beitrag von DaKne

Re: Ev3 ist am Ende der Programmierung unberechenbar

Einen Fehler in der Software selbst halte ich wie mein Vorredner für unwahrscheinlich. Bei einer einfachen Folge von Bewegungen sollten keine großen Bugs auftreten. Ebenso wäre es hilfreich, das Programm sehen zu können und zu wissen, in welcher Programmierumgebung es geschrieben wurde (LabView/Scratch).

Bei Motoren können viele Dinge zu unerwartetem Verhalten führen. Sind die richtigen Anschlüsse für die Motoren in der Software ausgewählt? Lassen sich die Motoren per Hand frei drehen oder gibt es irgendwo einen "Endpunkt", der sie blockiert? Werden die gewünschten Umdrehungen in der Live-Ansicht der Sensorwerte in der Software korrekt angezeigt? Es kann beispielsweise sein, dass ein Kabel kaputt ist und dann keine Umdrehungswerte mehr übertragen werden. Da sich die Motoren synchronisieren, würde das dazu führen, dass ggf. beide Motoren nur noch "stottern".

In der Software selbst könnte das wahrscheinlichste Problem sein, dass Bewegungsblöcke genutzt wurden, die "nicht aktiv bleiben". Wenn der Motor den Befehl bekommt, vorwärts zu fahren und direkt darauf ein Block folgt, dass er rückwärts fahren soll, kann es sein, dass er sich gar nicht oder nur ganz kurz vorwärts bewegt, weil er direkt den folgenden Block ausführt. Hier hilft es, Blöcke zu nehmen, die z.B. eine Zeit als Bewegungsdauer oder eine Anzahl von Grad/Umdrehungen haben.



DaKne
15.03.2023, 14:24

Als Antwort auf den Beitrag von Micha2

Re: Ev3 ist am Ende der Programmierung unberechenbar

Vielen Dank für die zügige Antwort. Das hatte ich auch erst vermutet. Aber verstehen tue ich es immer noch nicht. Die letzten beiden Befehle sollten bewirken, dass der Ev3 einfach gerade fährt. Ein Motor ist tatsächlich im Stillstand, der andere läuft und befördert den EV3 in die entgegengesetzte Richtung, in der er eigentlich fahren soll.

Es könnte jetzt noch sein, dass durch die Pragrammierung nach "Umdrehungen" eine zeitliche Versetzung der Motoren zum Schluss der Programmierung zu groß wird und beide Motoren am Schluss nicht mehr im Gleichklang sind.

Die Programmierung wurde etwas abgeändert und an Stellen wo Umdrehungen gewählt wurden, wird nun nach Sekunden programmiert.

Das hilft uns etwas weiter.

Wahrscheinlich ist mein Problem ein typisches Anfängerproblem. Umso mehr sage ich vielen Dank für den erneuten Motivationsschub ;)

Gruß
DaKne



[image]


Micha2 hat geschrieben:
Hallo,

ohne das Programm zu kennen und Dir zu nahe treten zu wollen:
Der EV3 ist schon länger auf dem Markt, ausgiebig im Einsatz und daher doch recht "ausgereift". Sofern das von Dir beschriebene Phänomen HW- oder systembedingt sein sollte würde ich behaupten, das wäre sicherlich schon anderen vor Dir aufgefallen, insbesondere da Dein Programm nach eigener Aussage ja nicht sonderlich lang zu sein scheint.

Somit stelle ich die These auf, dass es an Deinem Programm liegt.
Aus eigener Programmiererfahrung (nicht nur mit Mindstorms, sondern allgemein) weiß ich, dass seltsame Phänomene oftmals eine ganz banale Ursache haben, auf die man vielleicht nicht sofort kommt... eine Schleife, die schlichtweg anders zählt als man dachte, irgendein blöder nicht berücksichtigter Sonderfall, falsch deklarierte Variablen, falsch übergebene Werte aus anderen Prozeduren etc.
Man sieht seinen Code an der fraglichen Stelle an, denkt "da stimmt doch alles" - und tatsächlich ist der Code vielleicht auch ok, aber das Fehlverhalten liegt an ganz anderer Stelle.
Oder, um es flapsig zu sagen: Du hast ein 95%-Problem (95% der SW-Probleme sitzen vor dem Bildschirm)

Grüße
Micha



Micha2
15.03.2023, 16:01

Als Antwort auf den Beitrag von DaKne

Re: Ev3 ist am Ende der Programmierung unberechenbar

DaKne hat geschrieben:

[image]



Verständnisfrage: Warum hast Du denn lauter einzelne und so weit ich das sehe gleiche Motorsteuerungsblöcke nacheinander, die sich nur in der Umdrehungszahl unterscheiden?
Warum nimmst Du nicht einfach statt der 3 oberen Blöcke bei Motor A und den 5 Blöcken unten bei Motor C jeweils einen Block in dem die aufaddierte Gesamtumdrehungszahl ist?



DaKne
15.03.2023, 19:15

Als Antwort auf den Beitrag von Micha2

Re: Ev3 ist am Ende der Programmierung unberechenbar

Micha2 hat geschrieben:

DaKne hat geschrieben:

[image]



Verständnisfrage: Warum hast Du denn lauter einzelne und so weit ich das sehe gleiche Motorsteuerungsblöcke nacheinander, die sich nur in der Umdrehungszahl unterscheiden?
Warum nimmst Du nicht einfach statt der 3 oberen Blöcke bei Motor A und den 5 Blöcken unten bei Motor C jeweils einen Block in dem die aufaddierte Gesamtumdrehungszahl ist?


Klar, das sieht etwas überflüssig aus. Aber ich schildere mal kurz unser Ziel/Aufgabe.

Ein Roboter soll von einer Stelle etwas einsammeln. Dabei darf er Dinge, welche auf dem Weg liegen, nicht streifen oder umfahren. Es wird also eine leichte Kurvenfahrt daraus. An Ort und Stelle soll der Roboter sich drehen, die Dinge einsammeln und wieder, ohne die vorher angesprochenen Dinge zu berühren, an den Ausgangsort zurück fahren.

Ich kann mir vorstellen, dass es wahrscheinlich noch eine "elegantere" Lösung der Programmierung geben wird. Für einen Beginner war das der naheliegendste Weg. ;)

Gruß
DaKne



Technicmaster0
15.03.2023, 19:33

Als Antwort auf den Beitrag von DaKne

+1Re: Ev3 ist am Ende der Programmierung unberechenbar

DaKne hat geschrieben:

Vielen Dank für die zügige Antwort. Das hatte ich auch erst vermutet. Aber verstehen tue ich es immer noch nicht. Die letzten beiden Befehle sollten bewirken, dass der Ev3 einfach gerade fährt. Ein Motor ist tatsächlich im Stillstand, der andere läuft und befördert den EV3 in die entgegengesetzte Richtung, in der er eigentlich fahren soll.

Es könnte jetzt noch sein, dass durch die Pragrammierung nach "Umdrehungen" eine zeitliche Versetzung der Motoren zum Schluss der Programmierung zu groß wird und beide Motoren am Schluss nicht mehr im Gleichklang sind.

Die Programmierung wurde etwas abgeändert und an Stellen wo Umdrehungen gewählt wurden, wird nun nach Sekunden programmiert.

Das hilft uns etwas weiter.

Wahrscheinlich ist mein Problem ein typisches Anfängerproblem. Umso mehr sage ich vielen Dank für den erneuten Motivationsschub ;)

Gruß
DaKne

Ich würde empfehlen, das über "Bewegung"s-Blöcke zu machen. Damit kannst du die beiden Motoren gleichzeitig steuern und beide Räder bleiben weitestgehend synchron. Man kann dem Roboter sagen, in welche Richtung er fahren soll - ohne die Motoren einzeln anzusteuern. In dem Screenshot gehst du ja zB davon aus, dass der Roboter 1,1 Sekunden für 1,1 Umdrehungen braucht, wenn beide Motoren sich mit dem letzten Block gleichzeitig drehen sollen. Das ist aber gar nicht unbedingt gegeben.

Es kann sein, dass du erst die Anschlüsse festlegen musst, wenn du den Bewegungs-Block nutzt. Das geht mit dem "Antriebsmotoren die Anschlüsse zuweisen"-Block.



DaKne gefällt das