Presentation is loading. Please wait.

Presentation is loading. Please wait.

Programming Your Robot (in C)

Similar presentations

Presentation on theme: "Programming Your Robot (in C)"— Presentation transcript:

1 Programming Your Robot (in C)
Terry Grant, NASA, Ames Research Center 1/23/03 1/30/03 1

2 Outline 1/23 1/30 Robotics Hardware & Software Architecture
Programming in C Introduction 1/30 Review: Robot Project Requirements & Example Simple Sumo Contest - Simple line follow Teacher as Coach Wrap-up

3 Robot Building & Coding
Completed LEGO robot from MLCAD Ref: Art of LEGO Design Pictures and Code from the Workshop IC4 Environment downloads: Hands-on Challenges Ref:

4 Robotics H/W & S/W Architecture
Bot Multi-tasking S/W Components Real-Time Operating System * P-code interpreter * Input/Output Drivers - Clock * Load/Run modes Handy Board or RCX H/W *Central Processor * Random Access Memory * Special I/O Circuits * Battery & Power Conditioner Interactive C v. 4.10 * Editor * Debug Interpreter * Loader Other Apps Desktop Operating System Desktop Hardware IR for RCX* Lego Mechanical Lego Motors & Sensors Serial Data Interface Charger (HB only)

5 Robot Project Requirements
Hardware configuration and general environmental constraints Operator Requirements Controller requirements All Three Elements are needed and should be written down for a common team understanding

6 Team Strategy & Plans Translating a Challenge into Requirements
Robot physical capabilities Robot behavior (high level code) Operator – robot interaction Assigning tasks and milestones Writing a total schedule (initial and revised) Plan to test capabilities & behavior Plan for full robot tests & re-planning Plan for team coordination meetings

7 Programming in C - Introduction
IC4 provides an editing, compiling, and downloading environment for either RCX or Handy Board. Follows C syntax (grammar) Uses functions < xyz() > declared and called Many functions for Input/Output are preloaded in a library Good tutorial examples provided with the application Multi-tasking capability in O.S. allows sampling & holding multiple conditions in parallel: position, direction, and other sensors 2

8 General Syntax declaring:
output type Function(inputs e.g. int x, int y) {block of statements} calling: Function(x, y); types: int x, y, z; float a, b, c; all variables must have a declared type. global types are defined at the top, outside of a function, and usable by all functions.

9 Simple Example Make a Robot Go Forward and Return H/W & Environment:
Build a bot with the RCX, wired to motors such that forward power moves wheels forward, and put on a demonstration table with enough flat surface Operator: Write the code, load the RCX, and initiate the execution (running) of the code The controller: Turn on the motors forward, wait 2 seconds, reverse the motors, wait 2 seconds, then stop.

10 Simple Code Example IC4 void main() { fd(A); fd(C); sleep(2.0); bk(A); bk(C); off(A); off(C); } Open Interactive C to view the actual environment & write code

11 More Basics Three modes: off, standby, run
Use of ‘view’ button function w/o running a program Use of ‘Interaction’ window in IC4 battery_volts() to check battery Test new functions for I/O, Check list of library functions, global variables Download firmware Upload Arrays for spread-sheet analysis Edit aids Auto-indentation Parenthesis matching Syntax checking (on download) Use of ‘save as’ to file new, or trial code

12 Notation of IC 4 IC notation is the same for RCX & HB if ("condition")
{ "statements" } else while ("condition") { "statements" }

13 Notation of IC4 -2 Defining a function or task: xxx “name”() {
"statements" } xxx = ‘void’ if no return variables = ‘int’ if integer return variables = ‘float’ if floating point return variables

14 Notation of IC4 - 3 Starting and ending parallel tasks:
pid = start_process(taskname()); kill_process(pid);

15 Notation of IC4 - 4 Inputs for RCX - light(y) for y = 1,2, or 3
- light_passive(y) - digital(y) or touch(y)

16 Notation of IC4 - 5 IC Outputs Motor outputs, ports 1 to 3 (or A to C)
To use port 1: fd(1); forward, positive voltage bk(1); backward, negative voltage Motor(1, x); x = -100 to 100 off(1); leave port ‘open’ brake(1); for the RCX only, to brake the motor

