PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Geschwindigkeitsproblem



Martinius11
24.03.2010, 20:21
hi,
ich habe da ein Problem mit ein Programm:


#include "RP6RobotBaseLib.h"

int main(void)
{
initRobotBase();
powerON();
setLEDs(0b001001);
DDRA |= (E_INT1);
DDRC |= (SCL);
int a;
setACSPwrMed();
moveAtSpeed(160,160);

while(true)
{
if(getBumperLeft())
{
move(85, BWD, DIST_MM(70), true);
rotate(70, RIGHT, 50, true);
changeDirection(FWD);
PORTA |= E_INT1;
mSleep(200);
PORTA &= ~E_INT1;
mSleep(200);
PORTA |= E_INT1;
mSleep(200);
PORTA &= ~E_INT1;
}
if(getBumperRight())
{
move(85, BWD, DIST_MM(70), true);
rotate(70, LEFT, 50, true);
changeDirection(FWD);
PORTC |= SCL;
mSleep(600);
PORTC &= ~SCL;
}
if(obstacle_left)
{
move(85, BWD, DIST_MM(70), true);
rotate(70, RIGHT, 60, true);
changeDirection(FWD);
}
if(obstacle_right)
{
move(85, BWD, DIST_MM(70), true);
rotate(70, LEFT, 60, true);
changeDirection(FWD);
}
if(adcBat<600)
{
for(a = 0;a>10000;a++)
{
setLEDs(0b010101);
mSleep(150);
setLEDs(0b101010);
}
}
task_RP6System();
task_motionControl();
task_ADC();
}
return 0;
}

wenn ich das Programm starte dann fährt der Roboter schnell gerade aus,
aber wenn der Roboter auf ein Hinderniss stößt umfäht er es ,aber fährt dann langsammer weiter.Aber warum und wie kann ich das beheben?

radbruch
24.03.2010, 21:05
Hallo

Erstaunlich finde ich, dass er nach dem Ausweichen überhaupt weiterfährt. Ich vermute, rotate() und move() setzen die Geschwindigeit neu und diese wird dann von moveAtSpeed() übernommen. Gegenmassnahme wäre dann am Ende jedes If-Zweiges nochmals ein moveAtSpeed()-Befehl. Zusammen mit dem changeDirection(FWD); könntest du daraus auch eine kleine Funktion machen:

void fahren(char speed)
{
changeDirection(FWD);
moveAtSpeed(speed, speed);
}


Das solltest du vielleicht nochmals überdenken:
for(a = 0;a>10000;a++)

Ich hab' deinen Code etwas formatiert weil ich dann besser durchblicke. Ich hoffe, es war in deinem Sinne :)

Gruß

mic

Martinius11
24.03.2010, 21:27
Ja danke , ich würde aber die Funktinon "forwärts fahren" nennen.

radbruch
24.03.2010, 21:35
Aus vier Gründen würde ich die Funktion nicht "forwärts fahren" nennen:

1. Sind keine Leerzeichen in den Funktionsnamen erlaubt
2. Sollte man möglichst Umlaute und Sonderzeichen im Quellcode (auch Kommentare!) vermeiden.
3. Bedeutet es mehr Tipparbeit
4. *einen Beutel mit "V"s rüberreicht*

Martinius11
24.03.2010, 21:42
gut danke, für deine Hilfe :-k

RoboNull
29.03.2010, 14:35
gut danke, für deine Hilfe :-k
Dank Ihm auch für die Rechtschreibhilfe ;)

Martinius11
29.03.2010, 19:19
ich hofe es hat sich für dich gelohnt so einen dummen kommentar zu schreiben =D> =D> :-s :-#