Winkel Bestimmen < Längen+Abst.+Winkel < Lin. Algebra/Vektor < Oberstufe < Schule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 00:00 Di 15.04.2008 | Autor: | Sirvivor |
Hallo,
Ich habe zum gleichen Thema bereits eine frage in diesem Forum gestellt, jedoch habe ich jetzt einen ganz anderen ansatz.
Ich möchte das Bein meines Hexapod Roboters an ganz bestimmte Raumpunkte bewegen. Dafür brauche ich jedoch die an den gelenken einzustellenenden Winkel. Im Anhang befindet sich eine Zeichnung dazu.
[Dateianhang nicht öffentlich]
Das Schultergelenk c kann um den Winkel [mm] \gamma [/mm] in der X-Y-Ebene bewegt werden. Der Oberschenkel b und der Unterschenkel a befinden sich in einer Ebene mit c.
Am Ende möchte ich nur x,y und z vorgeben und die winkel [mm] \alpha, \beta [/mm] und [mm] \gamma [/mm] errechnen.
die Formel für [mm] \gamma [/mm] habe ich bereits, aber meine formeln für [mm] \beta [/mm] und [mm] \alpha [/mm] funktionieren nur in bestimmten Bereichen.
[mm] \gamma=acos(\bruch{x}{\wurzel{x^{2}+y^{2}}})
[/mm]
Die beiden anderen Formeln sind je 10 mal so komplex und da sie nicht funktionieren, erspare ich mir diese hier reinzustellen.
vielen Dank für eure Mühen
PS: a=120mm, b=100mm, c=20mm
0°<= [mm] \alpha, \beta, \gamma [/mm] <=180°
Dateianhänge: Anhang Nr. 1 (Typ: JPG) [nicht öffentlich]
|
|
|
|
Hallo!
Zunächst, deinen ersten Winkel kann man einfacher ausdrücken: [mm] \tan(\gamma)=\frac{y}{x}
[/mm]
Jetzt schau dir mal nur die Ebene an, in der das Bein grade liegt.
Die horizontale Entfernung von [mm] $\beta$-Gelenk [/mm] zum Fuß ist
[mm] q=\wurzel{x^2+y^2}-\text{\{Länge des 1. Beinsegments\}}
[/mm]
Zeichne nun eine Strecke s vom [mm] $\beta$-Gelenk [/mm] zum Fuß. Sie hat die Länge [mm] \wurzel{q^2+z^2} [/mm] und schließt mit der xy-Ebene den Winkel [mm] \tan(\beta')=\frac{z}{q} [/mm] ein.
[mm] \alpha [/mm] kannst du nun über den COS-Satz berechnen:
[mm] s^2=\text{\{Länge des 2. Beinsegments\}}^2+\text{\{Länge des 3. Beinsegments\}}^2-2\text{\{Länge des 2. Beinsegments\}}\text{\{Länge des 3. Beinsegments\}}*\cos(\alpha)
[/mm]
Nun kannst du den Winkel [mm] \beta'' [/mm] zwischen s und dem 2. Segment berechnen mit
[mm] \frac{\sin(\alpha)}{s}=\frac{\sin(\beta'')}{\text{\{Länge des 3. Beinsegments\}}}
[/mm]
Zu guter letzt:
[mm] \beta=90°+\beta'+\beta'' [/mm] (Beachte, daß [mm] \beta' [/mm] automatisch negativ wird, wenn z negativ ist!)
Ich denke mal, daß du ein Computerprogramm schreiben wirst, daher solltest du da keine riesige WElt-Formel aufstellen. Mach das ruhig schrittweise!
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:00 Di 15.04.2008 | Autor: | Sirvivor |
Vielen Dank für deinen Tipp
Ich habe nur stehts versucht mich auf cosinus zu beschränken, damit ich nicht zu viele funktionen in meinen Mega32 implementieren muss.
Meine Formel für [mm] \beta [/mm] sah fast genau so aus, also [mm] \beta=90+\beta'+\beta'', [/mm] nur habe ich eben versucht diese ausschließlich mittles des cos() zu betimmen. Dabei ist wohl irgendwas schief gelaufen.
Ich werde jetzt im nachhinein alle sin(winkel) durch cos(winkel - 90°) ersetzen und habe dadurch auch nur cos() funktionen.
vielen Dank
mfg WarChild
PS: meine einzige angst bleibt, dass die formeln in teilen auch nicht stimmt, da die von uns verwendete geometrie in manchen beinstellungen nicht anwendbar ist. z.B. [mm] \gamma=90°, \beta=0° [/mm] und [mm] \alpha=90°
[/mm]
dann befindet sich das bein bei (x,y,z)=(0,-10,-10) wenn man das mal zeichnet, fällt es mir schwer die von uns hergeleiteten hilfsgeraden zu bestimmen.
|
|
|
|
|
Oh, da hast du durchaus recht!
[mm] \gamma [/mm] ist das kleinste Problem. der arctan liefert nur Werte im bereich -90...+90. Beispiel:
Ich gehe davon aus, dass das [mm] \gamma-Segment [/mm] nur in der Halbebene sein kann, wo y positiv ist, weil auf der anderen Seite nunmal dein Roboter ist.
Beschraenken wir uns da uf die xy-Ebene:
Im gueltigen Bereich bekommen wir die Winkel:
(10,10) -> 45
(-10,10) -> -45
So weit, so gut, und nun mal Werte im "ungueltigen" Bereich:
(-10,-10) -> 45
(10,-10) -> -45
Interessanterweise liefert also diese Berechnung immer die richtigen Winkel! Wenn du einen Punkt unter dem Roboter auswaehlst, kommt ein Winkel raus, der tatsaechlich zunaechst in die entgegengesetzte Richtung zeigt, sodass sich das Bein mit den anderen Gelenken total kruemmen muss.
Dann: [mm] \beta'' [/mm] und [mm] \alpha [/mm] sind kein Problem, da diese nicht mit Koordinaten, sondern mit reinen Laengen berechnet werden. Etwas problematisch ist [mm] \beta' [/mm] . Sobald unsere Hilfslinie ueber die Senkrechte hinaus bewegt wird, bekommen wir den falschen Winkel. Hier musst du setzen: [mm] \beta=\beta'+\beta''-90
[/mm]
Also, ich denke, da kommst du um ein paar IF-Anweisungen nicht rum. Insbesondere musst du auch bedenken, dass du fuer einen Punkt, der direkt unter/ueber dem [mm] $\beta$-Gelenk [/mm] sitzt, ne Division durch 0 bekommst, das musst du auch abfangen.
Generell musst du ja auch dran denken, dass dein Bein gar nicht alle Punkte erreichen kann.
Hoffentlich reicht dein Speicher...
|
|
|
|