-
        

Ergebnis 1 bis 9 von 9

Thema: Wo ist der Fehler?

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228

    Wo ist der Fehler?

    Anzeige

    Wie schon im Titel steht: "Wo ist der Fehler?"

    Code:
    #include "RP6RobotBaseLib.h"
    
    int main (void){
    	initRobotBase();
    	powerON();
    	while(1){
    		changeDirection(FWD);
    		moveAtSpeed(160,160);
    		mSleep(5000);
    	}
    	return 0;
    }
    MfG

    Ezalo

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    30.12.2009
    Ort
    Koblenz
    Alter
    38
    Beiträge
    78
    Wie ist denn die Fehlermeldung ?
    Ich habe bereits bis Unendlich gezählt. Zweimal, und zurück

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    MoveAtSpeed() verwendet das Tasksystem des RP6:

    Code:
    /**
     * This function sets the desired speed value. 
     * The rest is done automatically. The speed is regulated to this speed value 
     * independent of Battery voltage, surface, weight of the robot and other things. 
     *
     * You need to call task_motorSpeedControl();  frequently out of the main loop!
     * otherwise this function will not work!
     * Or use task_RP6System which includes this call. 
     *
     * The function limits maximum speed to 200! This has been done because the maximum
     * possible speed gets lower over time due to battery discharging (--> voltage drop).
     * And the gears and motors will live longer if you don't stress them that much.
     *
     * Also 200 leaves a bit room to the maximum possible PWM value when you 
     * put additional load onto the Robot or drive up a ramp etc.  
     *
     */
    void moveAtSpeed(uint8_t desired_speed_left, uint8_t desired_speed_right)
    {
    	if(desired_speed_left > 200) desired_speed_left = 200; 
    	if(desired_speed_right > 200) desired_speed_right = 200;
    	mleft_des_speed = desired_speed_left;
    	mright_des_speed = desired_speed_right;
    }
    (Aus RP6RobotBaseLib.c)

    Das bedeutet, man muss das Tasksystem regelmässig aufrufen:

    Code:
    #include "RP6RobotBaseLib.h"
    
    int main (void){
       initRobotBase();
       powerON();
       changeDirection(FWD);
       moveAtSpeed(160,160);
       startStopwatch1();
       setStopwatch1(0);
    	while(getStopwatch1() < 5000) // 5 Sekunden vorwärts
    	{
          task_motionControl(); // sollte das nicht task_motorSpeedControl() sein???
    		// task_RP6System(); // alternativ könnte man auch alle Tasks abarbeiten
    		sleep(100); // schneller bringt nichts
    	}
    	stop(); // Anhalten
       while(1);
       return 0;
    }
    (ungetestet)

    mSleep() ist eine Sackgasse, weil der RP5 in der Zeit nichts anderes machen kann. Deshalb besitzt der RP6 ein Tasksystem und hebt sich damit mit seiner Library deutlich von den Mitbewerbern ab ;)

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228
    Ok, lässt sich also absolut nicht mit Asuro vergleichen ^^

    Danke

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228
    habe den Code von dir geflasht

    Code:
    #include "RP6RobotBaseLib.h"
    
    int main (void){
    	initRobotBase();
    	powerON();
    	changeDirection(FWD);
    	moveAtSpeed(160,160);
    	startStopwatch1();
    	setStopwatch1(0);
    	while(getStopwatch1() < 5000){
    		task_motionControl();
    		sleep(100);
    	}
    	stop();
    	while(1);
    	return 0;
    }
    Aber er hält nicht mehr an

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Das liegt wohl daran das stop() nicht direkt die Motoren anhält sondern nur den Befehl an die Regelschleife weiterleitet.


    > "Wo ist der Fehler?"

    Na ganz klar Anleitung nicht gelesen und Beispielprogramme nicht genau genug angeschaut

    MfG,
    SlyD

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228
    Joa, da is in diesem Falle was dran ^^ Dachte das wird schon, aber ist halt stark anders als bei Asuro.

    Und dachte unteranderem auch das ich von radbruch schon was funktionstüchtiges bekomme. Naja, werd mich jetzt mal um die Akkus und Encoder kümmern und dann mal ordentlich einlesen

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    > ist halt stark anders als bei Asuro.

    Das ist auch absichtlich so - der RP6 soll ja auch was neues für Vorbesitzer vom ASURO bieten.
    Man kann das natürlich auch so simpel machen wie beim ASURO - nur kann man dann nicht so einfach so viele Sachen "gleichzeitig" steuern.
    (Motorregelung, ACS, IRCOMM, I2C Bus Kommunikation usw.)

    MfG,
    SlyD

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Code:
       stop();
       while(1) task_motionControl(); // oje
       return 0;
    (ungetestet)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Berechtigungen

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