PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CAD Projektarbeit ; Konstruktion eines Roboterarmes (Kinematik RRR-Konfig)



jok3r
08.10.2013, 20:28
Guten Abend ,
ich möchte noch ein bisschen Input sammeln und bin über konstruktive Vorschläge sehr erfreut ;).

Bei uns steht eine Projektarbeit an und wir wollen so gut wie es geht die meisten Fehlerquellen ausschließen und somit ist das ganze Projekt sehr überlegt.

Wir werden eine Roboterarm mechanisch sowie auch elektronisch entwickeln , es wird 4 Rotationsachsen und einen Greifer geben .
(Karussell A1(C) ;Schwinge A2(B); Roboterarm A3(A) ; Roboter Handachse A4(D) )
Der Roboterarm soll über ein (World)-Koordinatensystem gesteuert werden ,alle Bewegungen müssen linear ablaufen.
In CAD sind die Teile soweit schon gezeichnet ,verwendet wird meist 1,5 mm Blech .
Durch die 4 Rotationsachsen ergeben sich ein Unter(Schwinge) und Oberarm(Roboterarm) ,die jeweiligen Achsenabstände sind 22 cm.
Also ohne Greifer haben wir eine Arbeitsradius von ca 50 cm .

Bei den Schrittmotoren haben wir an
3 x NEMA-17 Bipolar 48mm Schrittmotor ( Für C;B;A)http://nodna.de/NEMA-17-Bipolar-48mm-Schrittmotor
1x Pololu Schrittmotor bipolar, 200 Schritte, 10V, 500mA( Für D)
http://nodna.de/Pololu-Schrittmotor-bipolar-200-Schritte-10V-500mA
Gedacht !

Bei den Motor Driver habe ich an den TB6560 gedacht http://www.ebay.de/itm/CNC-Router-1-Axis-3-5A-TB6560-Schrittmotor-Stepper-Motor-Driver-Board-DE-Lager-/380737419779?pt=Motoren_Getriebe&hash=item58a5b7fa03


Das ganze wird über Riemenscheiben um den Faktor 8 untersetzt somit steigt das Drehmoment um den Faktor 8.
Motorriemenscheibe ALU ; Abtriebsriemenscheibe Plastik
entweder mit 10 zu 80 oder 12 zu 96 Zähne


Somit jetzt die Fragen ,
Als erstes mal an die Praktika denkt ihr die Schrittmotoren sind dafür geeignet ?
Kann man diesen TB6560 guten gewissens verwenden ?
Ich habe das Problem das ich mit der Riemen-Norm T5 (10mm Breite) keine passenden Komponenten finde , kann man den T2,5 (6mm) bei diesen Projekt noch benützen ? Weil hier hab ich schon was gefunden
Die Schrittgeschwindigkeit der 3 Rotationsachsen(B;A;D) würde ich mittels Cosinssatz berechnen , sieht ihr hier Probleme ? Wird das vill in der Praxis anders umgesetzt ?

Angesteuert wird das ganze über einen Arduino Due der in C Programmiert wird .


Man kann hier vieles Tod rechnen , daher diese einfachen Fragen bei Unsicherheit muss ich dem natürlich genauer nach gehen . Aber Erfahrung ist durch nichts zu ersetzen ;-)

Belastungen sind schwer zum abschätzen , der Arm alleine mit den 3 Motoren und Antriebsteilen wird ca 1 kg wiegen die Massen werden aber soweit wie möglich in Richtung des Karussells sich wieder finden .

Im Vordergrund liegt die Genauigkeit der Bewegung und nicht das heben von Massen . Gruß

26526

HannoHupmann
09.10.2013, 09:02
Leider fehlt eure CAD Zeichnung von dem Arm. Grundsätzlich werden Roboterarme (insbesondere Industrieroboter) so aufgebaut, dass die Motoren das Eigengewicht des Arms ausgleichen. Man versucht in der Regel möglichst viel Masse durch Ausgleichsgewichte zu kompensieren. Am Ende wird nur noch die Massenträgheit überwunden und damit kann man kleinere Motoren verwenden bzw. die Genauigkeit erhöhen.

