Drive Control Q&A Review¶
Purpose: Test your understanding of VEX V5 drive control concepts How to Use: Answer each question, then check your answers in the Answer Key at the end Total Questions: 70
Section 1: Controller Basics (15 Questions)¶
Conceptual Questions¶
Q1. What range of values can axis3.position() return?
Q2. Which axis number corresponds to the LEFT joystick's up-down movement?
Q3. Which axis number corresponds to the RIGHT joystick's up-down movement?
Q4. What does the constant FORWARD mean in motor.spin(FORWARD, 50, PERCENT)?
Q5. What does MSEC stand for, and how many milliseconds are in 1 second?
Q6. A joystick at rest shows value 3 instead of 0. What is this called, and why does it happen?
Q7. What value does axis3 return when the left joystick is pushed all the way UP?
Q8. What value does axis3 return when the left joystick is pushed all the way DOWN?
Q9. What does PERCENT mean when used with motor speed?
Q10. In wait(20, MSEC), how many times per second does the loop run?
Code Tracing Questions¶
Q11. What direction will the motor spin?
Q12. What is the output of this code if the joystick returns 75?
Q13. If axis4.position() returns -30, which direction is the left joystick pushed?
Q14. What does "normalized" mean in the context of joystick values?
Q15. Calculate: What is |−75|? (absolute value)
Section 2: Tank Drive (15 Questions)¶
Conceptual Questions¶
Q16. In tank drive, which joystick controls the RIGHT motors?
Q17. In tank drive, which joystick controls the LEFT motors?
Q18. How do you make a robot spin LEFT in place using tank drive?
Q19. How do you make a robot spin RIGHT in place using tank drive?
Q20. What happens if you push both sticks UP equally in tank drive?
Q21. What happens if you push both sticks DOWN equally in tank drive?
Q22. What is deadband and why is it needed?
Q23. Name TWO advantages of tank drive.
Q24. Name TWO disadvantages of tank drive.
Q25. Why is there a wait(20, MSEC) at the end of the drive loop?
Code Tracing Questions¶
Q26. Trace: What does deadband(4, threshold=5) return?
Q27. Trace: What does deadband(-50, threshold=5) return?
Q28. Trace: What does deadband(5, threshold=5) return?
Q29. In this code, what happens when axis3 = 100 and axis2 = -100?
left_speed = controller.axis3.position() # 100
right_speed = controller.axis2.position() # -100
left_motors.spin(FORWARD, left_speed, PERCENT)
right_motors.spin(FORWARD, right_speed, PERCENT)
Q30. What movement pattern results when axis3 = 80 and axis2 = 40?
Section 3: Arcade Drive (15 Questions)¶
Conceptual Questions¶
Q31. In arcade drive, which joystick controls EVERYTHING?
Q32. In arcade drive, what does the Y-axis (axis3) control?
Q33. In arcade drive, what does the X-axis (axis4) control?
Q34. Write the arcade mixing formula for LEFT motor speed.
Q35. Write the arcade mixing formula for RIGHT motor speed.
Q36. Why is the turn value SUBTRACTED for the right motor?
Q37. What is clamping and why is it needed in arcade drive?
Q38. How do you drive STRAIGHT FORWARD in arcade drive?
Q39. How do you SPIN IN PLACE to the right with arcade drive?
Q40. Name TWO advantages of arcade drive over tank drive.
Calculation Questions¶
Q41. Calculate: forward=80, turn=0. What are the left and right motor speeds?
Q42. Calculate: forward=0, turn=50. What are the left and right motor speeds?
Q43. Calculate: forward=60, turn=30. What are the left and right motor speeds?
Q44. Calculate: forward=80, turn=50. What are the motor speeds BEFORE clamping?
Q45. Calculate: forward=80, turn=50. What are the motor speeds AFTER clamping?
Code Tracing Questions¶
Q46. Code trace: What is max(-100, min(100, 130))?
Q47. Code trace: What is max(-100, min(100, -150))?
Q48. Code trace: What is max(-100, min(100, 75))?
Q49. In this scenario, which direction does the robot curve?
Q50. What happens if you set forward=100 and turn=100 without clamping?
Section 4: Driver Practice & Tuning (15 Questions)¶
Conceptual Questions¶
Q51. What is curve_input() used for?
Q52. What does "normalized" mean in the curve_input formula?
Q53. Why do we preserve the sign separately in curve_input()?
Q54. What exponent gives LINEAR response (no curve)?
Q55. Which exponent gives MORE precision at low speeds: 2 or 3?
Q56. Name the four practice patterns covered in the tutorial.
Q57. What should you check BEFORE every match?
Q58. In Push Back, how many points for BOTH robots parked?
Q59. In Push Back, how many points for ONE robot parked?
Q60. What is the recommended cone spacing for the slalom pattern?
Code Tracing Questions (Step-by-Step)¶
Q61. Trace curve_input(50, exponent=2) step by step:
- Step 1: What is sign?
- Step 2: What is normalized?
- Step 3: What is curved?
- Step 4: What is the final return value?
Q62. Trace curve_input(-40, exponent=2) step by step:
- Step 1: What is sign?
- Step 2: What is normalized?
- Step 3: What is curved?
- Step 4: What is the final return value?
Q63. Trace curve_input(100, exponent=2):
- What is the final return value?
Q64. With exponent=2, what is the output for input=25?
Q65. With exponent=3, what is the output for input=50?
Section 5: Competition Application (10 Questions)¶
Decision-Making Questions¶
Q66. You're defending your zone. Tank or arcade? Why?
Q67. You're a new driver learning to score. Tank or arcade? Why?
Q68. The clock shows 0:10 remaining. What should you prioritize?
Q69. Your joystick drifts at value 8. What deadband threshold should you use?
Q70. Your robot is too sensitive at low speeds. What should you adjust?
Quick Reference Tables¶
Drive Mode Selection¶
| Situation | Recommended Mode | Reason |
|---|---|---|
| Defense | Tank | Precise pivot turns |
| Scoring | Either | Driver preference |
| New driver | Arcade | Easier to learn |
| Skills run | Tank | Maximum control |
| Button-heavy tasks | Arcade | Free hand available |
Axis Reference¶
| Axis | Stick | Direction | Common Use |
|---|---|---|---|
| axis1 | Right | Left/Right | Not used in basic drive |
| axis2 | Right | Up/Down | Tank: right motors |
| axis3 | Left | Up/Down | Both modes: forward/back |
| axis4 | Left | Left/Right | Arcade: turning |
Curve Input Reference¶
| Input | Exponent 1.0 | Exponent 2.0 | Exponent 3.0 |
|---|---|---|---|
| 25% | 25% | 6.25% | 1.56% |
| 50% | 50% | 25% | 12.5% |
| 75% | 75% | 56.25% | 42.19% |
| 100% | 100% | 100% | 100% |
Answer Key¶
Section 1: Controller Basics¶
A1. Numbers from -100 to +100. Full up = +100, full down = -100, center = 0.
A2. axis3
A3. axis2
A4. FORWARD is a direction reference, NOT a command. When speed is positive, motor spins forward. When speed is negative, motor spins backward. It means "follow the sign of the number."
A5. MSEC = milliseconds. 1000 milliseconds = 1 second.
A6. This is called "joystick drift." It happens because: - Springs inside wear out over time - Manufacturing tolerance variations - Temperature affects sensors This is why we use deadband to ignore small values.
A7. +100
A8. -100
A9. PERCENT means "out of 100" - it's the unit for motor speed. 100 PERCENT = maximum speed, 50 PERCENT = half speed.
A10. 50 times per second. (1000 ms ÷ 20 ms = 50 Hz)
A11. The motor spins BACKWARD at 50% speed. FORWARD with a negative number reverses direction.
A12. It prints: 75
A13. LEFT. Negative X-axis values mean the stick is pushed left.
A14. Converting a value to the 0-1 range by dividing by the maximum. Example: 50/100 = 0.5 normalized.
A15. 75. Absolute value removes the negative sign.
Section 2: Tank Drive¶
A16. The RIGHT joystick (axis2)
A17. The LEFT joystick (axis3)
A18. Push left stick DOWN and right stick UP. - Left motors: backward (-100) - Right motors: forward (+100) - Robot pivots counter-clockwise (left)
A19. Push left stick UP and right stick DOWN. - Left motors: forward (+100) - Right motors: backward (-100) - Robot pivots clockwise (right)
A20. The robot drives FORWARD in a straight line. Both sides receive equal positive speed.
A21. The robot drives BACKWARD in a straight line. Both sides receive equal negative speed.
A22. Deadband is a zone around zero where small joystick values are ignored (treated as 0). Why needed: - Joysticks are never perfectly centered - Without deadband, motors creep slowly when untouched - Typical threshold: 5 (values -5 to +5 become 0)
A23. Any two of: - Precise turning (independent control of each side) - Simple to understand (one stick = one side) - Easy to code (just read two axes) - Good for pivot turns
A24. Any two of: - Requires both hands (can't drive one-handed) - Harder to drive smooth curves - Can be jerky (small stick differences cause wobble)
A25. Two reasons: 1. Prevents CPU overload (brain can do other tasks) 2. 20ms = 50 updates/second, which is smooth enough Without wait, loop runs thousands of times per second, wasting power.
A26. Returns 0. Trace: Is |4| < 5? Is 4 < 5? YES. Return 0.
A27. Returns -50. Trace: Is |-50| < 5? Is 50 < 5? NO. Return original: -50.
A28. Returns 5. Trace: Is |5| < 5? Is 5 < 5? NO (5 equals 5, not less than). Return original: 5.
A29. Robot spins RIGHT in place. - Left motors: forward at 100% - Right motors: backward at 100%
A30. Arc turn to the RIGHT. - Left side moves faster (80%) - Right side moves slower (40%) - Robot curves right while moving forward
Section 3: Arcade Drive¶
A31. The LEFT joystick only (axis3 for Y, axis4 for X)
A32. Forward/backward movement
A33. Turning left/right
A34. Left Motor Speed = Forward + Turn
A35. Right Motor Speed = Forward - Turn
A36. To make the robot turn in the correct direction! When turning right (turn = +50): - Left motor = forward + 50 (goes faster) - Right motor = forward - 50 (goes slower) - Left faster than right = robot curves RIGHT
A37. Clamping limits values to a valid range (-100 to +100). Why needed: - When forward AND turn are both high, they can add up past 100 - Example: 80 + 50 = 130 (invalid!) - Motors can only accept -100 to +100
A38. Push joystick straight UP (Y-axis only, no X). When turn = 0: Left = forward + 0, Right = forward - 0, both equal.
A39. Push joystick RIGHT only (X-axis, no Y). turn = 100, forward = 0: - Left = 0 + 100 = 100 - Right = 0 - 100 = -100 - Left forward, right backward = spin right
A40. Any two of: - Smoother curves (easier to control arcs) - One stick = easier to learn - One-handed operation (free hand for buttons) - More intuitive for video game players
A41. Left = 80 + 0 = 80, Right = 80 - 0 = 80. Robot goes straight forward.
A42. Left = 0 + 50 = 50, Right = 0 - 50 = -50. Robot spins right in place.
A43. Left = 60 + 30 = 90, Right = 60 - 30 = 30. Robot curves right.
A44. Left = 80 + 50 = 130, Right = 80 - 50 = 30. (Before clamping)
A45. Left = 100 (clamped from 130), Right = 30. Robot curves right at different speeds.
A46. Returns 100. Trace: min(100, 130) = 100, then max(-100, 100) = 100.
A47. Returns -100. Trace: min(100, -150) = -150, then max(-100, -150) = -100.
A48. Returns 75. Trace: min(100, 75) = 75, then max(-100, 75) = 75. No clamping needed.
A49. Robot curves RIGHT. Left side (95) goes faster than right side (45).
A50. Left = 200, Right = 0. The value 200 is invalid for motors (max is 100). This would cause unpredictable behavior.
Section 4: Driver Practice & Tuning¶
A51. To give more precise control at low speeds. Small joystick movements produce even smaller motor outputs.
A52. Converting the absolute value to a 0-1 range by dividing by 100. normalized = abs(value) / 100.0
A53. Because exponents can mess up negative numbers! (-50)^2 = 2500 (positive - wrong!) We take abs() first, curve it, then restore the sign.
A54. exponent = 1.0. With x^1 = x, output equals input. No curve.
A55. exponent = 3 gives MORE precision. With exponent=2: 25% → 6.25% With exponent=3: 25% → 1.56% Higher exponent = more aggressive curve.
A56. 1. The Straight Line 2. The Square 3. The Figure-8 4. The Slalom
A57. 1. Controller battery level 2. Test all buttons work 3. Warm up your hands 4. Watch opponents' robots
A58. 30 points! (This is a huge bonus - always try to double-park!)
A59. 8 points
A60. 2 feet (60 cm) between cones
A61. Trace of curve_input(50, exponent=2):
- Step 1: sign = 1 (50 is positive)
- Step 2: normalized = 50/100 = 0.5
- Step 3: curved = (0.5)^2 × 100 = 0.25 × 100 = 25
- Step 4: return 1 × 25 = 25
A62. Trace of curve_input(-40, exponent=2):
- Step 1: sign = -1 (-40 is negative)
- Step 2: normalized = 40/100 = 0.4
- Step 3: curved = (0.4)^2 × 100 = 0.16 × 100 = 16
- Step 4: return -1 × 16 = -16
A63. Returns 100. 100/100 = 1.0, (1.0)^2 = 1.0, 1.0 × 100 = 100.
A64. 6.25% 25/100 = 0.25, (0.25)^2 = 0.0625, × 100 = 6.25
A65. 12.5% 50/100 = 0.5, (0.5)^3 = 0.125, × 100 = 12.5
Section 5: Competition Application¶
A66. TANK drive is better for defense. Reason: Pivot turns are faster and more controlled. You can spin rapidly in place to block opponents with independent stick control.
A67. ARCADE drive is better for beginners. Reasons: - Smoother curves (easier to approach goals) - One stick = easier to learn - Free hand for buttons if needed
A68. PARKING! - Stop scoring blocks - Drive directly to park zone - Coordinate with partner for double-park (30 pts!) - Stop moving before time ends
A69. Use threshold=10 or higher. The deadband must be larger than the drift value. 8 < 10, so values of 8 will become 0.
A70. Increase the curve exponent (e.g., from 2.0 to 2.5 or 3.0). Higher exponent = more aggressive curve = smaller outputs for small inputs.