- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: ACS Programm - was ist hier falsch?

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Anzeige

    Praxistest und DIY Projekte
    Hi, ich würde etwas an den klammern in den bedingungen verändern:

    Code:
    #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); 
                } 
              
           
        }
    LG Pr0gm4n

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    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

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    384
    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.

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    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

  5. #15
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    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

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    07.11.2008
    Alter
    30
    Beiträge
    47
    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:
    Code:
    moveAtSpeed(-50,-50);
    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.
    Ich war´s nicht!!


  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    04.11.2008
    Beiträge
    14
    Alles klar!
    Danke für die vielen Tipps und Antworten.
    Eine schöne Woche noch...
    Lg
    Luca

  8. #18
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    > 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

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    04.11.2008
    Beiträge
    14
    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

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    07.11.2008
    Alter
    30
    Beiträge
    47
    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
    Ich war´s nicht!!


Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests