@@ -102,12 +102,18 @@ def control_distance(self, power_left=100, power_right=100, target_distance=0):
102
102
#self._wheelsAxle_lock.acquire() # wheelsAxle lock acquire
103
103
self ._is_moving = True
104
104
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
+
105
111
self ._left_motor .reset_state ()
106
112
self ._right_motor .reset_state ()
107
113
108
114
# 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 )
111
117
112
118
#PID parameters
113
119
# 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):
122
128
#KI = 0.005 # integral coefficient
123
129
124
130
# MEDIUM RESPONSE
125
- KP = 0.2 #proportional coefficient
131
+ KP = 0.4 #proportional coefficient
126
132
KD = 0.1 # derivative coefficient
127
133
KI = 0.02 # integral coefficient
128
134
@@ -138,15 +144,14 @@ def control_distance(self, power_left=100, power_right=100, target_distance=0):
138
144
left_integral_error = 0
139
145
right_integral_error = 0
140
146
# 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 ):
143
149
# 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 ):
147
152
# 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
150
155
151
156
left_correction = (left_error * KP ) + (left_derivative_error * KD ) + (left_integral_error * KI )
152
157
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):
161
166
power_left_norm = max (min (corrected_power_left , 100 ), 0 )
162
167
power_right_norm = max (min (corrected_power_right , 100 ), 0 )
163
168
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 ())) +
165
170
" le:" + str (int (left_error )) + " re: " + str (int (right_error )) +
166
171
" lc: " + str (int (left_correction )) + " rc: " + str (int (right_correction )) +
167
172
" lp: " + str (int (power_left_norm )) + " rp: " + str (int (power_right_norm )))
168
173
169
174
# 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 )
172
177
173
178
left_derivative_error = left_error
174
179
right_derivative_error = right_error
0 commit comments