- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 12

Thema: Delta X 4 Robot

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Begeisterter Techniker Avatar von tucow
    Registriert seit
    15.01.2006
    Ort
    Düsseldorf
    Alter
    40
    Beiträge
    269
    Hallo LetsBuildBots,

    sehr gute Arbeit! Besonders gefällt mir die Ansteuerung der Servos, kannst Du darüber etwas mehr preisgeben?
    Zum Beispiel wie Du den SPI Bus anbindest, die Controller der Beine zeitnah auswählst und ganz besonders wie das Timing der Servos aussieht.


    Gruß
    tucow
    Gruß
    Andreas




    Mein: Humanoide // nanoCopter Projekt
    Das Raspberry Pi als: Wifi Access Point // Wifi Router

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    10.12.2011
    Beiträge
    6
    Hallo,

    @ Bammel

    Da dies ja auch bisher mein erste Programm für einen Microcontroller ist, hab ichs mir erst mal einfach gemacht und die ganzen Bewegungen linearisiert. Der Haupcontroller sendet einen Punkt (x,y,z) an den Beincontroller. Dieser berechnet daraus die Position der Fussspitze und bewegt die Servos dementsprechend auf dem direkten weg dorthin. Bei den Drehungen hab ich auch einfach die Punkte der Tangente eines Kreises hergenommen.

    Das Autonome agieren des Bots währe der nächste Schritt, nur weis ich noch nicht genau was hier am zielführensten wäre. Hab Ihr vielleicht einen Vorschlag?

    @radbruch
    Ein Delta Bot mit 2 Beinen ist auch eine super Idee!

    @ tucow
    ich hab für jedes Bein erstmal die Punkte fest im Hauptcontroller hinterlegt für eine Bewegungsfolge z.b.:

    void left(void)
    {
    send_koordinates(1,50,50,-110); // Bein 1 hoch und nach vorne heben
    send_koordinates(3,-50,-50,-110); // Bein 3 gleichzeitig ebenso
    _delay_ms(300);
    send_koordinates(1,50,50,-140); // Bein 1 absetzen
    send_koordinates(3,-50,-50,-140); // Bein 3 absetzen
    _delay_ms(300);
    send_koordinates(2,50,-50,-110); // Bein 2 hoch und nach vorne heben
    send_koordinates(4,-50,50,-110);// Bein 4 gleichzeitig ebenso
    _delay_ms(300);
    send_koordinates(2,50,-50,-140);// Bein 2 absetzen
    send_koordinates(4,-50,50,-140); // Bein 4 absetzen
    _delay_ms(300);
    send_koordinates(1,-50,-50,-140); // Bein 1 nach hinten schieben , bewirk das der Körper sich nach vorne bewegt
    send_koordinates(2,-50,50,-140); // Bein 2 nach hinten schieben , bewirk das der Körper sich nach vorne bewegt
    send_koordinates(3,50,50,-140); // Bein 3 nach hinten schieben , bewirk das der Körper sich nach vorne bewegt
    send_koordinates(4,50,-50,-140); // Bein 4 nach hinten schieben, bewirk das der Körper sich nach vorne bewegt
    _delay_ms(300);

    // unterschiedliche Vorzeichen, da die Beine jeweils um 90 Grad gedreht angeordnet sind
    }

    (Beinnummer, x,y,z)

    Der Slave (Beincontroller) läuft dann in einer Schleife von 16ms (= PWM für die analogen Servos). Am Anfang der Schleife wird gewartet bis die PWM Pulse fertig sind (max 3 Millisekunden). Dann berechnet der Controller aus den Koordinaten den anzusteuernden Punkt (inverse kinematik, ca. 7 ms) und stellt die Timer dementsprechend für den Anfang des nächsten Schleifendurchlaufs ein. Der Rest ist wieder Wartezeit.
    Für die Kommunikation benutz ich das Hardware SPI der Controller mit jeweils einem Pin als Select für das Bein und den Interrupt im Chip wenn neue Daten angekommen sind.
    Die nächste Bewegungsfolge schickt der Master 500ms nach dem Abschluss der letzten. Ich hab viel mit delays gearbeitet um das zu timen (was warscheinlich nicht gerade das optimale Vorgehen ist.)

    Gruß LetsBuildBots

  3. #3
    Moderator Begeisterter Techniker Avatar von tucow
    Registriert seit
    15.01.2006
    Ort
    Düsseldorf
    Alter
    40
    Beiträge
    269
    Vielen Dank, für die Infos, das hat den Ausschlag gegeben wie ich mein Praxisprojekt (FH) realisiere. (Mehr Infos später, und nicht an dieser Stelle, soll ja dein Beitrag bleiben.)


    Was hast Du dir denn für das autonome Agieren vorgestellt, was soll er genau machen?
    Wenn er nur Sachen ausweichen soll würde ich auf Ultraschall setzen. Wobei sowas rudimentäres bei einem solchen Bot schon sehr kläglich wäre, wenn es das Einyige bleibt. Vielleicht solltest Du dich mit Bildverarbeitung beschäftigen?


    Gruß
    tucow
    Gruß
    Andreas




    Mein: Humanoide // nanoCopter Projekt
    Das Raspberry Pi als: Wifi Access Point // Wifi Router

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    10.12.2011
    Beiträge
    6
    Hallo

    freut mich wenn ich gleich helfen konnte. Falls noch weiter Fragen aufkommen einfach jederzeit bescheid sagen.
    An Bildverarbeitung hab ich auch schon gedacht. Muss ich mal bei Gelegenheit anschauen.

    Gruß
    LetsBuildBots

  5. #5
    Moderator Begeisterter Techniker Avatar von tucow
    Registriert seit
    15.01.2006
    Ort
    Düsseldorf
    Alter
    40
    Beiträge
    269
    Hey,

    was mich noch interessieren würde: Wie nimmst du die Befehle auf den µC der Beine entgegen?
    Wenn Du z.B. send_koordinates(4,50,-50,-140); aufrufst, was macht send_koordinates() mit den Variablen, wie verarbeitet sie diese und wie sendet sie die?


    Gruß
    tucow
    Gruß
    Andreas




    Mein: Humanoide // nanoCopter Projekt
    Das Raspberry Pi als: Wifi Access Point // Wifi Router

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    10.12.2011
    Beiträge
    6
    Hallo,

    also ich hab das so programmiert:

    *********Master Seite***********
    void send_koordinates(uint8_t bein,int16_t x, int16_t y, int16_t z)
    {
    if (bein == 1)
    {
    send_word_B1(x);
    send_word_B1(y);
    send_word_B1(z);
    }
    if (bein == 2)
    .
    .
    .

    void send_word_B1(int16_t word)
    {
    uint8_t high_byte;
    uint8_t low_byte;

    high_byte = word >> 8; //High anteil herrausnehmen
    low_byte = word & 0xff; //Low anteil herrausnehmen
    PORTB &= ~(1 << DDB3); //low (Chip des Beines 1 auswählen)
    SPI_MasterTransmit(high_byte);
    PORTB |= (1 << DDB3); // high
    PORTB &= ~(1 << DDB3); //low
    SPI_MasterTransmit(low_byte);
    PORTB |= (1 << DDB3); // high
    }

    void SPI_MasterTransmit(char cData)
    {
    SPDR = cData;/* Start transmission */
    while (!(SPSR & (1<<SPIF)));/* Wait for transmission complete */
    }

    ********Slave Seite**********

    volatile unsigned char dataarray[6];// global
    volatile int i = 0; // global


    ISR(SPI_STC_vect) //interrupt auf SPI
    {
    unsigned char data;
    data=SPDR;
    dataarray[i]=data;
    i++;
    }

    Es muss mit den timings sicher gestellt werden, dass i nicht mal falsch mitzählt sonst werden die Koordinaten falsch zugewiesen.
    Kann man sicher noch verbessern.

    Daten wieder zu einem 16 bit Wert zusammensetzen: word = (high_byte << 8 )|low_byte;

    Hoffe das hilft dir weiter

    Gruß
    LetsBuildBots

  7. #7
    Zitat Zitat von LetsBuildBots Beitrag anzeigen
    freut mich wenn ich gleich helfen konnte. Falls noch weiter Fragen aufkommen einfach jederzeit bescheid sagen.
    Hi
    Ich versuche gerade selbst eiene "2d" delta roboter zu bauen aber ich komme mit der mathematische/kinematischen beschreibung nicht weiter das erste gelenk ist noch einfach sin x und cos x aber wo sich dann der gemeinsame punkt befindet weiß ich nicht, müsste eine quadratische gleichung ergeben weil er teoretisch an zwei stellen sein kann oder? Und in 3d ist es noch aufwändiger...
    Ich würde mich sehr freuen wenn dazu jemand etwas sagen könnte? Eine link zu einem projekt? Oder ein teil des programmes?
    Vielen dank
    Gruß 3gfisch

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    10.12.2011
    Beiträge
    6
    Hallo
    am Wochenende kann ich gerne mal posten wie ichs gemacht habe. Spätestens am Sonntag melde ich mich hier wieder.

    bis dann
    ciao

    LetsBuildBots

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    10.12.2011
    Beiträge
    6
    Hi

    ich hab mich bei meiner Umsetzung an diesen Artikel gehalten:

    http://forums.trossenrobotics.com/tu...nematics-3276/

    Hier wird das ganze sehr gut beschrieben und ein Beispiel Programm ist auch vorhanden. Dieses Beispiel hab ich im AVR GCC nachgebaut. Braucht bei einem ATMEGA328 mit 20MHz ca. 7ms um alle 3 Winkel zu berechnen. Da ich ja für jedes Bein einen davon verbaut habe und die Servo PWM 20ms lang ist reicht diese Implementierung erst mal für mich so aus. Habs bisher nicht weiter optimiert oder so.
    Den Winkel rechne ich anschließend linear in die Pulslänge für die Servo PWM um.

    Falls noch Fragen offen sind einfach bescheid sagen.

    ciao

    LetsBuildBots

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 23.03.2011, 12:25
  2. Delta Roboter - ein Wochenendmärchen ;-)
    Von AlexAtRobo im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 8
    Letzter Beitrag: 08.03.2011, 07:11
  3. Delta Roboter
    Von Brantiko im Forum Mechanik
    Antworten: 87
    Letzter Beitrag: 26.08.2010, 22:17
  4. Delta Sigma Wandlung
    Von drafter im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 0
    Letzter Beitrag: 28.09.2005, 19:43
  5. delta-sigma wandler
    Von Mat1980 im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 04.04.2005, 18:28

Berechtigungen

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

Solar Speicher und Akkus Tests