Hallo! Ich stehe vor einem Problem. Und zwar:
Ich möchte die Koordinaten ermitteln, in denen sich der Asuro vom Startpunkt aus (X=0; Y=0) befindet. Ich habe folgendes Programm zur Bestimmung des zurückgelegten Weges des linken- und rechten Rades per Odometrie geschrieben:
Code:
//Dieses Programm dient zur Ermittlung des zurückgelegten Weges des linken und rechten Rades.
//zusammengestellt und umgeschrieben von julien
#include "asuro.h"
int main(void)
{
unsigned int Rmin = 1024, Rmax = 0, Lmin = 1024, Lmax = 0, Rmitte = 512, Lmitte = 512, data[2];
unsigned int wegr=0, wegl=0;
unsigned char flagl=FALSE, flagr=FALSE;
Init();
MotorDir(FWD,FWD);
MotorSpeed(100,125);
while(1) {
OdometrieData(data); // 0. links, 1. rechts
// max links
if (data[0] > Lmax)
Lmax += (data[0] - Lmax) / 2;
// min links
if (data[0] < Lmin)
Lmin -= (Lmin - data[0]) / 2;
// max rechts
if (data[1] > Rmax)
Rmax += (data[1] - Rmax) / 2;
// min rechts
if (data[1] < Rmin)
Rmin -= (Rmin - data[1]) / 2;
Rmitte=(Rmax+Rmin)/2;
Lmitte=(Lmin+Lmax)/2;
if ((data[0] < Lmitte) && (flagl == TRUE)) {
flagl = FALSE;
wegl++;
}
if ((data[0] > Lmitte) && (flagl == FALSE)) {
flagl = TRUE;
wegl++;
}
if ((data[1] < Rmitte) && (flagr == TRUE)) {
flagr = FALSE;
wegr++;
}
if ((data[1] > Rmitte) && (flagr == FALSE)) {
flagr = TRUE;
wegr++;
}
SerWrite("WL: ",4);
PrintInt(wegl); //Ausgabe Weg linkes Rad
SerWrite("WR: ",4);
PrintInt(wegr); //Ausgabe Weg rechtes Rad);
SerWrite("/r/n",2);
}
return 0;
}
Dieses Programm kann man bestimmt noch vielseitig dafür einsetzen (natürlich nur mit ein paar Änderungen). Zum Bestimmen der Koordinaten bräuchte man z.B. noch den Winkel, in dem sich Asuro relativ zum Ausgangspunkt befindet und Formeln, um die Koordinaten zu bestimmen. Naja, ich glaube, dass das nicht so einfach sein wird aber es währe auf jeden Fall mal einen Versuch wert (und nützlich währe es für viele Zwecke auch noch [z.B. virtuelle Landkarte]). Ich würde mich auf Lösungsvorschläge freuen.
MfG julien
Lesezeichen