Vielleicht hilft dieser Trick (klick hier)? Das war bei vielen Kollegen die Ursache für schlechte Odometrieergebnisse.
Werbung
Vielleicht hilft dieser Trick (klick hier)? Das war bei vielen Kollegen die Ursache für schlechte Odometrieergebnisse.
Ciao sagt der JoeamBerg
Ok, das Problem ist offensichtlich gelöst. Aber bei die neue Lib sollte im Prinzip auch die Schwell-werten in die Datei myasuro.h angepasst werden.:
MY_ODO_LIGHT_VALUE_L
MY_ODO_DARK_VALUE_L
MY_ODO_LIGHT_VALUE_R
MY_ODO_DARK_VALUE_R
Und danach auch die Lib neu Compilieren. Nicht nur dein eigene Programm. Es könnte sein das es einige Schwarz/Weiß übergangen ich bemerkt hat.
Diese Wert ist die Strecke einer Tick Multipliziert mit 10000. Das Rad macht in einer Rundgang ein Weg von ungefähr 120mm. (Durchmesser * Pi) Mit ein Übertragung von 4,8 [EDIT: könnte auch 5 sein, muss mal nach zahlen] zwischen das letzte Zahnrad, und die kleine von die Encoderscheibe, kommt man auf 25 mm pro Encoderscheibe Rundgang. Dann durch 8 Teilen und das sollte in die Nähe von 3.125 mm/ Tick sein. Die Wert Sollte dann 312500 werden.
Aber man wurde es genauer bekommen wenn Asuro eine Strecke von 1 oder den Kompleten 10 Meter fahrt, und die Tick Anzahl aus den Globale Variabele Encoder zuruck sendet an dich.
Aber mit diesen Program können alle diesen Persönliche Werten bewertet werden:
https://www.roboternetz.de/community...asuro-h-selber
Danke ich probier das mit dem Testprogramm mal aus![]()
ich stehe gerade vor dem Problem, dass Asuro sich nach einigen malen Turn aufhängt:
Das Problem kommt immer nur vor, wenn eine andere Variable g_iRow der wert 7 annimmt. g_iRow wird auch benutzt um ein Array als Index anzusprechen.Code:int g_iTurnVal = 90; ... void MoveOn(void) { if(g_iFieldCounter % 7 == 0) { Turn(g_iTurnVal, 100); Go(FIELDSIZE, 100); g_iFieldCounter++; AnalyseField(); SerWrite("Turning: ", 9); PrintInt(g_iTurnVal); Turn(g_iTurnVal, 100); //HIER hängt er sich auf und dreht sich ununterbrochen SerWrite("Got It", 6); g_iTurnVal *= (-1); } Go(FIELDSIZE, 100); g_iFieldCounter++; }
g_iRow hat jedoch überhaupt nichts mit Turn(g_iTurnval, 100) zu tun, oder liege ich da falsch?
können Zugriffsverletzungen an anderen Stellen im Program dazu führen, dass Asuro bei Turn() "durchdreht"?
Ich bin ratlos
Habt ihr eine Idee?
Tiny ASURO Library: Thread und sf.net Seite
Lesezeichen