Der Modellbauservoplotter als Anzeigeelement, Berechnung der Servostellungen mit 'inverser Kinematik'

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Der Modellbauservoplotter als Anzeigeelement, Berechnung der Servostellungen mit 'inverser Kinematik'

      Nachdem ich hier die Servos durch Tabellen angesteuert habe, soll jetzt eine 'berechnende' Version erstellt werden. Die Mechanik ist die gleiche, nur sollen die Servos unten angeordnet werden, so wie auf dem ersten Video zu sehen ist.
      (Ich sag's gleich, die Rechenschritte und Formeln dazu hab' ich mir nicht ausgedacht a_28_2c02f089 wahrscheinlich alles mal gelernt, dann doch nie gebraucht und somit nur als eingetrockneter Bodensatz in meinem Gedächtnis vorhanden.)
      Der erste Schritt ist eine Skizze, in der die relevanten Größen bezeichnet sind, die hab' ich aus copyright-Gründen selbst gemalt.
      Inverse_Kinematik.png
      Das entspricht meiner vorhandenen Mechanik
      Die folgende Berechnung gibt die Winkel wieder, die die Servos einnehmen müssen um den Stift in seine Position zu bringen. Der Stift soll Stift_x,Stift_y anfahren, dazu dreht der Servo1 den Hebel L1 auf den Winkel Ws1 und der Servo2 den Hebel L3 auf den Winkel Ws2. Alle Winkel sind als radiant ausgedrückt. Die eingetragenen Werte entsprechen meinem Versuchsaufbau.

      BASCOM-Quellcode

      1. 'Inverse Kinematik
      2. 'Strecken
      3. Dim L1 As Single , L2 As Single , L3 As Single , L4 As Single , L5 As Single , L6 As Single , L7 As Single , L8 As Single
      4. 'Winkel
      5. Dim Wa1 As Single , Wb1 As Single , Wa2 As Single , Wb2 As Single , Wc2 As Single , Wd2 As Single , We2 As Single , Ws1 As Single , Ws2 As Single
      6. 'Koordinaten
      7. Dim Servo1_x As Single , Servo2_x As Single , Dp1_x As Single , Dp2_x As Single , Dp3_x As Single , Stift_x As Single
      8. Dim Servo1_y As Single , Servo2_y As Single , Dp1_y As Single , Dp2_y As Single , Dp3_y As Single , Stift_y As Single
      9. 'Hilfsvariable
      10. Dim Z1 As Single , Z2 As Single , Z3 As Single , Z4 As Single
      11. Const Pi = 3.1416
      12. 'konstante Werte haben:
      13. 'Hebelarme
      14. L1 = 130 : L2 = 130 : L3 = 130 : L4 = 130
      15. 'Stifthalter
      16. L5 = 157.7 : L6 = 40.4
      17. 'servos
      18. Servo1_x = 75 : Servo1_y = 0
      19. Servo2_x = 140 : Servo2_y = 15
      20. 'Wd2 mit L5, L6 und L4 nach dem Kosinussatz bestimmen
      21. Z1 = L5 ^ 2
      22. Z2 = L6 ^ 2
      23. Z3 = L4 ^ 2
      24. Z4 = Z1 + Z2
      25. Z4 = Z4 - z3
      26. Z4 = Z4 / 2
      27. Z4 = Z4 / L5
      28. Z4 = Z4 / L6
      29. Wd2 = Acos(z4)
      30. 'Aus Stiftposition Winkel Ws2 des Servo2 berechnen
      31. 'Wa2 mit arctan2 berechnen
      32. Z1 = Stift_y - servo2_y
      33. Z2 = Stift_x - Servo2_x
      34. Wa2 = Atn2(z1 , Z2)
      35. If Wa2 < 0 Then Wa2 = Wa2 + Pi
      36. 'L8 mit Pythagoras berechnen
      37. Z1 = Z1 ^ 2 'z1 und Z2 sind noch die gleichen Werte
      38. Z2 = Z2 ^ 2
      39. Z3 = Z1 + Z2
      40. L8 = Sqr(z3)
      41. 'Wb2 mit L3, L8 und L5 nach dem Kosinussatz bestimmen
      42. Z1 = L3 ^ 2
      43. Z2 = L8 ^ 2
      44. Z3 = L5 ^ 2
      45. Z4 = Z1 + Z2
      46. Z4 = Z4 - z3
      47. Z4 = Z4 / 2
      48. Z4 = Z4 / L3
      49. Z4 = Z4 / L8
      50. Wb2 = Acos(z4)
      51. Ws2 = Wa2 - Wb2
      52. 'um den Winkel Ws1 zu berechnen, wird die Position von Dp3 benötigt
      53. 'Wc2 mit L5, L8 und L3 nach dem Kosinussatz bestimmen
      54. Z1 = L5 ^ 2
      55. Z2 = L8 ^ 2
      56. Z3 = L3 ^ 2
      57. Z4 = Z1 + Z2
      58. Z4 = Z4 - Z3
      59. Z4 = Z4 / 2
      60. Z4 = Z4 / L5
      61. Z4 = Z4 / L8
      62. Wc2 = Acos(z4)
      63. We2 = Wa2 + Wc2
      64. We2 = We2 - Wd2
      65. We2 = We2 + Pi
      66. 'Koordinaten von Dp3 bestimmen
      67. Z1 = L6 * Cos(we2)
      68. Dp3_x = Stift_x + Z1
      69. Z1 = L6 * Sin(we2)
      70. Dp3_y = Stift_y + Z1
      71. 'Wa1 mit arctan2 berechnen
      72. Z1 = Dp3_y - Servo1_y
      73. Z2 = Dp3_x - Servo1_x
      74. Wa1 = Atn2(z1 , Z2)
      75. If Wa1 < 0 Then Wa1 = Wa1 + Pi
      76. 'L7 mit Pythagoras berechnen
      77. Z1 = Z1 ^ 2 'z1 und Z2 sind noch die gleichen Werte
      78. Z2 = Z2 ^ 2
      79. Z3 = Z1 + Z2
      80. L7 = Sqr(z3)
      81. 'Wb1 mit L1, L7 und L2 nach dem Kosinussatz bestimmen
      82. Z1 = L1 ^ 2
      83. Z2 = L7 ^ 2
      84. Z3 = L2 ^ 2
      85. Z4 = Z1 + Z2
      86. Z4 = Z4 - Z3
      87. Z4 = Z4 / 2
      88. Z4 = Z4 / L1
      89. Z4 = Z4 / L7
      90. Wb1 = Acos(z4)
      91. Ws1 = Wa1 + Wb1
      Alles anzeigen
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch () aus folgendem Grund: paar Formeln waren falsch und negative Winkel werden jetzt zu positiven umgerechnet. Eine Kontrolle mit Taschenrechner und zeichnerische Konstruktion gibt übereinstimmende Ergebnisse.

    • six1 schrieb:

      Für evtl. Verknotungen der äußeren Hirnrinde sind wir keinesfalls verantwortlich Tschoeatsch! :D
      Das könnte evtl. der Preis sein, wenn man nicht mit dem Kopf durch die Wand geht ;)
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Wenn ich jetzt schon so wild rum rechne, soll auch der Servoarm den gewünschten Winkel einnehmen. Nur, wie macht man das am geschicktesten? Wenn ich an meiner Mechanik rum drehe, kann Servo1 einen Ws1 von ca.45° bis180° einnehmen, Servo2 einen Ws2 von 0° bis ca. 135°. Mein Gedanke wäre jetzt beim 1. Programmstart eine Initialisierung einzubauen: Servos drehen sich ohne aufgesteckte Arme in ihre Mittelstellung, die Arme werden beide ist Stellung 80° aufgesteckt. Jetzt müsste man mit Taster Servo1 in 90° hin tasten, bestätigen, dann weiter auf 180° und wieder bestätigen. Jetzt ist dem Programm die Pulsweite zu 90 und 180° bekannt und kann für jeden Winkel die Pulslänge errechnen. Dasselbe mit passenden Winkel für Servo2 und die Daten im Rom speichern.
      Oder??
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Vorneweg möchte ich bemerken, dass die gewählte Mechanik alles andere als geeignet ist für den Einstieg in die Materie.
      Durch den Versatz der Servos entsteht zusätzliche Rechenarbeit, ebenso durch den nach rechts oben versetzten Stift.

      Versuch erstmal nur den Punkt Dp3 zu betrachten.
      Jeweils eine Linie von Dp3 nach Ws1 (L7) und Dp3 nach Ws2(L9)
      es ergibt sich ein Winkel bei Ws1 zur Horizontalen und bei Ws2 zur Horizontalen.
      (einfacher wären beide Servos auf der Grundlinie, müsste man mal schauen, ob eine schiefe Grundlinie einfacher zu rechnen wäre)
      L7 und L9 werden aus den Wunschkoordinaten mit dem Pythagoras errechnet Beispiel L7 = Sqr( (ws1x - x)² + (Ws1y-y)²)
      Der Winkel von L7 ergibt sich aus dem Sinus des Y-Abstandes zu L7.
      Jetzt nimmst du die Länge von L7 und errechnest daraus die Winkel im Dreieck L1,L2,L7 (Kosinussatz) und addierst den Winkel L1-L7 zu dem Winkel L7-Horizontale. Das ist der Winkel, den Servo1 bekommt.

      Gruß, Michael
    • Da ich kein Feinmechaniker bin, werde ich erstmal einen Versatz vom Stift zum Dp3 haben. Wenn man vielleicht mal einen E-Magneten als Stift nimmt, könnte ich mir so eine idealere Konstruktion vorstellen. Und die versetzten Servos haben sich bei meiner Pappstreifensimulation so ergeben. Da leb' ich mal damit. Hattest du nicht gesagt: 'der Kontroller ist zum Rechnen da' (oder so ähnlich)?
      Na, jetzt soll er mal rechnen.

      Nebenbei bemerkt ist das alles hier nur Spielerei, da das mechanische Spiel, egal ob Kunststoff- oder Metallzahnrädchen, so groß ist, dass man den Versatz vom Stift einfach ignorieren könnte.

      Noch was, wo entsteht zusätzliche Rechnerei wegen versetzten Servos?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich sehe in den Formeln keinen Punkt, wo eine Servoplatzierung auf einer waagrechten Linie was vereinfachen würde. Selbst wenn man Dp3 als Stift nehmen würde. Ok, doch, eine Subtraktion viele weg, aber das ist doch wirklich nicht der Rede wert.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Wieso mach ich's mir jetzt schwerer, wenn ich statt einer aufwändig herzustellenden Mechanik eine einfacher herzustellende nehme und den Knecht dafür rackern lasse? Ich mach's mir so wie es ist leicht. Das bezieht sich auf den Versatz vom Stift.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------