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

21
How to Control a Robot Kickoff 2011

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

Page 1: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

How to Control a Robot

Kickoff 2011

Page 2: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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

Page 3: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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

Page 4: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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

Page 5: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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);

}

Page 6: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

More Avoiding Obstacles

External Sensors

Robot’s Actions

Robot’s Software

Page 7: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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

Page 8: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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

Page 9: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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);

Page 10: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

More Tank Drive

External Sensors

Robot’s Actions

Robot’s Software

Human Senses

Drivers Brain

User Interface

Page 11: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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);

Page 12: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

More Objects

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

• Field or Property: variableName.member

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

Page 13: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

Robotic Objects

• Declare Objects here

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

//More code

Page 14: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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;

Page 15: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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]

Page 16: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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

Page 17: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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

Page 18: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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++;

}

Page 19: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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);

}

Page 20: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

Loopsinitializewhile (condition) {bodypostBody

}

for (initialize; condition; postbody) {body

}

Page 21: How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain GameRobot Human Game State Score External Sensors Internal.

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.

}}

}