1- from threading import Thread , Lock , Condition
2- from typing import MutableSequence , Optional , Callable , List
3- from typing import cast
41from math import nan
5-
6- from time import sleep , monotonic
2+ from threading import Condition , Lock , Thread
3+ from time import monotonic , sleep
4+ from typing import Callable , List , MutableSequence , Optional
5+ from typing import cast
76
87import forcedimension .dhd as dhd
8+ from forcedimension .dhd import DeviceType
9+ from forcedimension .dhd .adaptors import (
10+ DHDErrorNoDeviceFound ,
11+ DHDIOError ,
12+ ErrorNum ,
13+ StatusTuple ,
14+ errno_to_exception ,
15+ )
916import forcedimension .drd as drd
1017from forcedimension .typing import IntVectorLike
11-
1218from forcedimension .util import (
1319 EuclidianVector ,
14- JacobianMatrix ,
1520 ImmutableWrapper ,
21+ JacobianMatrix ,
1622 UpdateOpts ,
1723)
1824
19- from forcedimension .dhd import DeviceType
20- from forcedimension .dhd .adaptors import (
21- StatusTuple ,
22- DHDIOError ,
23- DHDErrorNoDeviceFound ,
24- ErrorNum ,
25- errno_to_exception
26- )
25+
26+ __version__ = '0.1.1'
27+
2728
2829DefaultVecType = EuclidianVector
2930
@@ -48,6 +49,7 @@ class HapticDevice:
4849 dhd and provides a peformant portable Pythonic interface for doing
4950 high-level control.
5051 """
52+
5153 def __init__ (
5254 self ,
5355 ID : Optional [int ] = None ,
@@ -385,6 +387,7 @@ def calculate_angular_velocity(self):
385387 self.calculate_jacobian()
386388
387389 """
390+
388391 def update_enc_and_calculate (self ) -> None :
389392 self .update_enc ()
390393 self .calculate_joint_angles ()
@@ -401,16 +404,16 @@ def update_enc(self) -> None:
401404 """
402405
403406 _ , err = dhd .expert .getDeltaEncoders (
404- ID = cast (int , self ._id ),
405- out = self ._enc
406- )
407+ ID = cast (int , self ._id ),
408+ out = self ._enc
409+ )
407410
408411 if err and err != dhd .TIMEGUARD :
409412 raise errno_to_exception (
410413 ErrorNum (dhd .errorGetLast ()))(
411414 ID = cast (int , self .ID ),
412415 feature = dhd .expert .getDeltaEncoders
413- )
416+ )
414417
415418 def update_position (self ) -> None :
416419 """
@@ -428,7 +431,7 @@ def update_position(self) -> None:
428431 ErrorNum (dhd .errorGetLast ()))(
429432 ID = cast (int , self .ID ),
430433 feature = dhd .getPosition
431- )
434+ )
432435
433436 def update_velocity (self ) -> None :
434437 """
@@ -458,8 +461,8 @@ def update_angular_velocity(self):
458461 :rtype: None
459462 """
460463 _ , err = dhd .getAngularVelocityRad (
461- ID = cast (int , self ._id ),
462- out = self ._w
464+ ID = cast (int , self ._id ),
465+ out = self ._w
463466 )
464467
465468 if (err ):
@@ -487,7 +490,7 @@ def update_force(self):
487490 dhd .errorGetLast ()))(
488491 ID = cast (int , self ._id ),
489492 feature = dhd .getForce
490- )
493+ )
491494
492495 def update_force_and_torque (self ):
493496 """
@@ -505,9 +508,9 @@ def update_force_and_torque(self):
505508
506509 if (err ):
507510 raise errno_to_exception (dhd .errorGetLast ())(
508- ID = cast (int , self ._id ),
509- feature = dhd .getForceAndTorque
510- )
511+ ID = cast (int , self ._id ),
512+ feature = dhd .getForceAndTorque
513+ )
511514
512515 def update_force_and_torque_and_gripper_force (self ):
513516 """
@@ -555,19 +558,19 @@ def submit(self):
555558 """
556559 self ._req = False
557560 err = dhd .setForceAndTorque (
558- self ._f_req ,
559- self ._t_req ,
560- cast (int , self ._id )
561- )
561+ self ._f_req ,
562+ self ._t_req ,
563+ cast (int , self ._id )
564+ )
562565
563566 if err :
564567 if err == dhd .MOTOR_SATURATED :
565568 pass
566569 else :
567570 raise errno_to_exception (ErrorNum (dhd .errorGetLast ()))(
568- ID = cast (int , self ._id ),
569- feature = dhd .setForceAndTorqueAndGripperForce
570- )
571+ ID = cast (int , self ._id ),
572+ feature = dhd .setForceAndTorqueAndGripperForce
573+ )
571574
572575 def req (
573576 self ,
@@ -635,19 +638,19 @@ def stop(self):
635638
636639 def submit_vibration (self ):
637640 err = dhd .setVibration (
638- ID = cast (int , self ._id ),
639- f = self ._vibration_req [0 ],
640- A = self ._vibration_req [1 ],
641- device_type = self .devtype
642- )
641+ ID = cast (int , self ._id ),
642+ f = self ._vibration_req [0 ],
643+ A = self ._vibration_req [1 ],
644+ device_type = self .devtype
645+ )
643646
644647 if err :
645648 if err == dhd .MOTOR_SATURATED :
646649 pass
647650 raise errno_to_exception (ErrorNum (dhd .errorGetLast ()))(
648- ID = cast (int , self ._id ),
649- feature = dhd .setVibration
650- )
651+ ID = cast (int , self ._id ),
652+ feature = dhd .setVibration
653+ )
651654
652655 def submit_enc (self ):
653656 _ , err = dhd .expert .getEnc (
@@ -658,9 +661,9 @@ def submit_enc(self):
658661
659662 if err :
660663 raise errno_to_exception (ErrorNum (dhd .errorGetLast ()))(
661- ID = cast (int , self ._id ),
662- feature = dhd .expert .getEnc
663- )
664+ ID = cast (int , self ._id ),
665+ feature = dhd .expert .getEnc
666+ )
664667
665668 def enable_force (self , enabled : bool = True ):
666669 """
@@ -680,9 +683,9 @@ def enable_brakes(self, enabled: bool = True):
680683 err = dhd .setBrakes (enabled )
681684 if err :
682685 raise errno_to_exception (ErrorNum (dhd .errorGetLast ()))(
683- ID = cast (int , self ._id ),
684- feature = dhd .setVibration
685- )
686+ ID = cast (int , self ._id ),
687+ feature = dhd .setVibration
688+ )
686689
687690 def get_max_force (self ) -> Optional [float ]:
688691 """
@@ -907,9 +910,9 @@ def set_max_force(self, limit: Optional[float]) -> None:
907910 raise ValueError
908911
909912 err = dhd .setMaxGripperForce (
910- ID = cast (int , self ._id ),
911- limit = limit
912- )
913+ ID = cast (int , self ._id ),
914+ limit = limit
915+ )
913916
914917 if err :
915918 raise errno_to_exception (ErrorNum (dhd .errorGetLast ()))
@@ -952,25 +955,25 @@ def fg(self):
952955 def calculate_gap (self ):
953956 if self ._enc is not None :
954957 self ._gap = dhd .expert .gripperEncoderToGap (
955- ID = cast (int , self ._id ),
956- enc = self ._enc
957- )
958+ ID = cast (int , self ._id ),
959+ enc = self ._enc
960+ )
958961 else :
959962 raise ValueError
960963
961964 def calculate_angle (self ):
962965 if self ._enc is not None :
963966 self ._angle = dhd .expert .gripperEncoderToAngleRad (
964- ID = cast (int , self ._id ),
965- enc = self ._enc
966- )
967+ ID = cast (int , self ._id ),
968+ enc = self ._enc
969+ )
967970 else :
968971 raise ValueError
969972
970973 def update_enc (self ):
971974 self ._enc , err = dhd .expert .getGripperEncoder (
972- ID = cast (int , self ._id )
973- )
975+ ID = cast (int , self ._id )
976+ )
974977
975978 if err and err != dhd .TIMEGUARD :
976979 raise errno_to_exception (dhd .errorGetLast ())
@@ -987,8 +990,8 @@ def update_linear_velocity(self):
987990
988991 def update_angular_velocity (self ):
989992 self ._w , err = dhd .getGripperAngularVelocityRad (
990- ID = cast (int , self ._id )
991- )
993+ ID = cast (int , self ._id )
994+ )
992995
993996 if err and err != dhd .TIMEGUARD :
994997 raise errno_to_exception (dhd .errorGetLast ())
@@ -1005,18 +1008,18 @@ def update_gap(self):
10051008
10061009 def update_thumb_pos (self ):
10071010 _ , err = dhd .getGripperThumbPos (
1008- cast (int , self ._id ),
1009- out = self ._thumb_pos
1010- )
1011+ cast (int , self ._id ),
1012+ out = self ._thumb_pos
1013+ )
10111014
10121015 if err and err != dhd .TIMEGUARD :
10131016 raise errno_to_exception (dhd .errorGetLast ())
10141017
10151018 def update_finger_pos (self ):
10161019 _ , err = dhd .getGripperFingerPos (
1017- cast (int , self ._id ),
1018- out = self ._finger_pos
1019- )
1020+ cast (int , self ._id ),
1021+ out = self ._finger_pos
1022+ )
10201023 if err and err != dhd .TIMEGUARD :
10211024 raise errno_to_exception (dhd .errorGetLast ())
10221025
@@ -1093,11 +1096,11 @@ def run(self):
10931096
10941097class HapticDaemon (Thread ):
10951098 def __init__ (
1096- self ,
1097- dev : HapticDevice ,
1098- update_list : UpdateOpts = UpdateOpts (),
1099- forceon = False
1100- ):
1099+ self ,
1100+ dev : HapticDevice ,
1101+ update_list : UpdateOpts = UpdateOpts (),
1102+ forceon = False
1103+ ):
11011104
11021105 super ().__init__ ()
11031106
0 commit comments