@@ -102,12 +102,18 @@ def control_distance(self, power_left=100, power_right=100, target_distance=0):
102102 #self._wheelsAxle_lock.acquire() # wheelsAxle lock acquire
103103 self ._is_moving = True
104104
105+ # get desired direction from power, then normalize on power > 0
106+ left_direction = power_left / abs (power_left )
107+ right_direction = power_right / abs (power_right )
108+ power_left = abs (power_left )
109+ power_right = abs (power_right )
110+
105111 self ._left_motor .reset_state ()
106112 self ._right_motor .reset_state ()
107113
108114 # applying tension to motors
109- self ._left_motor .control (power_left )
110- self ._right_motor .control (power_right )
115+ self ._left_motor .control (power_left * left_direction )
116+ self ._right_motor .control (power_right * right_direction )
111117
112118 #PID parameters
113119 # assuming that power_right is equal to power_left and that coderbot
@@ -122,7 +128,7 @@ def control_distance(self, power_left=100, power_right=100, target_distance=0):
122128 #KI = 0.005 # integral coefficient
123129
124130 # MEDIUM RESPONSE
125- KP = 0.2 #proportional coefficient
131+ KP = 0.4 #proportional coefficient
126132 KD = 0.1 # derivative coefficient
127133 KI = 0.02 # integral coefficient
128134
@@ -138,15 +144,14 @@ def control_distance(self, power_left=100, power_right=100, target_distance=0):
138144 left_integral_error = 0
139145 right_integral_error = 0
140146 # moving for certaing amount of distance
141- logging .debug ("moving? " + str (self ._is_moving ) + " distance: " + str (self .distance ()) + " target: " + str (target_distance ))
142- while (abs (self .distance ()) < target_distance and self ._is_moving == True ):
147+ logging .info ("moving? " + str (self ._is_moving ) + " distance: " + str (self .distance ()) + " target: " + str (target_distance ))
148+ while (abs (self .distance ()) < abs ( target_distance ) and self ._is_moving == True ):
143149 # PI controller
144- #logging.debug("control_distance.1")
145- if (self ._left_motor .speed () > 10 and self ._right_motor .speed () > 10 ):
146- #logging.debug("control_distance.2")
150+ logging .info ("speed.left: " + str (self ._left_motor .speed ()) + " speed.right: " + str (self ._right_motor .speed ()))
151+ if (abs (self ._left_motor .speed ()) > 10 and abs (self ._right_motor .speed ()) > 10 ):
147152 # relative error
148- left_error = (target_speed_left - self ._left_motor .speed ())/ target_speed_left * 100.0
149- right_error = (target_speed_right - self ._right_motor .speed ())/ target_speed_right * 100.0
153+ left_error = (target_speed_left - self ._left_motor .speed ()) / target_speed_left * 100.0
154+ right_error = (target_speed_right - self ._right_motor .speed ()) / target_speed_right * 100.0
150155
151156 left_correction = (left_error * KP ) + (left_derivative_error * KD ) + (left_integral_error * KI )
152157 right_correction = (right_error * KP ) + (right_derivative_error * KD ) + (right_integral_error * KI )
@@ -161,14 +166,14 @@ def control_distance(self, power_left=100, power_right=100, target_distance=0):
161166 power_left_norm = max (min (corrected_power_left , 100 ), 0 )
162167 power_right_norm = max (min (corrected_power_right , 100 ), 0 )
163168
164- logging .debug ("ls:" + str (int (self ._left_motor .speed ())) + " rs: " + str (int (self ._right_motor .speed ())) +
169+ logging .info ("ls:" + str (int (self ._left_motor .speed ())) + " rs: " + str (int (self ._right_motor .speed ())) +
165170 " le:" + str (int (left_error )) + " re: " + str (int (right_error )) +
166171 " lc: " + str (int (left_correction )) + " rc: " + str (int (right_correction )) +
167172 " lp: " + str (int (power_left_norm )) + " rp: " + str (int (power_right_norm )))
168173
169174 # adjusting power on each motors
170- self ._left_motor .adjust_power (power_left_norm )
171- self ._right_motor .adjust_power (power_right_norm )
175+ self ._left_motor .adjust_power (power_left_norm * left_direction )
176+ self ._right_motor .adjust_power (power_right_norm * right_direction )
172177
173178 left_derivative_error = left_error
174179 right_derivative_error = right_error
0 commit comments