
Zitat von
Dirk
Aber: Das ist ja genau eine Aufgabe als
Programmer des RP6! Nehmen wir an, der Headingwert beträgt aktuell 180° (S), du möchtest aber nach Osten (90°, E) fahren. Dann must du deinem Rotate-Befehl sagen, dass der RP6 um 90° nach links rotieren muss. Danach must du wieder den Headingwert bestimmen und erneut mit Rotate korrigieren oder durch den move-Befehl den neuen Kurs halten, indem du jeweils eine Kette etwas langsamer machst, wenn eine Abweichung von deiner Zielrichtung erkannt wird.
Das ist schon eine nette Herausforderung!!

da gib ich dir uneingeschränkt recht!! 
der folgender code soll bewirken, dass sie der RP6 - je nachdem welcher headingwert gemessen wurde - nach norden ausrichtet und das auf dem kürzesten weg, also nicht immer nur rechtsherum. Die headingswerte werden ausserhalb des bereiches für case1 gemessen, deshalb hier auskommentiert...
Code:
case 1://richtung NORD
setLEDs(0b0001); //LED 1 leuchtet
{
/*
intreg2dm = readHDMM01(); // holt sersorwerte
if(!intreg2dm) //daten gültig?
normalizeHDMM01(); // daten werden "normalisiert"
heading2dm = headingHDMM01(); // berechnung der headingwerte
*/
setCursorPosLCD(0, 0);
writeStringLCD_P("Heading ");
writeIntegerLCD(heading2dm, DEC);
mSleep(1000);
setCursorPosLCD(1, 0);
writeStringLCD_P("direction ");
calculateDir(dir, heading2dm); //berechnung der richtung (N,S,W,E)
writeStringLCD(dir); //ausgabe der richtung
}
if (heading2dm < 180) rotate (100, 2, heading2dm, 1);
else rotate (100, 3, 360-heading2dm, 1);
// move(150, FWD, DIST_MM(500), true); //fährt 50cm
mSleep(1000);
// rotate(50, 3, 90, 1); //dreht um 90°
clearLCD();
ich habe auch die move befehle hier auskommentiert, ich lasse ihn erstmal nur auf der stelle drehen.
- nach links funktioniert es, auch wenn sehr ungenau - da müsste ich also die zweite messung und korrektur einbauen, das mache ich noch.
- hat die genauigkeit etwas mit der geschwindigkeit des drehens zu tun? Ich habe den eindruck, dass er, wenn er schneller ist, weit mehr übers ziel hinausgeht...und wenn er langsammer ist, das ziel nicht erreicht!
- nach rechts, also wenn der gemessener headingwert > 180° ist, dreht er sich im kreis ohne anzuhalten und ich komme nicht drauf warum!?!?
Lesezeichen