white_rabbit
06.12.2006, 15:20
Hallo.
Ich habe diese Version des Linien-Verfolgungsprogramms getestet und bin nur mäßig zufrieden. Zum Testen habe ich zusätzlich die "Arena" von dalmator genommen, die aus 9 DinA4-Blättern besteht und außen einen kurvigen Parcours und innen 2 große Kreise bildet. Mein Asuro folgt momentan nur einem der Kreise -- und das auch nur in eine Richtung (in der Gegenrichtung kommt er sehr schnell vom Kurs ab). Ich habe in dem Code schon den Speed runtergedreht aber mir kommt es eher so vor, als wenn die Messung des schwarzen Strichs zu fehlerhaft läuft. Der Asuro verliert die Linie sehr oft aus den "Augen" und fährt dann so lange im Kreis, bis er wieder selbst irgend etwas schwarzes gefunden hat. Daran orientiert er sich dann wieder -- aber auch das nicht sehr treffsicher. Der Code ist also irgendwie fehlerhaft oder zumindest bescheiden. Wo kann man nachbessern?
Danke f. Tipps,
W.R.
#include "asuro.h"
#define SPEED 0x5a
int speedLeft,speedRight;
unsigned int lineData[2];
int ADOffset;
void LineLeft (void)
{
//speedLeft += 1; if (speedLeft > 0x8E)
speedLeft = 0xb6;
}
void LineRight (void)
{
//speedRight += 1; if (speedRight > 0x8E)
speedRight = 0xb6;
}
int main(void)
{
int i;
unsigned char j;
Init();
FrontLED(ON);
for (j = 0; j < 0xFF; j++) {
LineData(lineData);}
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
while (1) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
if ( i > 4) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(OFF);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
return 0;
}
Ich habe diese Version des Linien-Verfolgungsprogramms getestet und bin nur mäßig zufrieden. Zum Testen habe ich zusätzlich die "Arena" von dalmator genommen, die aus 9 DinA4-Blättern besteht und außen einen kurvigen Parcours und innen 2 große Kreise bildet. Mein Asuro folgt momentan nur einem der Kreise -- und das auch nur in eine Richtung (in der Gegenrichtung kommt er sehr schnell vom Kurs ab). Ich habe in dem Code schon den Speed runtergedreht aber mir kommt es eher so vor, als wenn die Messung des schwarzen Strichs zu fehlerhaft läuft. Der Asuro verliert die Linie sehr oft aus den "Augen" und fährt dann so lange im Kreis, bis er wieder selbst irgend etwas schwarzes gefunden hat. Daran orientiert er sich dann wieder -- aber auch das nicht sehr treffsicher. Der Code ist also irgendwie fehlerhaft oder zumindest bescheiden. Wo kann man nachbessern?
Danke f. Tipps,
W.R.
#include "asuro.h"
#define SPEED 0x5a
int speedLeft,speedRight;
unsigned int lineData[2];
int ADOffset;
void LineLeft (void)
{
//speedLeft += 1; if (speedLeft > 0x8E)
speedLeft = 0xb6;
}
void LineRight (void)
{
//speedRight += 1; if (speedRight > 0x8E)
speedRight = 0xb6;
}
int main(void)
{
int i;
unsigned char j;
Init();
FrontLED(ON);
for (j = 0; j < 0xFF; j++) {
LineData(lineData);}
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
while (1) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
if ( i > 4) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(OFF);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
return 0;
}