- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 10

Thema: Steuerung eines Hexapoden mittels C

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    ... Sleep(2). Lässt deinen derzeitigen Thread schlafen ... Das sollte nicht nötig sein ...
    Ich kann nicht speziell auf Deinen Code eingehen. A) ich habe noch nie nen Hexa programmiert und B) Mein C ist eher bescheiden.

    Aber von mehreren Servos "simultan" ansprechen verstehe ich schon ein bisschen. Nur sieht meine Lösung völlig anders aus, ich erledige das sozusagen nebenher, in einer ISR - mit dem Timer 1 (mega1284, 20 MHz). Hier mal skizziert, wie das für 8 Servos aussähe - bei mir laufen die Zeiten etwas anders, weil ich zehn Servos bediene.

    Der Timer 1 läuft so, das sein Kanal A (OCR1A) pro Sekunde runde 8 x 50 = 400 Interrupts auslöst (COMPARE A). In der angstossenen ISR wird der Servopointer "berechnet" und damit dann der der aktuell angewählte Servo gestartet sowie der Kanal B gestartet mit der Zeit, die der angewählte Servo zu laufen hat (OCR1B). OCR1B MUSS immer einen Klacks kleiner sein als OCR1A - daher kommt die ISR COMP B noch vor der nächsten ISR COMP A. Dieser Wert von OCR1B wird im Wertefeld Srv_tm [i] abgelegt {i ε 1 .. 8:). In der folgenden ISR COMP B wird der aktuelle Servo gestoppt (bei mir sicherheitshalber - falls Überschneidungsprobleme auftauchen auch der Servo "davor"). Danach kommt die nächste ISR COMPA - (und weiter gehts mit "oben" >>..wird der Servopointer "berechnet"..<<). Nachdem die ISR COMPA A acht mal durchgelaufen ist, sind runde 20 ms vergangen - die gewünschte Periodenzeit für einen Servo; es kommt also jeder Servo alle 20 ms EINMAL dran.

    Fazit: die Servos werden nur durch Vorgabe der jeweiligen Werte OCR1A und OCR1B bedient, der Rest läuft selbst - ohne irgendein sleep. So geht das bis alle acht Servos bedient sind.

    Die Servos erhalten die Werte von "irgendwoher" - hier könnte Deine Matritze abgefragt werden - Du solltest dann aber vermutlich bei jedem Rundumschlag der ISR COMP A ==> EINMAL ein Flag setzen, damit Du die Werte wenigstens einmal pro Durchgang benutzt.

    Laufen tut das dann z.B. um die zehn Servos im Kopf meines Roboters zu bedienen. Dort, in diesem Posting, siehst Du auch meine Liste verschiedener Flags, mit denen ich zusätzlich noch verschiedene Zustände der Servos schalte.

    Wie betont/geschrieben - ich habe noch nie nen Hexa programmiert, dort gibt es sicher andere, klevere Lösungen.
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    So kompliziert muss er das noch nichtmal machen, da er ja ein Maestro-Board verwendet. Da werden dann ja eigentlich nur serielle Befehle an das Board gesendet und um die Servo-PWM kümmert sich das Board dann selbst für alle Kanäle, für Digitalservos sogar bis zu 333Hz hoch. Die Befehle selbst sind allerdings ein bisschen tricky, da die wirklich auf Bitebene verarbeitet werden müssen, aber die Funktionen wurden anscheinend schon gut reinkopiert.
    AI - Artificial Idiocy

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von Geistesblitz Beitrag anzeigen
    So kompliziert muss er das noch nichtmal machen, da er ja ein Maestro-Board verwendet ...
    Ahhh, danke. Mein Handycap - ich mache das alles "zu Fuß" - weil ich möglichst viel kapieren will. Und bis ich die Funktion einer fremden Lösung richtig gut kenne und andwenden kann, ists manchmal auch schon in die Tasten gehackt. Na ja, ok - nicht ganz so schnell.
    Ciao sagt der JoeamBerg

  4. #4
    @shedepe
    Ja das habe ich auch schon mitbekommen. Es ist aber wirklich nicht mein Ziel hier einen fertigen Code zu bekommen. Bringt mich ja nicht weiter. Mit dem eingrenzen hast du ja recht, dadurch bekommt jeder erstmal eine Ansage die bestimmt notwendig ist und man siebt erstmal die Leute aus, die keine Lust haben sich mit dem Fall zu beschäftigen.
    Ja habe es wirklich schlecht eingegrenzt. Mein Fehler
    Ich habe gestern noch etwas probiert und habe eine nicht sehr schöne aber dennoch funktionierende Lösung gefunden.(Sitze gerade dran und will sie verschönern, denn gefallen tut mir das gerade echt nicht)

    Code:
    fp= fopen("Werte", "r");
    	if (fp==NULL)
    	{
    	printf("Can`t open file");
    	exit(-1) ;
    	}
    
    	for(i=0;i<m;i++)
    
    			{
                            sleep(4);
    			fscanf(fp,"%d",& matrix[0][i] );
    			fflush( stdout );
    			fscanf(fp,"%d",& matrix[1][i] );
    			fflush( stdout );
    			fscanf(fp,"%d",& matrix[2][i] );
    			fflush( stdout );
    			fscanf(fp,"%d",& matrix[3][i] );
    			fflush( stdout );
    			fscanf(fp,"%d",& matrix[4][i] );
    			fflush( stdout );
    			fscanf(fp,"%d",& matrix[5][i] );
    			fflush( stdout );
    
    	target=matrix[0][i];
    	printf("Setting target to %d (%d us).\n", target, target/4);
    		maestroSetTarget(fd, 0, target);
    
    	target=matrix[1][i];
    	printf("Setting target to %d (%d us).\n", target, target/4);
    		maestroSetTarget(fd, 1, target);
    
    	target=matrix[2][i];
    	printf("Setting target to %d (%d us).\n", target, target/4);
    		maestroSetTarget(fd, 2, target);
    
    	target=matrix[3][i];
    	printf("Setting target to %d (%d us).\n", target, target/4);
    		maestroSetTarget(fd, 3, target);
    
    	target=matrix[4][i];
    	printf("Setting target to %d (%d us).\n", target, target/4);
    		maestroSetTarget(fd, 4, target);
    	target=matrix[5][i];
    	printf("Setting target to %d (%d us).\n", target, target/4);
    		maestroSetTarget(fd, 5, target);
    			}
    
    	}
    
    close(fd);
    getchar();
    return 0;
    }
    Ich lese nun einfach die Zeile einzeln ein und gebe sie zu den Servos. Also bekommt jeder Servo eine Spalte und eine Zeile entspricht einer Bewegung. So habe ich den Tipp von dir verstanden bzw. so konnte ich es umsetzen. Und siehe da, es läuft. Danke dir. Ich gehe zwar von aus dass du es anders gemeint hattest aber es hat mich zu einer vorläufigen Lösung geführt @shedepe
    Ich will aber die Matrix nun komplett einlesen und dann wie du schon gesagt hattest einzeln weitergeben.
    Die Pause muss ich einfügen da ich keine Geschwindigkeiten vorgebe. Das wird ein neues Kapitel.

    Was habe ich schon gemacht:

    1. Konstruktion steht/Prototyp
    Klicke auf die Grafik für eine größere Ansicht

