-         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 51

Thema: Rechenkette? / Winkelberechnung mit Cosinus?

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    Anzeige

    LiFePo4 Akku selber bauen
    ein rechner kan nur einwas machen z.B. 2+1=3 um 2+1+2= 5 zurechnen muss man 2+1= 3 3+2= 5 ansonsten kann er das nicht um 2+1+2=5 in einem schritt zu machen rechnet der Rechner erst 2+1= 3 3+2= 5 das problem ist Bascom kann das nicht da muss der programierer das machen vieleicht wird das mal irgendwann in Bascom geändert Bascom ist zwar basic aber trotzdem relativ low lewel
    im einfachten falle nennst du ne varible tmp die immer als zwischen ergebniss gut ist
    Sag mal ist das Pisadeutsch oder bis du noch am lernen als Ausländer.

    mfg

  2. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.427
    ich komme aus deutschland und ich hoffd du hast das "oder bis du noch am lernen als Ausländer. " nicht rassistisch gemeint ich bin bloß kein sprachlich begabter mensch und werde es nie sein soll ich es noch mal ander formulieren und kanst du es auch so verstehen. was ich auch gern weg lass sind kommas bzw algemin satzzeichen.

  3. #13
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    1.400
    also ich habs verstanden auch wenn ich es zweimal lesen musste. aber kenne das problem! schriftlich habe ihc auhc oft probleme was zu erklären.. ich amche lieber dabei skizzen oder zeige was.
    und solche aussagen wie von sechrad find ich echt unverschämt!!!

  4. #14
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    1.400
    So sry für doppelpost aber ich wollte nicht beides in einem packen!

    Erstmal hab ich nen bild angehangen das ihr euch erstmal ein eindruck machen könnt was ich genau will.

    So der code sieht so aus:
    Code:
    Declare Sub Berechnung
    
    Dim Hoehe As Byte
    Dim Abstand As Byte
    
    Dim Hoehe_q As Word
    Dim Abstand_q As Word
    Dim Dis_q As Word
    Dim Dis As Byte
    
    Dim Knie_wi As Byte
    Dim Kniea As Word
    Dim Knieb As Word
    
    Dim Knie_zw_a As Word
    Dim Knie_zw_b As Word
    Dim Knie_zw_c As Word
    Dim Knie_zw_d As Integer
    Dim Knie_zw_e As Single
    Dim Knie_zw_wi As Single
    
    Const Oberschenkel = 67
    Const Unterschenkel = 87
    Const Oberschenkel_q = 4489
    Const Unterschenkel_q = 7569
    
    Hoehe = 50
    Abstand = 100
    
    ...
    
    Sub Berechnung
    
    If Hoehe > 110 Then Hoehe = 110
    If Abstand < 37 Then Abstand = 37
    Hoehe_q = Hoehe * Hoehe
    Abstand_q = Abstand * Abstand
    Dis_q = Hoehe_q + Abstand_q
    Dis = Sqr(dis_q)
    
    
    '-------------- Knie ----------------------
    
    Knie_zw_a = Dis_q - Unterschenkel_q
    Knie_zw_b = Knie_zw_a - Oberschenkel_q
    
    Knie_zw_c = Unterschenkel * Oberschenkel
    Knie_zw_d = -2 * Knie_zw_c
    
    Knie_zw_e = Knie_zw_b / Knie_zw_d
    Knie_zw_wi = Cos(knie_zw_e)
    Knie_wi = Knie_zw_wi * 100
    
    If Knie_wi < 45 Then Knie_wi = 45
    If Knie_wi > 180 Then Knie_wi = 180
    Kniea = 6400 / 180
    Knieb = Kniea * Knie_wi
    Servo(2) = 63200 - Knieb
    Hab den code ein wenig verkürzt hoffe das okay so!?

    formel hab ich diese verwendet: gamma = cos((c² - a² - b²) / (-2 * a * b))
    a ist Unterschenkel
    b ist Oberschenkel
    c ist Dis
    (siehe auch angehängte zeichnung)

    danke schonmal fürs anschauen!

    MfG Bammel
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken cosrechnung.jpg  

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Temporäre Variablen gehen ja nur in Funktionen und Subs. Der Sprung dahin dauert aber glaube ich recht "lange" - wenn der AVR diese Rechnung sehr oft ausführen muss, bremst es das Programm dann schon sehr.

    Die Einschränkung auf eine Operation pro Zeile nervt im Vergleich zu C schon, man darf hoffen, dass es mit der neuen Version von Bascom besser wird...

  6. #16
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    1.400
    ok. aber mein problem jezze ist das der µC "falsch" rechnet!

    normalerweis muss der winkel 92° betragen der µC errechnet aber 99°
    da war nun meine frage die ich weiter oben gestellt hatte warum? was amch ich falsch?

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von vohopri
    Registriert seit
    11.09.2004
    Ort
    südlich der Alpen
    Beiträge
    1.708
    @ sechsrad:

    Sag mal ist das Pisadeutsch oder bis du noch am lernen als Ausländer.
    Für einen Sprachkritiker schreibst du aber ein erbärmliches Deutsch.

    @ Bammel:
    Nur zur Bestätigung: 92° und ~112mm sind einmal richtig, bei den hier stehendenn Angaben. Ich habs im CAD durchgezeichnet. Als müssen wir uns das verborgene Treiben des mc näher ansehen.

    Hannes

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.427
    Was ist wenn höhe was anderes ist bleibt der winkel da auch 99 ?


    Edit: kanst du bitte den code ausführ bar machen das ich ihn in Bascom mit der simulation überprüfen kann das ich nach fehlernsuchen kann

  9. #19
    Erfahrener Benutzer Robotik Einstein Avatar von vohopri
    Registriert seit
    11.09.2004
    Ort
    südlich der Alpen
    Beiträge
    1.708
    Hallo nochmal,

    gamma = cos((c² - a² - b²) / (-2 * a * b))
    Das hast du anscheinend im Code auch so umgesetzt (hab noch nicht näher rein geschaut), aber es ist falsch.

    Muss heissen: gamma = arccos((c² - a² - b²) / (-2 * a * b))

    - weil du ja vom Cosinuswert auf den Winkel zurückrechnest.

    hoffe, das bringt dich weiter,
    und grüsse,
    Hannes

  10. #20
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    1.400
    hallo,
    in Bascom heist der befehl dan einfach acos(var)
    aber das führt zum selben ergebnis!

    Code:
    $regfile = "m8def.dat"
    $crystal = 3686400
    $baud = 19200
    $framesize = 64
    $swstack = 64
    $hwstack = 64
    Config Timer1 = Timer , Prescale = 1                        'timer für Servos
    Enable Timer1
    Timer1 = 56320
    Config Portc = Output
    Portc.0 = 0                                                 'hier hängt servo1
    Portc.1 = 0                                                 'hier hängt servo2
    Portc.2 = 0                                                 'hier hängt servo3
    Portc.3 = 0                                                 'hier hängt servo4
    
    On Timer1 Servoirq                                          'servo
    
    Enable Interrupts
    
    Declare Sub Berechnung
    
    Dim Kanal As Byte
    Dim Servo(4) As Word                                        'links: 63200, mitte 60000, rechts 56800
    
    Dim Hoehe As Byte
    Dim Abstand As Byte
    
    Dim Hoehe_q As Word
    Dim Abstand_q As Word
    Dim Dis_q As Word
    Dim Dis As Byte
    
    
    Dim Knie_wi As Byte
    Dim Kniea As Word
    Dim Knieb As Word
    
    Dim Knie_zw_a As Word
    Dim Knie_zw_b As Word
    Dim Knie_zw_c As Word
    Dim Knie_zw_d As Integer
    Dim Knie_zw_e As Single
    Dim Knie_zw_wi As Single
    
    
    
    Dim Huft_wi As Byte
    Dim Hufta As Word
    Dim Huftb As Word
    
    
    Const Oberschenkel = 67
    Const Unterschenkel = 87
    Const Oberschenkel_q = 4489
    Const Unterschenkel_q = 7569
    
    
    Hoehe = 50
    Abstand = 100
    Call Berechnung
    Servo(3) = 60000
    Servo(4) = 60000
    Wait 3
    
    Do
    
    Hoehe = 50
    Abstand = 100
    Call Berechnung
    Wait 2
    
    
    Loop
    
    Servoirq:
    If Kanal = 0 Then
       If Portc.0 = 0 Then                                      'wenn port low
          Timer1 = Servo(1)                                     'dann timer auf entsprechende verzögerung
          Portc.0 = 1                                           'und port anschalten
       Else                                                     'das hier passiert erst bei dem darauf folgenden interrupt
          Portc.0 = 0                                           'dann port wieder ausschalten
          Incr Kanal                                            'und den nächsten kanal bearbeiten
       End If
    End If
    If Kanal = 1 Then
       If Portc.1 = 0 Then
          Timer1 = Servo(2)
          Portc.1 = 1
       Else
          Portc.1 = 0
          Incr Kanal
       End If
    End If
    If Kanal = 2 Then
       If Portc.2 = 0 Then
          Timer1 = Servo(3)
          Portc.2 = 1
       Else
          Portc.2 = 0
          Incr Kanal
       End If
    End If
    If Kanal = 3 Then
       If Portc.3 = 0 Then
          Timer1 = Servo(4)
          Portc.3 = 1
       Else
          Portc.3 = 0
          Incr Kanal
       End If
    End If
    
    If Kanal = 4 Then
      Timer1 = 21300                                            '54016  eine pause von ca. 12ms bis zum nächsten interrupt. Bei guten Servos oder Brushlessreglern kann man hier bis auf 65530 gehen ==> ansteuerfrequenz von ~ 200Hz
      Kanal = 0
    End If
    Return
    
    '------------------------------------------
    
    Sub Berechnung
    
    If Hoehe > 110 Then Hoehe = 110
    If Abstand < 37 Then Abstand = 37
    Hoehe_q = Hoehe * Hoehe
    Abstand_q = Abstand * Abstand
    Dis_q = Hoehe_q + Abstand_q
    Dis = Sqr(dis_q)
    
    
    '-------------- Knie ----------------------
    
    Knie_zw_a = Dis_q - Unterschenkel_q
    Knie_zw_b = Knie_zw_a - Oberschenkel_q
    
    Knie_zw_c = Unterschenkel * Oberschenkel
    Knie_zw_d = -2 * Knie_zw_c
    
    Knie_zw_e = Knie_zw_b / Knie_zw_d
    Knie_zw_wi = Cos(knie_zw_e)
    Knie_wi = Knie_zw_wi * 100
    
    If Knie_wi < 45 Then Knie_wi = 45
    If Knie_wi > 180 Then Knie_wi = 180
    Kniea = 6400 / 180
    Knieb = Kniea * Knie_wi
    Servo(2) = 63200 - Knieb
    
    '-------------- Hüfte ---------------------
    
    If Huft_wi < 55 Then Huft_wi = 55
    If Huft_wi > 180 Then Huft_wi = 180
    Hufta = 6400 / 180
    Huftb = Hufta * Huft_wi
    Servo(1) = 56800 + Huftb
    
    Print "----------------------------------"
    Print
    Print "Knie_zw_a    " ; Knie_zw_a
    Print "Knie_zw_b    " ; Knie_zw_b
    Print
    Print "Knie_zw_c    " ; Knie_zw_c
    Print "Knie_zw_d    " ; Knie_zw_d
    Print
    Print "Knie_zw_e    " ; Knie_zw_e
    Print "Knie_zw_wi   " ; Knie_zw_wi
    Print
    Print "Knie_wi      " ; Knie_wi
    Print
    
    
    End Sub
    
    End
    das ist der vollständige code!
    wenn nohc verbessungsvorschläge da sind imemr her damit. fange erst an mit der programmierung. vorherige Projekte waren kleiner. nen glcd mit touchscreen angesteuert. und kleinere Sensoren ausgewertet.
    dies ist bislang mein erstes richtiges projekt.
    den mein traum ist es iwann mal ein hexabot zu bauen ;-D ich weis das wollen viele aber iwann wil ich das verwirklichen und da mich die IK sehr interessiert und reizt wollt ihc mal erste versuche machen.
    vohopri weis was ich meine. den er/du machst es ja auch so. viele kleinere projekt die zum schluss zusammengesetzt werden (dein auton. fahrzeug fand bzw. find ich genial)

    mfg bammel

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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