Presentation is loading. Please wait.

Presentation is loading. Please wait.

2010 Control Systems All we are saying… …is give C a chance! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Radnor PA, Dec. 2010.

Similar presentations


Presentation on theme: "2010 Control Systems All we are saying… …is give C a chance! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Radnor PA, Dec. 2010."— Presentation transcript:

1 2010 Control Systems All we are saying… …is give C a chance! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Radnor PA, Dec. 2010

2 Development Cycle Joy Pain  Time – Lots Of It! A brief moment of optimism usually followed by a crushing downfall! Warning: DO NOT BE FOOLED!

3 Big Al says…

4 Goals Get you to the other room if you want to learn Labview. Get a good understanding of what the new control system can and cannot do. Get a good understanding of how to program in C++ –Be able to create your own classes to allow multiple threads for development. Get a good understanding of Wind River. –How to edit, debug and load new code via Flash or FTP to the robot. Learn how to get autonomous working

5 How will we do it? Discuss C++ –No rat holing on C++ theory. –Too much for this venue –Exchange cards, get phone numbers and email Review online resources –Forums, Wiki, bla bla Review beta code to explore possibilities –Get many flavors of the same thing. –Touches many of the approaches available to you –See how other accomplished –Shamelessly steal their stuff. Hands On –Play utill it is time to leave.

6 Control System Overview CompactRIO WiFi Bridge Speed Controller Speed Controller Spike Relay Digital Sensor Analog Sensor Digital Side Car Analog Bumper Solenoid Pneumatics Bumper

7 Software Overview The WPI Robotics Libraries Sensors –Accelerometer, Encoder, Gear Tooth, Gyro, Compass, I2C, Ultrasonic Actuators –Compressor, Motor (Victor, Jaguar), Relay, Servo, Solenoid I/O –Analog Channel, Analog Trigger, Digital Input, Digital Output, PWM Driver Station –Joystick (Complete set of Axes and Buttons), Analog Input, Digital Input, Digital Output, Driver Display, Mode, Alliance, Battery Voltage, Dashboard Utility –Counter, PID, Drive (Tank, Arcade, Holonomic), Time, cRIO LED, cRIO Temperature Vision –Camera, Tracking, Image Processing

8 Modes Of Operation Disabled Mode: Before a match begins, robot outputs (motors) are not active. Robots can be programmed to initialize. Driver controls are active. Autonomous Mode: During the first 15 seconds of a match, driver inputs (joysticks) are not active. Robots can be programmed to use outputs (motors) and sensor inputs (encoders, gyros) for autonomous operation. Teleoperated Mode: During the remaining 120 seconds of a match, all inputs and outputs are active. Robots are programmed for driver control.

9 Program Philosophy The Big Loop ReadDriverStation() Process Data RobotThink() WriteOutputs() ReadSensors() If (autonomous) doAuto()

10 C++ Software Development Cycle –Create Source Code Type ideas into files Multiple authors of different components –Compile and Link program Compile – Read source code for each file, create object.obj for it. Linker - combine each object into and executable file. –Download Executable to RAM –Run and Debug LabVIEW Input/Output Available on vi Front Panel C++ WindRiver Debugger C++ Output Available in Console –Download Debugged Executable to Flash –Reboot cRIO Power Cycle or CTRL-X in Terminal –Run

11 Quick Tour of C++ File extensions end in.cpp and.h C++ can use classes –Bundle all of a things, things into a single thing. Example: a joystick has, X, Y & Z variables and many buttons. Joystick->GetX(); –You can get to those “things” if they are public or they can be private. You then use methods to set values, get values. start processes, stop processes etc. compressor->start(); C++ uses static constants and functions which must be referred back to the original class they were part of. In C++: LCRobots::MacLeftMotor 3 Requirements to use variables –Define Servo *my_servo; –Initialize my_servo = new Servo(5); –Use my_servo->Set( my_leftStick->GetZ() );

