@@ -145,6 +145,9 @@ def __init__(self, parameters: MotorsParametersTemplate) -> None:
145145 self .groupWriters ["goal_velocity" ] = GroupSyncWrite (self .portHandler , self .packetHandler ,
146146 self .parameters .ADDR_GOAL_VELOCITY ,
147147 self .parameters .LEN_GOAL_POSITION )
148+ self .groupWriters ["goal_pwm" ] = GroupSyncWrite (self .portHandler , self .packetHandler ,
149+ self .parameters .ADDR_GOAL_PWM ,
150+ self .parameters .LEN_GOAL_PWM )
148151 self .groupWriters ["velocity_profile" ] = GroupSyncWrite (self .portHandler , self .packetHandler ,
149152 self .parameters .ADDR_VELOCITY_PROFILE ,
150153 self .parameters .LEN_GOAL_POSITION )
@@ -222,8 +225,6 @@ def _readSyncMotorsData(self, groupSyncRead:GroupSyncRead):
222225 Raises:
223226 Exception: If the motor group is not connected or if the read operation fails.
224227 """
225- if not self .isConnected :
226- raise DisconnectedException ()
227228
228229 dxl_comm_result = groupSyncRead .txRxPacket ()
229230 if dxl_comm_result != COMM_SUCCESS :
@@ -246,9 +247,7 @@ def __writeSyncMotorsData(self, group: GroupSyncWrite, values):
246247 group (GroupSyncWrite): The group sync write object.
247248 values (list of numbers): The values to write to the motors.
248249 """
249- if not self .isConnected :
250- raise DisconnectedException ()
251-
250+
252251 group .clearParam ()
253252 for index , DXL_ID in enumerate (self .parameters .DXL_IDs ):
254253 if group .data_length == 2 :
@@ -314,6 +313,15 @@ def enableExtendedPositionMode(self):
314313 if any (t == 1 for t in torques ):
315314 self .enableTorque ()
316315
316+ def enablePWMMode (self ):
317+ torques = self .isTorqueEnable ()
318+
319+ if any (t == 1 for t in torques ):
320+ self .disableTorque ()
321+ self .__setOperatingMode (self .parameters .PWM_MODE )
322+ if any (t == 1 for t in torques ):
323+ self .enableTorque ()
324+
317325
318326 def enablePositionMode (self ):
319327 torques = self .isTorqueEnable ()
@@ -342,6 +350,13 @@ def setGoalPosition(self, positions):
342350 """
343351 self .__writeSyncMotorsData (self .groupWriters ["goal_position" ], positions )
344352
353+ def setGoalPWM (self , pwms ):
354+ """Set the goal velocity
355+
356+ Args:
357+ speeds (list of numbers): unit depends on motor type
358+ """
359+ self .__writeSyncMotorsData (self .groupWriters ["goal_pwm" ] , pwms )
345360
346361 def setVelocityProfile (self , max_vel ):
347362 """Set the maximum velocities in position mode
0 commit comments