17 Notation of IC4 - 6 To display on Controller LCD e.g.
printf(“Hello\n”); printf(“X= %d\n”, x); /* x is an integer */ printf(“X= %f\n”, y); /* y is floating point */ printf(“%d -%d\n”, a, b); /* a & b are integers */ In the RCX only five characters total can be displayed, and “\n” is not needed.

18 Sumo Example

19 Sumo Requirements Robots start facing each other at the edge of a central ring. Robots must start when a button is pushed or the light comes on. Robots must stop after T (5-15) seconds. The first robot to touch the barrier (or cross line) loses. Starting Light 4’ x 4’ barrier Bot 1 Bot 2

20 Light Sensor Sensor includes a LED source: red & near IR.
Photodetector responds strongly to near IR as well as red. [lower = more] Response changes according to ambient light & Battery voltage. Mounting assembly attaches to front bumper facing down as shown in the cover picture.

21 Simple Sumo Behavior Display program title
Wait for prgm_button push, then beep Wait 3 seconds to start Go straight forward while T not exceeded, Stop quickly and turn if line is sensed Back away & turn if bumped When T exceeded brake to a stop

22 Simple Sumo code // LEGO-based Sumo #6 for widetrack bot tlg 1/20/03
// assumes front bumper on port 3, light sensor on 2, motors on A & C // start 3 seconds after prgm button push #define TURN_TIME #define THRES 750 /* assumes nominal white is ~ 720 */ void main() { long time; printf("SUMo6"); while(!prgm_button()); beep(); sleep(3.); // wait 3 seconds time =mseconds(); //beep();

23 Simple Sumo code – cont’d
motor(A,30); motor(C,30);// start straight ahead while(15000L > (mseconds()-time)){ //run time if(light(2)>THRES){ //wait for edge brake(A);brake(C);sleep(.05); //quick stop motor(C,-45);off(A); //turn sleep(TURN_TIME); motor(A,30); motor(C,30); sleep(.2); } if(digital(3)){//back away and turn if bumped motor(A,-30);motor(C,-30);sleep(.2); brake(A); brake(A); brake(C);

24 Light Trigger Calibration
Hardware & Environment L1 is the remote trigger light. L2 is the room lighting. Pd photodetector has a wide field of view. The Controller display helps the operator measure both the dark and light response. The controller [RCX code] sets the “light vs. dark” threshold and waits for the threshold to be exceeded to trigger the action.

25 Sumo - Sensor Test Project
To support a robot sumo contest with a light start, design a robust light trigger for a “sumo wrestling” action which runs the motors for 5 seconds after a light is turned on. Discuss all requirements (total group) Write a code design for each Bot. Write and debug the code Participate in a Bot Sumo contest Compare trigger and behavior designs and results

26 Sumo - Sensor Test Behavior e.g.
Display program title [for a few seconds] Repeat sequence while program is running While prgm_button is not pushed, Display sensor level and Prompt for prgm_button push While view_button is pushed, display and increment the trigger threshold When prgm_button is pushed, Display sensor level Wait for sensor level to cross the trigger threshold, then go forward, etc as original sumo - measuring run time When T is exceeded: stop, display “done” for a few seconds Repeat

27 Line Following Experiments

28 Line Following Experiments
Simple, one sensor Line turns to the right Check sensor responses first Use touch sensor to start & stop

29 Checking sensor first while(digital(1)==0){ // check sensor until switch is hit printf("%d", light(2)); //move on and off line here sleep(.3); } while(digital(1)==1); // wait here to release switch

30 Follow line until touch sensor hit
// follow line to the right motor(A,30); motor(C,30); // start going straight while (digital(1)==0) { // until switch is hit if (light(2) < THRESHOLD) { // if brighter than line motor(C,-30);off(A); // turn right while (light(2) < THRESHOLD); // wait until >= motor(A,30); motor(C,30); // go straight } ao(); // turn off motors when done

Download ppt "Programming Your Robot (in C)"

Similar presentations

Ads by Google