Nochmal:
Auch die task_ACS() muss mit in die While-Schleifen, sonst funktioniert das ACS nicht.
Das gleiche gilt für task_ADC(), wenn man die ADCs verwendet.
Gruß Dirk
Hi, ich würde etwas an den klammern in den bedingungen verändern:
LG Pr0gm4nCode:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); powerON(); setACSPwrMed(); task_ACS(); task_ADC(); while ((obstacle_left < 1) && (obstacle_right < 1) && (bumper_left == 0) && (bumper_right == 0)) { task_motionControl(); moveAtSpeed(50,50); } while ((obstacle_left) > (obstacle_right)) { task_motionControl(); moveAtSpeed(75,10); } while ((obstacle_right) > (obstacle_left)) { task_motionControl(); moveAtSpeed(10,75); } while ((obstacle_left>0) && (obstacle_right>0)) { task_motionControl(); moveAtSpeed(-70,-70); } }
Nochmal:
Auch die task_ACS() muss mit in die While-Schleifen, sonst funktioniert das ACS nicht.
Das gleiche gilt für task_ADC(), wenn man die ADCs verwendet.
Gruß Dirk
Aufgepasst mit "While" Schleifen. Die haben das Nachteil das wahrend der Bedingung IO ist, nichts anderes mehr bearbeitet wird. Da lauft dan immer nur diese "While" schleife.
Was auch immer hilfreich ist zum debuggen, sind die Text/ Var Ausgabe ueber der UART. In die Schleifen programmiert du dan eine (Beispiel )
writeString_P("mspeed= ");
writeInteger(mleft_des_speed,DEC);
writeString_P(" ");
Dan mall sehen in welche Schleife er hangen bleibt/ was die Wert on Varibalen ist.
Hi,
ach ja, danke dirk, das hab ich ja ganz übersehen!
Ich kanns grade nicht testen, aber wenn man das alles beachtet sollte es doch eigentlich jetz gehen oder?
LG Pr0gm4n
Mal unabhängig davon das die Struktur des Programms nicht sooo gut funktionieren wird, kannst Du auch anstelle von
task_motionControl, task_ACS und task_ADC auch einfach
task_RP6System();
aufrufen - ist wohl einfacher und man kann nichts wichtiges mehr vergessen![]()
MfG,
SlyD
Hi LucaSilva301,
ich glaube ich hab das Problem gelöst, auf jeden Fall läuft das Programm so bei mir:
Code:#include "RP6RobotBaseLib.h" void ausweichen(void) { if (!obstacle_left && !obstacle_right && !bumper_left && !bumper_right) { changeDirection(FWD); moveAtSpeed(50,50); } if (obstacle_left) { changeDirection(FWD); moveAtSpeed(75,10); } if (obstacle_right) { changeDirection(FWD); moveAtSpeed(10,75); } if (obstacle_left && obstacle_right) { changeDirection(BWD); moveAtSpeed(70,70); } } int main(void) { initRobotBase(); powerON(); setACSPwrMed(); while(true) { ausweichen(); task_RP6System(); } return 0; }
P.S.:
So kann man beim RP6 die Geschwindigkeit nicht angeben:
Wenn man das macht beschleunigt der RP6 auf ungefähr 150 und prallt voll gegen die Wand. Also immer *changeDirection(dir);* verwenden, sonst überleben die Bumper und die InfrarotLEDs nicht lange.Code:moveAtSpeed(-50,-50);![]()
Alles klar!
Danke für die vielen Tipps und Antworten.
Eine schöne Woche noch...
Lg
Luca
> So kann man beim RP6 die Geschwindigkeit nicht angeben:
Das ist auch klar - schau Dir mal die definition der Funktion an.
Die Parameter sind VorzeichenLOS... das muss dann natürlich schief gehen wenn Du da negative Werte übergibst.
Du kannst natürlich auch die Lib umschreiben damit das doch geht
MfG,
SlyD
ja stimmt...gute idee!
Denke das werde ich mal tun, da ich es sehr viel bequemer finde nicht erst die richtung zu ändern.
Die bumper haben nicht funktioniert, da übersehen wurde, dass ihr status nie abgerufen wird und daher die variablen getBumperLeft() und ""Right() immer 0 sein werden.
Habt ihr evtl. kreative vorschläge was man mit dem teil noch so anstellen könnte ;P ?
Was habt ihr so gemacht?
Ich finde, dass die Geschwindigkeit recht gering ist und vor allem die beschleunigung wirkt sehr träge![]()
Danke nochmal für eure Zeit!
Liebe Grüße
Luca
Hi LucaSilva301
Das die Geschwindigkeit so gering ist hat einen guten Grund: Stell dir mal vor du machst einen Fehler bei deiner Programmierung(s. Oben) und der RP6 fährt mit 20Km/h gegen die Wand! Da wären dann wahrscheinlich die Bumper und noch anderes kaputt und das wollen wir ja nich. Mit der Geschwindigkeit kann nich viel kaputtgehen und der Besitzer könnte noch hinterherspringen wenn der RP6 mal auf einen Abgrund zufährt. Also: Wenn du was schnelleres willst kauf dir doch lieber ein ferngesteuertes Auto oder was auch immer.
mfg Panzerfan
Lesezeichen