Zur Ansteuerung heißt das Zauberwort Inverse Kinematik, unter diesem Stichwort findet man genug zur Berechnung der Servowinkel. Allerdings sind die Winkel nur die halbe Miete, denn es geht auch um die Themen: Mechanische Präzision (gerade bei 1,5mm Blech sehr interessant), Lagerung der Achsen, Bahnplanung, PID-Regelung und so weiter. Diese Punkte sind insbesondere bei "Genauigkeit der Bewegung" gefordert.

In dem Konzept wird nicht genannt wie ihr die Position an die Kontroller zurück meldet? Bei Servos wird es mit einem Poti realisiert.

jok3r
09.10.2013, 10:18
Mit den CAD Datein bin ich ein bisschen vorsichtig , ich werde es aber nochmals vereinfacht Zeichnen !
Inverse Kinematik ? Gibt es dazu interessante Projekte oder auch Programmierbeispiele ?

Die Positionsrückmeldung hätte ich jetzt erst mal nicht mit dabei, es müsse doch möglich sein das über die Zahl der Schritte zu realisieren . Die Motoren dann so zu dimensionieren damit keine Schrittverluste auftreten .Die Homeposition wird dann über Microschalter realisiert,sofern das möglich wäre.
Wenn nicht zur Not kommen 10 gang Potis (+-2%) zum Einsatz die an der Abtriebswelle des Schrittmotores befestigt werden .(Günstigeres fällt mir nicht ein )
1,5 mm Blech ja aber verstrebt !!!
Gelagert werden die Achsen über Kugellager , die Lagerplatten werde ich dafür selbst fertigen .

Gruß

HannoHupmann
09.10.2013, 14:17
Warum auch immer aber dann wenigstens eine vereinfachte Zeichnung.

Ja und ja, google hilft. Jeder Industrieroboter verwendet IK und auch die Hexas die sich hier so tummeln werden mit IK berechnet.

Ok, also positionieren im Blindflug, eine Möglichkeit aber keine besonders gute. Auch Microschalter sind möglich aber keine schöne Lösung bzw. sehr ungenau. Graycode oder wenigstens Inkrementalgeber / Resolver wären auch eine Lösung.

jok3r
09.10.2013, 15:01
Die Kosten sollten sich im Rahmen halten , nach passenden Absolutwertgebern hab ich schon gesucht .Preislich ist das schon eine Hausnummer ca 150< Euro das Stück . IC Lösungen wie der 10Bit AS5040 sind relativ günstig , darüber kann man sich aber nochmals Gedanken machen wenn es soweit ist . Die Poti Variante wäre bisher das günstigste bei einem Poti mit +-2 % wären das bei einer Untersetzung um den Faktor 8 eine Abweichung um +-0.9°. was bei weiten strecken schon eine Hausnummer ist ....
Gibt es Kostengünstige Alternativen ?
Gruß

jok3r
14.10.2013, 20:44
Langsam denk ich wir kommen mit unserem Abi Mathe an unsere Grenzen wirklich verstehen tu ich das ganze nicht . Matrizen Transformation ist mir leider komplett neu . So wie ich das verstanden habe ist die Vorwärts Kinematik nichts anderes als das was ich von Anfang an vor hatte mit dem Cosinussatz ?

jok3r
15.10.2013, 16:31
26560

Hier der einfach Aufbau des Armes

Picojetflyer
15.10.2013, 18:30
Langsam denk ich wir kommen mit unserem Abi Mathe an unsere Grenzen wirklich verstehen tu ich das ganze nicht

Was studiert ihr denn? Ihr braucht nur die grundlegenden Winkelfunktion Sin/cos/tan und deren Umkehrfunktionen. Anleitungen gibts hier und bei Google reichlich.
Die Winkel würde ich mit Potis in den Gelenken messen. So wie es jedes RC-Servo auch tut. Oder einfach die Schritte vom Stepper zählen. Ist dann aber nicht Absolut.
Mit was wollt ihr den Arm steuern?

jok3r
16.10.2013, 17:50
Ich mach den Elektrotechniker . Algebraisch ist es kein Problem , aber die inverse Kinematik wäre schon interessant für die Projektarbeit nur hab ich noch nie was von Transformationen in der Mathematik gehört .
Bei den Potis sehe ich das Problem das mir das sehr ungenau wird . Angesteuert wird er mit einem Atmel mit 16 MHz. Gruß

