How to Control a Robot Kickoff 2011. Why, How, Where? Sense, think, act Robot, laptop, your brain...
-
Upload
jerome-sanders -
Category
Documents
-
view
219 -
download
0
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.
}}
}