diff --git a/docs/coding.md b/docs/coding.md index 4842258d..a81b0898 100644 --- a/docs/coding.md +++ b/docs/coding.md @@ -7,7 +7,7 @@ [ { "name": "Autonomous Parking", - "description": "TBD", + "description": "Design cars that can park by themselves", "url":"/coding/autonomous-parking", "imageUrl": "/static/lessons/autonomous-parking.png", "cardType": "side" diff --git a/docs/coding/autonomous-parking.md b/docs/coding/autonomous-parking.md new file mode 100644 index 00000000..f715207d --- /dev/null +++ b/docs/coding/autonomous-parking.md @@ -0,0 +1,172 @@ +# Autonomous Parking + +Design cars that can park themselves safely without driver intervention. + +![Autonomous parking graphic](/static/coding/autonomous-parking/auto-parking-connect.jpg) + +## Connect + +**Think about:** + +* How do autonomous cars work? +* What would it take to ensure that autonomous cars are safe? +* What types of movements do autonomous cars need to perform? + +## Construct + +### Build + +Build a LEGO MINDSTORMS vehicle that can park itself safely without driver intervention. +Start by constructing this [model](https://le-www-live-s.legocdn.com/sc/media/lessons/mindstorms-ev3/building-instructions/ev3-rem-driving-base-79bebfc16bd491186ea9c9069842155e.pdf). + +![EV3- Robot Driving Base](/static/coding/autonomous-parking/ev3-robot-driving-base.jpg) + +### Checks + +Before you program, check: + +* Are all the wires correctly connected from the motors to ports B and C? +* Are the wheels correctly installed? +* Are the wheels rotating freely? + +### Program + +Write a program that will make the robot turn three times in various ways. + +**Think about:** + +* How will you make the robot turn in different ways? +* How can the robot make a three point turn? + +### ~hint + +Consider using these blocks in your solution: + +```block +motors.largeBC.tank(50, 50) +pause(500) +``` + +### ~ + +### Sample Solution - Three Point Turn + +1. When the brick button is pressed, turn the driving base right and stop after 1.5 seconds. +2. Turn the driving base left and stop after 1 second. +3. Move the driving base forward for 3 seconds. + +```blocks +brick.buttonEnter.onEvent(ButtonEvent.Pressed, function () { + motors.largeBC.tank(75, 30) + loops.pause(1500) + motors.largeBC.tank(-30, -75) + loops.pause(1000) + motors.largeBC.tank(50, 50) + loops.pause(3000) +}) +``` +### Download and test + +Click Download and follow the instructions to get your code onto your EV3 Brick. Press the center button on the EV3 Brick to run the program. + +## Contemplate + +Choose one of the following autonomous driving scenarios and create a program for it: + +* Parallel parking +* Angle parking +* Perpendicular parking + +### ~hint + +Document pseudocode for your program before choosing programming blocks. + +### ~ + +### Sample Solution - Parallel Parking + +1. When the brick button is pressed, drive forward in a straight line for 3 rotations. +2. Wait for 1 second. +3. Reverse motor rotation while turning for 1.5 rotations. +4. Reverse motor rotation while turning the other way for 1.5 rotations. +5. Drive backward in a straight line for 0.5 rotations. +6. Drive forward in a straight line for 0.5 rotations. + +```blocks +brick.buttonEnter.onEvent(ButtonEvent.Pressed, function () { + motors.largeBC.steer(0, 50, 3, MoveUnit.Rotations) + pause(1000) +motors.largeBC.steer(-50, -50, 1.5, MoveUnit.Rotations) + motors.largeBC.steer(50, -50, 1.5, MoveUnit.Rotations) + motors.largeBC.steer(0, -50, 0.5, MoveUnit.Rotations) + motors.largeBC.steer(0, 50, 0.5, MoveUnit.Rotations) +}) +``` + +### Download and test + +Click Download and follow the instructions to get your code onto your EV3 Brick. Press the center button on the EV3 Brick to run the program. + +### Differentiation + +Create a program that simulates displaying appropriate warning lights while parking. + +### ~hint + +Consider using this block in your solution: + +```block +brick.setStatusLight(StatusLight.OrangeFlash) +``` + +### ~ + +### Sample Solution - Simulating Reverse Gear and Reverse Warning Lights + +1. When the brick button is pressed, drive forward in a straight line for 3 rotations. +2. Wait for 1 second. +3. Set brick status light to orange flash. +4. Reverse motor rotation while turning for 1.5 rotations. +5. Reverse motor rotation while turning the other way for 1.5 rotations. +6. Drive backward in a straight line for 0.5 rotations. +7. Set brick status light to off. +8. Drive forward in a straight line for 0.5 rotations. + +```blocks +brick.buttonEnter.onEvent(ButtonEvent.Pressed, function () { + motors.largeBC.steer(0, 50, 3, MoveUnit.Rotations) + pause(1000) + brick.setStatusLight(StatusLight.OrangeFlash) + motors.largeBC.steer(-50, -50, 1.5, MoveUnit.Rotations) + motors.largeBC.steer(50, -50, 1.5, MoveUnit.Rotations) + motors.largeBC.steer(0, -50, 0.5, MoveUnit.Rotations) + brick.setStatusLight(StatusLight.Off) + motors.largeBC.steer(0, 50, 0.5, MoveUnit.Rotations) +}) +``` + +### Download and test + +Click Download and follow the instructions to get your code onto your EV3 Brick. Press the center button on the EV3 Brick to run the program. + +### Share + +**Think about:** + +* What challenged you? +* Were there any surprises? +* How can you improve your program? +* Can your program be more streamlined? Have you used too many blocks? +* Is there a more efficient way to build your program? +* How can your program be used in real-world scenarios? + + +## Continue + +* Click on the JavaScript tab and experiment with changing the values in the code. +* Add a custom image or sounds from the Brick or Music menus. +* Create a video of your project, especially your final presentation and your robot’s performance. Explain some important features of your software program. +* Include an image of your program with comments. +* Add a team photograph! + +Congratulations! What will you design next? diff --git a/docs/static/coding/autonomous-parking/auto-parking-connect.jpg b/docs/static/coding/autonomous-parking/auto-parking-connect.jpg new file mode 100644 index 00000000..57a915ee Binary files /dev/null and b/docs/static/coding/autonomous-parking/auto-parking-connect.jpg differ diff --git a/docs/static/coding/autonomous-parking/ev3-robot-driving-base.jpg b/docs/static/coding/autonomous-parking/ev3-robot-driving-base.jpg new file mode 100644 index 00000000..ca6ce5f4 Binary files /dev/null and b/docs/static/coding/autonomous-parking/ev3-robot-driving-base.jpg differ