- 12V Akku mit 280 Ah bauen         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 35

Thema: Bumper / ACS Fehlfunktion

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.07.2010
    Beiträge
    45

    Bumper / ACS Fehlfunktion

    Anzeige

    Praxistest und DIY Projekte
    Hallo liebe User

    Ich habe am 24. einen RP6 bekommen und schon mal mit dem Code herumexperimentiert.
    Ich habe gedacht das er am Anfang eifach mal die Status (Die mehrzahl von Status ist doch Status! ...oder?) an das Terminal übermittelt.

    Einiges geht schon ganz gut, nur beim Abfragen des Linken Bumpers und vom ACS gibt es Probleme.
    Der Linke Bumper scheint immer aktiv zu sein (auch wenn er das nicht ist).
    Ausserdem gibt das ACS immer negative Werte aus.

    Mein Code dazu:
    Code:
     void Bumper_Zustaende_ausgeben(void){
      task_Bumpers();
      if(bumper_left)
        writeString_P(" Linker Bumper: aktiv ,");
      else
        writeString_P(" Linker Bumper: inaktiv ,");
    	
      if(bumper_right)
        writeString_P("Rechter Bumper: aktiv\n");
      else
        writeString_P("Rechter Bumper: inaktiv\n");
    }
    void ACS_Zustaende_ausgeben(void){
      setACSPwrLow();
      task_ACS();
      if (obstacle_left == true && obstacle_right == true)
        writeString_P(" Hinderniss nahe vorne:   ja, ");
      else
        writeString_P(" Hinderniss nahe vorne:   nein, ");
    	
      if(obstacle_left == true)
        writeString_P("Hinderniss nahe links:   ja, ");
      else
        writeString_P("Hinderniss nahe links:   nein, ");
    	
      if(obstacle_right == true)
        writeString_P("Hinderniss nahe rechts:   ja\n");
      else
        writeString_P("Hinderniss nahe rechts:   nein\n");
    	
      setACSPwrOff();
    Weis nicht genau was ich falsch mache hänge hier schon ne Zeit fest.
    Wärte nett wenn ihr mir helfen könntet, ist mein erster Post hier.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    Wär nett wenn du den gesamten Code posten könntest, und nicht nur den Teil mit ACS & Bumper.

    Außerdem hab ich das selbe Problem mit dem linken ACS, mein code sieht so aus:
    Code:
     #include "RP6RobotBaseLib.h"
    
    void acsStateChanged(void)
    {
    	if(obstacle_left || obstacle_right)
    	{
    		moveAtSpeed(0,0);
    		move(100,BWD,DIST_CM(10),true);
    		changeDirection(RIGHT);
    		move(100,RIGHT,DIST_CM(15),true);
    		changeDirection(FWD);
    		moveAtSpeed(100,100);
    	}
    }
    int main(void)
    
    	{
    	initRobotBase();
    	setLEDs(0b111111);
    	mSleep(1500);
    	setLEDs(0b000001);
    	setACSPwrLow();
    	powerON(); 
    	ACS_setStateChangedHandler(acsStateChanged);
    	
    	{
    	changeDirection(FWD);
    	moveAtSpeed(100,100);
    	}
    	{
    	while(true)
    	task_RP6System();
    	}
    	return 0;
    	}

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.07.2010
    Beiträge
    45
    der gesamte code:
    Code:
     #include "RP6RobotBaseLib.h"
    
    void RobotBase_initialisieren (void){
      initRobotBase();
      writeString_P("RobotBase initialisiert\n");
    }
    
    void Motorkomponenten_starten (void){
      powerON();
      writeString_P("Energie fuer Motorenkomponenten freigegeben\n");
    }
    
    void LEDs_pruefen(void){
      int LEDs_angeschaltet = 0;
      while(LEDs_angeschaltet < 3)
      {
        statusLEDs.LED1 = true;
        statusLEDs.LED4 = true;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED2 = true;
        statusLEDs.LED5 = true;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED3 = true;
        statusLEDs.LED6 = true;
        updateStatusLEDs();
        mSleep(100);
      
        statusLEDs.LED1 = false;
        statusLEDs.LED4 = false;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED2 = false;
        statusLEDs.LED5 = false;
        updateStatusLEDs();
        mSleep(100);
        statusLEDs.LED3 = false;
        statusLEDs.LED6 = false;
        updateStatusLEDs();
        mSleep(100);
    	LEDs_angeschaltet = LEDs_angeschaltet +1;
      }
      
      int Alle_LEDs_angeschaltet = 0;
      while(Alle_LEDs_angeschaltet < 3)
      {
        statusLEDs.LED1 = true;
    	statusLEDs.LED2 = true;
    	statusLEDs.LED3 = true;
    	statusLEDs.LED4 = true;
    	statusLEDs.LED5 = true;
    	statusLEDs.LED6 = true;
    	updateStatusLEDs();
    	mSleep(100);
    	
    	statusLEDs.LED1 = false;
    	statusLEDs.LED2 = false;
    	statusLEDs.LED3 = false;
    	statusLEDs.LED4 = false;
    	statusLEDs.LED5 = false;
    	statusLEDs.LED6 = false;
    	updateStatusLEDs();
    	mSleep(100);
    	Alle_LEDs_angeschaltet = Alle_LEDs_angeschaltet +1;
      }
      writeString_P("LEDs geprueft\n");
    }
    
    void LED_Zustaende_ausgeben(void){
      if(statusLEDs.LED1)
        writeString_P(" LED 1: An, ");
      else
    	writeString_P(" LED 1: Aus, ");
    	
      if(statusLEDs.LED2)
        writeString_P("LED 2: An, ");
      else
    	writeString_P("LED 2: Aus, ");
    	
      if(statusLEDs.LED3)
        writeString_P("LED 3: An, ");
      else
    	writeString_P("LED 3: Aus, ");
    	
      if(statusLEDs.LED4)
        writeString_P("LED 4: An, ");
      else
    	writeString_P("LED 4: Aus, ");
    	
      if(statusLEDs.LED5)
        writeString_P("LED 5: An, ");
      else
    	writeString_P("LED 5: Aus, ");
    	
      if(statusLEDs.LED6)
        writeString_P("LED 6: An\n");
      else
    	writeString_P("LED 6: Aus\n");
    }
    void Bumper_Zustaende_ausgeben(void){
      task_Bumpers();
      if(bumper_left)
        writeString_P(" Linker Bumper: aktiv ,");
      else
        writeString_P(" Linker Bumper: inaktiv ,");
    	
      if(bumper_right)
        writeString_P("Rechter Bumper: aktiv\n");
      else
        writeString_P("Rechter Bumper: inaktiv\n");
    }
    void ACS_Zustaende_ausgeben(void){
      setACSPwrLow();
      task_ACS();
      if (obstacle_left == true && obstacle_right == true)
        writeString_P(" Hinderniss nahe vorne:   ja, ");
      else
        writeString_P(" Hinderniss nahe vorne:   nein, ");
    	
      if(obstacle_left == true)
        writeString_P("Hinderniss nahe links:   ja, ");
      else
        writeString_P("Hinderniss nahe links:   nein, ");
    	
      if(obstacle_right == true)
        writeString_P("Hinderniss nahe rechts:   ja\n");
      else
        writeString_P("Hinderniss nahe rechts:   nein\n");
    	
      mSleep(50);	
      setACSPwrMed();
      task_ACS();
      if (obstacle_left == true && obstacle_right == true)
        writeString_P(" Hinderniss mittel vorne: ja, ");
      else
        writeString_P(" Hinderniss mittel vorne: nein, ");
    	
      if(obstacle_left == true)
        writeString_P("Hinderniss mittel links: ja, ");
      else
        writeString_P("Hinderniss mittel links: nein, ");
    	
      if(obstacle_right == true)
        writeString_P("Hinderniss mittel rechts: ja\n");
      else
        writeString_P("Hinderniss mittel rechts: nein\n");
    	
      mSleep(50);	
      setACSPwrHigh();
      task_ACS();
      if (obstacle_left == true && obstacle_right == true)
        writeString_P(" Hinderniss weit vorne:   ja, ");
      else
        writeString_P(" Hinderniss weit vorne:   nein, ");
    	
      if(obstacle_left == true)
        writeString_P("Hinderniss weit links:   ja, ");
      else
        writeString_P("Hinderniss weit links:   nein, ");
    	
      if(obstacle_right == true)
        writeString_P("Hinderniss weit rechts:   ja\n");
      else
        writeString_P("Hinderniss weit rechts:   nein\n");
    	
      mSleep(50);	
      setACSPwrOff();
    }
    void Zustaende_ausgeben(void){
      writeString_P("Zustaende:\n");
      LED_Zustaende_ausgeben();
      Bumper_Zustaende_ausgeben();
      ACS_Zustaende_ausgeben();
    }
    
    int main (void)
    {
      RobotBase_initialisieren();
      Motorkomponenten_starten();
      LEDs_pruefen();
      Zustaende_ausgeben();
      
      return 0;
    }
    Ich hab wegen der Übersichtlichkeit nur den Teil geschrieben

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    RobotBase_initialisieren();
    Motorkomponenten_starten();
    LEDs_pruefen();
    Zustaende_ausgeben();

    Seit wann gibt es Deutsche Worte in der RP6 Libary ?

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    17.07.2010
    Beiträge
    45
    Das sind meine eigegen Funktionsnamen, ich benenne die immer auf Deutsch^^

    Geht denn dein Linker Bumper wie gewollt?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    Ich bin selbst neu auf diesem Gebiet..aber ich bezweifle das du einfach so Deutsche funktionsnamen verwenden kannst.

    Ja bei mir funktioniert alles bis auf das linke ACS.
    Hier ist mein Code für die Freie Fahrt mit Bumper :
    Code:
     #include "RP6RobotBaseLib.h" 
    
    void bumpersStateChanged(void)
    {
    	if(bumper_left || bumper_right) 
    	{
    		moveAtSpeed(0,0);  
    		move(100,BWD,DIST_CM(10),true);
    		changeDirection(RIGHT);
    		move(100,RIGHT,DIST_CM(15),true);
    		changeDirection(FWD);
    		moveAtSpeed(70,70);
    	}
    }
    
    int main(void)
    {
    	initRobotBase();
    	setLEDs(0b111111);
    	mSleep(1500);
    	setLEDs(0b000001);
    	
    	powerON(); 
    	
    	BUMPERS_setStateChangedHandler(bumpersStateChanged);
    	
    	
     	changeDirection(FWD);
    	moveAtSpeed(70,70);   
    
    
    	{
    		while(true)
    		task_RP6System();
    	}
    	return 0;
    }
    Damit fährt er gegen etwas, setzt ein stück zurück und fährt nach rechts weiter .

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    17.07.2010
    Beiträge
    45
    Das mit den Funktionsname ist ok.

    Ich definiere die Funktion ja vorher mit "void Bumper_Zustaende_ausgeben(void"

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.12.2010
    Beiträge
    147
    Ich weiß nicht ob das geht, bin ja selbst neu auf dem Gebiet.
    Wird zeit das mal jemand mit etwas mehr Ahnung als ich online kommt ;D


    http://www.youtube.com/user/MyRP6?feature=mhum

    Hier ist mein YouTube kanal, dort ist ein Video wie mein RP6 mit ACS fährt,
    dort sieht man auch wie ich meine Hand links an das ACS halte und nichts passiert. Es funktioniert nur das Rechte.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    @Mario94
    Versuch doch bitte ein klein wenig von der Programmiersprache C zu verstehen, Bevor Du hier rummüllst. Quellen findest Du im Handbuch, was Du übrigens mal lesen solltest.
    Trainmen

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Zitat Zitat von TrainMen
    @Mario94
    Versuch doch bitte ein klein wenig von der Programmiersprache C zu verstehen, Bevor Du hier rummüllst. Quellen findest Du im Handbuch, was Du übrigens mal lesen solltest.
    Trainmen
    Ich glaube nicht, das du andere User hier so beschimpfen musst.
    Sorry, aber das ist einfach der falsche Ton für so ein Forum.

    Zum Thema, ihr testet das ganze nicht zufällig vor einem Bildschirm, oder?
    Der kann das ACS nämlich stark stören.

    Liebe Grüße,

    Fabian

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen