c't

c't-Projekte - Mailinglisten


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

RE: [ct-bot] ->Klappe

Absender: Menzel, Frank IT-OO4
Datum: Mo, 26.01.2009 10:53:35
In-reply-to: <119623A1-0F08-4A03-B0BA-50C426E3DB07@xxxxxxxxxxxxxxx>
References: <119623A1-0F08-4A03-B0BA-50C426E3DB07@xxxxxxxxxxxxxxx>


Hi Timo,
ja der Code war frisch geholt und jederzeit nachvollziehbar.
Scheinbar wird diese Routine beim Bot-Neustart immer aufgerufen und normalerweise dann mit return gleich wieder beendet. Durch auskommentieren aber eben nicht->Endlosschleife. Verstehe ich aber auch nicht so ganz, zumal ich nirgends einen solchen Aufruf finden konnte... Versuche ich heute Abend noch einmal mit frischem Ausschecken...
Mit dem Ticken meinte ich das Servo-Geräusch.
Bei Catch-Pillar wird standardmäßig die Version 3 benutzt und habe ich  nicht verändert. Hier heißt es:

case GO_TO_POINT:
                bot_goto_pos(data, obj_pos.x, obj_pos.y, 999);
                bot_cancel_behaviour(data, bot_goto_pos_behaviour, goto_pos_cancel);
                catch_pillar_state = END;
                break;

                /* Ende */
        default:
                deactivateBehaviour(bot_cancel_behaviour_behaviour);
                if (sensTrans == 1) {
                        // Klappe schliessen falls Objekt eingefangen wurde
                        bot_servo(data, SERVO1, DOOR_CLOSE);
                }
                exit_behaviour(data, sensTrans); // == SUBSUCCESS, falls Objekt eingefangen
                break;
        }


Das endlose Klappe schliessen wird aufgerufen, solange das Objekt als eingefangen erkannt wird!? Das deckt sich mit meiner Beobachtung...


Gruß, Frank


-----Original Message-----
From: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx [mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of Timo Sandmann
Sent: Monday, January 26, 2009 10:11 AM
To: Entwicklung rund Mailingliste c't-Bot
Subject: Re: [ct-bot] ->Klappe

Hallo Frank,

Am 24.01.2009 um 20:03 schrieb Frank Menzel:
> 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.

o.O was geht denn da ab? Du kommentierst einen if-Block aus, der
sowieso nie ausgeführt wird und die Firmware funktioniert schon nicht
mehr, bevor die entsprechende Funktion überhaupt erst aufgerufen wird?
Hast du das mit einem frisch vom SVN geholten Projekt gemacht oder mit
einem, das schon eigene Änderungen drin hatte?

> 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.

Mit dem "Ticken" meinst du jetzt das Servo-Geräusch?
Der Nachteil dieser Variante ist natürlich, dass der Aufrufer sofort
weiterläuft und nicht erst, wenn das Servoverhalten fertig und der
Servo an seiner Endposition angekommen ist. Das ist also keine
dauerhafte Lösung.

> 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.

Verwendest du Version 1 von bot_catch_pillar()? Die hat ja so etwas im
Code:
if (sensTrans == 0) {
     VORWÄRTS;
} else {
     KLAPPE_ZU;
     STATUS = ENDE;
}

Wenn jetzt (warum auch immer) das STATUS = ENDE; nicht ausgeführt
wird, gibt's ne Endlosschleife, die den Servo immer wieder "Klappe zu"
ausführen lässt (Servo ist ewig aktiv und Verhalten wird nie beendet).
Das wäre genau das, was du beschrieben hast, hätte aber nichts mit dem
Servo-Code zu tun. Da im Code der Status auf Ende gesetzt wird, dürfte
das aber eigentlich gar nicht passieren. Es ist halt nur auffällig,
dass dieses Szenario genau zu deinem Fehlerbild führt.

Gruß,
Timo


_______________________________________________
ct-bot-entwickler Mailingliste
ct-bot-entwickler@xxxxxxxxxxxxxxxxx
http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler

Confidentiality note:
The information in this email and any attachment may contain confidential and proprietary information of Heidelberger Druckmaschinen AG and/or its affiliates and may be privileged or otherwise protected from disclosure. If you are not the intended recipient, you are hereby notified that any review, reliance or distribution by others or forwarding without express permission is strictly prohibited and may cause liability. In case you have received this message due to an error in transmission, we kindly ask you to notify the sender immediately and to delete this email and any attachment from your system.