malthy
16.10.2013, 18:51
Hallo!

Also nur mal ganz ungeordnet was mir so durch den Kopf geht:

Wäre es vielleicht sinnvoller für euch mit Modellbauservos zu arbeiten? Dann würde zumindest die Positionsregelung wegfallen, die ihr bei Schrittmotoren benötigt. Die Positionsregelung ist zwar mit Schrittmotoren u. U. etwas einfacher als mit DC-Motoren, weil man ggf auf die innere Regelschleife für die Geschwindigkeit verzichten kann, aber wenn man noch nie - vor allem praktisch - was mit Regelungstechnik zu tun gehabt hat, ist das ein Punkt, der einen gewissen Aufwand bedeuetet. Ein Servo hingegen würde die Position anfahren die ihr ihm sagt und diese dann auch gegen äußere Störeinflüsse (Laständerungen) halten.

Was die inverse Kinematik angeht: da gibt's verschiedene Ansätze. Bei eurer Struktur könnte man das Ganze schon noch rein geometrisch angehen. Wenn man zunächst den ersten rotatorischen Freiheitsgrad an der Basis weglässt, bliebe ja eine Struktur, die man in der Ebene (2D) behandeln kann. Das ist dann prinzipiell Trigonometrie wie in der neunten oder zehnten Klasse. Allerdings ist eure Struktur nicht mehr eindeutig (zumindest die aus der CAD Skizze). Ein und derselbe TCP (tool center point) kann durch verschiedene Gelenkstellungen angefahren werden. Ihr müsstet also unter den möglichen Gelenkstellungen für einen TCP nach irgendeinem Kriterium auswählen. Ich würde mir einfach mal Papier und Bleistift nehmen und das Ganze aufmalen. Dann kann man die fraglichen Winkel und bekannten Positionen einzeichnen und gucken was wie wovon abhängt. Was aber jetzt schon klar ist: euer letzter Freiheitsgrad (Handgelenk) macht die Sache etwa komplizierter.

Gruß
Malte

jok3r
16.10.2013, 20:08
Danke für deine Antwort , das mit den Servos ist eher für den Modellbaubastler. Es geht ja darum ein Regelungssystem zu entwickeln . Wir haben 2 Semester dafür Zeit .
Mit deinen Ansätzen(2D) arbeiten wir schon . Haben es ganz einfach über die allg. Winkelfunktionen gelöst .
Wenn ich alle Koordinaten in 3D Berechnen will(Algebra) bin ich leider bei der Basis auf 0-180 eingeschränkt , was aber jetzt nicht ein starkes Problem wäre .Der Arbeitsbereich wäre in der Realität meistens schon ausreichend .
Der letzte Freiheitsgrad soll in erster Linie nur die Waage halten können , dh er soll nur seinen Winkel zur Grund Ebene halten .... Deswegen kann der dann getrennt betrachtet werden.

Wie meinst du das mit der Eindeutigkeit unserer Struktur ?

malthy
16.10.2013, 20:31
das mit den Servos ist eher für den Modellbaubastler.

Verstehe mich nicht falsch, aber gehen eure Kenntnisse denn darüber hinaus? Klingt jetzt nicht unbedingt so. Außerdem ist es - für meine Begriffe - auch schon eine ganz reife Leistung einen gut funktionierenden Roboterarm (mitsamt IK) auf Basis von Servos zu entwickeln.


Haben es ganz einfach über die allg. Winkelfunktionen gelöst

Ja, genau, das wäre der geometrische Ansatz, und das sollte sich für euren Arm auch noch gut und simpel machen lassen.


Wenn ich alle Koordinaten in 3D Berechnen will(Algebra) bin ich leider bei der Basis auf 0-180 eingeschränkt

Das verstehe ich nicht. Warum kannst du nicht auf 360° rechnen?


Der letzte Freiheitsgrad soll in erster Linie nur die Waage halten können , dh er soll nur seinen Winkel zur Grund Ebene halten

Das wäre zB eine Randbedingung, die die Sache einfacher macht, dann braucht ihr ja im Grunde nur ein Dreieck berechnen.


Wie meinst du das mit der Eindeutigkeit unserer Struktur ?

War vielleicht etwas untechnisch formuliert. Ich meinte nur dass verschiedene Gelenkstellungen zum gleichen TCP führen. Aber wenn ihr das letzte Glied immer horizontal halten wollt, sollte das kein Problem mehr sein.

