Home

C/C++ Programming Guide for the FIRST Robotics Competition

image

Contents

1. Revision 0 5 28 December 2008 6 6 Controlling Pneumatics Compressor Compressor The Compressor class is designed to operate the FRC supplied compressor on the robot A Compressor object is constructed with 2 inputs e The Spike relay port that is controlling the power to the compressor A digital output or Solenoid module port alone doesn t supply enough current to operator the compressor e The Digital input that the pressure switch is connected to that is monitoring the accumulator pressure The Compressor class will automatically create a task that runs in the background twice a second and turns the compressor on or off based on the pressure switch value If the system pressure is above the high set point the compressor turns off If the pressure is below the low set point the compressor turns on To use the Compressor class create an instance of the Compressor object and start it This is typically done in the constructor for your Robot Program Once started it will continue to run on its own with no further programming necessary If you do have an application where the compressor should be turned off possibly during some particular phase of the game play you can stop and restart the compressor using the Start and Stop methods The compressor class will create instances of the DigitalInput and Relay objects internally to read the pressure switch and oper
2. Revision 0 5 28 December 2008 88 Advanced Programming Topics Check out the code as a project in the Workspace by leaving all the default options and clicking Finish If you are asked for a username and password it is your username for SourceForge Checking the Remember password box will make this easier since it will ask multiple times Getting the WPILib Source Code x Checkout from SVN Check Out As Select the method of check out and the revision to check out Choose how to check out folder WPILib Check out as a project in the workspace Project Name WPILib Check out HEAD revision Revision Depth Fully recursive C Ignore externals Allow unversioned obstructions Using the WPI Robotics Library souree code in your projects The sample projects provided by FIRST use a library file WPILib a and header files from the Workbench install If you intend to modify or debug the source copy of the library you just imported the project settings have to change to refer to that copy of the library instead Note Before doing these steps you must have built the WPILib project once so that the WPILib a target file has been generated Right click on the project name in the Project Explorer pane in Workbench and select Properties In the project properties window select Build Properties Here you can see all the options that Workbe
3. Gyro robotHeadingGyro 1 robotHeadingGyro is a variable that holds the Gyro object that represents a gyro module connected to analog port 1 That s all you have to do to make an instance of a Gyro object Note by the way an instance of an object is the chunk of memory that holds the data unique to that object When you create an object that memory is allocated and when you delete the object that memory is deallocated To get the current heading from the gyro you simply call the GetAngle method on the gyro object Calling the method is really just calling a function that works on the data specific to that gyro instance float heading robotHeadingGyro GetAngle This sets the variable heading to the current heading of the gyro connected to analog channel 1 Revision 0 5 28 December 2008 9 Getting Started Using objects Creating object instances There are several ways of creating object instances used throughout the WPI Robotics Library and all the examples Depending on how the object is created there are differences in how the object is referenced and deleted Here are the rules Local variable Victor leftMotor 3 leftMotor Set 1 0 Object is implicitly declared inside a deallocated when the block or function enclosing block is or inside another exited object Global declared Victor leftMotor 3 leftMotor Set 1 0 Object is not outside of any deallocated until the enclosing blocks program exits or function
4. optional parameters can adjust pan speed bool targetFound false while targetFound panForTarget servo 0 0 sinStart from 1 to 1 code to identify target Revision 0 5 28 December 2008 6 3 Controlling Motors RobotDrive RobotDrive The RobotDrive class is designed to simplify the operation of the drive motors based on a model of the drive train configuration The idea is to describe the layout of the motors Then the class can generate all the speed values to operate the motors for different situations For cases that fit the model it provides a significant simplification to standard driving code For more complex cases that aren t directly supported by the RobotDrive class it may be subclassed to add additional features or not used at all To use it create a RobotDrive object specifying the left and right motors on the robot RobotDrive drive 1 2 left right motors on ports 1 2 Or RobotDrive drive 1 2 3 4 four motor drive case This sets up the class for a 2 motor configuration or a 4 motor configuration There are additional methods that can be called to modify the behavior of the setup SetInvertedMotor kFrontLeftMotor This method sets the operation of the front left motor to be inverted This might be necessary depending on the gearing of your drive train Once set up there are methods that can help with driving the robot either from the Driver Station controls or through programmed op
5. Accelerometer The accelerometer typically provided in the kit of parts is a two axis accelerometer It can provide acceleration data in the X and Y axis relative to the circuit board In the WPI Robotics Library you treat it as two devices one for the X axis and the other for the Y axis This is to get better performance if your application only needs to use one axis The accelerometer can be used as a tilt sensor actually measuring the acceleration of gravity In this case turning the device on the side would indicate 1000 milliGs or one G Figure 3 FRC supplied 2 axis accelerometer board connected to a robot Revision 0 5 28 December 2008 42 Sensors Gyro Gyro Gyros typically supplied by FIRST in the kit of parts are provided by Analog Devices and are actually angular rate sensors The output voltage is proportional to the rate of rotation of the axis normal to the gyro chip top package surface The value is expressed in mV second degrees second or rotation expressed as a voltage By integrating summing the rate output over time the system can derive the relative heading of the robot Another important specification for the gyro is its full scale range Gyros with high full scale ranges can measure fast rotation without pinning the output The scale is much larger so faster rotation rates can be read but there is less resolution since a much larger range of values is spread over the same number of bits of digital
6. S FIRST C C Programming Guide for the FIRST Robotics Competition Worcester Polytechnic Institute Robotics Resource Center Rev 0 5 December 28 2008 Brad Miller Ken Streeter Beth Finn Jerry Morrison Contents Getting Started ere rr e eee exe ee dente dens or EEEa rea vxore regere nua deae rede e re en eta 5 What is the WPI Robotics Library eeeseeeseeeeeeeeeeeeeeeeeeeeneenennn nennen nnnnnnnn seen nnn nnnnnenn seen nnnnnens 6 A simpl robot Progra ORERTTTTEEET m 8 Sie E E E E 9 M riUnp C DEOBEATIS vaccaccesastacceeasvaccesasuacvesssusaccansey a An N na E a aa aN 11 Using Wind River Workbench esisiini reas a a a aa a aS 13 Setting Up the EnvirOMMent i siccctssssetetsasdatad sda dasatesabaasbesasaaedisedosebessdousbatabasadatadasdana iasstoan deasteaaesdoaabadaas 14 Creating a TObot Project eee ied sae xad tx Reni nua eaae Ea coluctoncoduetaaedevslseadoncucte ebasnaetousseeers 18 Building your projeti wp ciiietensssterencoatetraesveetsonbvaatr ond a i 20 Downloading the project to the CRIO eeseeeeseeeeeeeeeeeeen enne nennen nennen nennen nennen enne 21 Debugging your robot program nemen nennen eene n rennen eese nenne nennen nns 22 Deploying the C C Program deeds seduse sa sedosa tato ta Sea ste ta cni nat iai cae dE onE ca sionssensbancesndsnnci Sa age RES oca die 26 Creating a Robot Prograin M 27 Pointers and addresses
7. Advanced Programming Topics Relays Relays Revision 0 5 28 December 2008 9 7 Advanced Programming Topics Customizing analog sampling Customizing analog sampling Revision 0 5 28 December 2008 98 Advanced Programming Topics Using I2C Using I2C Revision 0 5 28 December 2008 39 C Tips Using I2C C Tips Revision 0 5 28 December 2008 1 0 0 Creating an application in WorkBench Using I2C Creating an application in WorkBench Revision 0 5 28 December 2008 101 Contributing to the WPI Robotics Library Using I2C Contributing to the WPI Robotics Library Revision 0 5 28 December 2008 102 Glossary Using 12C Glossary Concurrency cRIO deadlock quadrature encoder sema
8. Use of the Watchdog timer is recommended for safety but can be disabled For example during the autonomous period of a match the robot needs to drive for drive for 2 seconds then make a turn The easiest way to do this is to start the robot driving and then use the Wait function for 2 seconds During the 2 second period when the robot is in the Wait function there is no opportunity to feed the Watchdog In this case you could disable the Watchdog at the start of the Autonomous method and re enable it at the end Alternatively a longer timeout period would still provide much of the protection from the watchdog timer void Autonomous void GetWatchdog SetEnabled false disable the watchdog timer Drivetrain Drive 0 75 0 0 drive straight at 75 power Wait 2 0 wait for 2 seconds GetWatchdog SetEnabled true reenable the watchdog timer You can get the address of the Watchdog timer object from the from any of the methods inside one of the robot program template objects Revision 0 5 28 December 2008 3 7 Sensors Watchdog timer class Sensors The WPI Robotics Library includes built in support for all the sensors that are supplied in the FRC kit of parts as well as many other commonly used sensors available to FIRST teams through industrial and hobby robotics outlets Types of supported sensors The library natively supports sensors of a number of categories shown below Wheel motor position Geartooth
9. and servos update at 4X slightly over 20ms Revisions 28 December 2008 39 Sensors Digital Inputs Digital Inputs Digital inputs are typically used for switches The Digitallnput object is typically used when it is the state of the corresponding hardware line is being tested More complex uses of digital inputs such as encoders or counters are handled by using those classes Using these other supported device types encoder ultrasonic rangefinder gear tooth sensor etc don t require a digital input object to be created The digital input lines are shared from the 14 GPIO lines on each Digital Breakout Board To use one of those lines as an input the direction must be set Creating an instance of a Digitallnput object will automatically set the direction of the line to input Digital input lines have pull ups so an unconnected input will naturally be high If a switch is connected to the digital input it should connect to ground when closed The open state of the switch will be 1 and the closed state will be 0 Revision 0 5 28 December 2008 4 0 Sensors Digital Outputs Digital Outputs Digital outputs are typically used to run indicators or interfacing with other electronics The digital outputs share the 14 GPIO lines on each Digital Breakout Board Creating an instance of a DigitalOutput object will automatically set the direction of the GPIO line to output Revision 0 5 28 December 2008 4 1 Sensors Accelerometer
10. 2i se eps sided oda sa px Hd HE ERR Hd SEA RIS GRE PAPER RES ENEN FAS NENTS eap Ra 30 Built in Robot Classes 2 dates iutad suceveds sed uro asa ule sussancedeasqa cn carat Ind cade Ruf cs dar Pa DRE Qd a QNS Do SR RU dio MEN 31 SIMPLER OGL CLASS e enaa iaaa 32 TherativeR ObO0t CLASS wisccissasicsia H U OETEETUTTUMTTEM 33 WPL Robotics Library Conventions ic encicvscenetevesesneevesesntenesusetevesvsendsesucontenconssteecoudstteroudtterdeuuterressins 34 IRODOLB ASG Class nannan a a 36 Watchdog timer Classy ssssccicscisessiessiuesdeneaussiussousccuyvavessaceouss iania Ea E EEE ENE ANNE NEK aa 37 MISI 38 Distal VO S UDSY Stems sac doctos doe croce sevo tae pue odo npe ados et cag oss seen on eu Ego suot ade cep rope aas oe ES ER ce a oda gode bus 39 Digital Inputs oso operc E Ec fat Ee Cp 40 Digital Outputs iiie eese oh tha saa pha ea ora khe ha eR tha nd a eaa aE ADAE ae AEN NENNE SER PALM RR EA Mae Ra rad ak Aa ni aka apa add 41 PLC CEIELOMCLED PHP 42 Sc athe 43 Eh TechnicGComp ss iiie ae eie es eR Th doe Pha aa Fa MER Spe RE PRAE RE RRa A RE REN GRE EKOSE ide M eu ER ad 45 Counter SUubSysleTns ou etat etat stata data dae daca dia aaa aaa ate await 47 COUNtEr ODIUM M 48 EncOdetrs o eto DR e Ue UM Ee uM EUN M Mete I RU elu oa eem 49 GeartootliiS CNS Of cuoco cece areola net et here hci nein crc tin ran ede a tic
11. accumulators can be connected to the cRIO and they must be connected to channel 1 or 2 of Analog Module 1 e The returned analog value is 2 times larger than the actual value where n is the number of oversampled bits Averaging doesn t change the returned values except to average them Revision 0 5 28 December 2008 5 4 Sensors Analog Triggers Analog Triggers fis Ire x 4 x2Z Rising Re ee Polling Rike 3 Point Average Reject Filter Avg Fe ect E lec 2 pi ille to Median Filter ie aout pnr 3 samples ziii compared XE outpat pon on bits n 4 Revision 0 5 28 December 2008 5 5 Sensors Camera Camera The camera provided in the 2009 kit is the Axis 206 The C camera API provides initialization control and image acquisition functionality A C API provides an object that serves images to the dashboard running on a PC Camera task management A stand alone task called FRC_Camera is responsible for initializing the camera and acquiring images It continuously runs alongside your program acquiring images It needs to be started in the robot code if the camera is to be used Normally the task is left running but if desired it may be stopped The activity of image acquisition may also be controlled for example if you only want to use the camera in Autonomous mode you may either call StopCameraTask to end the task or call StopImageAcquisition to leave the task running but not reading im
12. Build Tools Build Macros C Build Paths BA Libraries ll d 4 Builders Build spec specific settings version preinsta ed in pi Active build spec PPc603gnu roject Info Workb ench Project References Refactoring History Libraries Run Debug Settings THES Library directives Add WS_ROOT_DIR WPILib PPC603gnu_DEBUG WPILib a Restore Defaults Apply Revision 0 5 28 December 2008 9 0 Advanced Programming Topics Getting the WPILib Source Code Note to build WPILib you must install SlikSVN from http www sliksvn com en download Once downloaded and installed the builds will run without errors SlikSVN is a command line interface to Subversion that our build system uses for tracking library versions Now if you rebuild your project it will use the imported version of the WPI Robotics Library rather than the preinstalled version Revision 0 5 28 December 2008 9 1 Advanced Programming Topics Replacing WPI Robotics Library parts Replacing WPI Robotics Library parts You can replace any component of the WPI Robotics Library with your own version of that component without having to replace the entire library When your projects are built the last step is Linking This two step process creates a single executable OUT file by 1 Combining all the modules object files from your project together into the OUT file 2 Finding all the unresolved pieces such as
13. be connected to the digital inputs the digital outputs can drive indicators and the analog inputs can read various sensors like potentiometers Here are some examples of custom interfaces that are possible e Set of switches to set various autonomous modes and options e Potentiometers on a model of an arm to control the actual arm on the robot e Rotary switches with a different resistor at each position to generate unique voltage to add effectively add more switch inputs e Three pushbutton switches to set an elevator to one of three heights automatically The range of possibilities is limited to your imagination These custom interfaces often give the robot faster control than is available from a standard joystick or controller You can read write the driver station analog and digital I O using the following methods float GetAnalogln UINT32 channel Read an analog input value connected to port channel bool GetDigitalln UINT32 channel Read a digital input value connected to port channel void SetDigitalOut UINT32 channel bool value Write a digital output value on port channel bool GetDigitalOut UINT32 channel Read the currently set digital output value on port channel Note The driver station does not have pull up or pull down resistors on any of the digital inputs This means that unconnected inputs will have a random value You must use external pull up or pull down resistors on digital inputs to get repeatable
14. class is designed to support feedback based driving Suppose you want the robot to drive in a straight line There are a number of strategies but two examples are using GearTooth sensors or a gyro In either case an error value is generated that tells how far from straight the robot is currently tracking This error value positive for one direction and negative for the other can be scaled and used directly with the turn argument of the Drive method This causes the robot to turn back to straight with a correction that is proportional to the error the larger the error the greater the turn By default the RobotDrive class assumes that Jaguar speed controllers are used To use Victor speed controllers create the Victor objects then call the RobotDrive constructor passing it pointers or references to the Victor objects rather than port numbers Example TODO Revision 0 5 28 December 2008 6 5 Controlling Pneumatics RobotDrive Controlling Pneumatics There are several classes that will make it easier to use pneumatics in your robot Class Solenoid Compressor Purpose Can control pneumatic actuators directly without the need for an additional relay In the past a Spike relay was required along with a digital output to control pneumatics components sing a pressure switch and software to turn Keeps the pneumatics system charged the compressor on and off as needed
15. for new features Sites to include in search O lEciipse Modeling Framework EMF Updates C S Edipse Modeling Framework Technologies EMFT Updates o Europa Discovery Site New Local Site New Archived Site v Ignore features not applicable to this environment C Automatically select mirrors Enter the information for the update site and click OK Subdipse http subdipse tigris org update 1 4 x Lox cancel Revision 0 5 28 December 2008 8 3 Advanced Programming Topics Using Subversion with Workbench Now you should see Subclipse added to the list of Sites to include Update sites to visit in search Click Select update sites to visit while looking for new features Finish Sites to indude in search O Sl Edipse Modeling Framework EMF Updates C 9i Edipse Modeling Framework Technologies EMFT Updates Jeuropa Discovery Site C Al Graphical Editing Framework GEF Update Site Gl Subdipse C Sd Target Management Updates C Si rhe Edipse Project Updates v Ignore features not applicable to this environment C Automatically select mirrors Select the JavaHL Adapter and Subclipse from the list of features to install Search Results Select features to install from the search result list Select the features to install amp E A Subdipse C 000 Integrations optional am
16. have to be prevented from executing simultaneously otherwise a race condition is possible Imagine two tasks trying to update an array at the same time Task A reads the count of elements in the array then task B changes the count then task A tries to do something based on the now incorrect value of the count it previously read This situation is called a race condition and represents one of the most difficult to find programming bugs since the bug only is visible when the timing of multiple tasks is just right or wrong Typically semaphores are used to ensure only single task access to the shared data Semaphores are operating system structures that control access to a shared resource VxWorks provides two operations on semaphores take and give When you take a semaphore the code pauses until the semaphore isn t in use by another task then the operating system marks it in use but your code can now run You give the semaphore when you are finished using the shared data It now lets the next task trying to take the semaphore run Suppose that a function operates on some shared data Understanding about the bad things that can happen with race conditions you take a semaphore at the start of the function and give it at the end Now inside the function the data is protected from inappropriate shared use Now someone else looks at the code and decides to change it and puts a return in the middle of the function not noticing the take and give The s
17. in the cRIO It is not intended to be used directly on a speed controller or servo The PWM class has shared code for Victor Jaguar and Servo to set the update rate deadband elimination and profile shaping of the output signal Revision 0 5 28 December 2008 6 0 Controlling Motors Victor Victor The Victor class represents the Victor speed controllers provided by Innovation First They have a minimum 10ms update rate and only take a PWM control signal The minimum and maximum values that will drive the Victor speed control vary from one unit to the next You can fine tune the values for a particular speed controller by using a simple program that steps the values up and down in single raw unit increments You need the following values Description The maximum value where the motors stop changing speed and the light on the Victor goes to full green DeadbandMax The value where the motor just stops operating Center The value that is in the center of the deadband that turns off the motors DeadbandMin The value where the motor just starts running in the opposite direction The minimum value highest speed in opposite direction where the motors stop changing speed With these values call the SetBounds method on the created Victor object void SetBounds INT32 max INT32 deadbandMax INT32 center INT32 deadbandMin INT32 min Example Revision 0 5 28 December 2008 6 1 Controlling Motors Jaguar Jaguar Th
18. represents the object and it is created at the time of the declaration In the case of a pointer you are only creating the space to store the address of the object but the object remains uncreated With pointers you have to create the object using the new operator Look at these two snippets of code to see the difference Joystick stickl1 1 this is an instance of a Joystick object stickl stickl GetX instances dereferenced using the dot operator bot ArcadeDrive stickl1 and can be passed to methods as a reference Joystick stick2 a pointer to an uncreated Joystick object stick2 new Joystick 1 creates the instance of the Joystick object stick2 GetX pointers are dereferenced with the arrow gt bot ArcadeDrive stick2 and can be passed as pointers notice no amp The ArcadeDrive method in the library is taking advantage of a feature of C called function overloading This allows us to have two methods with the same name that differ by the argument list In the first ArcadeDrive stick1 the variable stick is passed as a reference to a Joystick object In the second ArcadeDrive stick2 it is being passed as a pointer to a Joystick object There are actually two methods in the RobotDrive object both called ArcadeDrive that each take a different type of argument The cool thing is that the compiler figures out which one to call The library is built this way to let it adopt with the style of prog
19. results Other DriverStation features The DriverStation is constantly communicating with the Field Management System FMS and provides additional status information through that connection Revision 0 5 28 December 2008 7 8 Getting Feedback from the Drivers Station Digital Sources bool IsDisabled Robot state bool IsAutonomous Field state autonomous or teleop bool IsOperatorControl UINT32 GetPacketNumber Sequence number of the current driver station received data packet Alliance GetAlliance Alliance red blue for the match UINT32 GetLocation Starting field position of the robot 1 2 or 3 float GetBatteryVoltage Battery voltage on the robot Revision 0 5 28 December 2008 7 9 Getting Feedback from the Drivers Station Joysticks Joysticks Example Revision 0 5 28 December 2008 8 0 Advanced Programming Topics Joysticks Advanced Programming Topics Revision 0 5 28 December 2008 81 Advanced Programming Topics Using Subversion with Workbench Using Subversion with Workbench Subversion is a free source code management tool that is designed to track changes to a project as it
20. server entry populated with the tasks currently running 88 Q Wind River Registries AB vxsim0 Wind River VxWorks 6 3 HA vxsimi smp Wind River VxWorks 6 3 a fa a Wind River Target Debugger Wind River VxWorks 6 3 S S wPC5200 VxWorks 6 3 ff Kernel Tasks Eg Real Time Processes debug o 0xf17938 Symbol file tmpout debug o FRC_FPGA out 0xf13df8 Symbol file tmpout FRC FP S FRC NetworkCommunication out 0xf15608 Symbol file ftpserve out 0xf1b988 Symbol file tmpout ftpserve c libexpat out 0xf18268 Symbol file tmpout libexpat ot lvrt out 0xf10a50 Symbol file tmpout lvrt out X ni emb out 0xf14e88 Symbol file tmpout ni_emb out 8 NiEnAsrl out 0xf4cf00 Symbol file tmpout NiEnAsrl ou 8 niorbs out 0xf0fd08 Symbol file tmpout niorbs out 98 nipals out 0xfOfff8 Symbol file tmpout nipals out 3 NiRioRpc out 0xf24930 Symbol file tmpout NiRioRpc 1 8 NiRinSrv nut QxF10728 Svmhol fle mnout NiRioSrv n V m gt j w connected target server running Kernel image C WindRiver W 17 Revision 0 5 28 December 2008 Using Wind River Workbench Creating a robot project Creating a robot project The easiest way to create your own project for your robot is to start with one of the existing templates e SimpleRobotTemplate e terativeRobotTemplate coming soon In both cases the templates are based on the RobotBase class and have some of the fu
21. that you can edit 9 The Ball Demonstration Program t 3 i TEC des Dessouditins Prog This program simply drives forward for 2 seconds in into your own program 3 the Autonomous period and does simple arcade The Cobble Demonstration Program driving during the Operator Control period W The Hello World Demonstration Program The Panel Demonstration Program The TIPC Inventory Demonstration Program iz The TIPC Performance Demonstration Program Iz The TIPC Test Suite iz Vision Demo Program Revision 0 5 28 December 2008 1 9 Using Wind River Workbench Building your project e e e Building your project The project is built by right clicking on the project name in the Project Explorer window and select Build project or Rebuild project from the popup context menu This will cause Workbench to compile and link the project files into a OUT executable file that may be either deployed or downloaded to the cRIO Another way of building the project is to automatic rebuild feature of Workbench Whenever a file in the project is saved a build will automatically be started to keep the project up to date To enable this feature Select Window then Preferences In the Preferences panel expand General then Workspace and check the Build automatically option Files can quickly be saved after editing by using the shortcut Ctrl S type filter text Workspace General See Start
22. to analog input In selecting a gyro you would ideally pick the one that had a full scale range that exactly matched the fastest rate of rotation your robot would ever experience That would yield the highest accuracy possible provided the robot never exceeded that range Using the Gyro class The Gyro object is typically created in the constructor of the RobotBase derived object When the Gyro object is instantiated it will go through a calibration period to measure the offset of the rate output while the robot is at rest This means that the robot must be stationary while this is happening and that the gyro is unusable until after it has completed the calibration Once initialized the GetAngle method of the Gyro object will return the number of degrees of rotation heading as a positive or negative number relative to the robot s position during the calibration period The zero heading can be reset at any time by calling the Reset method on the Gyro object Setting the gyro sensitivity The Gyro class defaults to the settings required for the 80 sec gyro that was delivered by FIRST in the 2008 kit of parts To change gyro types call the SetSensitivity float sensitivity method and pass it the sensitivity in volts sec Just be careful since the units are typically specified in mV volts 1000 in the spec sheets A sensitivity of 12 5 mV sec would require a SetSensitivity parameter value of 0 0125 Example This program causes t
23. up down counters Counter objects quadrature encoders Encoder objects or interrupt generation Analog triggers count each time an analog signal goes outside or inside of a set range of voltages Revision 0 5 28 December 2008 4 7 Sensors Counter Objects Counter Objects Counter objects are extremely flexible elements that can count input from either a digital input signal or an analog trigger They can also operate in a number of modes based on the type of input signal some of which are used to implement other sensors in the WPI Robotics Library e Gear tooth mode enables up down counting based on the width of an input pulse This is used to implement the GearTooth object with direction sensing e Semi period mode counts the period of a portion of the input signal This is used to measure the time of flight of the echo pulse in an ultrasonic sensor e Normal mode can count edges of a signal in either up counting or down counting directions based on the input selected Revision 0 5 28 December 2008 4 8 Sensors Encoders Encoders Encoders are devices for measuring the rotation of a spinning shaft Encoders are typically used to measure the distance a wheel has turned that can be translated into robot distance across the floor Distance moved over a measured period of time represents the speed of the robot and is another common measurement for encoders There are several types of encoders supported in WPILib S
24. we felt it represents a better level of abstraction for robot programs C when used properly also encourages a level of software reuse that is not as easy or obvious in C At all levels in the library we have attempted to design it for maximum extensibility There are classes that support all the sensors speed controllers drivers station etc that will be in the kit of parts In addition most of the commonly used sensors that we could find that are not traditionally in the kit are also supported like ultrasonic rangefinders Another example is several robot classes that provide starting points for teams to implement their own robot code These classes have methods that are called as the program transitions through the various phases of the match One class looks like the old easyC WPILib model with Autonomous and OperatorControl functions that get filled in and called at the right time Another is closer to the old IFI default where user supplied methods are called continuously but with much finer control And the base class for all of these is available for teams wanting to implement their own versions Even with the class library we anticipate that teams will have custom hardware or other devices that we haven t considered For them we have implemented a generalized set of hardware and software to make this easy For example there are general purpose counters than count any input either in the up direction down direction or both with two
25. 08 5 6 Sensors Camera Image Acquisition Images of types IMAQ IMAGE HSL IMAQ_IMAGE_RGB and IMAQ IMAGE US gray scale may be acquired from the camera To obtain an image for processing first create the image structure and then call GetImage to get the image and the time that it was received from the camera double timestamp timestamp of image returned Image cameralmage frcCreatelmage IMAQ IMAGE HSL if cameraImage printf error s GetErrorText GetLastError if GetImage cameraImage amp timestamp printf error s GetErrorText GetLastError The previous call returns the most recent image regardless of whether it has been previously accessed Your code can check the timestamp to see if you have already processed the image Alternatively a blocking call is available which will wait until a new image is available if the current one has already been served To prevent excessive blocking time the call will return unsuccessfully if a new image is not available in 0 5 second Image cameraImage frcCreatelmage IMAQ IMAGE HSL double timestamp timestamp of image returned double lastImageTimestamp timestamp of last image to ensure image is new int success GetImageBlocking cameraImage amp timestamp lastImageTimestamp Camera Metrics Various camera instrumentation counters used internally may be accessed that may be useful for camera performance analysis and error detection Here i
26. 1 Joystick rightStick 2 class RobotDemo public SimpleRobot RobotDemo void GetWatchdog SetEnabled false void Autonomous void for int i 0 i lt 4 i drivetrain Drive 0 5 0 0 Wait 2 0 drivetrain Drive 0 0 0 75 Wait 0 75 drivetrain Drive 0 0 0 0 void OperatorControl void Deploying the C C Program drive 50 forward 0 turn wait 2 seconds drive 0 forward and 75 turn turn for almost a second stop the robot while 1 loop forever drivetrain Tank leftStick rightStick drive with the joystick Wait 0 005 START_ROBOT_CLASS RobotDemo Although this program will work perfectly with the robot as described there were some details that were skipped e Inthe example drivetrain and stick are global variables In computer science classes you would be discouraged from doing that In the next section pointers will be introduced that make the code more correct and maintainable e The drivetrain Drive method takes two parameters a speed and a turn direction See the documentation about the RobotDrive object for details on how that speed and direction really work Revision 0 5 28 December 2008 29 Creating a Robot Program Pointers and addresses Pointers and addresses There are two ways of declaring objects either as an instance of the object or a pointer to the object In the case of the instance the variable
27. 2 Unknown C WindRiver workbench 3 0 wrwb platfor Install Location C WindRiver workbench 3 0 wrwb platform eclipse Change Location Required space Unknown Free space 6 97 GB Revision 0 5 28 December 2008 8 5 Advanced Programming Topics Getting the WPILib Source Code Getting the WPILib Source Code The WPI Robotics Library source code is installed on a Subversion server To get it requires having a subversion client installed in your copy of Workbench See Installing the Subclipse client into Workbench for instructions on how to set it up Note These examples show urls to an internal WPI SourceForge server and it is not available for teams to use There will be a new server available soon and we will post the details at that time For now the source code is available on the WPILib C C update page Look at the FIRST web site for a link to that page Importing the WPI Robotics Library into your workspace To get the source code requires setting up a Repository location then importing the code The following steps show the process Right click in the Project Explorer window in Workbench Select Import Choose Checkout Projects from SVN and click next Select Choose import source Select an import source type filter text H E ge Checkout Projects from SVN gt Team amp VxWorks 6 x Other Revision 0
28. 5 28 December 2008 86 Advanced Programming Topics Select Create a new repository location and click Next Getting the WPILib Source Code Select Create Location Select an existing repository location or create a new location m Enter the URL The URL will be announced as soon as the Subversion server is up an running This is only an example and cannot be used except by WPI students and faculty Select Create Location Location Url https sourceforge wpi edu svn repos betabource v Revision 0 5 28 December 2008 87 Advanced Programming Topics Getting the WPILib Source Code Choose the WPILib folder from the Select Folder window The window on your screen will have a different list of files but still choose WPILib This is an example and the actual details will be announced when the Subversion server is running Select Folder Select the folder to be checked out from SVN W E Ee Red Re eed amp we ae ae ere FRC_Vision_Test LV Driver Station Z LV Vision Files amp MecanumDemo amp NetworkCommunication amp VisionDemo amp WPILabVIEW TLibCProgramming branches tags trunk gt Documentation amp IterativeRobot RobotDemo ey UnitTestProject c WPILib amp ds60x E frecamera gt frevision gt frevision_test
29. 5 greenHue maxValue 80 greenSat minValue 100 greenSat maxValue 255 greenLum minValue 100 greenLum maxValue 255 Here is the code that actually drives the robot in the autonomous period The code checks if the color was found in the scene and that it was not too big close and not too small far If it is in the limits then the robot is driven forward full speed 1 0 and with a turn rate determined by the center mass x normalized value of the particle analysis report The center mass x normalized value is 0 0 if the object is in the center of the frame otherwise it varies between 1 0 and 1 0 depending on how far off to the sides it is That is the same range as the Drive method uses for the turn value If the robot is correcting in the wrong direction then simply negate the turn value while IsAutonomous if FindColor IMAQ HSL amp greenHue amp greenSat amp greenLum amp par amp amp par particleTolImagePercent lt MAX PARTICLE TO IMAGE PERCENT amp amp par particleToImagePercent gt MIN PARTICLE TO IMAGE PERCENT myRobot Drive 1 0 float par center mass x normalized else myRobot Drive 0 0 0 0 Warittr O ROS 87 myRobot Drive 0 0 0 0 Revision 0 5 28 December 2008 7 1 Concurrency Color Tracking Concurrency VxWorks is the operation system that is running inside the cRIO and providing services to the running robot programs that you
30. Building Projects 20 Creating Remote System 14 Creating Robot Programs 18 Debug output to PC 25 Debugging 22 Deploying Programs 26 Downloading Projects 21 Troubleshooting 24 WPILib Replacing Source Files 91 Using Source Files 88 105
31. R Re E EAR RRS RETE R AS RE nakaka nando 77 Getting Feedback from the Drivers Station eeeeseeeseeeeee eene eene nennen nennen 78 Mold 80 Advanced Programming T opics esessssseesseseeeeseeeee enne nennen nnn aaea aaa ada aaa aaa sehen tres esee 81 Using Subversion with Workbench esseeeeseeeeeeeeneen enne enne nenne nenne nennen 82 Getting the WPILib Source Code eese eene mne nre n rne eene 86 Replacing WPI Robotics Library parts eese enne nennen nnne nnne nennen 92 Hirseninrc c 93 Creating your own speed controllers sse nennen i nnn nenne eene 94 Using the seral Port sreo 96 RL ay scd 97 Customizing analog sampling se a a 98 Sn TC uU 99 Qr cd io ee pn nn dp p d e Pc He Dh E E 100 Creating an application in WorkBench sees een 101 Contributing to the WPI Robotics Library eese eene mener een 102 GIOSSALY E 103 What is the WPI Robotics Library Getting Started Getting Started Revision 0 5 28 December 2008 Getting Started What is the WPI Robotics Library What is the WPI Robotics Library The WPI Robotics library is a set of C classes that interfaces to the ha
32. TP Only A Linux El Local CX SSH Only Unix Unix Ai Windows B E VxWorks 6 x 18 Wind River VxWorks 6 x Simulator Connection HA Wind River VxWorks 6 x Target Server Connection Revision 0 5 28 December 2008 15 Using Wind River Workbench Fill out the Target Server Options window with the IP address of your cRIO It is usually 10 x y 2 where x is the first 2 digits of your 4 digit team number and y is the last two digits For example team 190 0190 would be 10 1 90 2 You must also select a Kernel Image file This is located in the WindRiver install directory in the WPILib top level directory This is typically called C WindRiver WPILib VxW or ks Setting up the environment Target Server Options Review and customize the target server options Backend settings Backend processor faut f Target name IP address 10 1 90 w cec Port Kernel image O File path from target if available File C WindRiverWPILib x Works v C Bypass checksum comparison Advanced target server options Verbose target server output Options R C WindRiver workspace RW Bt 3 A v Command Line tgtsvr V R C WindRiver workspace RW Bt 3 c C WindRiver WPILib vxWorks A 10 1 90 2 Revision 0 5 28 December 2008 16 Using Wind River Workbench Setting up the environment If the cRIO is turned on and connected you will see the target
33. The task is kicked off and stops in the first instruction in FRC UserProgram StartupLibraryInit At this point make sure that a breakpoint is set in your user program Select the Resume icon the green arrow to continue until the first breakpoint is reached Revision 0 5 28 December 2008 23 Using Wind River Workbench Device Debug File Edit Refactor mM ri i xn g w Camera EE frevision J frevision i c frcvision EE frcvision E w Iterative E uH S camer HY simpleDe VisionDemo VisionDemo cpp Wind River Workbench Navigate Search Project Analyze Target FIRST Run Window Help YVoeoesv a ay VisionDemo cpp ER 11 O Q FRC_UserProgram_Star return 0 void Autonomous void char funcName VisionDemo Auton DPRINIF LOG DEBUG start VisionD GetWatchdog Feed float mySpeed 0 2 float driveDirection visionAction va STOPLIGHT int greenCount 0 Debugging your robot program DEK E ES Device Debug Ui Application D 35 Debug 73 a TREFFEN E co FRC_UserProgram_StartupLibrarylInit VisionDemo out VxWorks6x_10 1 E MPC5200 VxWorks 6 3 Task Mode 9 FRCRobotTask 0x12d65e0 Stopped Breakpoint Hit er SimpleRobot StartCompetition SimpleRobot cpp 64 RobotBase robotTask RobotBase cpp 120 vxTaskEntry 0x001d 1bcs gj terminated exit value 0 gt tFRC_UserProgram_StartupLibrarylnit 0 lt
34. ables that you have This code runs as soon as the robot is turned on but before it is enabled When the constructor exits the program waits until the robot is enabled All the code that should run during the autonomous period of the game goes in the Autonomous method The code is allowed to run to completion and will not be stopped at the end of the autonomous period If the code has an infinite loop it will never stop running until the entire match ends When the method exits the program will wait until the start of the operator control period Put code in the OperatorControl method that should run during the operator control part of the match This method will be called after the Autonomous method has exited and the field has switched to the operator control part of the match If your program exits from the OperatorControl method it will not resume until the robot is reset Revisions 28 December 2008 32 Creating a Robot Program IterativeRobot class IterativeRobot class The IterativeRobot class divides your program up into methods that are repeatedly called at various times as the robot program executes For example the AutonomousContinuous method is called continually during the autonomous period When the playing field or the switch on the DS changes to operator control then the TeleopInit first then the TeleopContinuous methods are called continuously WindRiver Workbench has a built in sample robot program based o
35. ages from the camera Simple Camera initialization StartCameraTask initializes the camera to serve MJPEG images using the following defaults Frame Rate 10 frames sec Compression O Resolution 160x120 Rotation O abies oiechiaie amicably sia 0 ae seen 1 dprintf LOG_ERROR Failed to spawn camera task Error code s GetErrorText GetLastError Configurable Camera initialization Image processing places a load on the cRIO which may or may not interfere with your other robot code Depending on needed speed and accuracy of image processing it is useful to configure the camera for performance The highest frame rates may acquire images faster than your processing code can process them especially with higher resolution images If your camera mount is up side down or sideways adjusting the Image Rotation in the start task command will compensate and images will look the same as if the camera was mounted right side up If decode is left out of the call it will default to ON You may want to set it OFF only if you are sending images to the PC and not doing any image processing on the cRIO int frameRate 15 valid values 0 30 int compression 0 Jf sede yaluss 100 ImageSize resolution k160x120 k160x120 k320x240 k640480 ImageRotation rot ROT 180 ROL ROTT90 RONS 0 ROTI270 StartCameraTask frameRate compression resolution rot Revision 0 5 28 December 20
36. aries interact with the base hardware It should give you better insight as to how the whole system works and its capabilities Note This is a work in progress the pictures will be cleaned up and explanations will be soon added We wanted to make this available to you in its raw form rather than leaving it out all together Revision 0 5 28 December 2008 7 6 System Architecture Digital Sources Digital Sources AT aa A ccamulater Digital Filter Digital dece v cM qe GPIO Fi ES x Fitter x3 DI 2 Exorpl m Revision 0 5 28 December 2008 77 Getting Feedback from the Drivers Station Digital Sources Getting Feedback from the Drivers Station The driver station is constantly communicating with the robot controller You can read the driver station values of the attached joysticks digital inputs analog inputs and write to the digital outputs The DriverStation class has methods for reading and writing everything connected to it including joysticks There is another object Joystick that provides a more convenient set of methods for dealing with joysticks and other HID controllers connected to the USB ports Getting data from the digital and analog ports Building a driver station with just joysticks is simple and easy to do especially with the range of HID USB devices supported by the driver station Custom interfaces can be constructed using the digital and analog I O on the driver station Switches can
37. ate the Spike Example Suppose you had a compressor and a Spike relay connected to Relay port 2 and the pressure switch connected to digital input port 4 Both of these ports are connected to the primary digital input module You could create and start the compressor running in the constructor of your RobotBase derived object using the following 2 lines of code Compressor c new Compressor 4 2 c Start Note The variable c is a pointer to a compressor object and the object is allocated using the new operator If it were allocated as a local variable in the constructor at the end of the function the local variables would be deallocated and the compressor would stop operating That s all that is required to enable the compressor to operate for the duration of the robot program Revision 0 5 28 December 2008 6 7 Controlling Pneumatics Solenoid Pneumatics Solenoid Pneumatics The Solenoid object controls the outputs of the 9472 Digital Ouput Module It is designed to apply an input voltage to any of the 8 outputs Each output can provide up to 1A of current The module is designed to operate 12v pneumatic solenoids used on FIRST robots This makes the use of relays unnecessary for pneumatic solenoids Note The 9472 Digital Output Module does not provide enough current to operate a motor or the compressor so relays connected to Digital Sidecar digital outputs will still be required for those applications The port num
38. ation Sensors are automatically allocated when they are first used on a particular channel Suppose you start using a Victor on port 5 On the first use an object is created behind the scenes that corresponds to that motor Each time you refer that that Victor object on port 5 the code calls the underlying object to set or get values When youare finished using an object you may delete it by calling the Delete function associated with the object for example DeleteVictor This is usually not necessary because it is unlikely that you would ever need to delete a sensor once it is created Those functions mostly exist for testing Revision 0 5 28 December 2008 1 1 Getting Started Writing C programs Example of a C program The following C program demonstrates driving the robot for 2 seconds forward in Autonomous and in arcade mode for the Operator Control period Notice that constants define the port numbers used in the program This is a good practice and should be used for C and C programs include WPILib h include SimpleCRobot h static const UINT32 LEFT MOTOR PORT 1 static const UINT32 RIGHT MOTOR PORT 2 static const UINT32 JOYSTICK PORT 1 void Initialize void CreateRobotDrive LEFT MOTOR PORT RIGHT MOTOR PORT SetWatchdogExpiration 0 1 void Autonomous void SetWatchdogEnabled false Drive 0 5 0 0 Wait 2 0 Drive 0 0 0 0 void OperatorControl void SetWatchdogEnabled tru
39. bers on the Solenoid class range from 1 8 as printed on the pneumatic breakout board Note The 9472 indicator lights are numbered 0 7 for the 8 ports which is different numbering then used by the class or the pneumatic bumper case silkscreening Example Setting the output values of the Solenoid objects to true or false will turn the outputs on and off respectively The following code fragment will create 8 Solenoid objects initialize each to true on and then turn them off one per second Then it turns them each back on one per second and deletes the objects Solenoid s 8 for int i 0 i lt 8 i s i new Solenoid i 1 allocate the Solenoid objects for int i 0 i lt 8 i s i Set true turn them all on for int i 0 i lt 8 i s i gt Set false turn them each off in turn Wait 1 0 for int i 0 i lt 8 i s i Set true turn them back on in turn Wait 1 0 delete s i delete the objects You can observe the operation of the Solenoid class by looking at the indicator lights on the 9472 module Revision 0 5 28 December 2008 6 8 Vision Image Processing Solenoid Pneumatics Vision Image Processing Access to National Instrument s nivison library for machine vision enables automated image processing for color identification tracking and analysis The VisionAPL cpp file provides open source C wrappers to a subset of the proprietar
40. classes referenced from WPILib and adding those pieces to your OUT file executable Only the pieces of WPILib that are unresolved after step 1 are included from the library and that s the key to substituting your own version of classes Suppose you want to use your own version of the Encoder class because you had some extra features you wanted to add To use your version rather than the WPILib version simply 1 Get the WPILib version of the file cpp and h files from the WPILib source code and add them to your project 2 Make whatever modifications you would like to 3 Rebuild your project The library version of the Encoder objects will be included with your set of object modules so the linker won t take the ones in WPILib Revision 0 5 28 December 2008 9 Z Advanced Programming Topics Interrupts Interrupts Example Below is a sample program that generates a square wave on a digital output port that is connected to a digital input port An interrupt handler is set up on the input port to count the number of cycles static int interruptCounter 0 The interrupt handler that counts number of square wave cycles static void tiHandler tNIRIO u32 interruptAssertedMask void param interruptCounter t void InterruptTestHandler void create the two digital ports Output and Input DigitalOutput digOut CROSS CONNECT A PORT1 Digitallnput digIn CROSS CONNECT A PORT2 create the counter tha
41. d slot Gyro UINT32 slot UINT32 channel channel with explicit slot Gyro UINT32 channel channel with default slot 1 Sharing inputs between objects WPILib constructors for objects generally use port numbers to select input and output channels on cRIO modules When you use a channel number in an object like an encoder a digital input is created inside the encoder object reserving the digital input channel number Revision 0 5 28 December 2008 3 5 Creating a Robot Program RobotBase class RobotBase class The RobotBase class is the subclass for the SimpleRobot and IterativeRobot classes It is intended that if you decide to create your own type or robot class it will be based on RobotBase RobotBase has all the methods to determine the field state set up the watchdog timer communications and other housekeeping functions To create your own base class create a subclass of RobotBase and implement at least the StartCompetition method For example the SimpleRobot class definition looks approximately like this class SimpleRobot public RobotBase public SimpleRobot void virtual void Autonomous virtual void OperatorControl virtual void RobotMain virtual void StartCompetition private bool m robotMainOverridden It overrides the StartCompetition method that controls the running of the other methods and it adds the Autonomous OperatorControl and RobotMain methods The Star
42. e 99 Breakpoints 23 E we SimpleRc 7 i SimpleTe v gt int redCount 0 int minColorFilterCount 3 Image cameralImage RRC l4 HES 9 NisionDemo VisionDemo cpp 114 Planted rs A char imageName pics demo png 69 Variable 23 WW Registe GL Express Memory Search tB E amp BU Type Value struct VisionD 0x0129F438 char 22 0x0 12D6470 VisionDemo mySpeed float 0 000000 driveDirection float 0 000000 va enum visionAc GO_FORWARD greenCount int 0 FrcColorReport cReport lt Jer Zita B Pro E Pro El Bul E co B ter 22 Serial COM9 9600 8 1 None None CONNECTED ET 29 oe Name this funcName Local amp th Loca e Loca Ny Winc ve Break at 0x0131b868 VisionDemo Autonomous 0x94 Task Oxi2d65e0 FRCRobotTask Indicator Mode changed Steady On 77M of 106M The Debug view shows all processes and threads running under the debugger Selecting the stack frame will show the current instruction pointer and source code if available for the process selected When your breakpoint is reached make sure your program is selected in the task list and your source code is displayed with a program pointer You can continue through your code using Resume Step Into Step Over and Step Return If you see assembly code displayed this is because you have gone into a lower level
43. e while IsOperatorControl WatchdogFeed ArcadeDrive JOYSTICK_PORT START_ROBOT_CLASS SimpleCRobot Revision 0 5 28 December 2008 1 2 Using Wind River Workbench Writing C programs Using Wind River Workbench Wind River Workbench is a complete C C Interactive Development Environment IDE that handles all aspects of code development It will help you e Write the code for your robot with editors syntax highlighting formatting auto completion etc e Compile the source code into binary object code for the cRIO PowerPC architecture e Debug and test code by downloading the code to the cRIO robot controller and enabling you to step through line by line and examine variables of the running code e Deploy the program so that it will automatically start up when the robot is powered on You can even use Subversion a popular source code repository server to manage your code and track changes This is especially useful if there is more than one person doing software development Revision 0 5 28 December 2008 1 3 Using Wind River Workbench Setting up the environment Setting up the environment To use Workbench you need to configure it so that it knows about your robot and the programs that you want to download to it There are three areas that need to be set up 1 The target remote system which is the cRIO that you will use to download and debug your programs 2 The run or debug configuration
44. e Jaguar class supports the Luminary Micro Jaguar speed controller It has an update rate of slightly greater than 5ms and currently uses only PWM output signals In the future the more sophisticated Jaguar speed controllers might have other methods for control of its many extended functions The input values for the Jaguar range from 1 0 to 1 0 for full speed in either direction with 0 representing stopped Use of limit switches TODO Example TODO Revisions 28 December 2008 62 Controlling Motors Servo Servo The Servo class supports the Hitechnic servos supplied by FIRST They have a 20ms update rate and are controlled by PWM output signals The input values for the Servo range from 0 0 to 1 0 for full rotation in one direction to full rotation in the opposite direction There is also a method to set the servo angle based on the currently fixed minimum and maximum angle values Example 1 The following code fragment rotates a servo through its full range in 10 steps Servo servo 3 create a servo on PWM port 3 on the first module float servoRange servo GetMaxAngle servo GetMinAngle for float angle servo GetMinAngle step through range of angles angle servo GetMaxAngle angle servoRange 10 0 servo SetAngle angle set servo to angle Wait 1 0 wait 1 second Example 2 The following code fragment pans a servo back and forth every 3 seconds include BaeUtilities h panInit
45. e ae tuetur Erde 50 O uadrature EnGOders sinc ANd uuu 51 Analog Inputs Re MR EE eM ut eoe t Le SEU M eto ead e ate 53 Analog Triggers du de a a RR ERG ARRA AR RR ARRA BARRERA DARET ARRA ARRREMAMERERRERE 55 Oria neienenncereu ener ceverwengevestenveyesieticasauuencert ocatiernetueasueitendineutt enn A AAA 56 Gre rio Horde ro EET 59 QUALEM IHE EU 60 Viel E em 61 JASUAT ssi e 62 NIcofep e e A 63 lopvdbub ce 64 Controlin PNEUMATICS aae eese eit ena aW TAA TA CAD A adeo dos 66 COIBDEeSSOI eee ER decades e ENEE EAEL EAEE RBS IR SERRA RA a eRE e edo READ e EE ARA aea Ae eR PARADA vaayceacopbuctesopennsanaeaanaane 67 Solenoid PNEUMATICS entrent ete ee e e e e e e e e e e e e e nane eR Haa 68 MISIOn Image Processing aidan n I an n AD V c esu etus ux vt une od out rust 69 igoodileru sr RU TTEN E EUT aG Eri 70 C ODcurtency a RLU eed 72 Creating tasks idis eee isst es es ER Re ERRARE sedsdsaacdsassuacisassuasiiacsoasiaacisaissacasniaedsadaiseisavasisnscdocieaieae 73 Synchronized and Critical Regions eeeseeeeseeeeeeeeeeen eene eene nennen nere e nennen 74 System Architecture zu e as ceto osi sete bus hat teedin be vetus Deve uon obe bae Dung Deoa e ERR Mone La 76 Digital Sourees inii araara etededoctd ede acid ede a REP A REPE e ARASA R
46. e are several templates that can be used as starting points for writing robot programs This one SimpleRobot is probably the easiest to use Simply add code for initializing sensors and anything else you need in the constructor code for your autonomous program in the Autonomous function and the code for your operator control part of the program in OperatorControl SimpleRobot is actually the name of a C class or object that is used as the base of this robot program called RobotDemo To use it you create a subclass which is another name for your object that is based on the SimpleRobot class By making a subclass the new class RobotDemo inherits all the predefined behavior and code that is built into SimpleRobot Revision 0 5 28 December 2008 8 Getting Started Using objects e e Using objects In the WPI Robotics Library all sensors motors driver station elements and more are all objects For the most part objects correspond to the physical things on your robot Objects include the code and the data that makes the thing operate Let s look at a Gyro There are a bunch of operations or methods you can perform on a gyro e Create the gyro object this sets up the gyro and causes it to initialize itself e Get the current heading or angle from the gyro e Set the type of the gyro i e its Sensitivity e Reset the current heading to zero e Delete the gyro object when you re done using it Creating a gyro object is done like this
47. ed 19 of 19 ite Figure 1 Setting the entry point on a Debug Configuration for a robot program Select as the entry point the function FRC_UserProgram_StartupLibraryInit On the debug options tab select Break on Entry and Automatically attach spawned Kernel Tasks This tells the debugger to stop at the first instruction and to make the spawned task your robot task available to debug Revision 0 5 28 December 2008 22 Using Wind River Workbench Debugging your robot program Create manage and run configurations exa Lo cM pl Name FRC_UserProgram_StartupLibraryinit VisionDemo out VxWorks6x_10 11 66 2 type filter text Y Attach to Target C C Attach te C C Local Apr Break on Entry E C C Postmort Kernel Task Qs FRC_UserPr Qy FRC UserPrc Qs FRC UserPrt Q Di mDranram Cm i Filter matched 19 of 19 ite Automatically attach spawned Kernel Tasks Figure 2 Setting the Automatically attach spawned Kernel Tasks option ensures that you will be able to debug the entire program including any tasks that it creates The WPI Robotics Library automatically creates your program in a new task when it starts The other tabs can normally be left at default settings When the Debug button is selected several things happen Your Workbench display changes to the Debug Perspective which has views for debug breakpoints and variables along the right side
48. emaphore is taken but the corresponding give operation never happened That means that any other task waiting on that semaphore will wait forever This condition is called deadlock Example The Synchronized objectis a simple wrapper around semaphores that tries to solve the problem Here is an example of how it is used Synchronized s semaphore access shared code here if condition return more code here At the start of the block a Synchronized object is allocated This takes the semaphore When the block exits the object is freed and its destructor is called Inside the destructor the semaphore is given Notice that the destructor will be called no matter how the block is exited Even if a return is used inside the block the destructor is guaranteed to be called by the C compiler This eliminates a common cause of deadlock To make the code even more readable there are two macros defined by WPILib and used like this Revision 0 5 28 December 2008 74 Concurrency Synchronized and Critical Regions These macros just make the code more readable but the expanded code is identical to the previous example Revision 0 5 28 December 2008 7 5 System Architecture Synchronized and Critical Regions System Architecture This section describes how the system is put together and how the libr
49. eration Drive speed turn Designed to take speed and turn values ranging from 1 0 to 1 0 The speed values set the robot overall drive speed positive values forward and negative values backwards The turn value tries to specify constant radius turns for any drive speed The negative values represent left turns and the positive values represent right turns TankDrive leftStick rightStick Takes two joysticks and controls the robot with tank steering using the y axis of each joystick There are also methods that allow you to specify which axis is used from each stick ArcadeDrive stick Takes a joystick and controls the robot with arcade single stick steering using the y axis of the joystick for forward backward speed and the x axis of the joystick for turns There are also other methods that allow you to specify different joystick axis HolonomicDrive magnitude Takes floating point values the first two are a direction vector direction rotation the robot should drive in The third parameter rotation is the independent rate of rotation while the robot is driving This is intended for robots with 4 Mecanum wheels independently controlled SetLeftRightMotorSpeeds leftSpeed Takes two values for the left and right motor speeds As with all rightSpeed the other methods this will control the motors as defined by the constructor Revision 0 5 28 December 2008 64 Controlling Motors RobotDrive The Drive method of the RobotDrive
50. etector As the slots pass the detector pulses are generated on the output The rate at which the slots pass the detector determines the rotational speed of the shaft and the number of slots that have passed the detector determine the number of rotations or distance Figure 8 A Grayhill quadrature optical encoder Note the two connectors one for the A channel and one for the B channel Some quadrature encoders have an extra Index channel This channel pulses once for each complete revolution of the encoder shaft If counting the index channel is required for the application it can be done by connecting that channel to a simple Counter object which has no direction information Quadrature encoders are handled by the Encoder class Using a quadrature encoder is done by simply connecting the A and B channels to two digital I O ports and assigning them in the constructor for Encoder Encoder encoder 1 2 true Where 1 and 2 are the port numbers for the two digital inputs and the true value tells the encoder to not invert the counting direction The sensed direction could depend on how the encoder is mounted relative to the shaft being measured Revision 0 5 28 December 2008 5 1 Sensors Quadrature Encoders Example Revision 0 5 28 December 2008 5 2 Sensors Analog Inputs Analog Inputs The Analog t
51. he robot to drive in a straight line using the gyro sensor in combination with the RobotDrive class The RobotDrive Drive method takes the speed and the turn rate as arguments where both vary from 1 0 to 1 0 The gyro returns a value that varies either positive or negative degrees as the robot deviates from its initial heading As long as the robot continues to go straight the heading will be zero If the robot were to turn from the O degree heading the gyro would indicate this with either a positive or negative value This example uses the gyro to turn the robot back on course using the turn parameter of the Drive method Revision 0 5 28 December 2008 4 3 Sensors Gyro class GyroSample public SimpleRobot RobotDrive myRobot robot drive system Gyro gyro static const float Kp 0 03 public GyroSample void myRobot 1 2 initialize the sensors in initialization list gyro 1 GetWatchdog SetExpiration 0 1 void Autonomous void gyro Reset while IsAutonomous GetWatchdog Feed float angle gyro GetAngle get heading myRobot Drive 1 0 angle Kp turn to correct heading Wait 0 004 myRobot Drive 0 0 0 0 stop robot The angle multiplied by Kp to scale it for the speed of the robot drive This factor is called the proportional constant or loop gain Increasing Kp will cause the robot to correct more quickly but too high and it will oscillate Decrea
52. ile the in the autonomous part of the match Each time the program returns from this function it is immediately called again provided that the state hasn t changed TeleopContinuous Called continuously while in the teleop part of the match Each time the program returns from this function it is immediately called again provided that the state hasn t changed The three Init methods are called only once each time state is entered The Continuous methods are called repeatedly while in that state after calling the appropriate Init method The Periodic methods are called periodically while in a given state where the period can be set using the SetPeriod method in the IterativeRobot class The periodic methods are intended for time based algorithms like PID control Any of the provided methods will be called at the appropriate time so if there is a TeleopPeriodic and TeleopContinous they will both be called Revision 0 3 28 December 2008 33 Creating a Robot Program WPI Robotics Library Conventions WPI Robotics Library Conventions This section documents some conventions that were used throughout the library to standardize on its use and make things more understandable Knowing these should make your programming job much easier Class method and variable naming Names of things follow the following conventions Type of name Naming rules Examples Class name Initial upper case letter then camel case Victor SimpleRobot PWM mixed upper lo
53. imple encoders Single output encoders that provide a state change as the wheel is Counter class turned With a single output there is no way of detecting the direction of rotation The Innovation First VEX encoder or index outputs of a quadrature encoder are examples of this type of device Quadrature encoders Quadrature encoders have two outputs typically referred to as the A Encoder class channel and the B channel The B channel is out of phase from the A channel By measuring the relationship between the two inputs the software can determine the direction of rotation The system looks for Rising Edge signals ones where the input is transitioning from 0 to 1 on the A channel When a rising edge is detected on the A channel the B channel determines the direction If the encoder was turning clockwise the B channel would be a low value and if the encoder was turning counterclockwise then the B channel would be a high value The direction of rotation determines which rising edge of the A channel is detected the left edge or the right edge The Quadrature encoder class actually looks at all edges and gives an oversampled output with 4x accuracy Gear tooth sensor This is a device supplied by FIRST as part of the FRC robot standard GearTooth class kit of parts Fhe gear tooth sensor is designed to monitor the rotation of a sprocket or gear that is part of a drive system It uses a Hall effect device to sense the teeth of the sprocket as they move pas
54. inputs Revision 0 5 28 December 2008 6 Getting Started What is the WPI Robotics Library They can measure the number of pulses the width of the pulses and number of other parameters The counters can also count the number of times an analog signal reaches inside or goes outside of a set of voltage limits And all of this without requiring any of that high speed interrupt processing that s been so troublesome in the past And this is just the counters There are many more generalized features implemented in the hardware and software We also have interrupt processing available where interrupts are routed to functions in your code They are dispatched at task level and not as kernel interrupt handlers This is to help reduce many of the real time bugs that have been at the root of so many issues in our programs in the past We believe this works because of the extensive FPGA hardware support We have chosen to not use the C exception handling mechanism although it is available to teams for their programs Our reasoning has been that uncaught exceptions will unwind the entire call stack and cause the whole robot program to quit That didn t seem like a good idea in a finals match in the Championship when some bad value causes the entire robot to stop The objects that represent each of the sensors are dynamically allocated We have no way of knowing how many encoders motors or other things a team will put on a robot For the hardware a
55. is developed You can save each revision of your code in a repository go back to a previous revision and compare revisions to see what changed You should install a Subversion client if e You need access to the WPI Robotics Library source code installed on a Subversion server e You have your own Subversion server for working with your team projects There are a number of clients that will integrate with Workbench but we ve been using Subclipse Installing the Subclipse client into Workbench Subclipse can be downloaded from the internet and installed into Workbench The following instructions describe how to do it On the help menu select Software updates then Find and Install Select Search for new features to install and 9 InstalUUpdate Feature Updates a Choose the way you want to search for features to install pE click Next Search for updates of the currently installed features Select this option if you want to search for updates of the features you already have installed Select this option if you want to install new features from existing or new update sites Some sites may already be available You can add new update site URLs to the search Revision 0 5 28 December 2008 82 Advanced Programming Topics Using Subversion with Workbench Click New Remote Site to add the Subclipse update site Update sites to visit Select update sites to visit while looking
56. le window over the network Gets everything with no tether cable Goes away on reboot Allocate a console In the Debug Configuration debug icon in toolbar select the run or debug configuration Then look at the Common tab There check the Allocate Console checkbox Survives reboots Seems to only print current task output Revision 0 5 28 December 2008 22 Using Wind River Workbench Deploying the C C Program Deploying the C C Program Deploying a program to the cRIO copies it to the solid state memory so that it will automatically start when the robot is turned on The FIRST Downloader plug in for Workbench will automatically load the program into the cRIO to deploy it and delete the program from the cRIO to undeploy it Note It s important to not try to debug the program using the previously described procedure while there is another instance of the program already running in the cRIO To set up Workbench to deploy your program click the Window menu then Preferences then FIRST Preferences type filter text Value must be an existing file H General FIRST Downloader Preference Page C C FIRST Downloader Preferences The team number 190 Help The file to download to the Robot C WindRiver workspace SimpleTemplate PPC603gnu Simp Install Update Remote Systems RSS Atom Feed View Run Debug Team Terminal Wind River Cancel Fill in you
57. loyed code only runs on reboot it s the LV Runtime that goes through a list of programs to run on startup Those programs are loaded from the flash disk on the cRIO It actually is always trying to load the deployed program which has a fixed name regardless of what you call it But when the program is UnDeployed deleted it fails silently to load the file When you are using the debugger the program is loaded into RAM and runs from there If you have the program starting from disk and running in the background then you launch it again for debugging or a different program things get very confusing It is also sometimes advantageous to reboot between debugging sessions Sometimes things don t get completely cleaned up even if you try to unload the program We re working on that You can reboot remotely by right clicking on the connection in the Remote Systems tab in Workbench and selecting Reset target or something like that It will reboot it takes about 15 sec The steps for debugging if there is already a programmed deployed 1 Undeploy 2 Reboot the cRIO 3 Do debug in Workbench To deploy a program to the cRIO 1 Download 2 Reboot the cRIO Revision 0 5 28 December 2008 Z 1 Using Wind River Workbench Debugging your robot program Debugging your robot program You can monitor control and manipulate processes using the debugger This section will describe how to set up a debug session on a robot control program f
58. lue may be used to drive the robot toward a target Example 2 using specified ranges To manage your own values for the color and light ranges you simply create Range objects Range hue sat lum hue minValue 140 Hue hue maxValue 155 sat minValue 100 Saturation sat maxValue 255 lum minValue 40 Luminance lum maxValue 255 FindColor IMAQ HSL amp hue amp sat amp lum amp par Tracking also works using the Red Green Blue RGB color space however HSL gives more consistent results for a given target Revision 0 5 28 December 2008 7 0 Vision Image Processing Color Tracking Example 3 Here is an example program that enables the robot to drive towards a green target When it is too close or too far the robot stops driving Steering like this is quite simple as shown in the example The example assumes that a RobotDrive object has been set up called myRobot The following declarations in the class are used for the example RobotDrive myRobot Range greenHue greenSat greenLum This is the initialization of the RobotDrive object the camera and the colors for tracking the target It would typically go in the RobotBase derived constructor if StartCameraTask 1 printf Failed to spawn camera task Error code s GetErrorText GetLastError myRobot new RobotDrive 1 2 values for tracking a target may need tweaking in your environment greenHue minValue 6
59. n internal reservation system is used so that people don t accidentally reuse the same ports for different purposes although there is a way around it if that was what you meant to do I can t say that our library represents the only right way to implement FRC robot programs There are a lot of smart people on teams with lots of experience doing robot programming We welcome their input in fact we expect their input to help make this better as a community effort To this end all of the source code for the library will be published on a server We are in the process of setting up a mechanism where teams can contribute back to the library And we are hoping to set up a repository for teams to share their own work This is too big for a few people to have exclusive control we want this software to be developed as a true open source project like Linux or Apache Revision 0 5 28 December 2008 7 Getting Started A simple robot program A simple robot program Creating a robot program has been designed to be as simple as possible while still allowing a lot of flexibility Here s an example of a template that represents the simplest robot program you can create include WPILib h class RobotDemo public SimpleRobot RobotDemo void put initialization code here void Autonomous void put autonomous code here void OperatorControl void put operator control code here START_ROBOT_CLASS RobotDemo Ther
60. n the Iterative Robot base class If you would like to use it follow the instructions from the previous section except select Iterative Robot Main Program The project will be created in your workspace The methods that the user fills in when creating a robot based on the IterativeRobot base class are Table 3 IterativeRobot class methods that are called as the match proceeds through each phase RobotInit Called when the robot is first turned on This is a substitute for using the constructor in the class for consistency This method is only called once DisabledInit Called when the robot is first disabled AutonomousInit Called when the robot enters the autonomous period for the first time This is called on a transition from any other state TeleopInit Called when the robot enters the teleop period for the first time This is called ona transition from any other state DisabledPeriodic Called periodically during the disabled time based on a periodic timer for the class AutonomousPeriodic Called periodically during the autonomous part of the match based on a periodic timer for the class TeleopPeriodic Called periodically during the teleoperation part of the match based on a periodic timer for the class DisabledContinuous Called continuously while the robot is disabled Each time the program returns from this function it is immediately called again provided that the state hasn t changed AutonomousContinuous Called continuously wh
61. nch will use to build your project Revision 0 5 28 December 2008 89 Advanced Programming Topics Getting the WPILib Source Code Select the Build Paths tab Properties for SimpleRobot EXC to use the downloaded type filter text Build Properties WPILib include files to your owe Specify all build properties n proj ect rather than the Build Properties Build Support and Specs 3 Build Tools Build Macros Build Paths m Libraries Builders wows installed versi on C C General Redirection root directory Browse Project Info Note Leave this field blank to store build output together with the sources or enter an absolute Project References path environment variables are permissible to redirect the output Refactoring seii Build spec specific settings fay Denia Settings Active build spec l PPC603gnu M Redirection directory PPC603gnu Default Include paths E Include directories Generate IS WS ROOT DIR WPlLib Add IS WIND_BASE target h IS WIND_BASE target h wrn coreip Add to all Remove from all Up Down ok Cancel Select the Libraries tab and Properties for SimpleRobot ce tees select the WPILib a library Build Properties Ue v file from the downloaded boc Specify all build properties WPILib project instead of the Build Properties Build Support and Specs
62. nclude calculating a histogram for color or intensity and obtaining values by pixel Contrast may be improved by equalizing the image Specific color planes may be extracted Thresholding and filtering based on color and intensity characteristics are used to separate particles that meet specified criteria These particles may then be analyzed to find the characteristics Revision 0 5 28 December 2008 6 9 Vision Image Processing Color Tracking Color Tracking High level calls provide color tracking capability without having to call directly into the image processing routines You can either specify a hue range and light setting or pick specific ranges for hue saturation and luminance for target detection Example 1 using defaults Call GetTrackingData with a color and type of lighting to obtain default ranges that can be used in the call to FindColor The ParticleAnalysisReport returned by FindColorQ specifies details of the largest particle of the targeted color TrackingThreshold tdata GetTrackingData BLUE FLUORESCENT ParticleAnalysisReport par if FindColor IMAQ HSL amp tdata hue amp tdata saturation amp tdata luminance amp par printf color found at x i y i par center mass x normalized par center mass y normalized printf color as percent of image d par particleToImagePercent The normalized center of mass of the target color is a range from 1 0 to 1 0 regardless of image size This va
63. nctions overridden to change the behavior Additional templates can be implemented that implement other behaviors for example event driven models Follow these steps to create a sample project In this case the sample is the SimpleRobotTemplate but you can use any of the provided samples click File from the main New Example co menu then New then Example From the example project window select VxWorks Downloadable Kernel Wizards Module Sample Project type filter text and then click Next Select a wizard mmm Creates a new VxWorks downloadable kernel module sample project i Native Sample Project F VxWorks Downloadable Kernel Module Sample Project 1B VxWorks Real Time Process Sample Project Revisions 28 December 2008 18 Using Wind River Workbench Creating a robot project Select Simple Robot Template from S ample Sample Project Template Project Template window Select a sample project template o Notice that a description of the template is displayed in Available Examples Information the Information window C Demonstration Program Simple Robot Template Click Finish anda proj ect V Default Robot Main Program This program is the simplest sample program that W Iterative Ri Main Program implements the full field control and shows the use of will be created in your rc the watchdog timer This is an excellent starting point workspace
64. o Digital converter system has a number of features not available on simpler controllers It will automatically sample the analog channels in a round robin fashion providing an aggregate sample rate of 500 ks s 500 000 samples second These channels can be optionally oversampled and averaged to provide the value that is used by the program There are raw integer and floating point voltage outputs available in addition to the averaged values The averaged value is computed by summing a specified number of samples and performing a simple average The summed value is divided by the number of samples that are in the average When the system averages a number of samples the division results in a fractional part of the answer that is lost in producing the integer valued result That fraction represents how close the average values were to the next higher integer Oversampling is a technique where extra samples are summed but not divided down to produce the average Suppose the system were oversampling by 16 times that would mean that the values returned were actually 16 times the average with the fractional part discarded Over samp 2 Average E nine 2 2 a Ar 9 AAL M z f S M mmy N over Sample bits Revision 0 5 28 December 2008 5 3 Sensors Analog Inputs To set the number of oversampled and averaged values use the methods void SetAverageBits UINT32 bits UINT32 GetAverageBits void void SetOversam
65. of code where the source is not available A Step Return will bring you back up a level The lower right view shows the current value of variables To see a variable that is not displayed select the Expressions tab and enter the variable name If it is in scope its current value will be shown To stop debugging you may disconnect or terminate the process Disconnecting detaches the debugger but leaves the process running in its current state Terminating the process kills it on the target Troubleshooting Source code displayed is out of sync with cursor when debugging The source has changed since it was loaded onto the cRIO Rebuild the project build clean and make sure included projects are up to date Robot program not visible in the Debug View Make sure that Automatically attach spawned Kernel Tasks option is set The first stop happens before your program is started It will appear after you Resume 24 Revision 0 5 28 December 2008 Using Wind River Workbench Getting printf cout output on the PC Debugging your robot program There are three ways to see output from printf cout in Workbench all with advantages and disadvantages Connect a serial cable between the computer and robot controller Always works over system reboots Robot must be tethered Use a network Target Console To get that right click on the remote system then Target Tools then Target Console This will create a conso
66. onnect 0v Ground Figure 4 SRF04 Ultrasonic Rangefinder connections Both the Echo Pulse Output and the Trigger Pulse Input have to be connected to digital I O ports on a digital sidecar When creating the Ultrasonic object specify which ports it is connect to in the constructor Ultrasonic ultra ULTRASONIC PING ULTRASONIC ECHO In this case ULTRASONIC PING and ULTRASONIC ECHO are two constants that are defined to be the ports numbers For ultrasonic rangefinders that do not have these connections don t use the Ultrasonic class Instead use the appropriate class for the sensor for example an AnalogChannel object for an ultrasonic sensor that returns the range as a voltage Example Reads the range on an ultrasonic sensor connected to the ports ULTRASONIC PING and ULTRASONIC ECHO Ultrasonic ultra ULTRASONIC PING ULTRASONIC ECHO ultra SetAutomaticMode true int range ultra GetRangeInches Revision 0 5 28 December 2008 46 Sensors Counter Subsystem Counter Subsystem The counters subsystem represent a very complete set of digital signal measurement tools for interfacing with many sensors that you can put on the robot There are several parts to the counter subsystem Ps Sas EIS Sen rshon W Figure 5 Schematic of the possible sources and counters in the Counter Subsystem in the cRIO Counters can be triggered by either Analog Triggers or Digital Inputs The trigger source can either control
67. or additional complexity in the program design It is based on a set of methods that are repeatedly called based on the current state of the field The intent is that each method is called it does some processing and then returns That way when the field state changes a different method can be called as soon as the change happens Pros e Can have very fine grain control of field state changes especially if practicing and retesting the same state over and over Cons e More difficult to write action sequences that unfold over time It requires state variables to remember what the robot is doing from one call the next RobotBase The base class for the above classes This provides all the basic functions for field control the user watchdog timer and robot status This class should be extended to have the required specific behavior Revision 0 5 28 December 2008 3 1 Creating a Robot Program SimpleRobot class SimpleRobot class The SimpleRobot class is designed to be the base class for a robot program with straightforward transitions from Autonomous to Operator Control periods There are three methods that are usually filled in to complete a SimpleRobot program Table 2 SimpleRobot class methods that are called as the match moves through each phase the Constructor method with the same name as the robot class Autonomous OperatorControl Put all the code in the constructor to initialize sensors and any program vari
68. or the cRIO The Wind River Workbench User s Guide contains the complete documentation on how to use the debugger To run a program that derives from one of the WPILib robot base classes such as SimpleRobot cpp or IterativeRobot cpp a macro called START_ROBOT_CLASS is used that starts one task that does nothing except kick off the robot task This is done so that the correct run options can be set See SimpleDemo or IterativeDemo for examples This makes it necessary to set up debug to attach to the spawned task instead of the first task started To start a debug session connect to the target and click on the bug icon or right click the project and select Debug Kernal Task The Debug dialog is displayed Create manage and run configurations Ite x e ES 9 Attach to Target l s E C C Attach to x C C Local App Connection to use VxWorks x 10 11 66 2 localhost v Hide unconnected E C C Postmorte VxWorks6x_10 11 66 2is connected for running Kernel Tz Gs Kernel Task Gs FRC UserPro Kernel Task to Run FRC UserPro sme O EEWUUTTON Qe RunProgram i E RunProgram E RunProgram iority 100 Qe SimpleRobot stack size 0x20000 7 Launch Control Gs Process on Targe s RTP on Target Name FRC UserProgram StartupLibraryInit VisionDemo out VxWorks6x 10 11 66 2 Connection Advanced Options Options 0x 1000010 35 Filter match
69. p amp v 000 JavaHL Adapter recommended amp U0U SvNKit Adapter BETA optional amp amp v 00 Subdipse required C Filter features included in other features on the list Revision 0 5 28 December 2008 8 4 Advanced Programming Topics Using Subversion with Workbench Accept the license and click Next Feature License Some of the features have license agreements that you need to accept before proceeding with the installation ter Subclipse Software User Agreement 11th April 2006 Subdipse is licensed under the terms of the Eclipse Public License v1 0 http www edipse org legal epl v 10 html Applicable Licenses Subcdiipse is built upon a number of other open source technologies and products Here is a list of those products with links to their licenses I accept the terms in the license agreements OI do not accept the terms in the license agreements Click Finish and the install will start If asked select Install All in the Verification window You should allow Workbench to restart after finishing Installation The following features will be installed You can select a feature and change the location where the feature will be installed Features to install Feature Name Feature Version Feature Installation Directory pk Subdipse 1 4 4 Unknown C WindRiver workbench 3 0 wrwb platfor pk Subversion Native 1 5
70. phore task VxWorks Revision 0 5 28 December 2008 1 0 3 Index Index Accelerometer 42 Analog Inputs 52 Analog Triggers 54 C Programs 11 Camera 55 Compass 45 Compressor 66 Conventions 34 Counter 47 Dashboard Images 56 Digital I O 39 Digital Inputs 40 Digital Output 41 Driver Station 77 Encoders 49 Examples C Program 12 Color Tracking 69 70 Gyro 43 Image Processing 68 Interrupts 92 Servo 62 Simple 8 27 Revision 0 5 28 December 2008 Using 12C Solenoid 67 Synchronized Object 73 Ultrasonic Rangefinder 46 Geartooth Sensor 50 Gyro 43 Image Processing 68 Color Tracking 69 Using FRC Vision API 68 Using NI Vision API 68 IterativeRobot 31 33 Jaguar 61 Motor Controllers 58 Jaguar 61 PWM 59 Victor 60 Multitasking 71 Objects 9 Pneumatics 65 Quadrature Encoders 51 Robot Base Classes 31 RobotBase 31 36 RobotDrive 63 Semaphores 73 sensors 38 104 Index Servo 62 SimpleRobot 8 31 32 Solenoid See Pneumatics Subversion 81 Accessing Source Code 85 Installing Subclipse 81 Ultrasonic rangefinder 46 Version Control See Subversion Vision See Image Processing VxWorks Concurrency 71 Creating Tasks 72 Critical Regions 73 Revision 0 5 28 December 2008 Using 12C watchdog timer 28 37 Workbench 13
71. pleBits UINT32 bits UINT32 GetOversampleBits void The number of averaged and oversampled values are always each a power of 2 number of bits of oversampling averaging Therefore the number of oversampled or averaged values is 2 5 where bits is passed to the methods SetOversampleBits bits and SetAverageBits bits The actual rate that values are produced from the analog input is reduced by the number of averaged and oversampled values For example setting the number of oversampled bits to 4 and the average bits to 2 would reduce the number of delivered samples by 2 or 64 The sample rate is fixed per analog I O module so all the channels on a given module must sample at the same rate However the averaging and oversampling rates can be changed for each channel The WPI Robotics Library will allow the sample rate to be changed once for a module Changing it to a different value will result in a runtime error being generated The use of some sensors currently just the Gyro will set the sample rate to a specific value for the module itis connected to Summary e There is one sample rate per module The number of oversampled and averaged values is expressed as a power of 2 e The delivered sample rate isreduced by the oversample and average values e There are only 2 accumulators in the system that are connected to analog channels 1 and 2 of the first Analog Module This means that only two devices such as gyros that use the
72. r team number and the OUT file for your project that should be loaded The OUT file will typically be in the PPC603gnu directory in the Workbench workspace directory for your project Once this is set up to deploy the project select the FIRST menu item then Download The program will be renamed and loaded into the correct directory in the cRIO The next time the cRIO is restarted the program will start running To undeploy the project select FIRST then Undeploy from the menu Revision 0 5 28 December 2008 2 6 Creating a Robot Program Deploying the C C Program Creating a Robot Program Now consider a very simple robot program that has these characteristics Autonomous period Drives in a square pattern by driving half speed for 2 seconds to make a side then turns 90 degrees This is repeated 4 times Operator Control Uses two joysticks to provide tank steering for the robot period The robot specifications are Left drive motor PWM port 1 Right drive motor PWM port 2 Joystick driver station joystick port 1 Starting with the template for a simple robot program we have include WPILib h class RobotDemo public SimpleRobot RobotDemo void put initialization code here void Autonomous void put autonomous code here void OperatorControl void put operator control code here START_ROBOT_CLASS RobotDemo Now add objects to represent the motors and joystick The t
73. rammers that prefer to use pointers while at the same time accommodating those who prefer to use references Revision 0 5 28 December 2008 3 0 Creating a Robot Program Built in Robot classes Built in Robot classes There are several built in robot classes that will help you quickly create a robot program These are Table 1 Built in robot base classes to create your own robot program Subclass one of these depending on your requirements and preferences SimpleRobot This template is the easiest to use and is designed for writing a straight line autonomous routine without complex state machines Pros e Only three places to put your code the constructor for initialization the Autonomous method for autonomous code and the OperatorControl method for teleop code Sequential robot programs are trivial to write just code each step one after another No state machines required for multi step operations the program can simply do each step sequentially Automatic switching between Autonomous and Teleop code segments is not easy and may require rebooting the controller The Autonomous method will not quit running until it exits so it will continue to run through the TeleOp period unless it finishes by the end of the Autonomous period so be sure to make your loops check that it s still the autonomous period IterativeRobot This template gives additional flexibility in the code for responding to various field state changes in exchange f
74. rdware in the FRC control system and your robot There are classes to handle sensors motors the driver station and a number of other utility functions like timing and field management The library is designed to e Deal with all the low level interfacing to these components so you can concentrate on solving this year s robot problem This is a philosophical decision to let you focus on the higher level design of your robot rather than deal with the details of the processor and the operating system e Understand everything at all levels by making the full source code of the library available You can study and modify the algorithms used by the gyro class for oversampling and integration of the input signal or just ask the class for the current robot heading You can work at any level First something about our new environment We have about 500x more memory and 40x faster for fixed point and even faster for floating point over the PIC that we re used to using The past years high speed sensor interrupt logic that required precise coding hand optimization and lots of bugs has been replaced with dedicated hardware FPGA When the library wants the number of ticks on a 1000 pulse revolution optical encoder it just asks the FPGA for the value Another example is A D sampling that used to be done with tight loops waiting for the conversions to finish Now sampling across 16 channels is done in hardware We chose C as a language because
75. s or a static variable Pointer to object Victor leftMotor new Victor 3 leftMotor gt Set 1 0 Object must be explicitly deallocated using the C delete operator How do you decide what to use The next section will discuss this Revision 0 5 28 December 2008 10 Getting Started Writing C programs e e Writing C programs You can also write C programs with the WPI Robotics Library using a set of C functions that map on top of the C classes and methods To write C code e You need to create cpp C files rather than C files because the C wrapper functions take advantage of overloaded functions This means that there are a number of functions that have the same name but different argument lists This increases the compatibility with the C programming interfaces and will make transition to C much easier if you choose to do that e Specify port and or slot module numbers in most of the functions Behind the scenes the functions allocate C objects that correspond to the functions that you are using This serves two purposes it ensures that you are not using a particular port for two purposes accidently since the C underlying functions track reservations and makes the code very similar to previous years where the port numbers were on each call You will find that there are a few C higher level code options that do not exist in C itis a lower level interface to the hardware connected to the cRIO and the driver st
76. s a list of the metrics CAM STARTS CAM STOPS CAM NUM IMAGE CAM BUFFERS WRITTEN CAM BLOCKING COUNT CAM SOCKET OPEN CAM SOCKET INIT ATTEMPTS CAM BLOCKING TIMEOUT CAM GETIMAGE SUCCESS CAM GETIMAGE FAILURE CAM STALE IMAGE CAM GETIMAGE BEFORE INIT CAM GETIMAGE BEFORE AVAILABLE CAM READ JPEG FAILURE CAM PC SOCKET OPEN CAM PC SENDIMGAGE SUCCESS CAM PC SENDIMAGE FAILURE CAM PID SIGNAL ERR CAM BAD IMAGE SIZE CAM HEADER ERROR The following example call gets the number of images served by the camera int result GetCameraMetric CAM NUM IMAGE Images to PC The class PCVideoServer when instantiated creates a separate task that sends images to the PC for display on a dashboard application The sample program DashboardDemo shows an example of use Revision 0 5 28 December 2008 5 7 Sensors Camera StartCameraTask Initialize the camera PCVideoServer pc The constructor starts the image server task pe Stop Stop image server task pe Start Restart task and serve images again To use this code with the LabVIEW dashboard the PC must be configured as IP address 10 x x 6 to correspond with the cRIO address 10 x x 2 Revision 0 5 28 December 2008 5 8 Controlling Motors Camera Controlling Motors The WPI Robotics library has extensive support for motor control There are a number of classes that represent different types of speed controls and servos The librar
77. sensors encoders analog encoders and potentiometers measurement Robot orientation Compass gyro accelerometer ultrasonic rangefinder Generic pulse output Counters In the past high speed counting of pulses of encoders or accurate timing of ultrasonic rangefinders was implemented in complex real time software and caused a number of problems as system complexity increased On the cRIO the FPGA implements all the high speed measurements through dedicated hardware ensuring accurate measurements no matter how many sensors and motors are added to the robot In addition there are many features in the WPI Robotics Library that make it easy to implement many other types of sensors not directly supported with classes For example general purpose counters can measure period and count of any device generating pulses for its output Another example is a generalized interrupt facility to catch high speed events without polling and potentially missing them Revision 0 5 28 December 2008 3 8 Sensors Digital I O Subsystem Digital I O Subsystem Dig Sie Cor The NI 9401 module has 32 GPIO lines Through the circuits in the digital sidecar these map into 10 PWM outputs 8 Relay outputs for driving Spike relays the signal light an I2C port and 14 bidirectional GPIO lines The basic update rate of the PWM lines is a multiple of approximately 5 ms Jaguar speed controllers update at slightly over Sms Victors update 2X slightly over 10ms
78. sing the value will cause the robot correct more slowly maybe never getting back to the desired heading Fhis is proportional control Revision 0 5 28 December 2008 44 Sensors HiTechnicCompass HiTechnicCompass Example Create a compass on the digital module plugged into slot 4 Each digital I O module has only one I2C port to connect a sensor to Use of the compass is somewhat tricky since it uses the earth s magnetic field to determine the heading The field is relatively weak and the compass can easily develop errors from other stronger magnetic fields from the motors and electronics on your robot If you do decide to use a compass be sure to locate it far away from interfering electronics and verify the readings on different headings HiTechnicCompass compass 4 compVal compass GetAngle Revision 0 5 28 December 2008 4 5 Sensors Ultrasonic rangefinder Ultrasonic rangefinder The WPI Robotics library supports the common Daventech SRF04 or Vex ultrasonic sensor This sensor has a two transducers a speaker that sends a burst of ultrasonic sound and a microphone that listens for the sound to be reflected off of a nearby object It uses two connections to the cRIO one that initiates the ping and the other that tells when the sound is received The Ultrasonic object measures the time between the transmission and the reception of the echo SRF04 Connections 5v Supply Echo Pulse Output Trigger Pulse Input Do Not C
79. t the sensor Table 4 Encoder types that are supported by WPILib These types of encoders are described in the following sections Channel A Channel B Code track on disk Channel A l Channel B zd 1 i go Figure 6 Quadrature encoder phase relationships between the two channels Example Revision 0 5 28 December 2008 4 9 Sensors Geartooth Sensor Geartooth Sensor Gear tooth sensors are designed to be mounted adjacent to spinning ferrous gear or sprocket teeth and detect whenever a tooth passes The gear tooth sensor is a Hall effect device that uses a magnet and solid state device that can measure changes in the field caused by the passing teeth Figure 7 A gear tooth sensor mounted on a VEX robot chassis measuring a metal gear rotation Notice that there is a metal gear attached to the plastic gear in this picture The gear tooth sensor needs a ferrous material passing by it to detect rotation Example Revisions 28 December 2008 50 Sensors Quadrature Encoders Quadrature Encoders Background Information Encoders are devices for measuring the rotation of a spinning shaft Encoders are typically used to measure the distance a wheel has turned that can be translated into robot distance across the floor Distance moved over a measured period of time represents the speed of the robot and is another common measurement for encoders Encoders typically have a rotating disk with slots that spins in front of a photod
80. t will also count square waves Counter counter amp digIn f f auesexumdbizqe iie Cliguicell qxeusswue to 0 digOut Set 0 i arcere the Counter cowating at O counter Reset counter Start register and enable the interrupt handler digIn RequestInterrupts tiHandler digIn Enablelinterrupts JJ ew 5 Cines while counter Get 5 Werte 1 0 Cake Oller Ss Ce 1 8 Wait 1 0 digOut Set 0 verify correct operation if interruptCounter 5 amp amp counter Get 5 printf Test passed n free resources diglIn Disablerinterrupts digIn CancellInterrupts END TEST TestInterruptHandler Revision 0 5 28 December 2008 9 3 Advanced Programming Topics Creating your own speed controllers Creating your own speed controllers Revision 0 5 28 December 2008 9 4 Advanced Programming Topics PID Programming PID Programming Revision 0 5 28 December 2008 95 Advanced Programming Topics Using the serial port Using the serial port Revision 0 5 28 December 2008 9 6
81. tCompetition method looks approximately like this void SimpleRobot StartCompetition void while IsDisabled Wait 0 01 wait for match to start if IsAutonomous if starts in autonomous Autonomous run user supplied Autonomous code while IsAutonomous Wait 0 01 wait until end of autonomous period while IsDisabled Wait 0 01 make sure robot is enabled OperatorControl start user supplied OperatorControl It uses the IsDisabled and IsAutonomous methods in RobotBase to determine the field state and calls the correct methods as the match is sequenced Similarly the IterativeRobot class calls a different set of methods as the match progresses Revision 0 5 28 December 2008 3 6 Creating a Robot Program Watchdog timer class Watchdog timer class The Watchdog timer class helps to ensure that the robot will stop operating if the program does something unexpected or crashes A watchdog object is created inside the RobotBase class the base class for all the robot program templates Once created the program is responsible for feeding the watchdog periodically by calling the Feed method on the Watchdog Failure to feed the Watchdog results in all the motors stopping on the robot The default expiration time for the Watchdog is 500ms 0 5 second Programs can override the default expiration time by calling the SetExpiration expiration time in seconds method on the Watchdog
82. that describes the program to be debugged and which remote system you want to debug it on 3 The FIRST Downloader settings that tell which program should be deployed onto the cRO when you are ready to load it for a competition or operation without the laptop Creating a Remote System in Workbench Workbench connects to your cRIO controller and can download and remotely debug programs running on it In order to make that connection Workbench needs to add your cRIO to its list of Remote Systems Each entry in the list tells Workbench the network address of your cRIO and has a kernel file that is required for remote access To create the entry for your system do the following steps Note the Reset connected target reboot the server option doesn t work reliably and other features seem to have issues unless the Console out switch on the cRIO is set to on Normally this switch enables the console output for viewing with a serial port but leaving it on even if there is no serial cable connected improves the system reliability Revision 0 5 28 December 2008 1 4 Using Wind River Workbench Setting up the environment Right click in the empty area in the Remote Systems window Select New Connection In the Select Remote System Type window select Wind River VxWorks 6 x Target Server Connection and click Next Select Remote System Type System type type filter text General Th F
83. up and Shutdown for workspace startup and shut b Appearance Compare Patch MRNA Content Types V Build automatically Editors E Refresh automatically Keys V Save automatically before build Network Connections Perspectives Search Startup and Shutdown Web Browser Welcome 5 Always Never Prompt Workspace save interval in minutes 5 Open referenced projects when a project is opened 4 Workspace Build Order Text file encoding Linked Resources 9 Default Cp1252 HU EM Other Cp1252 Log File Managemer gt C C FIRST Downloader Preferen Help Te Sl TuS HEEL Revision 0 5 28 December 2008 Z 0 Using Wind River Workbench Downloading the project to the cRIO Downloading the project to the cRIO There are two ways of getting your project into the cRIO 1 Using a Run Debug Configuration in Workbench This loads the program into the cRIO RAM memory and allows it to run either with or without the debugger When the robot is rebooted the program will no longer be in memory 2 Deploy the program through the FIRST Downloader option in Workbench In this case the program will be written to the flash disk inside the cRIO and will run whenever it is rebooted until it is Undeployed deleted from flash This is the option to take a finished program and make it available for a match so that it will run without an attached computer to always load it The dep
84. wer case except acronyms which are all upper case Method name Initial upper case letter then camel case StartCompetition Autonomous GetAngle a Member variable m_ followed by the member variable name m deleteSpeedControllers starting with a lower case letter then camel m_sensitivity case Local variable Initial lower case targetAngle All upper case with _ between words but use DISALLOW_COPY_AND_ASSIGN you should use const values and inline function instead of macros Constructors with slots and channels Most constructors for physical objects that connect to the cRIO take the port number in the constructor The following conventions are used e Specification of an I O port consists of the slot number followed by the channel number The slot number is the physical slot on the cRIO chassis that the module is plugged into For example for Analog modules it would be either 1 or 2 The channel number is a number from 1 to n where n is the number of channels of that type per I O module e Since many robots can be built with only a single analog or digital module there is a shorthand method of specifying port If the port is on the first lowest numbered module the slot parameter can be left out Examples are Revision 0 5 28 December 2008 3 4 Creating a Robot Program WPI Robotics Library Conventions Jaguar UINT32 channel channel with default slot 4 Jaguar UINT32 slot UINT32 channel channel an
85. wo objects the robot drive with motors in ports 1 and 2 and joystick is declared using the following code RobotDrive drive 1 2 Joystick leftStick 1 Joystick rightStick 2 Revision 0 5 28 December 2008 al Creating a Robot Program Deploying the C C Program For the example and to make the program easier to understand we ll disable the watchdog timer This is a feature in the WPI Robotics Library that helps ensure that your robot doesn t run off out of control if the program malfunctions RobotDemo void GetWatchdog SetEnabled false Now the autonomous part of the program can be constructed that drives in a square pattern void Autonomous void for int i 0 i lt 4 i drivetrain Drive 0 5 0 0 drive 50 of full forward with 0 turn Wait 2 0 wait 2 seconds drivetrain Drive 0 0 0 75 drive 0 forward and 75 turn Drivetrain Drive 0 0 0 0 drive 0 forward 0 turn stop Now look at the operator control part of the program void OperatorControl void while 1 loop forever drivetrain TankDrive leftStick rightStick drive with the joysticks Wait 0 005 Putting it all together we get this pretty short program that accomplishes some autonomous task and provides operator control tank steering Revision 0 5 28 December 2008 E 8 Creating a Robot Program include WPILib h RobotDrive drivetrain 1 2 Joystick leftStick
86. write It provides many operations to support concurrency or the simultaneous execution of multiple pieces of the program called tasks Each task runs is scheduled to run by VxWorks based on its priority and availability of resources it might be waiting on For example if one task does a Wait time then other tasks can run until the time runs out on the waiting task WPILib provides some classes to help simplify writing programs that do multitasking However it should be stressed that writing multi tasking code represents one of the most challenging aspects of programming It may look simple but there are many complications that could give your program unexpected and hard to reproduce errors Revision 0 5 28 December 2008 7 2 Concurrency Creating tasks Creating tasks In your program you may decide to subdivide the work into multiple concurrently running tasks For example you may have a requirement to operate a ball loading mechanism independently of ball shooter the driving code in your robot Each of these functions can be split out into its own task to simplify the overall design of the robot code Revision 0 5 28 December 2008 7 3 Concurrency Synchronized and Critical Regions Synchronized and Critical Regions A critical region is an area of code that is always executed under mutual exclusion i e only one task can be executing this code at any time When multiple tasks try to manipulate a single group of shared data they
87. y is designed to support non PWM motor controllers that will be available in the future The WPI Robotics Library currently supports two classes of speed controllers PWM based motors Jaguars or Victors and servos Motor speed controller speed values floating point numbers that range from 1 0 to 1 0 where 1 0 is full speed in one direction and 1 0 is full speed in the other direction 0 0 represents stopped Motors can also be set to disabled where the signal is no longer sent to the speed controller There are a number of motor controlling classes as part of this group Type Usage PWM Base class for all the pwm based speed controllers and servos Victor Speed controller supplied by Innovation First commonly used robotics competitions with a 10ms update rate Jaguar Advanced speed controller used for 2009 and future FRC competitions with a 5ms update rate Servo Class designed to control small hobby servos as typically supplied in the FIRST kit of parts RobotDrive General purpose class for controlling a robot drive train with either 2 or 4 drive motors It provides high level operations like turning It does this by controlling all the robot drive motors in a coordinatd way It s useful for both autonomous and teleoperated driving Revision 0 5 28 December 2008 5 9 Controlling Motors PWM PWM The PWM class is the base class for devices that operate on PWM signals and is the connection to the PWM signal generation hardware
88. y library The full specification for the simplified FRC Vision programming interface is in the FRC Vision API Specification document which is in the WindRiver docs extensions FRC directory of the Wind River installation with this document The FRC Vision interface also includes routines for high level calls for color tracking TrackingAPI cpp Programmers may also call directly into the low level library by including nivision h and using calls documented in the NI Vision for LabWindows CVI User Manual Naming conventions for the vision processing wrappers are slightly different from the rest of WPILib C routines prefixed with imaq belong to NI s LabVIEW CVI vision library Routines prefixed with frc are simplified interfaces to the vision library provided by BAE Systems for FIRST Robotics Competition use Sample programs provided include SimpleTracker which in autonomous mode tracks a color and drives toward it VisionServoDemo which also tracks a color with a two servo gimbal VisionDemo demonstrates other capabilities including storing a JPEG image to the cRIO and DashboardDemo sends images to the PC Dashboard application Image files may be read and written to the cRIO non volatile memory File types supported are PNG JPEG JPEG2000 TIFF AIDB and BMP Images may also be obtained from the Axis 206 camera Using the FRC Vision API images may be copied cropped or scaled larger smaller Intensity measurements functions available i

Download Pdf Manuals

image

Related Search

Related Contents

la Partition Intérieure Interactive  Joycare JC-507  LG 23LX2R User's Manual  Notice  

Copyright © All rights reserved.
Failed to retrieve file