Schönen guten Tag,
ich habe zu Weihnachten einen Rp6 bekommen und habe sogleich mit der Programmierung begonnen.
Der Roboter soll sobald der Infrarotsensor ein Hindernis erkennt erstmal nur anhalten!
Die Bumper sind als Notaus gedacht, und funktionieren auch einwandfrei.
Wo ist der Fehler in der Software?
Es gibt keine Reaktion auf ein Hindernis.
Selbsttest 100% i.O.
Das Beispielprogramm für ACS funktioniert ebenfalls, ich möchte aber noch keinen Event Handler nutzen.
Programm:
Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); while(true){ powerON(); moveAtSpeed(50,50); setLEDs(0b001001); // green LEDS on 1/4 if(getBumperLeft()||getBumperRight()){ stop(); setLEDs(0b010010); } mSleep(50); task_motionControl(); task_ADC(); task_ACS(); // Infrarot aktiv setACSPwrHigh(); // größte Reichweite der Sensoren if(obstacle_left || obstacle_right){ moveAtSpeed(0,0); } // Anhalten wenn Hindernis erkannt! } return 0; }
Geändert von radbruch (27.12.2011 um 14:23 Uhr)
Der Befehl moveAtSpeed(50,50), der als zweites in der Endlosschleife steht, solltest du vor die Schleife setzen. Denn so wie du es programmiert hast bleibt er stehen solange stehen bis er wieder bei der Scheife bei moveAtSpeed ankommt.
So wärs richtig, wenn ich mich nicht vertan habe:
Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); powerON(); moveAtSpeed(50,50); setACSPwrHigh(); // größte Reichweite der Sensoren setLEDs(0b001001); // green LEDS on 1/4 while(true){ task_RP6System(); // Beinhaltet: task_ACD() ,task_ACS(), task_bumpers() und task_motionControl() if(getBumperLeft()||getBumperRight()){ stop(); setLEDs(0b010010); } mSleep(50); if(obstacle_left || obstacle_right) { moveAtSpeed(0,0); } // Anhalten wenn Hindernis erkannt! } return 0; }
Lesezeichen