|
8 | 8 | motorR = Motor(Port.B) |
9 | 9 | drive_base = DriveBase(motorL, motorR, wheel_diameter=56, axle_track=80) |
10 | 10 |
|
11 | | -try: |
12 | | - import ffi |
13 | | - |
14 | | - virtual = True |
15 | | -except ImportError: |
16 | | - virtual = False |
17 | | - |
18 | | - |
19 | | -# Wait on a real robot but not in the simulator. |
20 | | -def delay(ms): |
21 | | - if virtual: |
22 | | - return |
23 | | - wait(ms) |
24 | | - |
25 | 11 |
|
26 | 12 | def wait_until_done(): |
27 | | - # Stop immediately if virtual. |
28 | | - if virtual: |
29 | | - drive_base.straight(0) |
30 | | - wait(30) |
31 | | - return |
32 | | - |
33 | 13 | # Wait until the drive base command completes normally. |
34 | 14 | while not drive_base.done(): |
35 | 15 | wait(10) |
@@ -77,25 +57,14 @@ def wait_until_done(): |
77 | 57 | ) |
78 | 58 | wait_until_done() |
79 | 59 |
|
80 | | -drive_base.turn(1080, wait=False) |
| 60 | +drive_base.turn(540, wait=False) |
81 | 61 | wait(STARTUP_DELAY) |
82 | | -assert motorL.speed() > 0, "For CW in-place turn 1080 degrees, left speed should be +ve" |
| 62 | +assert motorL.speed() > 0, "For CW in-place turn 540 degrees, left speed should be +ve" |
83 | 63 | assert motorR.speed() < 0, ( |
84 | | - "For CW in-place turn 1080 degrees, right speed should be -ve" |
85 | | -) |
86 | | -wait_until_done() |
87 | | - |
88 | | -drive_base.turn(-1440, wait=False) |
89 | | -wait(STARTUP_DELAY) |
90 | | -assert motorL.speed() < 0, ( |
91 | | - "For CCW in-place turn 1440 degrees, left speed should be -ve" |
92 | | -) |
93 | | -assert motorR.speed() > 0, ( |
94 | | - "For CCW in-place turn 1440 degrees, right speed should be +ve" |
| 64 | + "For CW in-place turn 540 degrees, right speed should be -ve" |
95 | 65 | ) |
96 | 66 | wait_until_done() |
97 | 67 |
|
98 | | - |
99 | 68 | # Demo 3: Using curve() drives the 'center point' between the wheels a full |
100 | 69 | # circle (360 degrees or part thereof) around a circle of 12cm radius. |
101 | 70 | drive_base.curve(120, 360, wait=False) # Drives forward along circle to robot's right |
@@ -135,68 +104,3 @@ def wait_until_done(): |
135 | 104 | "When driving Rev in CW Curve, motorL should be greater than motorR" |
136 | 105 | ) |
137 | 106 | wait_until_done() |
138 | | - |
139 | | -# Demo 4: Using drive() to control the robot in various ways. |
140 | | -drive_base.drive(200, 0) # Drive straight Fwd |
141 | | -wait(STARTUP_DELAY_LONG) |
142 | | -assert motorL.speed() > 0, "When driving Fwd in straight line, left speed should be +ve" |
143 | | -assert motorR.speed() > 0, ( |
144 | | - "When driving Fwd in straight line, right speed should be +ve" |
145 | | -) |
146 | | -delay(500) |
147 | | -drive_base.stop() |
148 | | -delay(250) |
149 | | - |
150 | | -drive_base.drive(-200, 0) # Drive straight Rev |
151 | | -wait(STARTUP_DELAY_LONG) |
152 | | -assert motorL.speed() < 0, "When driving Rev in straight line, left speed should be -ve" |
153 | | -assert motorR.speed() < 0, ( |
154 | | - "When driving Rev in straight line, right speed should be -ve" |
155 | | -) |
156 | | -delay(500) |
157 | | -drive_base.stop() |
158 | | -delay(250) |
159 | | - |
160 | | -drive_base.drive(200, 90) # Drives CW Fwd |
161 | | -wait(STARTUP_DELAY_LONG) |
162 | | -assert motorL.speed() > 0, "When driving CW Curve Fwd, left speed should be +ve" |
163 | | -assert motorR.speed() > 0, "When driving CW Curve Fwd, right speed should be +ve" |
164 | | -assert motorL.speed() > motorR.speed(), ( |
165 | | - "When driving Fwd in CW Curve, motorL should be greater than motorR" |
166 | | -) |
167 | | -delay(3000) # 4 seconds x 90 deg/s approx full circle |
168 | | -drive_base.stop() |
169 | | -delay(250) |
170 | | - |
171 | | -drive_base.drive(-200, 90) # Drives CW Rev |
172 | | -wait(STARTUP_DELAY_LONG) |
173 | | -assert motorL.speed() < 0, "When driving CCW Curve Rev, left speed should be -ve" |
174 | | -assert motorR.speed() < 0, "When driving CCW Curve Rev, right speed should be -ve" |
175 | | -assert motorR.speed() < motorL.speed(), ( |
176 | | - "When driving Rev in CCW Curve, motorR should be less than motorL" |
177 | | -) |
178 | | -delay(3000) # 4 seconds x 90 deg/s = full circle |
179 | | -drive_base.stop() |
180 | | -delay(250) |
181 | | - |
182 | | -drive_base.drive(200, -90) # Drives CCW Fwd |
183 | | -wait(STARTUP_DELAY_LONG) |
184 | | -assert motorL.speed() > 0, "When driving CCW Curve Fwd, left speed should be +ve" |
185 | | -assert motorR.speed() > 0, "When driving CCW Curve Fwd, right speed should be +ve" |
186 | | -assert motorL.speed() < motorR.speed(), ( |
187 | | - "When driving Fwd in CCW Curve, motorL should be less than motorR" |
188 | | -) |
189 | | -delay(3000) # 4 seconds x 90 deg/s = full circle |
190 | | -drive_base.stop() |
191 | | -delay(250) |
192 | | - |
193 | | -drive_base.drive(-200, -90) # In corrected version it should drive CW in Rev |
194 | | -wait(STARTUP_DELAY_LONG) |
195 | | -assert motorL.speed() < 0, "When driving CW Curve Rev, left speed should be +ve" |
196 | | -assert motorR.speed() < 0, "When driving CW Curve Rev, right speed should be +ve" |
197 | | -assert motorL.speed() < motorR.speed(), ( |
198 | | - "When driving Rev in CW Curve, motorL should be less than motorR" |
199 | | -) |
200 | | -delay(3000) # 4 seconds x 90 deg/s = full circle |
201 | | -drive_base.stop() |
202 | | -delay(250) |
0 commit comments