Hi ich bräuchte mal hilfe beim programmieren.könnte mir jemand mal ein
beispiel Programm schreiben das der Rp6 gerade ausfährt und wenn irgend
ein ereigniss kommt für 10 sek eine rückwärts kurve fährt.
Druckbare Version
Hi ich bräuchte mal hilfe beim programmieren.könnte mir jemand mal ein
beispiel Programm schreiben das der Rp6 gerade ausfährt und wenn irgend
ein ereigniss kommt für 10 sek eine rückwärts kurve fährt.
So in etwa könnte es klappen. Der RP6 fährt erstmal fein gradeaus. Wenn einer der Bumper gedrückt wird, wird state auf ESCAPE gesetzt und dir_ob_obstacle auf einen Wert der dem Bumper entspricht. Danach wird der Rückwärtsgang eingelegt und Normalgeschwindigkeit (ich hab für den Rückwärtsgang mal 20 angenommen da er ja immerhin 10sec fahren soll) + bzw. - die Differenz zwischen linker und rechter Kette als Geschwindigkeit gesetzt. Habs alle nich getestet da ich keine Lust hatte den Compiler anzuwerfen (bzw. zu installieren) und mein RP6 eh grad beim großen C ist.Code:#define INIT 0
#define CRUISE 1
#define ESCAPE 2
#define OBSTACLE_LEFT 1
#define OBSTACLE_RIGHT -1
#define OBSTACLE_FRONT 1
uint8_t dir_of_obstacle;
uint8_t state = INIT;
void bumpersStateChanged(void)
{
if(bumper_left && bumper_right) // beide bumper
{
state = ESCAPE;
dir_of_obstacle = OBSTACLE_FRONT;
}
else if(bumper_left) // linker bumper
{
state = ESCAPE;
dir_of_obstacle = OBSTACLE_LEFT;
}
else if(bumper_right) // rechter bumper
{
state = ESCAPE;
dir_ob_obstacle = OBSTACLE_RIGHT;
}
}
/*****************************************************************************/
// Main:
int main(void)
{
initRobotBase();
mSleep(200);
// Set Bumpers state changed event handler:
BUMPERS_setStateChangedHandler(bumpersStateChanged);
powerON(); // Turn on Encoders, Current sensing, ACS and Power LED.
// Main loop
while(true)
{
task_RP6System();
switch(state){
case INIT: state = CRUISE;
break;
case CRUISE:
direction(fwd);
moveAtSpeed(80,80);
break;
case ESCAPE:
direction(bwd);
moveAtSpeed(20+(10*direction_of_obstacle*-1), 20+(10*direction_of_obstacle));
startStopwatch1();
while(getStopwatch1() < 10000){
task_RP6System();
}
state = CRUISE;
break;
}
}
return 0;
}
Grüße,
Jan
Danke erst mal
aber könntest du mir noch ein programm schreiben indem er einfach nur eine rückwärts Kurve macht ,deren dauer mit mSleep oder ähnlichem.
Danke
Hat er doch?! Die letzte Case Bedingung
ja schon aber ich meine wirklich genau so auch mal 10 min.
Jetzt doch 10 Minuten?
Die Zeit wird durch die 10000 bestimmt.
Aha jetzt verstehe ich was du meinst , ich dachte der kern des programmes
liegt in der moveAtSpeed funktion und nicht im status abfragen. ](*,) ](*,)
Sieht so aus als wenn du noch nicht eine Sekunde damit verbracht hast dir mal die Dokumentation zum RP6 anzuschauen!
hey das find ich beleidigent und auserdem konnt ich dort nichts finden um eine rückwärts kurve für eine bestimmte zeit zu fahren :-k
Man sollte ALLES lesen und nichts "mal eben überfliegen".
Gut dir mal 4.6.3 und 4.6.9 an.