jok3r
16.10.2013, 21:01
Ja gut aber ich sehe keinen Sinn darin es nicht mit Schrittmotoren zu realisieren, im grunde brauchen wir hierfür nur noch Geber und einen PI Regler .
Wie sollte ich denn mit dem Cosinussatz Winkel über 180° definieren ?

malthy
16.10.2013, 21:15
im grunde brauchen wir hierfür nur noch Geber und einen PI Regler

naja, "nur noch" ... ;-) War ja nur ein gutgemeinter Gedanke.


Wie sollte ich denn mit dem Cosinussatz Winkel über 180° definieren ?

Es gibt immer noch eine Zweideutigkeit in eurem System. Wenn man die Basis gedacht mit dem vorletzten DOF verbindet, kann der DOF dazwischen (in eurer ersten Skizze R2) immernoch über oder unter dieser Verbindungslinie liegen. Das muss man über eine Fallunterscheidung abfangen. Man berechnet also die Winkel für dieses Dreieck und kann sie dann auf zwei Arten legen. Ich dachte aber du meinst eh etwas anderes, nämlich den ersten rotatorischen DOF. Um aus x/z-Koordinate den Drehwinkel auf 360° zu berechnen, verwendet man den Tangens in einer Vierquadrantenversion. Er heisst meistens Atan2. Damit kann man dann auf den Vollkreis rechnen, weil die Eingangswerte nichtmehr als Bruch in den Tangens gehen sondern als zwei getrennte Argumente.

jok3r
17.10.2013, 23:19
Das hört sich natürlich immer leicht an , aber uns ist bewusst das es nicht einfach wird .

Bin heute mal auf der Suche nach Gebersystemen gewesen , die sind ja echt unverschämt teuer . Bin aber dann mal auf den AS5040 gestoßen , spricht was gegen diesen IC ihn dafür zu missbrauchen ?
Absolutwerte kann er ja Digital sowie Analog ausgeben !
Besonderes interessant finde ich diesen PWM Ausgang !!!

malthy
17.10.2013, 23:52
AS5040

Ich habe mal den AS5045 verwendet, der ist dem AS5040 ähnlich, hat aber 12 Bit Auflösung. Der AS5048 hätte zB 14 Bit Auflösung. Das heißt aber nicht, dass man diese Genauigkeit wirklich hat, es kommen noch diverse Nichtlinearitäten ins Spiel. Durch das digitale Interface sind diese Sensoren recht pflegeleicht. Der PWM Ausgang ist vermutlich nicht so nützlich wenn man eh schon ein digitales Signal hat, die Positionsregelung wird man ja vermutlich digital implementieren. Aber von missbrauchen kann keine Rede sein, diese Sensoren sind ja genau für Anwendungen wie eure gemacht :-). AMS war seinerzeit großzügig was Samples angeht, kannst es ja einfach mal probieren ein paar Muster zu bekommen und die dann an einen Controller hängen. Einen Magneten sollte man gleich mitbestellen, man braucht einen diametral magnetisierten, bei dem sich die Pole also auf dem Durchmesser gegenüberliegen. Die meisten runden Standardmagnete (ebay und Co.) sind axial magnetisiert.

jok3r
18.10.2013, 19:16
Hab mal wo ein kleine fertige Platine gesehen mit dem AS5040 , weiß wer woher man die bekommt ?

