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 Sensors Robot’s Actions Robot’s Software Human Senses Drivers Brain User Interface
Moving in a Circle public 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: i nt 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.Digi tal.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? Fire the Balls More Code Code Should I fire the balls? Fire the Balls More Code Code Reload the Shooter
Program Flow 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<=255 leftMotor.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 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); }
Loops initialize while (condition) { body postBody } for (initialize; condition; postbody) { body }
User Controlled Code public 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. }