12 C++ Pointers vs Local Declarations –Pointers – References to things in memory Possibly looks cleaner How most examples are being done. –Declarations – The things in memory No need for pointers but a little more complicated –Why do I care? You will see code described both ways. Do not be afraid embrace them. Declaration Section: class IterativeDemo : public IterativeRobot { // Declare variable for the robot drive system Servo *p_servo; } Note: * means this is a pointer! Initialization Section: IterativeDemo(void) { printf("IterativeDemo Constructor Started\n"); p_servo = new Servo(5); } Usage: p_servo->Set(.50); p_servo->Set(p_leftStick->GetZ());

13 Declared Example Declaration Section: class IterativeDemo : public IterativeRobot { // Declare variable for the robot drive system Servo m_servo; Joystick m_leftStick; Joystick m_RightStick; Joystick m_OperatorStick; } Initialization Section: IterativeDemo(void) : m_servo(5), m_leftStick(), m_rightStick(), m_operatorStick() { } Usage: m_servo.Set( leftStick.GetZ() ); How do I keep it all straight? –Liberal use of variable prefixes can help. p_servo, p_leftJoystick; = pointers i_count= integer (not a pointer) ip_speed = integer pointer (may never see this). f_motorPower = floating point variable m_stuff = member variable (used in many beta examples) –This should scare you….. p_servo.Set(5);

14 Death By Pointer Which is correct? IterativeDemo(void){ printf("IterativeDemo Constructor Started\n"); my.p_servo->set(0.0); my.p_servo = new Servo(5); }; What happens if you do it wrong? –It will compile –The DS will show Ok –It will not run. –“Slow Blinking LED of Doom!”

15 Death By Pointer Startup of program on cRIO Exception current instruction address: 0x012eb5c8 Machine Status Register: 0x0000b032 Data Access Register: 0x537fb81b Condition Register: 0x20000048 Data storage interrupt Register: 0x40000000 Task: 0x1307e98 "FRCRobotTask" 0x1307e98 (FRCRobotTask): task 0x1307e98 has had a failure and has been stopped. 0x1307e98 (FRCRobotTask): fatal kernel task-level exception! Welcome to LabVIEW Real-Time 8.5.1 Indicator Mode changed... Slow Blink Driver Station shows correctly Do not panic over the slow blink of death! –May be a pointer issue. Do a code review looking for illegal use of pointers. p_servo.Set(0.0); // p_ indicates pointer!!! p_servo->Set(0.0); // correct

16 Good Boot Up Startup of program on cRIO Resync command from DS... Enabled! Booting watchdog! Indicator Mode changed... Steady On WPILib was compiled from SVN revision 1330:1345 Spawned FRCRobotTask (0x12f7b70) RobotIterativeBase Constructor Start RobotIterativeBase Constructor Finish IterativeDemo Constructor Started IterativeDemo Constructor Completed RobotIterativeBase StartCompetition() Commenced Teleop_Init() completed Welcome to LabVIEW Real-Time 8.5.1

17 Discoveries Floating point power ranges –Stated as range is -1.0 to 1.0 with 0.0 being stop. Declare: Victor p_LeftMotor;// pointer Initialize: p_LeftMotor=> new Victor(2); Use: p_LeftMotor->Set(0.0); // stop –Forward and Back are relative 2 motors side set to (1.0) are running at full power. But what direction? –All relative to the motors position. –Turn one around who is forward and who is back. –Joysticks Y axis Backwards to what you might think? Push forward get a value of -1.0. Pull back get 1.0 –Easy to reverse motor in code. f_WinchPower =.50; p_RightWinch->Set(f_WinchPower); p_LeftWinch->Set(-f_WinchPower);

18 Discoveries Simple math is your friend! Joystick “twist” comes in a GetZ() –Range 1.0 to -1.0 –What does this do? my.f_Power = ( (-my.p_LeftDriverStick->GetZ() / 2) + 0.5); Turns analog range of 1.0/ -1.0 to 0.0/1.0 Use excel to help figure out value ranges

19 Discoveries Using Wind River –Put all you variables into a structure. Then the intellisense works. typedef struct { Victor *p_FrontLeftMotor; Victor *p_FrontRightMotor; Victor *p_RearLeftMotor; Victor *p_RearRightMotor; Joystick *p_RightDriverStick; Joystick *p_LeftDriverStick; int i_FrontSonar; float f_FrontLeftMotor; float f_FrontRightMotor; float f_RearLeftMotor; float f_RearRightMotor; }struct_robotVars; struct_robotVars my;

20 Batch Files Use batch files to quickly change computer ethernet connection. –You must know what your connection is called.

21 netsh Command netsh – used to set network parameters Command: netsh /? To see parameters Example: Set interface to Crio Note: In the example above the netsh command is on the same line! @echo off echo Setting the Ip to CRIO network 10.2.72.6. netsh interface ip set address name="Local Area Connection" static 10.2.72.6 255.0.0.0 pause

22 Many batches Set to camera Set to DHCP Note: All the above commands are set on the same batch line. netsh interface ip set address name="Local Area Connection" dhcp netsh interface ip set address name="Local Area Connection" static 10.2.72.3 255.0.0.0

23 Final Thought Unlike baseball crying is allowed in software development… but … …when your done, get back and make it work!


Download ppt "2010 Control Systems All we are saying… …is give C a chance! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Radnor PA, Dec. 2010."

Similar presentations


Ads by Google