-

+ Antworten
Ergebnis 1 bis 7 von 7

Thema: RP6 Stop Funktion

  1. #1

    RP6 Stop Funktion

    Hallo!
    Brauche hilfe!

    Ich steuere meinen Rp6 über ein WiFly Modul fom Laptop aus!
    Nun wollte ich noch ein paar anpassungen machen... aber verzweifle nun an kleinen problemen!

    Die Funktion Stop verstehe ich nicht!

    Um sie anzuwenden hab ich auf die schnelle ein einfaches Programm geschrieben..

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    void anhalten (void);

    int main (void)
    {
    int i;
    int lese_wert;
    initRobotBase();
    powerON();
    while(1)
    {

    for (i = 0; i<=1000; i++)
    {
    changeDirection(FWD);
    task_motionControl();
    moveAtSpeed(180,180);
    mSleep(5);
    }

    anhalten();
    mSleep(2000);

    for (i = 0; i<=1000; i++)
    {
    changeDirection(BWD);
    task_motionControl();
    moveAtSpeed(180,180);
    mSleep(5);
    }


    void anhalten(void)
    {
    stop();
    setStopwatch1(0);
    while(getStopwatch1()<300)
    {
    task_motionControl();
    }

    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    Das problem ist, dass der Roboter sich nach der Stopfunktion aufhäng....

    Kann mir jemand das erklären?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    29
    Beiträge
    1.493
    Hallo,

    setStopwatch1(0);
    while(getStopwatch1()<300)
    {
    die Stopwatch wird hier nirgendwo gestartet.


    Ausserdem deklarierst Du wenn ichs richtig sehe
    void anhalten(void)

    INNERHALB der Main Funktion! Das C das zulässt liegt an den vielen Freiheitsgraden die es zur Verfügung
    stellt aber sowas sollte man ohne gute Gründe eigentlich nicht machen.

    Oh und bitte im Forum [ CODE ] TAGS verwenden damit die Formatierung übersichtlich ist.

    MfG,
    SlyD

  3. #3
    Sorry hab den Code nicht recht eingefügt!

    Also es sollte auch ohne getstopwatch gehen! ( das mit dem stopwatch hab ich i irgendeinem forum gelesen und einfach eingefügt)

    Aber eben das Problem mit der Stopfunktion habe ich immer noch!?

    Code:
    int main (void)
    {
            int i;
            int lese_wert;
            initRobotBase();
            powerON();
            while(1)
            {
    
            for (i = 0; i<=1000; i++)
            {
               changeDirection(FWD);
               task_motionControl(); 
               moveAtSpeed(180,180);
               mSleep(5);
            }
    
            stop()
            mSleep(2000);
    
            for (i = 0; i<=1000; i++)
            {
              changeDirection(BWD);
              task_motionControl();
              moveAtSpeed(180,180);
              mSleep(5);
            }
    
    }//end main
    Geändert von radbruch (30.04.2012 um 14:05 Uhr)

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    51
    Beiträge
    5.672
    Blog-Einträge
    8
    Hallo

    Hier ein paar Erkenntnisse zu Stop():
    http://www.roboternetz.de/community/...eAtSpee-Befehl

    Und dann solltest du dir mal die Beispiele zum Task-System des RP6 anschauen...

    Gruß

    mic

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

  5. #5
    Diese beiträge hab ich mir schon angeschaut!

    Sie setzten aber den MoveSpeed(0,0), jedoch fährt der Roboter dan immer noch ganz langsam... das heisst 0,0 entschpricht dem minimum welches etwa 21;21 ist.

    Oder habe ich das faltsch interpretiert?

    Gruss
    Corsin

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    29
    Beiträge
    1.493
    Wenn das der 1:1 copy&paste Code ist sollte der Compiler eigentlich auch meckern weil da mind.
    zwei Syntax Fehler drin sind.


    Die stop Funktion ist an die Verwendung von task_motionControl also der Regelung gekoppelt
    und dazu gedacht Bewegungen die mit move und rotate gestartet wurden zu unterbrechen.

    Ohne das die task_motionControl Funktion regelmäßig aufgerufen wird funktioniert die Regelung nicht.
    Stop hält NICHT sofort den Roboter an sondern löst nur aus das gestoppt werden soll.
    Schau Dir einfach den Code in der Library an.


    mSleep mit langen Pausen darfst Du in dem Fall eigentlich auch nicht verwenden (mSleep(5) ist kein Problem).


    Den Code:
    changeDirection(BWD);
    task_motionControl();
    moveAtSpeed(180,180);
    mSleep(5);

    1000x auszuführen macht keinen Sinn.
    Eigentlich ist die Anwendung eher so gedacht:


    changeDirection(BWD);
    moveAtSpeed(180,180);

    while(true)
    task_motionControl();


    MfG,
    SlyD

  7. #7
    danke! werde es ausprobieren!
    Ps: war nicht der 1:1 copy&paste! (bin in der firma und hab das programm nicht griffbereit!)
    gruss
    Corsin

+ Antworten

Ähnliche Themen

  1. Emergency Stop Button
    Von julchen im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 6
    Letzter Beitrag: 29.01.2009, 21:31
  2. Funktion gibt Funktion zurück... nächstes Problem
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 19.12.2008, 09:51
  3. L298: genaue Funktion des "Motor Stop" (Enable)
    Von Dolfo im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 26.08.2008, 12:38
  4. I²C - Stop Bestätigung?
    Von CowZ im Forum Elektronik
    Antworten: 18
    Letzter Beitrag: 15.10.2006, 15:51
  5. Start-Stop Kommando
    Von wheelchair im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 31.03.2006, 17:06

Stichworte

Berechtigungen

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