How to Control a Robot

Preview:

DESCRIPTION

How to Control a Robot. Kickoff 2011. Why, How, Where?. Sense, think, act Robot, laptop, your brain. Game. Robot. Human. Internal Sensors. Game State. External Sensors. Robot’s Software. Robot’s Actions. Score. Human Senses. Drivers Brain. User Interface. Moving in a Circle. - PowerPoint PPT Presentation

Citation preview

How to Control a RobotKickoff 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 ObstaclesButton = 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 Flowif (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 ObjectsCat 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 herepublic class StudentCode { // Variables private Robot robot; private SimpleMotorController rightMotor; private InputPort Button;

//More code

More Robotic Objects• Instantiate Objects herepublic 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 && trueOr true || falseNot !true

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

}

Tracing a Polygonfor (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.

}}

}