Posts by Shaq

    Hallo zusammen,


    ich habe folgende Projektidee und wollte Fragen, ob jemand damit schon mal Erfahrung gemacht hat oder ob dies Überhaupt in dem Rahmen möglich ist.


    Zum Projekt:


    Ich möchte gerne einen fahrenden Roboter bauen, welcher die folgenden Eigenschaften besitzt.


    - Fahren ohne Fernsteuerung im Nachgang (autonomes Fahren). Das heißt man soll Ihn einmal um den Umriss der Fläche steuern können mit Festlegung von Start und Endpunkt. Nach Beendigung dieser fahrt, soll er sich ein Koordinatensystem innerhalb dieser Fläche anlegen und jeden punkt mindestens einmal anfahren. Dies soll jedoch kreuz und quer geschehen und nicht in einer bestimmten Reihenfolge. (Als Beispiel, Mähroboter etc.).


    - Erkennung von Gegenständen in der Umgebung mittels Lidar und Ultraschallsensor.


    LG

    Shaq

    Das hat mich einfach mal interessiert. Da ich mich des Öfteren mit den Geräten auseinandersetze was deren Funktionsweise betrifft und ich mich gefragt habe ob die alle in der selben Sprache programmiert werden oder es eine Inhouse Sprache ist.


    LG

    Bastelstube

    Hallo zusammen,


    konnte mich nun lange Zeit nicht mehr dazu äußern, da ich momentan mitten im Studium bin. Das Projekt hat momentan auch ein wenig Stillstand dadurch und wird in den nächsten Wochen wahrscheinlich weiter voran getrieben. Dazu werde ich mich aber dann noch einmal äußern.


    Momentan nur eine kleinere Zwischenfrage da ich mir nicht sicher bin.


    Professionelle Mähroboter werden doch in C/C++ programmiert oder?


    LG

    Bastelstube

    Um etwas konkreter zu werden hab 2x1TB wo von ich beide im Raid1 laufen lassen will. Bzw falls andere Ideen, wie ich am einfachsten eine Backupplatte mache, gerne her damit. Kenne mich da auch nur begrenzt aus. Problem ist ja beim Raid das jedweder Fehler/Lösung etc sofort übertragen wird, oder?

    Ein Raid ist kein Backup. Um ein sauberes Backup deiner Daten zu machen nimm am besten noch eine dritte Festplatte. Auf diese Platte sicherst du dann die Daten aus dem Raid.


    LG

    Bastelstube

    Das Ausgangsproblem ist, dass bei dem Code aus Beitrag #145 etwas nicht funktioniert, was sich meigrafd auch nicht erklären kann.


    Zunächst einmal was passieren sollte:


    Momentan habe ich zwei HC-SR04 Sensoren angebracht. Diese messen beide den jeweiligen Abstand. Wenn der linke Sensor nun merkt das die Distanz kleiner 15cm ist, so wird ein pivot_right()ausgeführt (Ein Rad dreht sich vorwärts und das andere Rückwärts). Das gleiche soll passieren, wenn der rechte Sensor merkt, dass die Distanz unter 15cm ist, dann soll ein pivot_left()ausgeführt.


    Was passiert nun:


    Es funktioniert immer nur eine Funktion. Wenn ich einen Gegenstand vor den rechten Sensor halte wird pivot_left()ohne Probleme ausgeübt. Mache ich das gleiche beim linken Sensor, so dreht sich immer nur ein Rad und das andere bleibt stehen.


    Was wurde bisher unternommen:


    - Sensoren getauscht um auszuschließen, dass einer defekt ist (negativ)

    - Alles entkabelt und neu verkabelt (negativ)

    - Neue Batterien in das Akkupack eingebaut (negativ)

    - Funktionen im Code getauscht (negativ)



    Nun zu dem was meigrafd meinte.


    Laut Beitrag #144 habe ich das Scipt nicht mit python3 ausgeführt. Dies habe ich dann im Anschluss gemacht. Mir ist jedoch nicht ersichtlich welchen Fehler meigrafd meint, der beim ausführen mit python3 auftreten soll.

    LG

    Bastelstube

    Das wäre die Ausgabe zum Script:



    Meinst du den mir nicht ersichtlichen Fehler in Zeile 90 ?


    LG

    Bastelstube

    Aufgrund privater Angelegenheiten, kann ich mich leider erst jetzt wieder zurück melden.


    Ich habe es jetzt gerade noch einmal getestet mit folgendem Script:



    Dieses habe ich mit sudo python3 MotorTest.pyeinmal ausgeführt. Der Fehler bleibt jedoch bestehen. Der pivot_left funktioniert. Jedoch dreht sich beim pivot_right immer nur ein Rad. Eine Fehlermeldung aufgrund der Abänderung des brains ist nicht aufgetreten.


    LG

    Bastelstube

    Verkabelung habe ich überprüft und mal die Kabel getauscht. Fehler bleibt bestehen. Somit schaue ich dann mal nach dem Code. Hast Du einen Tipp für mich woran es liegen könnte?


    Edit: Mir ist gerade aufgefallen, dass wenn ich den Code ausführe und die Hand zuerst vor den Sensor halte wo es scheinbar nicht funktioniert, funktioniert es für eine kurze Zeit. Wenn ich aber erst den Sensor auslöse wo es definitiv funktioniert und danach den wo es nicht geht, funktioniert es nicht :conf: Liegt es eventuell am Multiprocessing, dass zu viele Prozesse gleichzeitig ausgeführt werden etc.?


    LG

    Bastelstube

    Hier mal ein Video der aktuellen Situation:


    Video


    Hier der im Video verwendete Code:



    Hier die zum Video & Code zugehörige Ausgabe:



    LG

    Bastelstube

    Achso das meinst du. Ich hatte das jetzt mal so ausprobiert, jedoch selber schnell gemerkt, dass das keinen Sinn macht. Jedoch habe ich keinerlei Idee wo da der Fehler liegen könnte.


    Hast du eine Idee bzgl. der Pivot Thematik?


    LG

    Bastelstube

    Jetzt bin ich verwirrt... Was hat datetime.now() mit radarProcess_left.is_alive() zu tun?

    Das hat nichts miteinander zu tun. Mein Problem ist das pivot_right() nicht funktioniert und ich nicht so recht verstehe warum. Was hat denn pivot_right() mit Zeile 49 und 50 zu tun?


    Ich bin selber gerade etwas verwirrt. :-/



    Das einzubauen wäre aber auch nicht richtig... Lieber eine Anzahl an Wiederholungen gleicher Vorgänge und wenn Maximum erreicht dann andere Aktion...

    Das meinte ich ja, da könnte man dann sagen, dass das Gefährt rückwärts fahren soll etc.


    LG

    Bastelstube

    Zeile 49 und 50 wird so nicht gehen, da es keine "elif" Situation geben könnte... Der Part wird ja nur dann ausgeführt wenn die erste Bedingung nicht Zutraf - was ist aber wenn doch?


    radarProcess.terminate()wird ebenfalls nicht gehen

    Das radarProcess.terminate()habe ich schon angepasst (Siehe Code). Wegen der elif sache fällt mir momentan keine wirklich passende Lösung ein. Ich hätte jetzt den else Block in den if Block geschrieben bis auf self.end_time = datetime.now().



    datetime.now ist die aktuelle Zeit und starttime.now ist die Zeit wann die Messsung gestartet wurde oder?


    Problem: Was ist wenn das Gefährt unglücklich in einer Ecke des Raumes steht, und zwar so dass er sich nun nur zur Seite dreht... Links zu wenig Platz, drehe nach rechts, dann ist rechts zu wenig Platz also drehe nach links, dann ist links zu wenig platz und drehe wieder nach rechts... Das geht dann ggf ewig so weiter

    Dann wäre es sinvoll wenn er versucht rückwärts zu fahren. Dafür benötige ich aber dann noch einen weiteren Sensor. Das wäre jetzt meine Idee.


    LG

    Bastelstube

    Der pivot_right() will jedoch nicht so ganz :conf: pivot_left() geht ohne Probleme.


    Die Motor_Control()sieht richtig aus.


    LG

    Bastelstube

    Wie sieht denn deine "Roboter Brain" aus?

    pivot_*

    Ach sorry übersehen:sleeping:

    Das ganze läuft jetzt soweit. Die Frage die sich mir momentan noch stellt ist. Im vorherigen Scipt ohne den zweiten Sensor war es so, dass wenn der Roboter einen turn_left()gemacht hat, dass sich das eine rad vorwärts und das andere rückwärts gedreht hat. Dies hätte ich jetzt auch gerne wieder. Sprich das sich die Räder beim turn_left()und beim turn_right()jeweils in die andere Richtung drehen.


    Hierfür muss ich doch in der class Motor_Control()jeweils ein neues steerToanlegen oder?


    Bsp. steerTo_left und steerTo_right


    LG

    bastelstube

    Wofür benötigt man den zum Beispiel das self.vor der Variabel. Könnte man das ganze nicht auch ohne das self.machen? Welchen nutzen hat dies?

    Was bedeutet eigentlich =None? Heißt das, dass ich die Variabel auf nullsetze. Sprich kein Inhalt? Weil bei Falsewäre es ja ein Zustand.

    Worin liegt der unterschied und die funktionsweise von einemstaticzu einem sharedDictionary?



    LG

    Bastelstube