-         

Ergebnis 1 bis 6 von 6

Thema: ASURO eine bestimmte Zeit eine Aktion machen lassen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.11.2006
    Beiträge
    40

    ASURO eine bestimmte Zeit eine Aktion machen lassen

    Anzeige

    Hi an alle,

    ich habe mich gefragt ob es prinzipiell möglich ist ASURO eine gewisse zeitlang eine aktion machen zu lassen, also z.b.: erst soll er 5 sekunden geradeausfahren und dann 10 sekunden rückwärts...
    habe mir einmal die funktion sleep() in der asuro.c angeguckt, da diese ja im prinzip so funktioniert, daraus bin ich nicht schlau geworden. vielen dank schonmal im vorraus

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    25
    Beiträge
    384
    man könnte es mit einer "for" schleife machen.

  3. #3
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    du sagst ihm was er machen soll, zB fahre vorwärts.
    dann benutzt du sleep() oder Msleep() um eine zeit von 5 bzw 10 sekunden abzuwarten. der asuro macht dann in dieser zeit das was er vorher auch gemacht hat: vorwärts fahren.
    jetzt kannst du ihm sagen, was er als nächstes machen soll.

    wie man die funktion sleep() einsetzt, steht ganz gut in der anleitung beschrieben. mit Msleep aus der neuen bibliothek gehts sogar noch einfacher.
    kleinschreibung ist cool!

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    24.11.2006
    Beiträge
    40
    ja, das mit der for-schleife und Msleep() hab ich gewusst, aber ich glaub ich hab die frage oben flasch formuliert, oder zumindest missverständlich.
    was ich machen will:
    asuro folgt einer linie, verliert er diese bleiben die ausgelesenen werte von LineData() ja konstant, und eben wenn die werte länger als z.B. 2sekunden konstant sind soll asuro in eine Liniensuchprogramm wechseln...hoffe das war einigermaßen verständlich

  5. #5
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    achso...na dann prüf doch einfach über z.B. die letzten 50 messzyklen (könnte evtl zu viel sein für das eine kilobyte ram) ob die werte etwa konstant gewesen sind... öhm...

    irgendwie die letzten werte speichern, und dann mit den aktuelllen werten vergleichen oder so.

    wenn du das nur von der zeit abhängig machst, und beispielsweise den aktuellen wert mit dem von vor 10 messungen vergleichst oder so, dann könnte es auch zufällig sein, dass die werte sich ähneln und der asuro denkt dann seine linie wäre weg.
    kleinschreibung ist cool!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    24.11.2006
    Beiträge
    40
    das mit den messzyklen ist eine super idee, nur wird bei einer mittelwertbildung, wenn man den arithmetischen mittelwert nimmt, wie damaltor schon gesagt hat zuviel speicher verbraucht.
    ich habe das jetzt so gelöst, mit einem sog. IIR-Filter, hier mal der code

    Code:
    	LineData(data1);
    	if(i>0){
    		filterL[1]=(1-a)*data1[0]+a*filterL[0];
    		filterR[1]=(1-a)*data1[1]+a*filterR[0];
    	}
    	else{filterL[1]=data1[0];
    		filterR[1]=data1[0];}
    	i=1;
    	SerWrite("\n\rMittelwert links: ",22);
    	PrintInt(filterL[1]);
    	SerWrite("          Mittelwert rechts ",29);
    	PrintInt(filterR[1]);
    	filterL[0]=filterL[1];	
    	filterR[0]=filterR[1];
    es wird also ein mittelwert gebildet, der zur berechnung nur jeweils den vorherigen messwert benötigt, die variable a entspricht der gewichtung...
    somit braucht man nicht soviel speicher...damit klappt das erkennen einer verlorenen linie ganz gut

Berechtigungen

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