How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain...

Post on 02-Jan-2016

219 views 0 download

Transcript of How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain...

How to Control a Robot

Kickoff 2011

Why, How, Where?

• Sense, think, act• Robot, laptop,

your brainGame Robot Human

Game State

Score

External Sensors

Internal Sensors

Robot’s Actions

Robot’s Software

Human Senses

Drivers Brain

User Interface

Moving in a Circlepublic void UserControlledCode() { while (true) { if (robot.isAutonomous == false) { lock (studentLock) { if (true) { //Ignore

leftMotor.motorSpeed = 100; rightMotor.motorSpeed = -50;}

Robot’s Actions

Robot’s Software

Types and Variables

• Declare : double x;• Assign : x = 3.5;• Use : int y = x;

z = 8 - y + x;x = x + y;

• = is assignment (not equals)• C#: Value type vs. Reference type• C# is case sensitive

Avoiding Obstacles

Button = new InputPort((Cpu.Pin)FEZ_Pin.Digital.IO4, true, Port.ResistorMode.PullUp);

if (Button.Read()) { leftMotor.motorSpeed = -60; rightMotor.motorSpeed = -30; Thread.Sleep(1000);

}

More Avoiding Obstacles

External Sensors

Robot’s Actions

Robot’s Software

Program Flow• Decision• Consequences

Should I fire the balls?

True

Fire the Balls

More Code

Code

False

Should I fire the balls?

True

Fire the Balls

More Code

Code

False

Reload the Shooter

Program Flow

if (isFiring) {shooter.shoot()}

if (isFiring) {shooter.shoot()} else {shooter.reload()}

if (condition1) {consequent1} else if (condition2) {cosequent2}else {alternative}

• Use to change behavior depending on input

Tank Drive

//-100<=motorSpeed<=100//0<=Joystick values<=255leftMotor.motorSpeed = ((double)(robot.UIAnalogVals[1] - 128) * 100 / (double)128);

rightMotor.motorSpeed = ((double)(robot.UIAnalogVals[3] - 128) * 100 / (double)128);

More Tank Drive

External Sensors

Robot’s Actions

Robot’s Software

Human Senses

Drivers Brain

User Interface

Using Objects

Cat john = new Cat(10);int johnsMass = john.Eat(5);john.Purr();john.name = "Johnny";john.name = "John";Console.WriteLine(john.name);Console.WriteLine(johnsMass);

More Objects

• To create: new Type(arguments, ...);

• Field or Property: variableName.member

• Methods: variableName.member(argument,...)

Robotic Objects

• Declare Objects here

public class StudentCode { // Variables private Robot robot; private SimpleMotorController rightMotor; private InputPort Button;

//More code

More Robotic Objects

• Instantiate Objects here

public StudentCode(Robot robot) { Button = new InputPort((Cpu.Pin)FEZ_Pin.Digital.IO4, true, Port.ResistorMode.PullUp);

leftMotor = new SimpleMotorController(robot, "COM1", 13);

rightMotor.motorBrake = 0;

Arrays

• To Create: int[] myArray = new int[5];

• To access elements: variableName[index];

• Size: myArray.Length• myArray[0] = 12;• Arrays are 0 indexed

12

-34

7

0

3

myArray[]

myArray[0]

myArray[1]

myArray[2]

myArray[3]

myArray[4]

Relational and Equality Operators

Equality x == y

Inequality x != y

Less than x < y

Less than or equal to

x <= y

Greater than x > y

Greater than or equal to

x >= y

• Turn numbers into booleans

Boolean Operators

Exercise:

(!(12-3 > 8) && (3*5 == 15)) || ( !(17 < 18) || true)

if ( (time <= 30)  &&  !(mode == 2) ){    driveForward();}

And true && true

Or true || false

Not !true

Tracing a Polygon

int i = 0;while (i < 5) { leftMotor.motorSpeed = 50; rightMotor.motorSpeed = 50; Thread.Sleep(1000); leftMotor.motorSpeed = -50; Thread.Sleep(500);i++;

}

Tracing a Polygon

for (int i = 0; i < 5; i++) { leftMotor.motorSpeed = 50; rightMotor.motorSpeed = 50; Thread.Sleep(1000); leftMotor.motorSpeed = -50; Thread.Sleep(500);

}

Loopsinitializewhile (condition) {bodypostBody

}

for (initialize; condition; postbody) {body

}

User Controlled Codepublic void UserControlledCode() { if (robot.isAutonomous == false) { lock (studentLock) {

//All code for the teleoperated period goes here. It is in an infinite while loop so it is continuously executed.

}}

}