Name:	Unbenannt.jpg
Hits:	10
Größe:	83,0 KB
ID:	29855
    2. Jacobi-Matrix steht(Muss ich aber nochmal mit meinem Prof. schauen. Bringt nicht das was sie sollte Achso wir nehmen, um den ganzen Fall zu vereinfachen an, sie ist linear)
    3. Vorläufiger Code steht(nicht schön aber bestimmt sehr selten)

    Ziele/Herausforderungen:
    1. Funktionierende Jacobi-Matrix
    2. Eingabe der gewünschten Position über Konsole

  5. #5
    shedepe
    Gast
    Ich nehme mal an du versuchst so etwas wie Trajektorienplanung für einzelne Beine ? Wenn du dort die Jakobi Matrix für eine Inverse Kinematik nutzt musst du auf Singularitäten bzw. Invertierbarkeit achten. Das wird bei der Implementierung häufig falsch gemacht.

Ähnliche Themen

  1. FPV steuerung eines RC-Cars mit hilfe eines smartphones
    Von nonam im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 08.02.2013, 13:57
  2. Spannungseingang EC-Motor Steuerung mittels DAC8550
    Von gesamtplan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 04.07.2009, 21:02
  3. Antworten: 4
    Letzter Beitrag: 01.06.2009, 22:06
  4. [ERLEDIGT] LED-Steuerung mittels PIC16F627 (blutiger Anfänger)
    Von rossi_2 im Forum PIC Controller
    Antworten: 7
    Letzter Beitrag: 09.12.2005, 19:34
  5. Bau eines Spinnenroboters mittels Servoantrieb!
    Von jabbercat im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 24.10.2004, 14:38

Berechtigungen

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

LiFePO4 Speicher Test