Absender: Timo Sandmann
Datum: Di, 07.09.2010 12:56:57
In-reply-to:
<096FD558C4D20046A1BABE72DFF0C6C33D47499098@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References:
<AEC150FE-E322-4CBE-A1B5-47666F5BC251@xxxxxxxxxxxxxxx> <096FD558C4D20046A1BABE72DFF0C6C33A5FD1D9B3@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <096FD558C4D20046A1BABE72DFF0C6C33D3F0510D7@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <681CE81A-8241-4207-BC75-36F15F444089@xxxxxxxxxxxxxxx> <096FD558C4D20046A1BABE72DFF0C6C33D47499098@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Hallo Frank, Am 07.09.2010 um 11:11 schrieb Menzel, Frank IT-OS: > Hallo Timo, > hier das konkrete Beispiel: > Berechnete Position: (405|2300) > behaviour_scan_beacons.c(241) - DEBUG - > Heading: 98 > behaviour_scan_beacons.c(242) - DEBUG - > Bisherige Position: (-1|0) > behaviour_scan_beacons.c(243) - DEBUG - > Heading: 101 ich nehme mal an, der Bot stand dabei noch auf seinem Startplatz, also Startplatz 1 der Welt: 1.) Der "globale Ursprung", also die Welt-Position (0 | 0) ist das Feld ganz rechts unten, denn beim Bot zeigt die X-Achse des Koordinatensystems aus Bot-Sicht nach vorn (heading 0°) und die Y-Achse nach links (heading 90°). Dass das Koordinatensystem des Bots so liegt, war nicht meine Idee, das ist schon von Anfang an so - warum auch immer. 2.) Der Bot-Startplatz 1 (rotes Feld) ist nach 1.) auf Feld (1 | 9). Ein Sim-Feld ist 240 mm breit und hoch, die Mitte des Startplatzes hat also die Position (1 * 240 + 120 | 9 * 240 + 120) = (360 | 2280), also X = 360 mm und Y = 2280 mm. 3.) Die Lokalisierung ergibt (405 | 2300), liegt also ca. 49 mm neben der eigentlichen Position. Die Ungenauigkeit kommt vor allem daher, dass zwei der drei Baken in der Welt (vom Startplatz aus gesehen) sehr dicht beieinander liegen, die Winkeldifferenz also sehr klein ist. Mit mehr Baken (und einem entsprechend angepassten Verhalten) oder besser angeordneten Baken (z.B. um den Bot herum) würde es genauer werden. Sinnvoll wäre auch, wenn es mehr Baken in der Welt gibt und das Verhalten wählt die "besten" für den aktuellen Bot-Standort aus. > Ich deute es so, dass die neu berechnete Position für den Bot laut der Landmarken eben die 405, 2300 ist. Den Parameter habe ich nicht gesetzt, so dass die Ausgabe reine Info ist. Und die Startpos des Bots war der Einsetzpunkt auf genau 0,0. Und alte und neue Pos sind doch beides Weltkoordinaten und somit doch vergleichbar!? Nein, die alte Position, also (0 | 0), war die bot-eigene Position, vor der ersten Lokalisierung kann der Bot von Weltkoordinaten ja keine Ahnung haben. Außerdem wäre für jeden Bot die ersten (eigene) Position (0 | 0), zwei Bots (auf zwei unterschiedlichen Startplätzen) müssen aber ja auch unterschiedliche Weltkoordinaten haben. Ist das soweit jetzt verständlich? Ansonsten kann ich auch noch mal eine Skizze machen. > Aber andererseits sind für die Baken die Positionen fest verdrahtet: > > /*! @todo Nur Test-Daten */ > switch (id) { > case 0xd: > pos.x = 0; > pos.y = 0; > break; > case 0xe: > pos.x = 1250; > pos.y = 0; > break; > case 0xc: > pos.x = 1250; > pos.y = 610; > break; > } Das ist aber der falsche Code. Vollständig lautet er: static position_t get_position_from_id(uint16_t id) { position_t pos = {0, 0}; #ifdef PC pos.x = (id >> 8) * BEACON_GRID_SIZE + (BEACON_GRID_SIZE / 2); pos.y = (id & 0xff) * BEACON_GRID_SIZE + (BEACON_GRID_SIZE / 2); #else // MCU /*! @todo Nur Test-Daten */ switch (id) { case 0xd: pos.x = 0; pos.y = 0; break; case 0xe: pos.x = 1250; pos.y = 0; break; case 0xc: pos.x = 1250; pos.y = 610; break; } #endif // PC LOG_DEBUG(" Pos v. Landmarke %d: (%d|%d)", id, pos.x, pos.y); return pos; } > Da diese Koords auch nicht stimmen für Test-Localisation Parcour, können doch die Psoitionen auch nicht stimmen, müssen doch sicher erst für den Parcour angepasst werden oder? Im Fall eines simulierten Bots werden also nicht die fest verdrahteten Positionen verwendet, sondern die, die der Sim (als Sensorwert) überträgt. Anpassen muss man nur für realen Bots etwas. > Oder habe ich generell einen Denkfehler? > Meine Denkweise war zumindest die, dass ich die Botkoordinaten auf dem Sim-Display sehe und er mir nach den Baken eine fast identische Positionsangabe liefern sollte-oder? Was meinst Du mit "Sim-Display"? Das (grüne) Display zeigt nur das an, was der Bot selbst "denkt", nichts Globales. Grüße, Timo