# Lab 2.6: Moving the Robot

## Moving the Lego Robot

### Goals

In this lab, we will learn the following computer science concepts:

• Accessing the Quorum Standard Library
• Creating Objects and Calling Actions on Objects

### Computer Science Principles Curriculum

• Big Idea: Creativity: EU 1.2, LO 1.2.1, EK 1.2.1A, EK 1.2.1B, EU 1.3, LO 1.3.1, EK 1.3.1E
• Big Idea: Programming: EU 5.1, LO 5.1.1, EK 5.1.1A, EK 5.1.1C

### Common Core Standards

• English Language Arts Standards » Science & Technical Subjects: CCSS.ELA-Literacy.RST.9-10.2, CCSS.ELA-Literacy.RST.9-10.3, CCSS.ELA-Literacy.RST.9-10.4, CCSS.ELA-Literacy.RST.9-10.5, CCSS.ELA-Literacy.RST.9-10.7, CCSS.ELA-Literacy.RST.9-10.10, CCSS.ELA-Literacy.RST.11-12.2, CCSS.ELA-Literacy.RST.11-12.3, CCSS.ELA-Literacy.RST.11-12.4, CCSS.ELA-Literacy.RST.11-12.5
• Standards For Mathmatical Practice: CCSS.Math.Practice.MP1, CCSS.Math.Practice.MP2, CCSS.Math.Practice.MP4, CCSS.Math.Practice.MP5, CCSS.Math.Practice.MP6, CCSS.Math.Practice.MP7, CCSS.Math.Practice.MP8

### Vocabulary

• Library
• Object
• Instantiation
• Action Call
• Parameters
• Parameter Passing
• Robot
• Motor
• Brick
• Port

## Overview

This lab demonstrates the use of the`Lego` library in Quorum. The `Lego` library can be used to control every part of the robot but in this lab we’re going to use just the motor part. You will write a program that moves forward the robot and rotate the robot 360 degrees while the third motor not connected to the wheels will keep working the whole time. Before you start with the programming part you need to build the robot, in all the lessons we use the EV3MEG, you can find the tutorial on "Lego website". If you never worked with robots or if you don't remember how it works you should read this tutorial before start:

### Goal 1: Accessing the Quorum Standard Library

You will start by creating a new blank Robot project. Name the project Lab2_6. Open the main.quorum file in the editor.

This assignment makes use of the Quorum `Motor` Library in the Quorum `Lego` Library. You will need to type code at the beginning of the main.quorum file that lets Quorum know you want to use this library. Begin by typing the appropriate code to use the Quorum `Lego` Library in your project. The `Lego` Library is called `Libraries.Robots.Lego`. To use the `Motor` Library inside the `Lego` Library you add .Motor add the end.

Example: Tell Quorum we want access to `Motor`.

``````// this line tells Quorum to use the Motor library
use Libraries.Robots.Lego.Motor``````

You must include a statement like this at the top of the file every time you want to use a Quorum library.

### Goal 2: Creating Objects and Calling Actions on Objects

To be able to call actions that are in the `Motor` library, instantiate a new `Motor` object, calling it `motorControl`.

Example: Instantiate a `Motor` object.

``````// this line creates (instantiates) a new Motor object called motor
Motor motorControl``````

Now you can call actions to send commands to the motors. To do that you will use the `RotateByDegrees` command that has two parameters, the name of the motor you want to activate and the number of degrees you want to rotate the motor. After you send a movement command to a motor you should use the `Wait` command after to allow the motor time to complete its action before the next action begins.

## Large Motors

We will start with the large motors, which are most frequently used for moving the wheels. For these examples we have the right motor plugged into port "B" and the left motor plugged into port "C." This simple example code will move the robot forward 5 turns and then move it backward 5 turns.

### Example: Moving the Robot Forward and Backward

``````// We use our motorControl object to issue instructions to the motor
//First, set the speed of the motor as a number between 0 and 100, which represents the
//percentage of power applied to the motor. If your robot is
//low on power, or doing too many other things, speed may be affected.
motorControl:SetSpeed("B", 50)
motorControl:SetSpeed("C", 50)
//Next, tell the motors to move forward using degrees.
//Use a variable to represent one full revolution of 360 degrees.
integer turn = 360
motorControl:RotateByDegrees("B", turn * 5)
motorControl:RotateByDegrees("C", turn * 5)
//After a motor instruction, you must also tell Quorum to wait to complete the movement.
motorControl:Wait("B")
motorControl:Wait("C")
``````

Activity: Move the robot backward

Expand the program you started to move the robot back to its starting position.

(Hint: a positive number moved the motors forward.)

#### Small Motor

We can use the small motor with the same basic commands. For this example, the small motor is in port "A". Our robot is configured to raise and lower an arm, but the basic code concept will work on other robot builds.

``````// First set the speed of the motor
motorControl:SetSpeed("A", 50)
// Move the small motor 90 degrees (one quarter turn)
motorControl:RotateByDegrees("A", 90)
motorControl:Wait("A") ``````

Activity: Move the small motor on your own

Experiment with ways to move your motor by changing speeds, degrees, and executing several commands in a row. For example, raise and then lower an arm, or open or close pincers, if that is how your robot is built.

## Next Tutorial

In the next tutorial, we will discuss Assignment 2.1, which describes how work Ramp Experiment and Implicit Type Casting in Quorum..