- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: neues fahrgestell, arduino mega, RP6 M256-WIFi und Ardu_IO

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hi Dirk,

    also die ideale anordnung für die omniwheels ist "drei am umfang", radachsen zeigen zum gemeinsamen schnittpunkt / roboter mittelpunkt. Das liess sich bei dem vorhandemem gehäuse leider nicht realisieren...

    aus erfahrung mit den vier rädern:

    - der roboter fährt auch eine schräge hinauf, wenn er senkrecht zu schräge fährt - problemlos (bis 30°)

    - steht er auf einer schräge schräg zu dieser, rutsch er bei abgeschalteten motoren ab, es hängt aber von der lage der räder ab, bzw. der rollen der räder zu der unterlage und natürlich von der steilheit der schräge ab

    - er fährt auch eine schräge "schräg" herauf und rutsch nicht ab, natürlich abhängig von der steilheit der schräge

    mir kam es nicht so sehr auf die bewältigung von einer schrägen ebene an, in meiner wohnung sind ja die fussböden waagerecht , das drehen auf der stelle ist faszinierend, eine bewegung zur seite habe ich (noch) nicht geschafft, ich tippe auf zu schwache stepper, oder meine software...


    was die kommunikation von m32 zum arduino per I2C betrifft - sind Dir irgendwelche beispiele an die ich mich anlehnen könnte bekannt?
    gruß inka

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    Mit diesen Rädern und _der_ Anordnung ist quer fahren auch gar nicht möglich. Einziger Vorteil: halbwegs reibungsarm auf der Stelle drehen, das dürfte klappen.
    Wenn er Schrägen schafft, ohne seitlich runter zu rollen, dann liegt das an der Reibung der Rollen, und ist somit auch eher Glückssache.
    Um _irgendwie_ quer fahren zu können, musst du die Räder zumindest ein wenig schräg anordnen.
    Oder zweie davon (diagonal) um 90° verdreht einbauen. Das gäbe dann ne kreuzförmige Anordnung.
    Anderenfalls müsstest du Mecanum-Räder benutzen, bei denen die Rollen schräg angeordnet sind.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    was die kommunikation von m32 zum arduino per I2C betrifft - sind Dir irgendwelche beispiele an die ich mich anlehnen könnte bekannt?
    Wie ist denn die Aufgabenverteilung?
    M32 = Master, Arduino = Slave?
    Wer steuert die 4 Motoren an (Arduino)?
    Wer ist der Hauptprozessor z.B. für Navigation?

    Was soll über I2C von Master zu Slave übertragen werden (Fahrbefehle, Sensordaten ...)?
    Soll der Slave z.B. auch Daten (Motorfehler, Odometrie ...) zurücksenden?
    Gruß
    Dirk

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Wie ist denn die Aufgabenverteilung?
    folgendes fällt mir dazu ein:

    -beide microprozessoren haben kontakt per bluetooth zum PC (datentransfer zum terminal, für berechnungen und zum flashen)
    -beide microprozessoren haben ein LCD display (M32 – 4x20, arduino2x16) für die darstellung eigener daten

    -es gibt keine odometrie, nur die steppermotoren können vom arduino überwacht werden (wie?)

    -M32 = master, arduino = slave
    -der hauptprozessor ist der auf M32

    -arduino soll verantwortlich für sicheres fahren des robbys sein (steppermotoren, US-sensor, linienfolger)
    -arduino bekommt die fahr-befehle / ziele / gyrodaten vom M32

    Sensoren/ module / funktionen auf der M32:

    -gesamtsteuerung des roboters / navigation
    -noch zu definierende aufgaben

    -IR-sender / empfänger (datenverkehr mit IR-baken)
    -gyro

    -bluetoothverbindung zum PC


    Sensoren/ module / funktionen am arduino-teil:

    -steppermotoren
    -US-entfernungsmesser
    -linienfolgemodul

    -überwachung und korrektur der motordaten (z.b. beim geradeausfahren)

    -überwachung des ladezustands der accupacks / spannungsüberwachung
    -um- / zu- schaltung der accupacks
    -überwachnung des ladevorgangs der accupacks

    -speakjet(?)
    -bluetoothverbindung zum PC
    gruß inka

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Das sieht ja gut aus. Viel Arbeit!
    -es gibt keine odometrie, nur die steppermotoren können vom arduino überwacht werden (wie?)
    Die Steppermotoren bewegen pro Schritt der Ansteuerung das Rad um einen bestimmten Winkel, z.B. 1° (je nach Motortyp).
    Dann wären also 360 Schritte eine Umdrehung und die Entfernung wäre zu berechnen.
    Gruß
    Dirk

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hi Dirk,
    Das sieht ja gut aus. Viel Arbeit!
    stimmt, aber wenn ich etwas habe, dann ist es zeit...

    Die Steppermotoren bewegen pro Schritt der Ansteuerung das Rad um einen bestimmten Winkel, z.B. 1° (je nach Motortyp).
    Dann wären also 360 Schritte eine Umdrehung und die Entfernung wäre zu berechnen.
    so war meine frage eigentlich nicht gemeint, diese berechnungen habe ich bereits angewendet, bzw. die entspreche library verwendet...

    Mir ging es um folgenden, konkreten fall: Die ersten vier stepper, die ich eingebaut habe, liefen alle schön gleichmäßig, wahrscheinlich alle aus dem gleichen fertigungslos. Nachdem eines ausgefallen war - keine ahnung warum (vielleicht doch zu billig) habe ich es ersetzt, seitdem zieht der robby beständig nach rechts.
    Es müsste also eine überwachung her und zwar nicht auf der outputseite, sondern auf der seite wo die stepps entstehen. Das sehen aber die von der lib her vorgesehen funktionen offensichtlich nicht vor...

    das hier wäre die funktion für den fall, dass alles gut läuft, wo man nicht eingreifen muss, wo aber auch das eingreifen relativ schwierig wird:
    Code:
        for (idx = stepper_VL; idx < stepper_MAX; idx++) //alle Stepper vorwärts
        {
          stepper[idx].setRPM(12);
          stepper[idx].setSPR(4075.7728395);
          stepper[idx].setDirection(CW);
          stepper[idx].rotateDegrees(60); //rotate(1)
        }
    das ist die weniger elegante variante, vo aber alle Stepper einzeln angepasst werden können:

    Code:
        stepper[stepper_VL].setRPM(12);
        stepper[stepper_HL].setRPM(12);
        stepper[stepper_HR].setRPM(12);
        stepper[stepper_VR].setRPM(12);
    
    
        stepper[stepper_VL].setSPR(4075.7728395);
        stepper[stepper_HL].setSPR(4075.7728395);
        stepper[stepper_HR].setSPR(4075.7728395);
        stepper[stepper_VR].setSPR(4075.7728395);
    
    
        stepper[stepper_VL].setDirection(CW);
        stepper[stepper_VL].rotateDegrees(30);
        stepper[stepper_HL].setDirection(CW);
        stepper[stepper_HL].rotateDegrees(30);
        stepper[stepper_HR].setDirection(CW);
        stepper[stepper_HR].rotateDegrees(30);
        stepper[stepper_VR].setDirection(CW);
        stepper[stepper_VR].rotateDegrees(30);
    beide varianten lassen sich aber - so wie sie sind - nicht im laufendem betrieb an eine neu entstandene situation "automatisiert" einstellen. Z.b. wenn der gyro meldet - "achtung, abweichung vom nordkurs, gegensteuern!"...
    Ginge das so, dass ich die werte in den klammern durch variable ersetze und die je nach situation ändere?

    frohe ostern!
    gruß inka

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.210
    Ich denke schon, dass es geht.
    Am besten packst du z.B. trpm in nen eigenes Unterprogramm, und rufst das dann bei Bedarf auf:

    void drehZahl(float a,b,c,d)
    {
    stepper[stepper_VL].setRPM(a);
    stepper[stepper_HL].setRPM(b);
    stepper[stepper_HR].setRPM(c);
    stepper[stepper_VR].setRPM(d);
    }

    An das Unterprogramm schickst du dann einfach die gewünschten Werte:

    drehZahl(12.2, 17.45, 12.92, 14);

    Vermutlich musst du das dann jedes Mal vor run() aufrufen, bzw. dann, wenn sich da Änderungen ergeben.
    Was deine verlorenen Schritte angeht: kann es sein, dass das Programm einfach zu schnell läuft, so dass die Motoren einfach nicht nachkommen?
    Das Problem hat man bei Servos ja auch, wenn man zu oft neue Positionen schickt, erreichen sie manche gar nicht.
    Das kannst du mit isDone() offenbar überprüfen.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    danke für den tipp...
    Ich denke schon, dass es geht.
    Am besten packst du z.B. trpm in nen eigenes Unterprogramm, und rufst das dann bei Bedarf auf:

    void drehZahl(float a,b,c,d)
    {
    stepper[stepper_VL].setRPM(a);
    stepper[stepper_HL].setRPM(b);
    stepper[stepper_HR].setRPM(c);
    stepper[stepper_VR].setRPM(d);
    }

    An das Unterprogramm schickst du dann einfach die gewünschten Werte:

    drehZahl(12.2, 17.45, 12.92, 14);
    das werde ich ausgiebig testen , eigentlich müsste man die restlichen konfigurationsbefehle für die Stepper ähnlich manipulieren können, oder?

    Was deine verlorenen Schritte angeht: kann es sein, dass das Programm einfach zu schnell läuft, so dass die Motoren einfach nicht nachkommen?
    glaube ich nicht, dass die Stepper nicht nachkommen, vor allem ist es ja nur der neuer, ausgewechselter:
    das ist die loop:
    Code:
    void loop()
    {
      lcd.setBacklight(LOW);
      hindernis_vorh();
      {
        alle_stepper_vorwaerts();
        bewegung = bewegung + 1;
        fahrt_ausfuehren();
      }
      if (bewegung >= 20)
      {
        lcd.setBacklight(HIGH);
        //previous_millis = current_millis;
        bewegung = 0;
        for (pos_1 = 0; pos_1 < 180; pos_1 += 1)
        {
          myservo_1.write(pos_1);
          delay(15);
          myservo_2.write(pos_1);
          delay(15);
        }
        for (pos_1 = 180; pos_1 >= 1; pos_1 -= 1)
        {
          myservo_1.write(pos_1);
          delay(15);
          myservo_2.write(pos_1);
          delay(15);
        }
        myservo_1.write(90);
        delay(15);
        myservo_2.write(90);
        delay(15);
        lcd.setBacklight(LOW);
      }
    }
    und "fahrt_ausfuehren()" und "fahrt fertig()" verwenden ja schon "isDone":

    Code:
    boolean fahrt_fertig()
    {
      return        stepper[stepper_VL].isDone() && stepper[stepper_HL].isDone()
                    && stepper[stepper_VR].isDone() && stepper[stepper_HR].isDone();
    }
    
    
    void fahrt_ausfuehren()
    {
      while ( ! fahrt_fertig() )
      {
        for (idx = stepper_VL; idx < stepper_MAX; idx++)
        {
          stepper[idx].run();
          // delay(1);
        }
      }
    }
    gruß inka

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hallo,

    die eingebauten getriebemotoren sind alle vier mit ir-encodern versehen. Das habe ich damals gemacht weil ich mir nicht sicher war ob ich sie brauchen werde oder nicht. Den einen habe ich versuchsweise in einem tesprogramm verwendet, der code ist so:

    Code:
    void encoder_1_auslesen(void)
    {
      wert_[1] = digitalRead(encoder_1);
    
    
      if (vorwaerts_[1] == 1)
      {
    
    
        if (wert_[1] == 0 && zaehler_[1] == 0)
        {
          zaehler_[1] = 1;
        }
    
    
        else if (wert_[1] == 1 && zaehler_[1] == 1)
        {
          zaehler_[1] = 0;
          summe_[1] = (summe_[1] + wert_[1]);
          Serial.print(wert_[1]);
          Serial.print("    ");
          Serial.println(summe_[1]);
          Serial1.print(wert_[1]);
          Serial1.print("    ");
          Serial1.println(summe_[1]);
        }
      }
      else
      {
        if (wert_[1] == 0 && zaehler_[1] == 0)
        {
          zaehler_[1] = 1;
        }
    
    
        else if (wert_[1] == 1 && zaehler_[1] == 1)
        {
          zaehler_[1] = 0;
          summe_[1] = (summe_[1] - wert_[1]); //+
          Serial.print(wert_[1]);
          Serial.print("    ");
          Serial.println(summe_[1]);
          Serial1.print(wert_[1]);
          Serial1.print("    ");
          Serial1.println(summe_[1]);
        }
      }
    }
    es funktioniert soweit, wäre auch möglich das einfach mal auf vier zu erweitern. Würde wahrscheinlich dahingehend probleme bringen, dass die ausgelesenen werte praktisch nie identisch wären. Glaube ich zumindest...

    Jetzt die frage: Kann sich hier jemand vorstellen, dass es wirklich situationen geben kann, wo alle vier notwendig sind? Oder würde z. b. ein zweiter "übers eck" also vorne-rechts, wenn der im code hinten-links ist, abzufragen?

    würde mich über meinungen sehr freuen...
    gruß inka

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    24.07.2011
    Beiträge
    14
    Hallo Inka,

    sehr schönes Projekt !

    Leider habe ich keine Antwort auf Deine Frage.

    Mich würde aber interessieren, welche Getriebemotoren (mit ir-encodern) du genau verwendest (wenn möglich mit Bezugsquelle).
    Auch die Übersetzung wäre interessant. Dein Robbi ist ja auf den Videos recht flott unterwegs.

    Viele Grüße,

    Gerhard

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. RP6 - M256 WIFI Modul
    Von markus788 im Forum Robby RP6
    Antworten: 1
    Letzter Beitrag: 26.05.2013, 16:45
  2. Probleme mit M256 WIFI 1.2
    Von markus788 im Forum Robby RP6
    Antworten: 26
    Letzter Beitrag: 06.05.2013, 18:47
  3. M256 WIFI Modul
    Von markus788 im Forum Robby RP6
    Antworten: 11
    Letzter Beitrag: 20.02.2013, 20:30
  4. Verkaufe Robotsystem RP6v2 + WIFI-System M256 + CCPro Mega 128 incl. Prozessor
    Von oldy im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 1
    Letzter Beitrag: 15.01.2013, 17:51
  5. RP6v2 M256 WiFi !?
    Von Dirk im Forum Robby RP6
    Antworten: 20
    Letzter Beitrag: 11.05.2012, 19:27

Berechtigungen

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

Labornetzteil AliExpress