- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 55

Thema: Anfänger braucht Hilfe

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hallo Filou89,

    danke für die Hinweise!
    1.
    mit task_RP6System(); rufst du alle anderen Tasks auch auf. Du machst das also 2 mal.. (langsam)
    Das ist mir jetzt wirklich peinlich, das hatte ich schonmal richtig, das habe ich jetzt auch sofort verbessert/ausgebessert.

    2.
    fahrenFunktion();
    if (GetStop...>3500) wirst du garnie haben, da sie nirgends im Programm gestartet wurde. (Hast du sicher aus der Anleitung kopiert
    Stimmt Aber auch hier ist es nicht mehr aktuell. Ich hatte die zeit auf 500 gestellt, besser?
    3.
    setzen der statusLeds: Wenn du das Programm so laufen lässt, werden die Leds nur die Obstacle-Meldungen anzeigen, da die Bumper-meldungen gerade wieder überschrieben werden.
    Das Problem ist aber genau andersrum. Die LED´s blinken nicht auf wenn ein Hinderniss erkannt wird, nur wenn die Bumper aktiviert werden (ist glaube ich doch so "fest" einprogrammiert, oder?

    So, nun zu dem Teil, den ich noch immer nicht ganz kapiert habe.:

    Du siehst, das 3. Argument (uint16_t angle) ist eine Ganze Zahl,Integer.
    Deshalb kannst du nicht schreiben ....,(obstacle_left=false),.... (wäre ja sowieso eine Zuweisung, kein Vergleich)
    Ok, das leuchtet mir jetzt ein, thx!

    Das machst du mit:
    setMotorDir(uint8_t left_dir, uint8_t right_dir);
    Wann bzw. wo muss ich das einbauen? Hier:
    Code:
    // Hindernis links
    	if(obstacle_left){
    	setMotorDir(30,60);
    	//rotate(50, RIGHT, (obstacle_left = false), true); // dreht sich so lange bis der linke Sensor kein Hinderniss mehr hat
    	}
    Also, ich verstehe (eigentlich) ganz gut was du meinst, aber ich weiß noch nicht, wie bzw. wo ich die "setMotorDir(uint8_t left_dir, uint8_t right_dir);" Funktion und "moveAtSpeed(uint8_t desired_speed_left, uint8_t desired_speed_right)" einsetzten soll.
    Sorry, bin doch noch sehr im Anfangsstadium

    Beste Grüße

    Crystal Eye
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    36
    Beiträge
    116
    Hallo Crystal Eye,
    zu 2.:
    das Problem ist jicht die Zeitdauer, sondern, dass du mit startStopwatch1() die Stoppuhr erstmal starten musst. Diese Zeile hast du auskommentiert.
    zu 3.:
    Richtig, das ist zwar nicht programmiert, sondern direkt auf der Platine angeschlossen.

    Zum Teil mit dem Rotieren: (eventuell erkläre ich hier sachen, die du schon lange kennst)
    bei der funktion rotate übergibst du vier Argumente:
    1. Gewünschte Geschwindigkeit
    2. Richtung (Rechts oder Links)
    3. Winkel
    4. blocking oder nicht

    da du ja solange rotieren willst, wie du ein Hindernis erkennst, kennst du ja den Winkel nicht, was du aber für rotate müsstest.
    Der RP dreht sich ja, wenn eine Raupe vorwärts, die andere rückwärts dreht.
    Mit setMotorDir(FWD,BWD); kannst du eine Rechtsdrehung einstellen. Der RP bewegt noch nicht.
    Anstelle setMotorDir() kannst du auch changeDirection(Right); schreiben.

    Damit der RP sich bewegt, befiehlst du: moveAtSpeed(60,60);
    Jetzt drehen beide Raupen mit 60, links vorwärts, rechts rückwärts. Das Gibt eine Rechts-Rotation an Ort.
    Sind die Geschwindigkeiten rechts und links nicht gleich, dreht er nicht mehr an Ort, sondern fährt ein Wenig.
    Mit einer while - Anweisung, lässt du den RP solange mit der gewünschten Geschwindigkeit drehen, bis du keine Obstacles mehr hast.
    Irgendwie sowas ähnliches:
    Code:
    if(obstacle_left){     //wollen wir rechts drehen
       stop();                   //mal anhalten
       setMotorDir(FWD,BWD); //Rechtsdrehung einstellen
    
       while (obstacle_left){     //solange wir das Hindernis haben
           moveAtSpeed(80,80);//Geschwindigkeit einstellen
           task_motionControl();//Motoren Starten
       }
       stop();               //dann wieder anhalten, sonst wird moveAtSpeed(); beibehalten, glaube ich zumindest =)
    
    } else if (obstacle_right){
    //......
    }
    Hoffe, du verstehst wie ich es meine. Nochmehr hoffe ich, dass meine Überlegungen aber auch richtig sind =)

    MfG
    Filou

  3. #3
    Halllo Filou89,
    zu2.:
    ok, verstehe = blöder Fehler, wieder einmal hehe
    Jup, die rotate-Funktion verstehe ich schon (ok, bis auf das blocking <= Wird hier die Schleife z.B. angehalten?)
    zum Hindernis-Teil:
    An Hand deines Beispiels verstehe ich es jetzt! - Ich hatte den zusammenhang nicht ganz verstanden , aber jetzt PERFEKT!
    Von Dir kann man sehr gut lernen. Du erklärst es richtig gut! Wird bestimmt mehreren hier helfen! DANKE dafür!
    Das Prinzip ist verstanden. Jetzt versuche ich es selbst mal, und werde gleich meine Ergebnisse/Erkenntnisse schildern.

    Beste Grüße

    Crystal Eye
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    36
    Beiträge
    116
    Danke, danke
    Ich tu was ich kann.
    Das mit dem Blocking geht bei mir auch noch nicht so. Wollte mal während dem fahren immer ausgaben über die Schnittstelle zum PC machen. Hab ich aber nicht geschafft.
    eventuell hast du da ja etwas gelesen, das ich nicht gesehen habe.
    MfG
    Filou

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Irgendetwas war mal mit dem Stop() nicht so einfach zu lösen:

    https://www.roboternetz.de/community...eAtSpee-Befehl
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Also ich habe es abgeändert. Der Robby erkennt das Hinderniss und rotiert schön, jedoch hört er nicht mehr auf. Dann hat ja radbruch den Link gepostet, mit dem Stop. Ich habe mir den Durchgelesen & nicht alles verstanden aber dann habe ich das mit der move - Funktion versucht.

    Der folgende Code beinhaltet die "Stop();" - Funktion:

    Code:
    if(obstacle_left){		//wollen wir rechts drehen
    	stop();					//mal anhalten
    	setMotorDir(FWD,BWD); 	//Rechtsdrehung einstellen
    
    	while (obstacle_left){	//solange wir das Hindernis haben
        moveAtSpeed(80,80);		//Geschwindigkeit einstellen
        task_motionControl();	//Motoren Starten
    	}
    	stop();               //dann wieder anhalten, sonst wird moveAtSpeed(); beibehalten, glaube ich zumindest =)
    	}
    Und dieser die move(); - Funktion:

    Code:
    if(obstacle_left){		//wollen wir rechts drehen
    	stop();					//mal anhalten
    	setMotorDir(FWD,BWD); 	//Rechtsdrehung einstellen
    
    	while (obstacle_left){	//solange wir das Hindernis haben
        moveAtSpeed(80,80);		//Geschwindigkeit einstellen
        task_motionControl();	//Motoren Starten
    	}
    	move(0,FWD,0,BLOCKING);                       //Stop
                mSleep(1500);               //dann wieder anhalten, sonst wird moveAtSpeed(); beibehalten, glaube ich zumindest =)
    	}
    Habe ich da ein fehler im Code, oder warum hört er nicht auf zu drehen... der dreht Kreise wie wild


    Beste Grüße

    Crystal Eye
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    while (obstacle_left){

    obstacle_left wird vom task_motionControl() nicht aktuallisiert.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Ok, aber ich rufe doch immer die task_motionControl() auf (im Hauptprogramm = task_RP6System() auf, oder?

    Oder stehe ich gerade auf dem Schlauch?
    Wer braucht Fenster, um an einem Rechner zu arbeiten?

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Das macht task_RP6System:

    Code:
    // System control routine
    
    /**
     * Calls all important system tasks.
     */
    void task_RP6System(void)
    {
    	task_ADC();
    	task_ACS();
    	task_Bumpers();
    	task_motionControl();
    }
    Du willst drehen und gleichzeitig das ACS auswerten. Also musst du auch beide Tasks ausführen:
    Code:
    	while (obstacle_left){	//solange wir das Hindernis haben
    		moveAtSpeed(80,80);		//Geschwindigkeit einstellen
    		task_motionControl();	//Motoren Starten
    		task_ACS();	//ACS auswerten
    	}
    ungetestet
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Anfänger braucht Hilfe
    Von Tonyy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 14.12.2010, 07:16
  2. hilfe Anfänger braucht hilfe beim start
    Von thomas3 im Forum Robby RP6
    Antworten: 26
    Letzter Beitrag: 20.09.2010, 21:07
  3. Anfänger braucht Hilfe
    Von vitja09 im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 8
    Letzter Beitrag: 07.10.2006, 13:31
  4. Anfänger braucht hilfe!!!!
    Von mathisdedial im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 22.12.2004, 13:02
  5. Anfänger braucht hilfe
    Von khazad im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 11
    Letzter Beitrag: 25.10.2004, 11:27

Berechtigungen

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

Solar Speicher und Akkus Tests