Hilfe bei Fehlersuche

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ACryx0L
User
Beiträge: 6
Registriert: Donnerstag 24. November 2016, 20:40

Hallo zusammen,
bin gerade dabei einen Robot zu programmieren für die Weltmeisterschaften, doch hänge gerade an einem Fehler, denn ich nicht finden kann ^^
Kann mir wer helfen?

Danke schonmal im Vorraus ^^'

Fehlermeldung
Traceback (most recent call last):
File "kickWithTorso.py", line 126, in <module>
main(robotIp)
File "kickWithTorso.py", line 86, in main
targetListTorso *= almath.Transform().formRotX(dwx)
File "/usr/lib/python2.7/site-packages/almathswig.py", line 2009, in <lambda>
__getattr__ = lambda self, name: _swig_getattr(self, Transform, name)
File "/usr/lib/python2.7/site-packages/almathswig.py", line 55, in _swig_getattr
raise AttributeError(name)
AttributeError: formRotX


Code:

Code: Alles auswählen

#Motion of the RLeg
    dx      = 0.03                 # translation axis X (meters)
    dz      = 0.06                 # translation axis Z (meters)
    dy      = 0.02
    dwy     = 0.01*math.pi/180.0    # rotation axis Y (radian)
    dwx     = 8.0*almath.TO_RAD


    #times   = [2.0, 4.0, 4.8, 5.2, 5.5]
    isAbsolute = False
  
    targetList = [[0.03, 0.0, 0.0, 0.0, 0.0, 0.0]] 
   
    targetListTorso = almath.Transform(currentTf.r1_c4, currentTF.r2_c4, currentTF.r3_c4)
    targetListTorso *= almath.Transform(0.0, 0.03, 0.0)
    targetListTorso *= almath.Transform().fromRotX(dwx)

    path = []
    path.append(list(targetListTorso.toVector()))
    path.append(list(targetList.toVector()))

    timeOneMove  = 0.5 #seconds
    times = []
    for i in range(len(path)):
        times.append((i+1)*timeOneMove)
Zuletzt geändert von Anonymous am Montag 28. November 2016, 12:05, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

ACryx0L: eine Transform-Instanz hat keine Methode fromRotX. Das steht so in der Fehlermeldung. Man kann also nur Methoden aufrufen, die auch existieren. Du mußt also in der Dokumentation nachschauen, wie die Methode tatsächlich heißt.

Zum Code:
Zeile 5/6: es gibt die Funktion math.radians, man braucht also nicht auf zwei unterschiedliche Arten die Umrechnung zu machen.
Zeile 18ff: Wenn man eine Liste erzeugt, kann man auch gleich die Elemente mit eintragen und muß sie nicht erst nachträglich mit append hinzufügen.

Allgemein: die Variablennamen halten sich nicht an die Namenskonvention von Python.
ACryx0L
User
Beiträge: 6
Registriert: Donnerstag 24. November 2016, 20:40

@Sirius3

Danke für deine Hinweise im Code ^^
Zu 18ff habe ich anfangs noch einen anderen Plan ^^


Zu dem Instanz. Ich habe dies schon einmal verwendet, bei dem herum probieren. in diesem Fall habe ich den Nao (Roboter) dazu gebracht, dass er eine Art Hulla-Hup Bewegung macht. Das Programm funktioniert einwandfrei. Zwecks Torso bewegen war dies ein Versuch
Nun da ich den Kick gerade Code fürs Soccer, gibt es das Problem, das ich mit dem Schwerpunkt am Kunstrasen viel zu tun zu habe, weswegen auch der Torso bewegt gehört.
Nun hätte ich dies im Kick auch so gemacht, doch plötzlich der Fehler...
Nun die Frage, wo hab ich gepfuscht?

Hier das Bsp in dem es funktioniert:

Code: Alles auswählen

# Define the changes relative to the current position
    dx         = 0.03                    # translation axis X (meter)
    dy         = 0.03                    # translation axis Y (meter)
    dwx        = 8.0*almath.TO_RAD       # rotation axis X (rad)
    dwy        = 8.0*almath.TO_RAD       # rotation axis Y (rad)

    # point 01 : forward  / bend backward
    target1Tf = almath.Transform(currentTf.r1_c4, currentTf.r2_c4, currentTf.r3_c4)
    target1Tf *= almath.Transform(dx, 0.0, 0.0)
    target1Tf *= almath.Transform().fromRotY(-dwy)

    # point 02 : right    / bend left
    target2Tf = almath.Transform(currentTf.r1_c4, currentTf.r2_c4, currentTf.r3_c4)
    target2Tf *= almath.Transform(0.0, -dy, 0.0)
    target2Tf *= almath.Transform().fromRotX(-dwx)

    # point 03 : backward / bend forward
    target3Tf = almath.Transform(currentTf.r1_c4, currentTf.r2_c4, currentTf.r3_c4)
    target3Tf *= almath.Transform(-dx, 0.0, 0.0)
    target3Tf *= almath.Transform().fromRotY(dwy)

    # point 04 : left     / bend right
    target4Tf = almath.Transform(currentTf.r1_c4, currentTf.r2_c4, currentTf.r3_c4)
    target4Tf *= almath.Transform(0.0, dy, 0.0)
    target4Tf *= almath.Transform().fromRotX(dwx)

    path = []
    path.append(list(target1Tf.toVector()))
    path.append(list(target2Tf.toVector()))
    path.append(list(target3Tf.toVector()))
    path.append(list(target4Tf.toVector()))

    path.append(list(target1Tf.toVector()))
    path.append(list(target2Tf.toVector()))
    path.append(list(target3Tf.toVector()))
    path.append(list(target4Tf.toVector()))

    path.append(list(target1Tf.toVector()))
    path.append(list(currentTf.toVector()))

    timeOneMove  = 0.5 #seconds
    times = []
    for i in range(len(path)):
        times.append((i+1)*timeOneMove)
Zuletzt geändert von Anonymous am Montag 28. November 2016, 12:06, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@ACryx0L: genaues Lesen hilft: fromRotX existiert, formRotX dagegen nicht.
ACryx0L
User
Beiträge: 6
Registriert: Donnerstag 24. November 2016, 20:40

@Sirius3
Omg... lesen sollte man echt können....
Danke ^^'
Antworten