c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

[ct-bot] ->Klappe

Absender: Frank Menzel
Datum: Sa, 24.01.2009 20:03:29
In-reply-to: <02189744-5AD5-4204-A5D3-E271199C2020@xxxxxxxxxxxxxxx>


Hallo Timo,
zu dem Punkt: " if (pos == DOOR_CLOSE && sensDoor == 0) {
		return;	// Klappe ist bereits geschlossen
	}"

Ich habe sie auskommentiert aber dann geht gar nichts. Gleich nach
flashen gibt er nur noch ein sich immer wiederholendes Klicken von
sich-keine Anzeige, nichts geht mehr. Wieder die Zeilen rein, alles geht
wieder. Wieder auskommentiert-ticken. Also habe ich die Zeilen drin
gelassen.

Die Änderung des Aufrufens von bot_servo(data... zu bot_servo(NULL...
hat aber die Lösung gebracht und er kommt damit zu Ende, kein endloses
Ticken mehr.



Bei der ursprünglichen Version ohne NULL-Aufruf, also noch mit dem
endlosen Ticken nach Einfangen, ist mir noch folgendes aufgefallen: Wenn
Objekt eingefangen ist, leuchtet ja die gelbe LED und es kommt das
endlose Ticken. Wenn ich aber den bot nun mit dem eingefangenen Objekt
ein wenig zurückschiebe und die LED verlischt, dann hört auch das Ticken
auf und das Verhalten kommt zum Ende.

Soweit erst einmal dazu,
Gruß, Frank


-----Ursprüngliche Nachricht-----
Von: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx
[mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx] Im Auftrag von Timo
Sandmann
Gesendet: Samstag, 24. Januar 2009 18:16
An: Entwicklung rund um den c't-bot
Betreff: Re: [ct-bot] Motorregelung fehlerhaft?

Hi Frank,

Am 23.01.2009 um 19:41 schrieb Frank Menzel:
> Vielleicht kennst Du ja auch bei dem anderen Problem so schnell die
> Lösung :-) Ist mir schon lange aufgefallen und möchte ich jetzt mal
> ansprechen. Es geht um die Klappe, di sich ja wunderbar via FB steuern
> lässt, auf und nieder (bei mir + und -). Bei mir ist der
> Klappen-Optokoppler ohne Funktion,

wenn der Klappensensor bei dir außer Funktion ist, dann würde ich in  
bot-logic/behaviour_servo.c Zeile 56ff:
	if (pos == DOOR_CLOSE && sensDoor == 0) {
		return;	// Klappe ist bereits geschlossen
	}
einfach auskommentieren. Der Sensor wird vom Servo-Verhalten nur dazu  
genutzt, den Servo gar nicht erst einzuschalten, wenn die Klappe  
geschlossen werden soll, aber bereits zu ist. Wenn die genannten  
Zeilen auskommentiert sind, ist das Servo-Verhalten völlig unabhängig  
vom Klappensensor.

> weil meine Klappe eben nicht
> seitwärts weggeht sondern hoch und runter. Wenn jeweils die Klappe die
> Endposition erreicht hat, dann summt der Servo noch kurz nach und
> schweigt dann, läuft wohl auf den Servotimeout.

Das ist auch bei der Standard-Klappe der Fall. Das ist hier kein  
Timeout im Sinne eines Abbruchs, weil etwas nicht rechtzeitig reagiert  
hat, sondern das Verhalten schaltet den Servo einfach nur für 1  
Sekunde ein und dann wieder aus. Daher sollte das Prinzip auch bei  
deiner Konstruktion funktionieren.

> Bis hierher alles prima.
> Wenn aber dann in einem Verhalten mal das Klappe-ZU-Verhalten  
> aufgerufen
> wird, wie bei CATCH_PILLAR, und die Klappe dann in dem Verhalten
> zugegangen ist (eingefangen) so kommt auch dieses Nachsummen des  
> Servos.
> Doch in dem Fall kommt er nie zu Ende und summt endlos weiter. Es ist
> dann auch nicht mehr möglich, mit + oder - via FB die Klappe zum
> Aufmachen zu bewegen. Erst nach Reset ist alles wieder ok. Wird das
> Klappe-zu-Verhalten in einem anderen Verhalten eingebaut, so endet  
> dann
> jenes Verhalten bei Klappe zu und kommt nicht mehr zum Aufrufer  
> zurück.

Also haben wir folgenden Situation: Wenn bot_servo() mit caller ==  
NULL aufgerufen wird (wie von der Fernbedienung), funktioniert alles,  
wenn aber caller != NULL (wie beim Aufruf aus einem Verhalten heraus),  
dann wird der Servo nie wieder ausgeschaltet und der Caller ist ewig  
blockiert?

> Wo kann da das Problem sein ?

Ich sehe da so gerade auch kein Problem, weil dein Klappenumbau hier  
eigentlich keinen Einfluss haben dürfte. sensDoor müsste ja bei dir  
immer 1 sein. Und wenn nicht, dürfte der Servo gar nicht erst  
anlaufen. Trotzdem würde ich einfach die drei o.g.  Zeilen  
auskommentieren, weil sie in deiner Konstellation eh keinen Sinn machen.
Was du auch noch mal ausprobieren kannst: Im Verhalten wie  
bot_catch_pillar() einfach den bot_servo(data, ...)-Aufruf auf  
bot_servor(NULL, ...) ändern, dann müsste es ja wie bei der  
Fernbedienung sein. Falls das hilft, müsste es aber irgendwo noch  
einen Bug geben.

> Vielleicht ist hier mein Spezialfall mit
> unbenutztem Klappe-Zu-Optokoppler und Timeout Schuld?

Nein, das denke ich nicht.

Grüße,
Timo
_______________________________________________
ct-bot-entwickler Mailingliste
ct-bot-entwickler@xxxxxxxxxxxxxxxxx
http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler