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

Upload: jerome-sanders

Post on 02-Jan-2016

220 views

Category:

Documents


0 download

TRANSCRIPT

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.

}}

}