malthy
18.10.2013, 20:07
Bei Reichelt gibt es so SMD Adapterplatinen (http://www.reichelt.de/Laborkarten/RE-931EP/3//index.html?ACTION=3&GROUPID=3374&ARTICLE=50253&SHOW=1&START=0&OFFSET=500&), so eine hatte ich damals für meine ersten quick-and-dirty Experimente mit dem Sensor verwendet:

26583

Bei AMS gibt's fertig sowas (http://www.ams.com/eng/Support/Design-Resources/Demoboards/Magnetic-Position-Sensors/Magnetic-Rotary-Position-Sensors/AS5040-DK-AB), oder auch sowas (http://www.ams.com/eng/Support/Design-Resources/Demoboards/Magnetic-Position-Sensors/Magnetic-Rotary-Position-Sensors/AS5048A-EK-AB-STM1.0):

26584

letzteres vielleicht garnicht ganz unpraktisch für eure Zwecke, denn es liegen augenscheinlich Magnete bei, die sich direkt auf einer Achse montieren lassen. Der Sensor ist da allerdings ein AS5048.

jok3r
21.10.2013, 18:47
Update : Es wird der AS5048B , wir werden die I2C Schnittstelle dafür benützen

jok3r
30.01.2014, 20:23
Alles funktioniert soweit so gut ,nur es scheitert gerade ein bisschen am Programm.

Jedes mal wenn wir den Joystick bewegen , bewegt er sich in diese Richtung . Jetzt sollte er dort aber stehen bleiben und verweilen , bis der Joystick in die andere Richtung bewegt wird .
Ich habe schon jegliche schleifen mit Bedingungen versucht damit er bei einem kleiner werdenden Wert sich nicht mehr zurück bewegt . Aber er tut es einfach nicht .

Die Auflösung des Analog In = 2^10 (1024) . Das heißt er bewegt sich erstmal beim einschalten 512 Schritte , dort verweilt er dann .

Er sollte aber erst mal stehen bleiben und sich nur bewegen wenn ich den Joystick bewege .

#include <AccelStepper.h>

//Stepper Definieren
AccelStepper stepper(1,13,12); // 1= Driver , 7= Step , 6= F/R

#define ANALOG_IN A0

void setup()
{
analogReadResolution(10);
stepper.setMaxSpeed(1000000);
stepper.setAcceleration(10000);
Serial.begin(9600);
}

void loop()
{
// Neue Position lesen
static int LASTanalog_in;
int analog_in = analogRead(ANALOG_IN);
if (analog_in != LAST_analog_in)
{
stepper.moveTo(analog_in);
LASTanalog_in = analog_in;
}
stepper.run();
}

Serial.println(analog_in);
}


Dieses Programm funktioniert , und ist genau dieses bei dem er sich immer wieder zurück bewegt !

Vill hat ja wer einen Rat :/ !

Gruß

jok3r
30.01.2014, 23:08
#include <AccelStepper.h>

//Stepper Definieren
AccelStepper stepper0(1,4,3); // 1= Driver , 4= Step , 3= F/R
AccelStepper stepper1(1,7,6); // 1= Driver , 7= Step , 6= F/R
AccelStepper stepper2(1,10,9); // 1= Driver , 10= Step , 9= F/R
AccelStepper stepper3(1,13,12); // 1= Driver , 13= Step , 12= F/R

#define ANALOG_IN0 A0
#define ANALOG_IN1 A1
#define ANALOG_IN2 A2
#define ANALOG_IN3 A3


void setup()
{
stepper0.setMaxSpeed(10000);
stepper0.setAcceleration(10000);

stepper1.setMaxSpeed(10000);
stepper1.setAcceleration(1000);

stepper2.setMaxSpeed(10000);
stepper2.setAcceleration(1000);

stepper3.setMaxSpeed(10000);
stepper3.setAcceleration(1000);


Serial.begin(9600);
analogReadResolution(10);
}

void loop()
{
// Read new position Stepper 1

int analog_in0 = analogRead(ANALOG_IN0);
stepper0.setSpeed(512-analog_in0) ;


// Read new position Steppper 2

int analog_in1 = analogRead(ANALOG_IN1);
stepper1.setSpeed(512-analog_in1) ;



// Read new position Stepper 3

int analog_in2 = analogRead(ANALOG_IN2);
stepper2.setSpeed(512-analog_in2) ;


// Read new position Stepper 4

int analog_in3 = analogRead(ANALOG_IN3);
stepper3.setSpeed(512-analog_in3) ;

stepper0.run();
stepper1.run();
stepper2.run();
stepper3.run();


}

Ich habe gerade ein Programm geschrieben , was eigentlich sehr simpel ist nur es funktioniert nicht .
Wenn ich einen der POTis bewege bewegen sich alle Stepper .
Kann mir vill jemand helfen , ich find den fehler nicht . Ich habe es auch schon mit allen anderen Befehlen versucht ->http://www.airspayce.com/mikem/arduino/AccelStepper/classAccelStepper.html#aa4a6bdf99f698284faaeb5542b 0b7514

Gruß