Ich habe ein neues Thema bezgl Bodensensoren aufgemacht, denn dieses Thema hat ja mit dem initializer2.hex nicht so viel zu tun...
Beim Test der Bodensensoren (die 2 vorderen Sensoren) habe ich festgestellt, daß der Nibo noch bis zu 4 cm weiter fährt nach dem Erkennen des "Absturzes" -> 4cm, da würde er auf jeden Fall abstürzen (2,4 cm sind das maximale ohne Absturz)
Mein Programm ist ganz einfach gehalten; in einer while-schleife wird:
copro_setSpeed(tspeed_l, tspeed_r);
copro_update();
if ((value_fl<0x20)||(value_fr<0x20)) {
leds_set_status(2,4);
copro_stop();}
(das sind nur prinzipielle Codeschnipsel!) Die Sollwertvorgabe tspeed_l = 40 Ticks (14cm/s), ki = 15, kp = 20, kd = 10.
Ich wollte auch die Zeit messen, die vergeht, bis der NIBO steht (vom Auslösen des copro_stop() bis copro_speed_l = 0, wollte das über einen interruptgesteuerten Timer/Zähler ISR(TIMER2_COMP_vect) machen, aber der Befehl copro_stop() schaltet die Interruptbehandlung aus (cli() und sei())..und somit geht mein Zähler nicht - es wäre schon interessant, die Zeit zu messen, die der Nibo braucht um zum stehen zu kommen..
ich werde mal checken, ob der Nibo mit dem Befehl copro_setPWM() schneller zum Stillstand kommt, denn ich befürchte, daß er noch weiter fahren würde,wenn der Speedsetpoint größer wäre (z.B. statt 40 Ticks 80 Ticks, wobei die Frage ist - kann er diese Geschwindigkeit überhaupt fahren...
Hallo Hero
bin am staunen. So habe ich die Sache noch nicht gesehen. Bin aber noch nicht so weit gekommen. Dein Codeschnipzel sieht ganz gut aus. Bin gespannt auf den Rest. Wenn der Abstand nur 2,4 cm betragen darf ist ja ein Absturz möglich. Komisch. Gerade die Sensoren sollen das doch verhindern.
So wie das aussieht bist du doch in C ganz gut.
Achim
wg Programmieren in C - bin noch ein Fledgling...zum Test der Bodensensoren - bin der Meinung, der Programmteil mit dem Check der Bodensensoren ("Absturzverhinderung") muß in einem EIGENSTÄNDIGEN Programmteil - Stichwort THREAD - laufen - also "parallel" zum normalen Programm, sodaß bei Absturzerkennung der copro_stop() sofort zum Beenden des Fahrens des NIBO führt - derzeit ist es ja ein sequentielles Abarbeiten und kein paralleles...werde versuchen, mich schlau zu machen, ob eine thread-programmierung beim atmega 128 möglich ist und es eine entsprechende library dafür gibt - und WIE man sie einsetzen kann...
Test Bodensensoren - habe in einer while - Schleife NUR die Bodensoren eingelesen und gecheckt, ob der eingelesene Wert zum Absturz führen würde:
.
.
while(1){
floor_update();
if ((value_fl<0x20)||(value_fr<0x20)) {
leds_set_status(2,4);
copro_stop();}
.
.
und dennoch fährt der NIBO noch ca 4 cm weiter (bei 40Ticks/s)...ist die Anzahl der Ticks 20/s, dann fährt er nur bis knapp zur Mitte der Teflonauflage...habe auch eine avr-thread lib gefunden, bin aber nicht sicher ob man damit den NIBO früher stoppen kann... anzunehmen ist, daß er NOCH weiter fährt, wenn die Anzahl der Ticks z.B 60/s oder 80/s ist... denke, man kann diese Absturzerkennung nicht sicher nutzen...muß noch checken, was passiert, wenn man den NIBO mittels copro_setPWM() zum stoppen bringt
Hallo Hero
bin noch nicht so weit gekommen wie ich wollte. Kämpfe immer noch mit meinem Rechner. Erläuft zwar aber einiges gefält noch nicht. Durch den Datenverlust musste ich auch erst die Teile vom Magazin zusammensuchen und baue gerade ein neues Teil. Dazu treibe ich mich im Moment viel im Netz rum um einiges zu suchen.
Bis bald Achim
es kommt darauf an, welche Fkt in der while-schleife aufgerufen werden - wenn KEINE Grafikausgaben erfolgen, stoppt der NIBO bei 40 Ticks gerade noch rechtzeitig (ca 3mm vor Teflon-Rand -> kein Absturz), bei 60 Ticks fährt er ca 3 - 5mm über den Teflon-Rand hinaus -> Absturz.
Ich hatte bei meinen ersten Versuchen mir immer die Drehzahl, Batt-spg und die Bodensensoren am Grafikdisplay anzeigen lassen, diese Anzeigen verursachen eine Verzögerung -> NIBO fährt weiter als gewünscht...
bei den 40Ticks hat er bei mir immer gerade noch rechtzeitig gestoppt (Ubatt = 10V), wenn keine Anzeige erfolgte
die Fkt copro_setPWM(0,0) führt auch nicht zu einem früheren Stopp.
Fazit: 40 Ticks, keine Grafikausgaben - bei mir kein Absturz.
habe mal mein c-file mit angehängt - alles mit NiboLib 2.7
Hat sich Dein Problem erledigt? Ich habe zwar nur den "ausgestorbenen" NIBO (1), aber an den Bodensensoren hat sich ja nichts geändert. Innerhalb der while(1)-Schleife wird ja nur einmal ein Motorenbefehl abgesetzt. Wenn der "Abgrund" erkannt wird, sollte ja sofort angehalten werden. Allerdings scheint es so zu sein, dass erst noch ein Schleifendurchlauf gemacht wird. Leider antwortet der Hersteller auf solche Fragen nicht.
Lisbeth
Nein, das Problem besteht (leider) immer noch; wie Du schon richtig bemerkst, sollte der NIBO nach dem Befehl copro_stop() unverzüglich anhalten (was er nicht macht); es ist schon vorgekommen, daß er ÜBERHAUPT nicht stoppt, obwohl er hätte stoppen müssen...ich habe dann aufgegeben, um ehrlich zu sein.
Ich hatte auch den Hersteller diesbezüglich schon angeschrieben, aber leider keine Antwort erhalten; generell ist es schwer, eine Antwort zu erhalten.
naja, ist schade, denn der NIBO ist eigentlich ganz nett. Es scheint auch keine große User-Community zu geben, sodaß man sich bei Problemen austauschen könnte.
Der Hersteller hat nun ein Forum geschaffen (www.roboter.cc/), da kann man vielleicht/hoffentlich mal Fragen platzieren und hoffentlich(!!) verwertbare (!!) Antworten erhalten.
Lesezeichen