@@ -34,20 +34,20 @@ def __init__(
34
34
elementIn = None ,
35
35
stringIn = None ,
36
36
eltype = None ,
37
- constant = None ,
37
+ constant = 0.0 ,
38
38
sign = 0 ):
39
39
40
40
self .var = None # eg. q1, for joint var types
41
41
self .symconst = None # eg. L1, for lengths
42
42
43
43
# DH parameters, only set if type is DH_STANDARD/MODIFIED
44
- self .theta = None
45
- self .alpha = None
46
- self .A = None
47
- self .D = None
44
+ self .theta = 0
45
+ self .alpha = 0
46
+ self .A = 0
47
+ self .D = 0
48
48
self .prismatic = None
49
49
self .offset = None
50
- self .constant = None
50
+ self .constant = 0.0
51
51
52
52
if stringIn :
53
53
if elementIn or eltype or constant :
@@ -103,10 +103,9 @@ def __init__(
103
103
# self.negate()
104
104
105
105
# one of TX, TY ... RZ, DH_STANDARD/MODIFIED
106
- if eltype :
106
+ if eltype is not None :
107
107
self .eltype = eltype
108
- if constant :
109
- self .constant = constant # eg. 90, for angles
108
+ self .constant = constant # eg. 90, for angles
110
109
if sign < 0 :
111
110
self .negate ()
112
111
@@ -156,14 +155,14 @@ def add(self, e):
156
155
if self .eltype != Element .DH_STANDARD and self .eltype != Element .DH_MODIFIED :
157
156
raise ValueError ("wrong element type " + str (self ))
158
157
print (" adding: " + str (self ) + " += " + str (e ))
159
- print ("prismatic= " + str (self .prismatic ))
160
- print ("var= " + str (self .var ))
161
- print ("offset= " + str (self .offset ))
162
- print ("theta= " + str (self .theta ))
163
- print ("a= " + str (self .A ))
164
- print ("d= " + str (self .D ))
165
- print ("e.symconst= " + str (e .symconst ))
166
- print ("e.var= " + str (e .var ))
158
+ # print("prismatic= " + str(self.prismatic))
159
+ # print("var= " + str(self.var))
160
+ # print("offset= " + str(self.offset))
161
+ # print("theta= " + str(self.theta))
162
+ # print("a= " + str(self.A))
163
+ # print("d= " + str(self.D))
164
+ # print("e.symconst= " + str(e.symconst))
165
+ # print("e.var= " + str(e.var))
167
166
if e .eltype == self .RZ :
168
167
if e .isjoint ():
169
168
self .prismatic = 0
@@ -325,45 +324,45 @@ def substituteY(self, prev, next):
325
324
# note that if the rotation is -90 we must make the displacement -ve
326
325
if prev .eltype == Element .RX and self .eltype == Element .TY :
327
326
# RX.TY -> TZ.RX
328
- s .append (Element (elementIn = self , eltype = Element .TZ , constant = prev .constant ))
327
+ s .append (Element (elementIn = self , eltype = Element .TZ , sign = prev .constant ))
329
328
s .append (Element (elementIn = prev ))
330
329
self .rules [0 ] += 1
331
330
return s
332
331
elif prev .eltype == Element .RX and self .eltype == Element .TZ :
333
332
# RX.TZ -> TY.RX
334
- s .append (Element (elementIn = self , eltype = Element .TY , constant = - prev .constant ))
333
+ s .append (Element (elementIn = self , eltype = Element .TY , sign = - prev .constant ))
335
334
s .append (Element (elementIn = prev ))
336
335
self .rules [2 ] += 1
337
336
return s
338
337
elif prev .eltype == Element .RY and self .eltype == Element .TX :
339
338
# RY.TX -> TZ.RY
340
- s .append (Element (elementIn = self , eltype = Element .TZ , constant = - prev .constant ))
339
+ s .append (Element (elementIn = self , eltype = Element .TZ , sign = - prev .constant ))
341
340
s .append (Element (elementIn = prev ))
342
341
self .rules [1 ] += 1
343
342
return s
344
343
elif prev .eltype == Element .RY and self .eltype == Element .TZ :
345
344
# RY.TZ -> TX.RY
346
- s .append (Element (elementIn = self , eltype = Element .TX , constant = prev .constant ))
345
+ s .append (Element (elementIn = self , eltype = Element .TX , sign = prev .constant ))
347
346
s .append (Element (elementIn = prev ))
348
347
self .rules [11 ] += 1
349
348
return s
350
349
elif prev .eltype == Element .TY and self .eltype == Element .RX :
351
350
# TY.RX -> RX.TZ
352
351
s .append (Element (elementIn = prev ))
353
- s .append (Element (elementIn = self , eltype = Element .TZ , constant = - self .constant ))
352
+ s .append (Element (elementIn = self , eltype = Element .TZ , sign = - self .constant ))
354
353
self .rules [5 ] += 1
355
354
# return s
356
355
return None
357
356
elif prev .eltype == Element .TX and self .eltype == Element .RZ :
358
357
# TX.RZ -> RZ.TY
359
358
s .append (Element (elementIn = prev ))
360
- s .append (Element (elementIn = self , eltype = Element .TY , constant = self .constant ))
359
+ s .append (Element (elementIn = self , eltype = Element .TY , sign = self .constant ))
361
360
self .rules [5 ] += 1
362
361
return s
363
362
elif prev .eltype == Element .RY and self .eltype == Element .RX :
364
363
# RY(Q).RX -> RX.RZ(-Q)
365
364
s .append (Element (elementIn = prev ))
366
- s .append (Element (elementIn = self , eltype = Element .RZ , constant = - 1 ))
365
+ s .append (Element (elementIn = self , eltype = Element .RZ , sign = - 1 ))
367
366
self .rules [3 ] += 1
368
367
return s
369
368
elif prev .eltype == Element .RX and self .eltype == Element .RY :
@@ -384,7 +383,8 @@ def substituteY(self, prev, next):
384
383
# negate the arguments of the element
385
384
def negate (self ):
386
385
387
- self .constant = - self .constant
386
+ if self .constant :
387
+ self .constant = - self .constant
388
388
389
389
if self .symconst :
390
390
s = list (self .symconst )
@@ -396,9 +396,9 @@ def negate(self):
396
396
s [i ] = "-"
397
397
elif s [i ] == "-" :
398
398
s [i ] = "+"
399
- if s [0 ] == "+" :
400
- s .pop (0 )
401
- s = "" .join (s )
399
+ if s [0 ] == "+" :
400
+ s .pop (0 )
401
+ self . symconst = "" .join (s )
402
402
403
403
'''
404
404
Return a string representation of the parameters (argument)
@@ -408,8 +408,8 @@ def negate(self):
408
408
def argString (self ):
409
409
s = ""
410
410
411
- if self .eltype == Element .RX or Element .RY or Element .RZ or \
412
- Element .TX or Element .TY or Element .TZ :
411
+ if self .eltype == Element .RX or self . eltype == Element .RY or self . eltype == Element .RZ or \
412
+ self . eltype == Element .TX or self . eltype == Element .TY or self . eltype == Element .TZ :
413
413
if self .var :
414
414
s = self .var
415
415
if self .symconst :
@@ -423,34 +423,35 @@ def argString(self):
423
423
s = s + "+" + '{0:.3f}' .format (self .constant )
424
424
else :
425
425
s = s + '{0:.3f}' .format (self .constant )
426
- elif self .eltype == Element .DH_STANDARD or Element .DH_MODIFIED :
426
+ elif self .eltype == Element .DH_STANDARD or self . eltype == Element .DH_MODIFIED :
427
427
# theta, d, a, alpha
428
428
# theta
429
- if self .prismatic == 0 :
429
+ if not self .prismatic :
430
430
# revolute joint
431
- s = s + self .var
432
- if self .offset >= 0 :
433
- s = s + "+" + '{0:.3f}' .format (self .offset )
434
- elif self .offset < 0 :
435
- s = s + '{0:.3f}' .format (self .offset )
431
+ s += str (self .var )
432
+ if self .offset :
433
+ if self .offset >= 0 :
434
+ s = s + "+" + '{0:.3f}' .format (self .offset )
435
+ elif self .offset < 0 :
436
+ s = s + '{0:.3f}' .format (self .offset )
436
437
else :
437
438
# prismatic joint
438
- s = s + '{0:.3f}' .format (self .theta )
439
- s = s + ", "
439
+ s += '{0:.3f}' .format (self .theta )
440
+ s += ", "
440
441
441
442
# d
442
- if self .prismatic > 0 :
443
- s = s + self .var
443
+ if self .prismatic :
444
+ s += str ( self .var )
444
445
else :
445
- s = s + self .D if self .D else s + "0"
446
- s = s + ", "
446
+ s += str ( self .D ) if self .D else "0"
447
+ s += ", "
447
448
448
449
# a
449
- s = s + self .A if self .A else s + "0"
450
- s = s + ", "
450
+ s += str ( self .A ) if self .A else "0"
451
+ s += ", "
451
452
452
453
# alpha
453
- s = s + '{0:.3f}' .format (self .alpha )
454
+ s += '{0:.3f}' .format (self .alpha )
454
455
else :
455
456
raise ValueError ("bad Element type" )
456
457
return s
@@ -843,11 +844,11 @@ class DHFactor():
843
844
844
845
def __init__ (self , src ):
845
846
self .results = ElementList ()
846
- try :
847
- self .results = self .parseString (src )
848
- print ("In DHFactor, parseString is done" )
849
- except ValueError :
850
- print ("Value Error" )
847
+ # try:
848
+ self .results = self .parseString (src )
849
+ print ("In DHFactor, parseString is done" )
850
+ # except ValueError:
851
+ # print("Value Error")
851
852
if not self .isValid ():
852
853
print ("DHFactor: error: Incomplete factorization, no DH equivalent found" )
853
854
@@ -917,17 +918,18 @@ def dh(self):
917
918
else :
918
919
# revolute joint
919
920
theta = "0"
920
- d = "0" if e .D is None else e .D
921
+ d = "0" if e .D is None else str ( e .D )
921
922
922
923
s += "["
923
- s += theta
924
- s += ", "
925
- s += d
924
+ if e .prismatic :
925
+ s += theta
926
+ else :
927
+ s += d
926
928
s += ", "
927
- s += "0" if e .A is None else e .A
929
+ s += "0" if e .A is None else str ( e .A )
928
930
s += ", "
929
931
s += self .angle (e .alpha )
930
- s += ", " + e .prismatic
932
+ s += ", " + str ( e .prismatic )
931
933
s += "],"
932
934
s += "]"
933
935
return s
@@ -1011,7 +1013,7 @@ def parseString(self, buffer):
1011
1013
l .simplify ()
1012
1014
print (l )
1013
1015
1014
- l .factorize (Element .DH_STANDARD , 1 )
1016
+ l .factorize (Element .DH_STANDARD , verbose = 0 )
1015
1017
print (l )
1016
1018
1017
1019
return l
0 commit comments