ࡱ> p7 _fbjbjUU "7|7|I_Ml  JJJJ,vr:$$$^m$(%l&8:::::::D< d>`:9&#Nm$9&9&:3$^,:3339&N<$:^:39&:33)7 |)7^ PJ-f)7)7B:0r:)7>1>)73Computer Science 1567 Robot Users Manual Introduction Welcome to instructional robotics laboratory. This course is unlike any of the other programming courses that you have taken. Instead of just generating output, your programs will be interact directly with a mechanical system. They will read sensors, cause wheels to turn, and generate audio. To be successful, you must understand not just how your program is working but also how the mechanical components are put together and how they interact with the environment. This manual will be your guide to the robot hardware and to the interface library that you will use to communicate with the hardware. Robot Hardware Description Your robot for this class is a Pioneer 2 DX, manufactured by Activmedia Robotics. Like everyone else these days, it has a home page, HYPERLINK "http://www.activrobots.com/"http://www.activrobots.com, which you may wish to check out for additional background information. The operating manual from Activmedia is also available on the course web site. Using the picture shown on this page as guide, lets talk about the basic features of this robot. Starting from the bottom, the robot has three points of contact with the ground, two large wheels and a small caster wheel. Separate motors drive the large wheels independently and the caster is passive. This configuration of motors and wheels is an example of a differential direct drive, non-holonomic, system with zero gyro-radius. A holonomic system can move in any direction without first turning. A zero gyro-radius means that the robot can turn in place. If your program sets both drive motors to the same speed, the robot goes straight forward (or backward). Setting the wheels to equal speeds of opposite polarity (e.g., -200 and +200) causes the robot to spin in place. Anything in between causes a smooth turn. The base has a maximum translational speed of approximately 30 inches per second and a maximum rotational speed of 50 degrees per second.  Moving to the top of the robot, notice a gray panel on the side of the robot that frames the power switch and power receptacle. The remaining electrical controls are on the top of the robot. When you turn the scout on, the red LED on the top will light and the electrical system will start up with a pleasant two-tone beep. To charge the robot, simply plug it into the wall. There is one huge catch: THE ROBOT MUST BE ON FOR THE CHARGING CIRCUIT TO WORK. This means that no matter how long you leave it plugged in, if the scout is off, charging will not happen. So, at night, when you tuck the scouts in, leave them plugged in and on. As a confirmation that you have done it right, listen for two short beeps when the power cord is connected. This is the indicator that charging has begun The two push buttons on the top are reset buttons. The red reset button resets the controller chip in the robot electronics. The white switch enables and disables power to the drive motors. Enabling and disabling the drive motors can also be controlled by software. In fact it happens automatically each time you invoke the openSerial method in RobotController. Either of these buttons will stop the robot. However, if you use the white button to disable to motors, your software should be able to detect the state change and shut down more gracefully. On each side of the robot is a ring of round gold coins that are the robots only range sensors: the sonars. These Polaroid sonar transducers provide surprisingly accurate range information from 5 inches to 255 in. Each has a beam width of about 25 degrees, although there may be variation in this beam width, or half cone, from sonar to sonar. A single sonar unit works as follows: The transducer emits a series of 16 pulses at a frequency of 49.4 KHZ. The echo receiver circuitry is disabled, or "blanked," for about 1 millisecond during and slightly beyond this emission phase so that the initial pulses are not detected as echoes. This blanking has a serious effect at close ranges, known as double echo. If the robot is closer than about 5 cm to an object, then the return echo from that object could occur while the echo receiver circuitry is still blanking. Therefore, the object might appear to be farther away than it actually is. Also, a sonar signal will bounce away instead of returning if it hits a smooth object at a shallow angle of attack-- in effect, it can glance off coherently. This will also result in the strike distance being larger than it should be. The sonar sensors communicate with your program through the state array. The state array is an array of integers and the sonar data is returned in the 1st through 16th element of the array, numbered as shown in the diagram to the right. Sonar return values return an integer, which is the distance in cm to a contact. However, values of five or below should not be considered to be accurate. There is one other pair of sensors, not visible from the outside, that are of importance to you in this course: the wheel position encoders. These sensors allow you to track the position of the robot by monitoring to the rotation of the wheels. The sensors are up/down counters which count up or down 756 times per cm of forward or backward translation on each wheel. Based on the relative motion of the two wheels, the sensor controller can also track changes in the angular orientation of the robot. All three of these values are available to your program in the state array in elements 17, 18, and 19. Their indices have also been assigned symbolic constants, XPOS, YPOS, and THETA to make them easy to remember. All readings for these encoders are in units of tenths of inches for translations and tenths of degrees for orientations. For example, a 22-degree turn will be correspond to a change of 220 in the THETA encoder. On the top of the robot is the laptop that will run your control programs. This laptop is connected to the wireless LAN to the computers in the lab, and through the serial (COM) port to the microcontroller chip in the robot. Since we are running the LINUX operating system on all systems. It will not be necessary for you to work directly on the laptop console in order to develop and run programs on the laptop system. Using X-windows you can work remotely which should go a long way making you more comfortable as you write your program. The laptops are attached to the robots w/Velcro. PLEASE DO NOT REMOVE THE LAPTOPS FROM THE ROBOTS. A Peek Inside Before we move on to the software interface, it is important that you get a feel for how the processing and communication works inside the robot and within the lab. We will begin with a look inside the robot as shown in the figure on the next page. Inside of the robots, each of the sensors and the motor controllers communicate with an MC68111 single chip controller. The operation of the embedded controllers is not of interest in this class. However, the communication mechanism and control protocol between the single board PC and the controller system is of critical importance. At the risk of shouting the emperor has no clothes, the primary communication mechanism between the PC and the controller is actually fairly low-tech. It is a 19.2 KB serial link between the COM1 port of the PC and the on-chip serial port of the 6811 controller. Robot operations are encoded into a textual command language that supports relatively high-level control operations. To get a sense of the command language, peek ahead to the software section and look at the methods in the robotController class. Each of these methods roughly translates into one of these commands. For example, invoking the setVel(50,50) method will send a SET VELOCITY 50 50 command across the serial interface. As a result, the robot will begin to move forward at 5 inches per second and will continue moving forward until another command is received. The PC must initiate all communication on this interface, even if the function of the command is to send data between the sensors and the PC. The robot sensors have no mechanism to interrupt the PC or to communicate anything about its state unless it is polled by a command from an application program on the PC. Nor is there a mechanism to inform the 6811controller if an unanticipated event causes the host program to unexpectedly terminate.  Software Environment The JAVA software environment for programming the robot consists of multiple layers as shown below. The primary mechanism that your applications will use to access the hardware is via the methods defined in two objects: the robotController object and the speechController object.  To access the robotController interface, each JAVA project that you create will include a source class called robotController. The methods in the robotController class each in turn invoke native routines from a C language shared library (libp2.so). These library routines are where the controller commands are assembled and sent to the COM1 port. If you would like to see the C side source code, ask one of the instructors or TAs and they can direct you to a web site where the source code is available. A complete description of the methods for the robotController class can be found in Appendix A. Audio output for the speech interface does not go through the COM1 interface to the sensor controller, but instead uses the audio interface in the single board PC. To access the text-to-speech routines (as well as a rudimentary voice input unit), you should include a source class called jspeech in your project. The methods for the text to speech interface. These methods are described in Appendix B. Although there are about a dozen or so methods in the robotController class, almost everything that you will do in the class can be completed using only about five or six. For the remainder of this section we will focus on a detailed description of these most commonly used methods. Before you can do anything with the robot, you must first open the COM1 port on the laptop. Thus, in the initialization code you will need to insert a call to the serialOpen() method. Similarly, before you program terminates, you should invoke serialClose(); Once you are up and running on the serial port your most important command to the robot is the function: setVel(leftwheel, rightwheel). This function (like the several other robot commands) sends a stream of characters via the serial port to the robot. This stream of characters encodes your intended velocities for the two wheels of the robot, in tenths of inches per second. The range of velocity values is an integer between -300 and 300 (a negative velocity indicates backward movement). The indoor spaces are very confined; thus, you should not specify velocities anywhere near 300 or -300 in any case. The behavior of the robot when it receives a command of the form setVel() is precisely as follows (in this order): 1) Begins executing, simultaneously, the specified wheel speeds. 2) Continues executing this motion until the robot receives a new command of any kind or until the command times out. This timeout defaults to the value 2 second. However, you have the power to change this default (to accomplish such feats, refer to Appendix A). Note that turns are accomplished by setting the right and left motors to different speeds (or directions if you want to spin in place). There are two ways to stop moving. You can use selVel(0,0) or you can use a smoother and more motor-friendly method called killMotors(). Unless there is good reason not to, you should use the latter. Now that you are moving, you may want to see where you are going. To use the sonars, you will need to first turn them on. Do so by invoking the turnSonarsOn() method. To turn them off when their clicking get on your nerves, use the turnSonarsOff() method. Turning off the sonars is a good idea in general because it also saves battery power. When your program exits, you need to routinely send a turnSonarsOff() command to the robot as part of your exit code. The current sonar readings as well as the other sensor data for the robot are stored in an integer array called the state array. Your program will have a copy of this state array as part of the robot controller object. However, keep in mind that the embedded controller (on the other side of the COM1 link) maintains the real time sensor data. Before you can use the local copy of the state array, you must first update it by polling the embedded controller. The GS() (for get state) method accomplishes this task.  The following table summarizes the contents of the State_Array. 0Return ValueThe first element of the stateArray [0] is the C-side return value of the last executed command. 1-16Sonar ValuesThese are the 16 sonar sensor readings. Each element is an integer between 5 and 255, where the integer is precisely the number of inches from the sonar transducer to the object that caused an echo. The sonars are arranged in a counterclockwise direction with the sensor in the twelve o'clock position (the front) being index 1 (element 1 of the array) and the sensor at the one o'clock direction of the robot being element 16 of the array.17-19Integrated Position EncodersThese provide the robot's idea of its position based upon its encoder values. 17 provides position along the x-axis, 18 provides position along the y-axis, 19 provides the angle of the robot with respect to their orientation when the robot was turned on. When you turn the robot on, the encoders are all set to zero. That means that the robot resets its Cartesian grid to be lined up with its current orientation, whatever that may bewith the robot pointing straight up the X axis, and Theta = 0. As the robot moves, the encoders show the robot's position and orientation on that grid using tenths of inches and tenths of degrees. The range of values for the robots encoded angle is from 0 to 3599. X position and Y position can have positive or negative values, depending on the quadrant that the robot is in within its make-believe Cartesian grid. The x-axis is aligned with the 0 degree orientation -- if you think about this a bit, it makes perfect sense. 20-21Wheel VelocitiesThese are the current translational velocities of the robots wheels. You probably will never look at these, although it might be fun to look at them after issuing a command to see how well the built-in PID motor controller matches the actual velocities to the ones you requested. 22Bumper StatusThis is another really important sensor. The bumper status will be zero if none of the bumpers are depressed. If any bumper is depressed, this will be nonzero. By the way, there are really 6 separate bumpers on the robot, and each one can be on or off. And from this one number you can figure out which are depressed and which arent. But dont you bother with that just yet.  Robot Program Example To finish this manual, we are included a heavily commented segment of robot code. It is the button1 handler for a Java application GUI. It doesnt do much. The robot simply moves to a point where its front and back sonars readings are nearly equal.  Appendix A: robotController Method Summary The following is a complete description of all robot interface functions available in the Robotcontroller Class to send commands to the robot. int serialOpen()Open the COM1 port of the single board PC so it can communicate with the robot.int serialClose()Close the serial port of the single board PC.int turnSonarsOn()Turns all 16 sonars on in some nice firing pattern and firing speed. int turnSonarsOff()Turn all the sonars off when they get annoying.int GS()Get the stateArray all updated. You do NOT need to call this function if you call any other robot command function, since stateArray is updated when any robot communication is performed.int setVel (int leftVel, int rightVel)Set the velocities of the left and right wheels, in tenths of inches per second.int killMotors()This command is a much more graceful way of causing the robot to stop than setVel(0, 0) because the latter command causes the motors to freeze while killMotors simply cuts off power and allows the robot to coast to a halt.int setAccel (int leftAccel, int rightAccel)Configure the acceleration of the left and right wheels of the robot (make it the same please!), in tenths of inches per second per second. Default is: about 100.int configureSonars (int firingRate, int[] sonarOrder)You can use this command to specify how long the robot should wait between firing sonars and which sonars to fire and in which order. The firing rate is a number specifying how many 4 millisecond intervals the robot should wait between firings. Set it to a number between 2 and 254. Hint: use 4. The sonarOrder is an array containing exactly sixteen integers. The order of the numbers indicates the firing order. If you want to fire only the front three sonars, sonarOrder would be {1,2,16,255,0,0,0,0,0,0,0,0,0,0,0,0}. As you can now guess, after you put in all the sonars you care about, put in a 255. Make sure the whole array is 16 long (buffer it with zeroes). If you want just the back sonar to fire, heres what you do: int[] sonars = new int[16]; sonars[0] = 9; sonars[1] = 255; sonars[2] = 0; sonars[3] = 0; ... sonars[15] = 0; configureSonars(4, sonars); int setTimeout(int timeout)This command allows you to reset the amount of time after which a velocity command is thrown away and the robot "limps" it if received no further communication. The default is twenty seconds. Remember, the best way to override a velocity command is to simply send another one! The parameter is an integer number of seconds. We believe if you set timeout to be 0 then a command never times out. In terms of safety, thats a bad idea!  Appendix B: Speech synthesis methods openSpeech()Use this after you create your jspeech object to initialize the speech. DOES NOT WORK IN A CONSTRUCTORcloseSpeech()The opposite of openSpeech, this closes the speach object, may work in a constructor, but why bother?voiceSpeech(int voice)Each number from 1 to 19 represents a voice. This funcion MUST be called before you try to give it a string. No voice, no speech. Many of the voices are useless and unintelligible, my personal favorites are 1,5 and 18.textSpeech(String thetext)textSpeech is given a string of characters (words really) to say, and placed between quotes. Sometimes it takes some acrobatics to make it sound intelligible. TIP: add commas liberally into the text to introduces pauses, you dont get inflection but this is the next best thing.   Adapted from an original version written by Illah Nourbakhsh for CMU Computer Science 16x62  Which way is forward? To orient yourself, the side of the robot where the caster wheel is located is considered to be the back of the robot. Thus a positive motor speed setting moves the robot forward such that it drags the caster behind. Negative motor settings move the robot such that the caster is pushed while the robot movers backward. This also is the convention used for numbering the sonar sensors and pressure switches. Number zero is always directly (180o) opposite the caster position. Numbering increases in the counterclockwise direction. What to do when the robot runs into something and wont stop Of course, this will never happen to you. But just in case, if the robot is beeping repeatedly as it sits rammed into a wall, the motors are being overdriven. Hit the white motor enable button. If your program has been written to properly monitor the status of the robot and shut down properly, it should detect the change in state. If not you may have to kill your program manually. You should never try to move the robot manually when your program is sending motion commands to it (i.e. when the wheels are moving). Doing so will cause damage to the robot and possibly to you. You can push the robot around when it is stopped. Terminate your program and stop sending commands to the robot. Wait a few seconds to ensure that the current command has timed out. In this state, pushing the robot around is perfectly fine, but if you want to show off your muscle, you can also lift the robot.  EMBED Word.Picture.6  Slip-Sliding Away: Accuracy and the Position Encoders If the world were covered with Velcro, we probably would not have a problem, but as it is, your robot will spend most of the time on a carpeted surface. Plastic wheels on carpeted surfaces tend to slip and this means that your encoders will include errors introduced during acceleration, deceleration and during turns. Depending on how much of a speed demon you are, this may be as little as a few tenths of an inch to an inch or more each time that you start and stop the robot. However fast you go, this can be a serious problem in two situations. First, if you rely solely on the encoders to track the robot position through a turn followed by translation, even a small error in the turn angle will introduce a large position error as the robot moves away. Second, transnational position errors will compound as you navigate a complex path involving several waypoints and turns. We will talk more about this later in the course, but for now use the position encoders only to measure relative intervals such so that position errors will not accumulate and always use both the sonars and the position encoders to solve your navigation problems.  EMBED Word.Picture.8  Losing control. What does all this talk of communication links and control protocols means to you and your programs? Consider the following example. Suppose that your program sends a setVel(50,50) command to the robot. After the robot begins moving your program hits a bug and crashes. Even though your program is dead, the robot is still moving, waiting for another command that will never come. You try to hit the bumper switch to stop it, but with no program running to poll the state array, this is useless. YIKES!!! What do you do? It just wont stop. You cant pick up or push the robot while it is moving. You would rather not turn the robot off since it is dangerous to shut down Windows/NT that way. RELAX, all is not lost. For exactly this reason setVel commands automatically time out after 2 seconds. (This can be changed if necessary using the setTimeout method). Alternatively, you may wish to write an emergency shutdown program that you can start quickly to and send stop commands Note however, that there is not a corresponding timeout set up for the turnSonarsOn() command. So be prepared for the robots to continue clicking-away indefinitely if your program terminates and leaves them on.  EMBED Word.Picture.8  As you know, JAVA is an object-oriented environment. So, when this manual suggests that you invoke a method from the class called RobotController, there is an assumption that you have declared and instantiated a RobotController object in your program using a statement of the form: RobotContoller myDumbRobot; followed somewhere else by myDumbRobot = new RobotController; At this point, the actual invocation of a method like serialOpen takes the form. myDumbRobot.serialOpen(); State array is a C-style integer array. Using the myDumbRobot object above as an example, sonar 1 can be read as follows. int sonar1; . . myDumbRobot.GS(); sonar1 = array.getint(myDumbRobot.State_Array,1); void button1_MouseClick(java.awt.event.MouseEvent event) { // to do: code goes here. int frontsonar, backsonar; boolean flag = true; // Code not shown here // RC was delared to be a RobotController Object // RC was instantiated // Serial port was opened // Start by turning on the Sonars RC.turnSonarsOn(); // get the current state array values RC.GS(); System.out.println("Hit robot bumper to quit..."); // this loop is the main body, we are here until // someone hits a bumper switch while (flag) { // need to get updated state array on each loop // otherwise this program is an infinite loop RC.GS(); // pick off the front and back sonar values from the // state array and debug-print them frontsonar = Array.getInt(RC.State_Array, 1); backsonar = Array.getInt(RC.State_Array, 9); System.out.println("Front sonar: " + String.valueOf(frontsonar) + " Back sonar: " + String.valueOf(backsonar)); // now look at bumper state and exit program if any bumper is // is hit (index = 22) if (Array.getInt(RC.State_Array, RobotController.BUMPER) != 0) { RC.turnSonarsOff(); RC.killMotors(); flag = false; } // rock-a-bye baby else if (frontsonar < backsonar) { RC.setVel(-20,-20); } else { RC.setVel(20,20); } } // end while (true) } ()+8g89`ab|} s ()bdoqy4"ُ|ُvvp 5OJQJ H*OJQJ 5OJQJjCJUmHnHu jCJOJQJUmHnHujOJQJU0JjCJOJQJU CJOJQJjCJOJQJU 6OJQJ CJOJQJOJQJ5>*CJ(OJQJj0J5CJ0OJQJU5CJ0OJQJ**+89 & ' 'STxyxxx$a$MN^fy$$$$&&o(p(** +!+$,%,...@/I0J011o3p3q3 !4"A"B"T"U"b"g"##$$$$$$$$&&**++,$,,,----V.`.../"/@/011M1\11-2;222.3=3>3o3q3B5F5y5~555555@6L68辨裾OJQJ5CJOJQJ5CJOJQJ 6OJQJ5CJOJQJjOJQJUmHnHu 5OJQJjCJUmHnHuOJQJ6CJ CJOJQJ CJOJQJ@q3x5y5z5{5|5}5~555555555555:6$If  !$If:6;6@6M6 8 88.8%:&:;;;<<@|||||||||||$If|$$IflF~ ,"<0    4 la8-8<<3=@=>>>>??????@@@@ A=AOAAAAABBC+CwCCCC D8DDE4F9FGHHHVJWJ\JJJJJKkKlKK_L`L{LMMMMMNNN jU j0JU CJOJQJOJQJ 5OJQJ 6OJQJ CJOJQJ6jOJQJUmHnHu5 CJOJQJOJQJ5CJOJQJB</=0=3=A=>>z@~$$IflyF~ ,"<0    4 la$If>>>>>>>>?????@~xv !|$$IflF~ ,"<0    4 la @@@@@@@A CJOJQJUV jU jUjg> CJUV jUOJQJH*560*N?P@P}PQRRSSTTTTT TVTXXXXXXXY\x $ !a$$a$$j]ja$j]jjx]j\]]]]]]^^__#_$_G_J_______3`4`@`B`D`V````x__4```` aaaaaaa>b@bbbbbcc/c5cccddee[f\f_fCJ6CJOJQJ5CJOJQJ56CJOJQJ CJOJQJ5CJOJQJOJQJ`````aa a7ahaaaaaaaabb;b>bqbbbbbc(c/c ^`/cjccccAdddddCeae|eeeeeeff.f6f=fVfYf\f]f^f_f^ 1h/ =!"#$%DyK yK 8http://www.activrobots.com/Ddj  C FA...\bitmaps\p2-open.jpgR3jS:v(0FjS:v(0JFIFHHPhotoshop 3.08BIMxHHS[ (hh t2 HK'd S6008BIMHH8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM `JFIFHH'File written by Adobe Photoshop 4.0Adobed            `"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?V0' S&B%@9('+hpAٔkO_0DG:;"׶X cF5w>Hհk\A'čzmmU31[ Y@usC˝` = +V:m95VSg6(tDZ|[Tzn9s22,{+WU$觵o ڱ) ePg`WEUَc~1s%G >}B}i.o\O 4 A'dh:;K~K-v[.ѱҼr~GW[>񴙩m]_TWڟNѬ>ӍWc}ԩ:eMxlBO[sUC񟉗+ Gu^v7{O1 /Dx>Op|1G}^NC봽Eeun~/:YTK 9+Ϲ[ m̐1E_[{p>zPg.mgs)-] K~?_ZⵌeUKWdWn,:.klyu6k~@?jYpT`cG{ҋ7}g]5uj{ߖko:}a5Rͦ;h2^޳Zc1guJmu8+8'?{˃\0($WO{_7nvC33=6[\ӏSes}^ݬ]nIn7e9ѷzq?=/l,SM~z[ZBDd4\ J TI#ʛJY>fS,ɭMý&e2z2p.+guq<}َ ;[@7;Gw}uN=gT1SYt2=7n鹭ا'1E H;z˿2AtmWdczcXhnUv<eoEV{OE,O۬2`p-!+=Ug_c(*wo]3+##*zёQ;ٵ^ca5d\mpws 29G* p3,UPnѯFun^K7T^;l,jʈR}UZ~#nzI$yD.Q.AMOH\׆yT Ew&#V?k*~H1FL>B9=p;kv:ΟAm#YK m,܀KӯޭVH`Bˀdb6"=C59v6jsos^Tz lfa3+-u߳}ޓZk{CyUFUn->baFQRdᩑmoK>,qGmckKcgֺdяw0UmuCksٳac>Zh-p~P}R%U~kIef2\,k/{/f-ߵ.K^[cw5?cM`|-+Vu̢W.UoW︙ {L:US:po{slM=Tuڗr>qoltwwٵU X=: yumix/ oXՑ0(RIϫ"1kŌof1>9qN:K} ۗmOn`]ԆzW-k1RcXg?^m]ƩZ 7/Qc9T GrVSApj)Uo?+}no#zOwQ~3neeD "9a#ZĀ@%k}j2UkMvVK^hZG-rSQH[ih;ϳi{?HO #]r^#nn;f@O}V_ތNӲPۋ뭎y2nEONbMu {=:-X\R~HLj釙dù`XV6À# ƻZ 6 ۛNU7ϟVFx"[ '!4 '$!6J|4Ȅ8BIM'File written by Adobe Photoshop 4.0Adobed@"     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?VnyܘN35 ?JCO?;HzzsL"MZ?ot20z"0T >ov:)c"n<_>dcc{NO[ַ9u^ԱJry.zuk\KqS!|)}8fpj<?qc??5Z~]q4b#P?^cM6ǽk|t+pNj݉?=]>ε\ )Suk)ֈ8 n ߟg懩[ݭ{^rS=XWSJ?OϴGL㩒B~[PeO#N}uN?q?z{^"zMR;1և5]HMS۱uot n9<ڵ`@=Xy $5ے/kí!Єۃ<\{PSqBV0^  ^&IKJT筎=?@qߏ>cպ|pmiqV׬S8/jޜz:fbAH"?׏և:*P-pI7X}z=nqN [(O>ZuYV#on->ԅ>ƽ=z 7IxDownAnQ3띠l-djjw 2UIJUc(? V%kJ$8 OT0v .7)<}~l}:q3Ks~Gk#mo{Nӓyg=vhoU=m}==v[VޔUR3g7%Z=tRo‰:2YXYOW æs_jAN8}3TRlu`|LmanDWV=*>N?F^jUmۊjzاƣVb a>G'3ä}n)R\4~9^=G:I/FtՉ7:Kkm%kLܒ 0-kzឞiM_ub'W=?؎/oiՕ}zz-sn4NkF[O>!^Xŭ䋟 }z¤Xs?a-A.} 6؁#}uqՉS8/`8=б^s}.=X qvz\'O>9 #TMejp#&O>d(LOiԴ%=u`pME|}a +Źy7_=X'c48~.nO]K3Aϩې7 l qS4r$] +Z0H?W3?xzz1Lu^:8{/.}~}?^8?pnA[޽QDX`#~?ڕTztzb }mJ[zeM?>GGRm sm==4)N^H(KPozY#4uWuiO>cWgWSq#f gI!J@RA=~qPn=o_ ~{bTuۻFlQSCT-;64΄I.h#ZgQ|iJZHzcbiGͱ5I7CґkP"[n-:20E _2?a?[6J)6ʂ@VS~oh~-Ni.>Τ'Jk۹UWȻǿ~p_zҷ;opT%EuJF(Ww#ST"ŇێRX4vʺO=%H̵'Pux;bJ w'/H?.oS㩰|] &j3h`` cfѓu^LOy܊r0Y?^OkSZ˚SJn~[6c>7h?uORSo="O]R}{Êuٝu3Y7v7&4Ȑ֌2Y[.oさS:Su6'1_93&J'-5J?TpGip9Y4l5+-{<}d#k=EmpoPT taHJM`nGZ9fNkN??AjZ+q} R$ul֝8H@XPGyBxlڻǗ_S"}MߏCNzt!oY?_m2!ӜztJ@`?_uPJۑnߟ{Hn56⧎ueZ}TuϪ=𪯼[n0OYMnG^WVC @%ٻ)*hx_(oq- OՌ(GU!˼[w$3}eRg&rZ nE;{qo#Z2 ^'P;[R|elRgn8Z*SMHޭTT"F,cߟl&GUCJIٵn-uuUAcB E:F?[U2Hm9ic7$}9l :O/@#xPj?#^|>N۳<))i[լ[4hBH,}{a:4tVU?aMBva˼܏_WN۔86ێ:RZb&G[{;I"s2>t 5ŌvYe!i-ŃP$W(z72x͵ֽG3hZzGLuЈbg qfCJ_?t0 _gAgͽ'Ra5uMKDM-$z/'[ݣIHEFi X3Zv>.ѪA[ߝWV4t C-T>v {>2ˤ"~r3f&ﮜwZ5&EqJx(I$T8ӈ=>QwZÑ&DZ <{tMm:.XNoV4HIUJ\1ʀH[ۅl\u^ѐw:~]SPu9gZJrKgK^y٘ߒ}05A0to 2j:<~I[E4eez{ E}b$O,m 6" 'y,x"⁈?ѭ@udyt͉_|^?%}k@]!2[qH\٥t'OiE%UFqʪgUPfUHfy_Ϥ3T+\ċ?b3^"&  6k\qӤ]}-RzǓ201 s?7|IO^_£xi?7Eܤ:Fy ^?:8tRF8t:75k+X}nI#GǺ8Ybud\q׍\#ҽן>GïpϟN1%c{ha"^gQ<_\ ">֛]V]P,/Gas؉U_gF ʇ?}h[vQH(DWӣs6%efJ+Y;oSmne:FOÉ#Θ?> Yr.s4$XƭJb(h|wkg;oejc:ī[YTT} SQWV2B0Gy-m1\O< v8 kV͛F8dI %*-4c*G7cf~vnuXzIKWU4WT< VUHD.@Xq{4v|W4@:'uӻ윫Ҡݠ f$*2@fxnJ{6eAX-W]xJUM]OaJ#B̙i6*n72xٮ"SGH$ q$X\x/顴i+\"ąP| 6?"3C06ABRFBW4z];îD snt,WU=g6m&ma&Oq/m9_Vjg·nݏl/7e6ۉ((4 m^tf&)| el ;#X̥+u k0%H$9fay#Oo潲{9WlۥeT5e⮿HC;?֠jmCq*)<隚&`y|qJܩ*ct_}۴s]J^ܻ_bSNdR!nO"jhE" &nln9#&KQU53Hm 2Xr>׳r$;U 2ZF5?}e{¯()[}rb em%_h <<t1*3eA>@c/yܣ۹ȶƑńp=c}8Z4'P1x\ifB훘{i#^bKH]˵x(c=2h:}d}ۭo.}}%>'bI .A4PO=d*N|-eM&9<0I Y쟱#["onlfQhO|^\_lg"mvx?+$UZJTxu#n֗kcm6J-4;+IQW,SMBdC}}9o~=~ݮ d@z=nGZa,hFU\b4ytd9ҽUS_C|^m,١wBIյ3M=z-o{f|wyx\%05iPxWQfv;nTvmxR^5xWfoF"ӽY(m Geä{2"PbxcqJz*pֶ 4qG{u=lp` {mĎ=5N[Q?T8ϷЊujesOk#N 0/6{S3ʦnO }l>8g4m{{yup32O?N9p}n:a}vVOӗa@Z U%k_&(eF !LNJc7QQg}U< +^S77>~O_Wlۉ؛{}VVun쩭#;/P^QG !*ewD3 [uղ]ObxOk+{儇l2h 2`?:tI3d/_,q,~2$`LQCFdfۑЏxL(g/zȑ"<^afZT(WM$@zX@ BH'qۥc)%S5 }n~z&"taj21`ZVS63M $3O$^[}Ƒ.Q´ϮK3*15=ti^t^{-BS'%.)z=EE}L֦Zj2+I{P3 o*>AXZȽv FkˉV':ytA$Nhc䐀u(Teh}~eJz”#Cdɓjln۰˖$XXk[2"a r}I([Hn4R@Ip'~7o\ϧeuB&nyrw V-c!UG$pUÂJܖ㎖S㥩bgI8(g9v\]FĨA hPdwy!K8E<*T Cҋ'IATT\1c%=-ZnoY )"1 ҵ]_w^C~hۛgU`YAJ/[m!vNwNmܖwf}YzhSqK5M V@ZI+X][q<,M8Ԫ>UϬfo~ri}Vu*Iz`6 +P)Zu{ ?سXAWL*Gs#m?1UVP|WOM:-{u ?Nzk.M?[/>o-+Մc׬P%-k\uP'DE)ӇMƪ*>Oj44T=Fr@~Gi9ꀐ)$1XȽݎOVz|[9aXeϕ:qp:x XQam6+^˧x mΝXL3:J}^dz_nX¨MhqU ֌Ju'wnaluU AP+)biI?}/ZnQn;Jw3ۙWiJI*U,F.447߿ܳϷd B `i^y},6[k8q81JcrA@DeBԊ3r[C|n}TQɐ /M_ji%tC]W}ol$_QPPyBk_tگ,s]3s6mql^52ЅRBN)ղ`[nQn?-KU5IC"b*`ԩU y f֠mu%$MG>#ߔlۖ^bΔ JpjbϢ{C]mv%E+MaLEPPb㩾d BV x|FWQy4o'R`i4$ΞmZ]rET55**ÇA_Sٻzl#n6H1B8r-Q5eDG"}Gqm_pJDh~"cQEjzw~=lbč&BO(#CYV=Z6Xj(*i 45)%<%$]%/`aAO^h+ wUmFݸF<]N᩷L*<-smHj:̕ %3'EqBD}o_NV IqS)6s;Wn[`V'EeWĠ|V5Q2D٪ Zj|05<z @s5kqP@aUة$`WO=g_+Z7cu XMvA4@twF-٩w&6ȫM.[V*ENdPR"T.\z?5cOS;rO(I.#7<X[sLBi $P5$=(z[WYI>~cRB1uPHG ~ :mݛsSS Fȉ!U-T~,}5e5kSe2a" :b 4$ji_fZײF*^$M<D>g} eۤ]fB":LE8pPK1roަ=rͅuz:zlZ?H隢#3:XrO(om;]jZ/q4:oz=޽ٹ#|5O"WWbhhͬ$tɍ8# 3SX06Y$B>,S%rX.KTO\]ն!#f&X40bǯ[/*l?`NfxC%hdƴ}u5IyǹLJcAH+hslpkp?g [: 2Cm3L<Ry&ǃo#U:c׿կ?_6(AM3A͇~/íT]4O ?G׭RQ*.Ix)ybv}+^AN0'IZ0zz|PG[{d>}=ҵ?n ON[~?q\p1CͿ=[4܏ۏ6{eB7o :hnm3n'wN̴. K%fG#U+p x .1 Rf4  o;OLneN&qYyJI]#) 5F8c9$aާW^_/>ݘw_]duuvyfiY Đ"~[Icz&N>ϗCmf}y]z9>8n];w+MyL5wl+]Rۅ^'LJR3ƖF {vso"'AENk|ϟY7\6ѽ_G+޹@ญRGDiO`vnwg2_ogw b?imqvX㢍a*_+O,1U]v͸o&ӧQ8i@1OSͼ){s^\^&/)Mf@+Z:/s)wpk{3;m6_ ._=37)5L-8$yZJ+Vw*}~Σ?G`O㵄X3|n-&h M-Ȼɺ4ءA0*kX]Hc) K˛5n+-} 4)"'~bdYuTc-DVz5kci^X4_9kvϜjq|=lxjb(i_ c89 KR9 *0 ]%V:sӹJMCI:O{d3oh j-&rOMgARYH08tEk hcꢛbL=;yc58Xgmk"_؎N@h^uI#B #^qP{7kots9!V~Б 9C?Fn(uO A I#?Xq#{A^b#!gIK}+( TJ=!tE!6 g }j}Onn7zi\ wJf"Q;3VmlN~۳2 ~+rW"h#ikWVŏ""+2/:&ȁwBh+:7DϐЖϵf0g W;|"yݭ8n=kCϏwf1<:lmm>K39gY$pQR؏w;iw'Vί,&x'zR i ꯇ4QO+:<8m쎿n!"6ؙm[Q]Fi?EelR4H"(MTЊtuyÏ[0Oӛ{8t4j##H'xo'{PC4Jo񷷔_^+A <}zqf[X_{N'7Uq&C?^}j望Ss[ON\~TXZqlD_ϧxl9aNQ8?-ípRoT|}]351nNznru'cv^ӞHdsI_Q⥇W . ~w~_Е`}zЃ(V9ކIF(VWZuP\Mo,Fbxg?Y./x7ֽst@\/6q.ԏ&]~LjZd+ӻcwř}ڽ[}Q05w Í*6zH,K2ܨWkšU$0f޶].[*D_/N?[z!uv?ba0x,WN!ݻlԭcR3$o R 6=^gߵgIn WYac.j$hh>%*|C;fwkvv~ܛGrt#+0SKW[Qj&,UK &@km SBЌ`}zūyp[ƦY\"Wv z݁qǽ~>u&h 0 a77+YMj%o=Q[Mc#N67cw{+*%"MJWJA[Y9J|۵}$K=+#FvI#d@8r` K]27ʊ>]6yS=גéEIG!_2ձczzTjw5:m7zû4.=ژZmR<.)z<ے<9'hTc2&O޾k^Yr@)ŅlLn(0mФPS1]vnٵ$wflLfUm#5OaQG$h"L*f- G*gԫ=bov|Bc>}5i\o2= DX6xC~Ġyσ)8vGqd3znԛSwӮ6f㨣CؔQVJԥD$]Ƿ`"2AA蜲3QZPMϮOIV=ڙ5&k?Y8T2WR.C+S=5eSIEsCob8TfP:Vu5E%3D[uFchiL>Dfrt?07.b[1 ˑ03OScV"|nIB L~)Icu,pi7峹,ɭ]8oN/ͷ+N ꯑ?0ݛe4l 05E ss>^2zrWG,7nVjfu]B0˓P)1+plkɚMd{&y}#O{(aSGQ^AW밺 "{ru?mWR L;SO3/_Q e4zIjX .(@)X([$W}cǹJ=KqY$25Xjj d V<:gMovn^mwں om͟72)A+CNXL4w_,oHJToK+PI4Ƈ~2XT88"QL:cn]s^Ы8،xy1;.CYRJ,L4L/iy?cA=[V*5P39L;!=M> =l$kG8Q-e<DHRmZ+'C븢6l'ygC}6uu׊~]$xt  (>=_=At[Fk1n\_PoLT-vctV_%i̒AvDTYE!Y#wWM*GB=mAf'A}ak}ܵ#bÝTX X3 okjxcn]Q4A>Do[`!d?˥ƢUNO?/t|xz~ f-m_؅etHQMTa܇gwN_ Q<~/XTc0 *~s-5йVpZ<5U4Uqbbיbf(R I0f:͔P7N t6ۏ nd4Cu#Exc-OBC|g;G-Mgmr,rX}G=<&G%B~Ո1cds5!OZSPMiR8=ԩH;Zo<^5v%B6I*Zv$<=|fOqQX{YʋJ "gFӏ~|,UQgLpBtp߼D$E?)p7F?5[W3\5;a_{_K8j'V`50Cm?N/6_s/::Zt=H y}Ϸ xt\d%EߟSǷhzA'y?QnAp4!yOw)ںLn ןsGz#kSv#W1ӝ=Wo7!g`v_ի;iЂ'n*h)M%-~%^Nzdy>n{e[',~@h]=g z<و>/ ]*06>F?s bj+6WoE!y'uhKHpyCT32Op&Og-w<{r-Elр ڀǢϿe2^+F9-|Hя$UMQ$ʦ7'>q(bS*ƽIp۽$7@(}5u:wbjj۸j)il=HG3c*avG`ns m>,SW/r\'[Zգr5lk$ru#%Ecum2ImϹ0ȬM:V2TJ#YX5m>yya\ndzoh)Z=«3)qXnnQZ{90?݄c_ +I;6E@+B8杠=8:S-F6-gn՝ɲvJ<_A,%!Z]UDS\+2CQᱠWҎ Vn8[Zܒ6P(=8S M3zOčf}5ڨV™Nhb4TTsVUc>WHHv؛ͻ{$,(jX iquj$e <i>b}|> tSm ѓٕ5}6M5sɹUVPTM=Bĵ1~AK~Rw-QL<&e r hMjdKtڶWerQ44PGDڷg|9FoJN>G3n\uF&_I hT`u"hGeSFZb(N'ֽkKIv.FHkkܞ^6Po}÷*?c|>ҪHj(7Eڨn81Tl-d8aad2 Ry!]]ϙcߠk]'PPt-Zyfo 0LBu>ݝwZvcozs{2;GqNw~J=ɺj+jiYyd ܬqma*i$o/j!@fծxwwy ! 1$T, `;Re6nb~`78.l3Yh.箮͸jtS V@$F5H4"zxfm7J 98yhūJW*Ab8`O󴻃 YM:6_pv[mEжo v4gww+7c#jʄV:ms<דn{ H iﮘ=$*-aw/sۗ+ڛ?6lfx ܢj:jA9br {J:){#>KTm8 uݧ;CFZi{;q'0`XC4q㰒(/6\lv=D|8-bS%Q*<Migݔڛy' K^jj2{M#IO!, 41u>ݯffWu2M#SǣC5[n?6?^}PztKP>۠`%W {p/^ yJ-qoޝnG5+r>  Ϳ}":ٲ, >oϹOM1ӜHMO?D)qJSx2pԮ ԀA{dj*=:lfj<77bov㶾stcqY:nM)b=$KqG)P.o7ii%TAbN)Lu@=nW9f!kIQ@VfbM>]Sԫv\.u+W*2hBfY41mfِ3Qc=Q-]3#5u!5GR $qۧD38] yjPiRtȺP"RcnMJ]*:2[WB[:@gm!_Sa.߫dT9ZrXٲY鲴T`]Oܿd۶sWq]Bx/4n?,J=n:,?&\Tt >Ze*^qG_OMF6nL vYr3K_Z)^Ҋo|B4IɥpbcTB/I=UJhkiY:eUpXro 0ecŁ}ol{[+,VA1ٓP6WG F+e½1EU25d- -do*1Du6yoaL hQ'mY4S6UH̭ :qCaoMvRR]8sk}rqj|my0Xd# qHYYIwm;f@ \3q9M(=!-#G֥k @gpm~KPb1[Yqdcc룆ݘHsy8iLxAuUb<!aT?^j]sv+' ]US:9dXga֮Ktv._+1TzN8)jNI'V?dݥqT[cg7nm6Su:0Qacq"Ƕg>ȐʨbW7OqüOd:hJ`Q|-}gk{_@YF+ 'H5hxE~D|_zO%e[iSstibSb$OQMTG8G!so ϶1n6$RDD4z*uo;W6JC!72I$ SϢ9Wٟ)1XX>tZrii~G!-DrR đrFTzr]^V SæA@,0M q-c{㤳F=X>u zt*w6f]xd7jn]KY}6Co# O+G[s疝 Zq26tm6k+[RUOtԆ-Zk'/y"X"ʄ @PP  baCn ']um^{6q?%&c,?=4DxksMoxh2:- r)_t{ZG)^=V­C=vVGy6}dL2o pUIC鑶DR;B+Iy$O9zVZ6b)Z @:Ѵ Pdj 晨5Վ|uݐz3SUBsw^gsfJ*ٝwGj]MLѼ&Qb*ܲ-`3[!φz-pPg\q_פ{j|\|F#{q;z|`1vSde*j<KO[ Gzv=oDhSEGN#M1(-1;n~f5 -x}T~!|F͍q/<ڸڶ>tևק`tae~?N|?O=SNxI;5_Zzzsb/lG_{꿟X OS~yWZ|NN$ oYEospM]$Uq?\qlFE\9˫gTߖx5E]#ܳ5E* uXdT,^ stbߚ=5\hekj EmTqP/yI7Rv_W]5Ixբiɉ,3Х:Ôlj@^e-ro@H-.(o7s]@DVͧČi p4aflU3ғimMJB40%XCMO,}oe1Ibڧx."2JA5@.ﭽg1UHv`N^r㩖-YQ[l0`)q$ʲ'R.EPrC+ ㌅PiTR<(~]cʏsoWO:Z qjӇSWk|9{-Ըڹ3y.l~SpSgCHrPA.F MD$HiB3TQ}7.伴ǝmЂS`Ƥ`M)/ Q :ifͣRl.diAn VG@g̶/(AU~Z zz}>wvnŮٖpn<:R8M6'dn,jՆ u'%d],JX^YfYLy]*Q Uˤ^M<$a #lw1m ?^\/j/ G-WY4όE[Nlyh$zf V5x#Y^7!Z`T"t(7ٶ Pȿ^L.۞J  Ui]d!2G,NVu#>ԧ>mR 1??Er췐_./~Tl]5?< }Y1޸rVF.u0@Y~5e#.7 YmCFE W1і;a^U$'Ic$o>>/6^:ۭ;aԻ|mu={grNgtl%P<8@/%G-ƋT9! =yvVF [ +Bh8p!7%]7%sof_%Y㪺!EݔG?{OG5lK@H΀Kϒ2W !T*PBTs&.~Wp;̴Imz&B~-4~ojwn-d7F{ldgl5^v;b3z`h5]S$Y!'%L{c٦$Q$QYQRivPS}Ög;e*6_^~ng,nJآYuL|r#*;[\/u.ЬBԭKeoָ#LyX9g^qIwjGPq#f`HZE>iؙMGGEru핦:1_%5#+O Y?s,{FHr"ҕ$ӏ~oM6{xE@UKAUGGSvu YKL,2xUs%Mz¹ZM<)QOsGWC !U͙w$@%uWFxSaכ{{e?{OUVqn~Ip |1kJ섑4~r-*>uݹNhűxmoY>G6o2in*Rb ?0?ӪNbz> ta͢죟 ַ{u{k~>N}Hz0zVſ<?'}kFt [Ao~8uZ..9UiDw%osvt:i4#KI'6'@a7$ sܺK^B d( -2 Y\r/n8ڥ7=\֮8cP;#m \W1u%H6.Q Ç~eZ`ܓ^>&B}UfSY Xecv V#>Zjxu8)UF.#K%F))h )E,R# 0>1< ~GOKxP*t룺;;[l֙?xg_8RiF>ǜγmڵ"z<ՁZs7ߩ,<2A4:yvtAoIM㎓+&1H]iUϤzU6ڿ[ya{4PG+..Ogm󴗌w};;E񯳪_gML\Mf}cwbiU fb ovfl5Gr3SOnt}Hn-%\ BM |GSj+ZDS e$-cvB5kۛwTrpp> 6 [-p|XFϤWgm-FoejUV!Bdq)2u:rfo̰n 1Td[\]p;2K*M (OWS Svf|ie]OWdVOFqC xi!QF1#@m{ZBКW!]۝ϷFd.d EX9\i4oTt nWW U4IG![O;pE>_ݢ絓Fw#KVuSXYrWP}t>7ZHOOS14=4OW$އ\-^Ku*w;LX"QTb ̆F24zW$r7!-HLRH RNie,Ѡh5B%.xN2>'9[A{"8t؃AZ@Jպx>>3GuoH:xqTte,fCm-( ŕpG>ȻyjX%_}k"+ܟa(),j2,輴Ƭř!'-^2}K>qk#Fn7k ՂEg 윦2b(GTyjzﳢޘN ߶eْa% Vai8tݽ>cعm[ 5TkUFJ:WcncQ7N,Ӣ;]]V.^lQ(qʽ5tQ%$wXҖvg,˴Wt|Ę' LTaF7dJv[Z ~=+UDm9zINSO3QuM,r 5uTÎ R$~D.ZʃS;BsF"i1t#Ju]=ϼi C-* \rX m*WVKz,2݄n~*B6>Ѽ2.iʝkΰp>^o"Y}[++)}Wvb2&']V]}WܼkdU Z}+oe?@^= bRuoMMVAϟK]LM A*uXsn.9nD@n:@= eDP$Lk8!$pWjN5X.tjto($2 [HUKHNi,VuIVR@f$/$Vd=#+v^ȉ[imQSZIEr-F8Hw64vMqWP)f nC0xmX vjFaU?vޓs&Rtdr?ftK'Qktw5}jz w$㨣y 5_{F EOzEa@!dET5cb}:Zuq ;" YVFNnxXdt٥ے1]kv7MS:3X&9bϑW 6>[lڤUEj^qF{V27]Vh/MY\S'I#UgklW3^JXZsi#`^~o#Y >ζ *: 7iqܕp}tAkI˱~ֈaA꫾P+ynX.Wt֦^q--=Y41P8Ca{O| 9O5xT0cYYރU!_@G trS[3clȃο}\dH} $yx$9R:_Z oǃW&oOˮ ;WoޙFzS"LXMR87?ީǧT:Ume O$C*ZTبao{XAО)ËV])ed UEostPW3j th.y4T*ԩ }8߉"]8#=D I>ډP.ћ'8:=C-dO*T/F'^VqWƌ#ERI$% qͨd` H~VzWk9AǦ5_Kޒ,#iza:bcd'iXzyߩ56elfA;ma[n+Lx@]BZZE!N i_i2MW#+LCWS "卑!1еRt ]\Q$xW=K4xb:NW(ll-Y"`B4g%?ͱ0 ixҒ_p{ޏNeZhz9fi[)ja%,f6BeP굔0QGF?%t01֦3y-WPťmuIh*lCbO<( 4C_$SOUUS)>XgۂhU%VGJUr?7ub(>:qNIUoAQa&_ǶOJU T# ]aP)Ժ0'H_x?SsGiL㨮Ѩ{ObjFzYM~5kӁzAn>5-"l ԛĦIr;ӇD<[4mLU\EH  AqweH^dx滑faN4\UxQ5СP\N##@y MK#,dMEp˪sǶk\ Fꄪ` \YJIbdR"<5ko .72%؎Pcͭ.Z s$]_O\Dv}?tsrQRFlxqrEP<@s6-4zJSԨ7 At|-Bą?$n- c5BCiZ`@s>դT:0۫P`I^W8KgUK#G3ЈFѭ*k^\2,-m):hh#A't+7=a#QN7F>Φ[INN>Lk:{sV&XrpI%jj͹:*v䠪x*M Tǎ&Z*Zԕd[cIȚd_/?.8j윕FKsQY2Dv-0YLE#oz筰Ee{dUmJ9㎣换`"Tf/0Gaobm"а>CBQz Ma k$.7nم+,EzH*Fno$CU2j:ªչ291ӡEi^`AVhʔiJiY$~$cƝWQ[s ~08Z>xoѶZC垦7Z܏H1AZx.,F-MOs <:L5k[ݪhzibSp԰~/Iㄞaj]j-V[OԄ,8~}Jn;fAs4m\k^P5?F_U>{{ĂFY@1Ԙ1P9U}?{hPWO!< pURB Hҋz>Dt_V]E ƒ35Unf^[o:ZXZZd[xwb+ h0?>CT̪-RQ x s[_17ngInѼŪb0@saܨ HZ$";gq6XZw +CEkFqdʬ {Wuu_nЇ5<ԏ89F:&eyϖlH|-{{fA*BJ 2>R ; `N"fzhPdU2c1XBd`@xKsO+OyuϿu*aXR<`@feNKX.7!iֵ/G2PԅԺbu,)`KU>T7/E@?QIt`L~ι-+eByh:caooڣo1zY]SGEʇ? >4R:VyNu[۠pά?ԧ^+@|oR<>ڀsҏT-qBH H>}-U|PU?ױ= P<}^[cka@Zۃ3)[osȽ6Ă19$gYUdC~H!n+>jxuzmfUJ%E<[eX@LTJނ񿨻 *c.i$d* JEKN(PO\ ?lj])Ǯˮ;Ag·S͠ŮZdU7P/ϴX@uC>:u0:V15ZuyZ56`ObjdanjGGAk1S"mX g=ល$IhB, }l.Ozrs^x$ko=oQz4WE(\G ݏ=o~"UZ U^pĎ>ӑЃE:zsXg,>snuu΢r@ [[#M},eچs5麢eQoň_~/LsG5 CGzw/㐬9ًF^;WfsΓ=>Z>_hF=fO6Cs@-+HZT C/q`>$}GV]gBNR1?Ouizq$V1PFWqnϗJheZtP~\>߸}6=eە[é7nUPH #eH.{g 0:cjSD9㞠z,`lm*5Q=^ؽGTdux_ 'r/M&K݅Ź^:;_m"|lI/ a%[VBD@U~ Jdɥer6wj {D~f#\P[rW bԝ2(T3UugyL݁5퍻NfarkYc;n/5>{-:TEԔQGB~WilOq$D&;dbpwV=mo姶[ngCD٢Ɵ! u1ERHrjaqLPgt߮qo`ݽ$\0`Xl}Hb2z˩1@8 5Ml'H2G`Pr_j- S$c7OuhH)Sq:.1>,z(Ҏip9c ֣qMu~usrc.,1<~ҿּCJ&=aΥ<ͭϻx`ba16%5稹@?XLԸWe ^M:jjGYxYy 3}Gnjv!~Zg VҎi$(uFm{(6jtø_J/a:EZ3\j/;zPhhH)eiХTV(JUO /햟xOBPSqQ[,jz_O"bߩx?@M5T'}5_{xJWz XUS?AϽtk$Kk]?Ë:nZ SpTMw)v$qGD8!_"FdQ^jh}hϨ,x$I6#@>};R $! 7?$8!M8h1no} +fx:X=RfdY7]q,H:';i Ӷ%M@蛝e)ø d׆S5%!Iq9* ?Lyv#)pKU=s$FDyE:ue0n!'gxNho}+!5]ϴ)0*4Gl;{l>hwƝۺ{"qlҽY ?r[a/ͿJ%LBV!L v$dȭfTD)1881R : [Cm&wd;]|OeYO|Fdt> ;?gboͱ=:H}pK9 jfIK|OihdDW[/pA"j ~qE:ط1u6͸I* X,2^+d •FW5|7m,QEZ * 1N2<ڔrBtynLyuL -V HAn>*> qֽiu5SJ &B ىQo7Ÿ%ōsnb t94\='#RƪWI`@vߐO@ S>tDQ)[TO쭊ϻϯj#Mxh7-4>t*EO^ xihTK _ި+*+&eH6& >]kY븧fXIvҪq:Cmۛ8P,Ա3ўB #BaHD͓1g乱"iSvE4N='yC&?nhOC _T3}?톒F;k^=8} /p stϯM)͂$vq뵧}-ſ}^=qdscȱ߫HQ@lMX.@{N:E anGaa Yq5C??K߀T?ލ pHhZ~tZm- i^܅ `G!}9$_ܥFFȼIܞAcsJxc :Ȯ<8u#;8~=ZΤ&54u L l@ďo4" meM!B*5(^mn"SYBWѳXQ>9<`^\Kd\ oQ<xyϤT,BIQ;lmK5#U*_.-/_mM*n>Z5|WSP)ς0 Q,9Lp搻@M+OR.ߵm1unƺVk@0 h(C(ON2I?c8p9qibm:i${QI58u@k#y,lY kyo{H,o[%T̰Td\ cϷbS#F ¼< ?Ֆ+$-%, E&-ҥѨc$7Q167͛kӋPWJۀI;:zpYfXњG<ir}Z.&jq+RZتd$Y }"\{pRW^3ڝ|t1Ȫm G}hDp&f# $ے=+#߂.ZdݩЛ1,"b$#ny{iH^ 8g={lF1ʐg{XrKj'39AEهW)@OiV%ǂ>aU5ۃ [?yB3fUnJ-=z$7^?xk{ުqT뇈_jDɤ[~>3Hucq z3/aFmVXlO-8^!j%60WM8u$E ~4 IgYLޡoqQQ֩NܮHWJ?hӨNz9"_Ɍz-=TN.?ދN"~[lPceLHߐҺ[ܴttez%D>1u:@_ڕFÊ/р(ˢK+VD^Bggj*VgBj0Vp9\HǕ-ʦLN1' q^kBbq{cZ[mMc0 A5#TB0ҍ+rI}H`~ [J֤WZ2jEd Bok[3_>Z*u*Rc ܛ5\[ߎ#˧=vU,lᜫr&m[kҦPPkbӋRҪ8K\sJhRFko]XN $.:KAm8kK (!<:mmORҴ>][Kƞ]HX剖ʢJEqc*Iܐ>NmeڔOϸtrͅ<|՛DHt[ rަIϼPp 뇳bIqG'y+*I>nܧLҕ[# PYrE$ښE-ϻ1dpO*-js|U[,kjMy؆ߛ _gIе='3F?vف)Z*5ȑ!8&fLuC=)Z @8m:p:U:Kk# [:"F-6>}j"F}D4inS({׺*Gk[ɷ'Mckχ\l?۩R}ֱWP/kժ<vq׼E[XqkǪXoy=N|[iI#_?>z3cT.z 1X{IZŀ_cb=7U:uܩ#Iro7ܓSp$ľp U7[TztAkV o[}].}XM-.H\:[8X֪9 I6Zʐ; Ba1y]M,tNt̄0qKl˪>@crlZLwgai<Jjl70ЩC. /ybۙxżFW.gO7|y/7--p"4"+!ϊ_%:]ӛ֊^cq` oއ-*/6(@A au}N'? k+xr~s:Dvj3Gd"h5z/Dkx:\:d8(2zȸ`Pyku2Ԍu>}CJT[AߏO0:!uQzyԤ[Z#/bj\:]AIJK\ǻ53kǦ_ ۅ?pI> @ꤜBk>\7 vR5_ܪZtc}l &|Pmf,I?_ϻWt9H4~UWz5lsz) k[[ $R"u67$,ZJR{^6.h@jem Y?Dŝ{u|MͶw*1yͬ N] ?9j:?ϸc"RZ_8hs-9TEmlkSݱ\7gsO $,f9A#wږk 7)SWPCgrʩջy./xmwSZ)i:KVox)p@i{-.bw*Wo ~,`ŹK F'e&;7e3c>׭-ǒUc`B![t*w ܑ1?-Lހ޺(&X_GKa+;A`77OeWUyzP.p/EK8Ŷ|6Wo38󕙿 z/voGfHRc*{AXUE$_b[Kk$~GP̻ZMylk+1 ~@t!Iھj[ofH+à-KpQE"ޕI@o #@NeTnOVFŸ>S:y?;uNS۟7_1oe6{U:pu[ikWַ?OϦymu7־~/z8=bvWG7_J׀8c_>o<-ͼ_{W?WJ֣tw~oGԣ ~=mԊC_ 7{M')҃۬[N_]Xp:WR꿣> c?_-:+^I{?oux|}x?M2ONxfiyuKͯ}5鿫_Eկ=:oӨr?C4zי_?_k{Z=q?O}y/__^>?n~SuK7݇z:>oߝ>:QsqꇇX$_ŹϨ~o_#ۋê'ovgZ<:> _?˦ϗYOo߽xW_^zDd P  S A? "2" ^s2uze޾`! ^s2uzeYH8xڭ}lU[^| )k7 ~-%X CWKjQZVAAMKf,q!-FqfXȲnbSj3+tk"K HQmsν~z  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ORoot Entry  F Data RSWordDocument"ObjectPool"U _1041149799 FU\Ole PIC LMETA | L) <d  FMicrosoft Word Picture MSWordDocWord.Picture.89q  FMicrosoft Word Picture MSWordDocWord.Picture.89q)   &WordMicrosoft Word  System    -Times New Roman*wgw9 - --Q----0'--&D -- $m;~ueuTu---eue- &  Times New Roman*wgwe  -2  transducer!&&&!!'Ac-'&c -- ph--&-- $---- & &d-- $d---- & &l-- $l---- & &-- $ ---- & &-- $w"_F---_- & &-- $"---- & &-- $Te~---d- & &-- $F~_ewT---d_- & &-- $5- --- - & &+-- $+mU3---U- & &-- $5 ---- - & &+-- $+3Um---U- & &2-- $2}\;---\- & &}2-- $}2;\u---\- & &}-- $};;---- & &-- $;;---- &  & w5Times !!w*wgw ! -2 515%%'-c-2 k14%%'>-2 13%%'|&-2 &12%%'x-2 !11%%'6-2 10%%'P5- 2 591%'q- 2 80%'Gi - 2  71%'- 2 60%'"2- 2 *251%'o|- 2 40%'F2- 2 231%'k- 2 s20%'wi - 2 11%'^- 2 00%'^|"Helvetica !w*wgw -2  22.5 deg.******'-1Table 'CompObjhObjInfo ObjectPoolYY i0@0 Normal_HmH sH tH <A@< Default Paragraph Font !$'*-0369DZ;<=>?@ABCDEFGHIJK !$'*-0369DG Z @VZ!"%&)*-.124578:;=>@ACDFGIJLMW[000000000000000000ZDZY8de@*dB(   ; <;?#"   < <<?#"   = <=?#"   > <>?#"   ? <??#"   @ <@?#"   A < A?#"    B < B?#"    C < C?#"     D < D?#"    E < E?#"    F <F?#"    G <G?#"    H <H?#"    I <I?#"   J <J?#"   K 6?#"  @ **1X3 XH L # G;MH)**1X30L .+0 / R.+0 /ZB N S D.+. /ZB O S D. /0 /ZB P S D.P,!0 /#ZB Q S D.-0 /n .+0 / SC #" 5++. /ZB T S D.+. /ZB U S D. /0 /ZB V S D.P,!0 /ZB W S D.-0 /b **1X3 Y #"  H Z # G;MH)**1X3 Z .+0 / [ .+0 /ZB \ S D.+. / ZB ] S D. /0 / ZB ^ S D.P,!0 / ZB _ S D.-0 / n .+0 / `C #" 5++. /ZB a S D.+. / ZB b S D. /0 / ZB c S D.P,!0 / ZB d S D.-0 / B S  ? ZK.(>2)j;)/U*0j<)1 +2j=*X3+:4j>,4-5j?.4/5j@0X32:4jA1122jB1/k20jC1l.k2N/jYmu tH*+c+~,jG,4*-*jF.4*/+jE0+1~,jD1-k2-jJ)l.*N/jI)-*-jXm u t[[[@elmerNe02:winspoolHP LaserJet 4000 Series PCL 6elmer$w odXXLetterX$JAPDdTimes New RomanH X elmer$w odXXLetterX$JAPDdTimes New RomanH X  vvZP@UnknownGz Times New Roman5Symbol3& z ArialY New YorkTimes New Roman3Times;" Helvetica"h؂QFނQFA~0`2Illah NourbakhshdonWordDocument SummaryInformation(DocumentSummaryInformation8_1041151432 F`ov7 ZbjbjUU 7|7|Elxxx #+++giii3\ #$% ;'P@#x+>+++@#KU#KKK+ xgK+gKKKxK p@;KKk#0#K'K'KK 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 25.7 deg. MXZ B*CJOJQJmHnHphu B*CJOJQJmHnHphu B*CJOJQJmHnHphujUmHnHu!"%&)*-.124578:;=>@ACDYDFGIJLMWXYZ N N!)"#($#%Oh+'0  4 @ L Xdlt|ssIllah Nourbakhshdllalla Normal.dotadon2nMicrosoft Word 9.0@@@e@՜.+,0 px  CMUJ  Title1TableX=CompObjhObjInfoObjectPool@s@s     n- !"#$&'()*+,6/012345m89:;<=>@ABCDEFHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklorstuvwxyz{|}~ i0@0 Normal_HmH sH tH FF Heading 2$<@&56CJOJQJ@@ Heading 3$<@& CJOJQJDD Heading 4$<@&5CJOJQJ<A@< Default Paragraph Font:B: Body TextCJOJQJtH uH!H TOC 2$@& ^56:CJtH uB1B TOC 3$@& ^6CJtH uBAB TOC 4$X@& ^X5CJtH u@@ TOC 1 xx5;CJOJQJtH u ;<OWdqhMciWY[` ;<OWdq   @V %+12=>WXYZ`flmtu0@@0@@l,2$vL)TzKCV @R-r ,(    n *%D/r( E# 3"HB  #  -%-%HB  #  ,%,&HB  #  ,%,&HB  #  i,%n, &HB  #  8,%9,&HB  #  ,%,%&HB   #  +%+2&HB   #  +%+D&HB   #  +%+[&HB   #  a+%e+l&HB   #  A+&B+&HB  #  "+.&&+&HB  #   +I&+&HB  #  *c&*&HB  #  *&*&HB  #  *&*'HB  #  *&*5'HB  #  *&*T'HB  #  *'*t'HB  #  *'*'HB  #  +>' +'HB  #  +Y'"+'HB  #  8+t'=+'HB  #  X+'\+'HB  #  {+'+(HB  #  +'+&(HB  #  +'+<(HB  #  ,',J(HB  #  3,'4,W(HB   #  e,'i,d(HB ! #  ,',i(HB " #  ,',m(HB # #  -(-r(HB $ #  J-'K-m(HB % #  -'-i(HB & #  -'-d(HB 'B #  -'-W(HB (B #  .'!.J(HB ) #  N.'O.<(HB *B #  v.'{.&(HB +B #  .'.(HB ,B #  .'.'HB -B #  .t'.'HB .B #  /Y'/'HB /B #  />'/'HB 0B #  */'./'HB 1B #  7/'B #  .%.%&HB ?B #  -%-&HB @ #  -%- &HB A #  -%-&HB B #  J-%K-& C dBbCuDEF  AA1  Z)(5G^ocH2 8Ww-D_~)?$MUZglp1ulplg Z>Mp?)#:LYwbWb8^UG5o^Gg5:(   l1@*%@/r( D dBjCuDEF  AA5^-$1CZpgH1 4S w-C^~);(MY[clq5upqlc[GMt;) ,BTbwjSj4f]P>#pZCo1B$p5@*%D/(P L 3 " M BM"  W T̙? Z<P" 2 X Z?Z<P"\ Y 3  "   [ Z 3? Z<P"  \B \@ S D" VB ]@ C D" \B ^ S D" bB _ c $D"\ ` 3  "   c T3f? Z<P" \B d S D" e N? Z<P" g N? Z<P"b h C h" b i C i" \B j S D"\B k S D"b 2p#6  3" 2  N?Z<P2p#61N2  3 3f!5f"5&N2  3 3f 55!5&N2  3 3f`4{ 4&N2  3 3f,3{ 3'N2  3 3f s25!3&N2  3 3f!s2P"3%N2  3 3f",3"#3%N2  3 3f"`4"#4%|h 2p#6  3"2  H?Z<P2p#6H2  # 3f!5f"5H2  # 3f 55!5H2  # 3f`4{ 4H2  # 3f,3{ 3H2  # 3f s25!3H2  # 3f!s2P"3H2  # 3f",3"#3H2  # 3f"`4"#4\B  S D"  \B  S D"  V  # "   V  # "   ZB  s *Do N  3  bB  c $D"B S  ? E E  t H- tW \tdp1<tP tXpP@tY@ t[`t_ 0t@  "tp "t p tptPt` 0ti  @th0 @tM0ptLpRtE etkppptj p tgP te  tc  @ t`0 t^t]`t\``tGV::@dOvp@UnknownGz Times New Roman5Symbol3& z Arial"qhQFQF!>0$^2 Chiarullidon  FMicrosoft Word Picture MSWordDocWord.Picture.89qOh+'0  8 D P \hpxComputer Science 15679ompWordDocumentSummaryInformation(DocumentSummaryInformation8%_998207796 F`o 7 bjbjUU 7|7|l @:.....g9g9g99999999$: =B9g95jg9g9g999..-9999g9..99g99999D9." w9(99:0@:9X=9X=99 Left Wheel Motor Sonar Ring MC6811 MicroController Right Wheel Motor LAPTOP 4.2 GB disk Radio Modem Ethernet Interface Left wheel rotation encoder Right wheel rotation encoder 19.2 KB Serial Data link 2<>WmtCJB*CJhphjUmHnHu %+12=>WXYZ`flmtuN N! "#`$7%Oh+'0h  $ 0 <HPX`ss Chiarulli hiahia Normal.dotdon2nMicrosoft Word 9.0@F#@3@W՜.+,0 hp   Optics Lab$  Title1Table.CompObj hObjInfo ObjectPool@@ [$@$NormalmH FF Heading 2$<@&56CJOJQJ@@@ Heading 3$<@& CJOJQJDD Heading 4$<@&5CJOJQJ<A@<Default Paragraph Font6B@6 Body TextCJOJQJnH B!BTOC 2$@& 56:CJnH <1<TOC 3$@& 6CJnH <A<TOC 4$X@& 5CJnH <<TOC 1 xx5;CJOJQJnH 6\  6\  l,2$aKH8ՎRA@(  B     B     B     B    NB   S DB2     B2      NB  S D NB  S DNB  S DNB  S DNB  S DB    H  #  B S  ? vtf=t -F t mt}6 tFft6tFftf 6t& t & = f t6t] FtfT-<-.23qs@@GTimes New Roman5Symbol3& Arial"ph:9F:9F!0T ChiarulliMartha E. PollackWordDocument7SummaryInformation(?DocumentSummaryInformation8G1Tableq>Y bjbjWW  ==]   22222C C C  $ ^ C C C C 22i2 C (22 C ^ 2& `r?Ck F  Your JAVA application object robotController object Native library for robot interface Speech Controller Object (jspeech) Audio Interface COM1M1 Embedded Controller firmware Serial link ,-DFjk OJQJnHOJQJCJ jUmH ,-DEjk$$,-DEjkN N! "###$$%Oh+'0x  4 @ LX`hpss Chiarulli hiahia Normal.dotMartha E. Pollackd2rtMicrosoft Word 8.0@@ C@ C՜.+,D՜.+,4 hp   Optics Lab  Title 6> _PID_GUIDAN{13240668-61D6-11D3-97AD-0000E80DBB1E}=<}i@:㚮wvm|m +6VnZu}xv 2z5E~qS̑RhՎTC~l)QmvG"Gw+%0k344wmS`٪Ϳ,W;-[爭)piuLw7C){eC64dEfݱv.3ҰeYpH'bE~_JUsxX~gY2O[jiv2c϶IڠZID6y͒y ָn-ىC:liΰS.o~ \Q2O=ۿ薔S|N"ldPgI@%WbӠN"1] Uc֘zc1Jگf:f} ͒yڱ k:.[)mc~Ӆ+FbO+!릯M{a2~&[& J^'T2CǞSzgRQS슑ؓ9㯂oؓyU+:n . yW1{1+B:|hؓVphqCavH?︃OS']U(1Dyr1~jN"l բ\yw; ݔnꄧ4zv:6{0(xЄSqfXXsq7f88 _@/4.A}K )1>vrFɝ,0v,#y߅S }4GtwU>ntL ,rBN> _՝ eaIx:gqzx㉤|A#N~Mn\~ި;0Xo}O57VQ͍ωVzWuA^-p/T"yN> A(,\TsN~:b|@rZťI"vsi޻q 7鼷' ͹'*Dd)"dP  S A? "2v)I?KR)`!J)I?KX<p3hT)xڽ |Eǻg2 "H"6rDȵ-Qd16aEKNo벬"^( xⱮWEU;3IY3çdRU㽗Ffi l RgNN +k݇ .oayW6kYy?]YLO3ataHM6W򵏾QwtBsδ kU;ld褌qIGfi}ώ{}ȹqyFB۲3LJOjNj>I׮(բv 5)xߏR:}~ܢcoӛvf!j_o0Ͱ>ߥz>q_ܺZNkY7ѪHo\4+Ԫيv9Ê~ͪ͊~h9oe ~b9+juU`x5rbr`r5VlJ ,⟏Zۊmin?+߬o_oիVl뫗3W,g=zuz]Y?dŶ~:?eſ~r _X>^jſ_쏾b+9ko]S{"&ݵVl"+gʊͿ5spԚ؊ߟWf{{>I᫃ >,ہ> {dWw>{*okp6:Y-c-ux̷0aN9C$zQ_"jW_ju;geAs/ygXl^ߗ¯{BM/Ϭ63ʮSUX:ΎnźٷGZg- TZC%^hWd i+=Q+Im`魍W;Yѥ@M 6Gy?:< 3z QZJ)g8)O}Qߓhp[zWIsz QZԯ1wS%H@Y]oK@-Q;ߒhx^O1_CéoJ@/QOJ@<7^G ңhpzC∞f' 2^Nm=.>FD +M8Az%Z ^՛ MG%Z \k,)P%hTzsM}J8D q^$HD է ңֿ*8G;,ZdD Ŀn} QZ;Sk_h@O7>ң}IL+HZD 'zWsAz$Z \k,I@?KaSh80 Q+J@|V.GxNN_"HZD k e?$Z 0jAF"@}n\ԗShAo/G-D ď4G-/~%hV ң?#dW**AѨH-P 4lM8i?aI@ wl =jS-ȢG-xR5@QOH@aCVAF"5lc8^j,۸mG\FMYCIDh9Ľd-y%ZdU"є0nf;rtl[85wD! QsvJ@ 3ndQ;$Z RiLHD D6ܸ8Mµ!2jD D:IDѨH-PPIc;éY[$Z SiAHY5Z"I l =꾍-t GM ڰC^"Q)d4*R TQQI@tDUV(%J@D5eD D?QJQWKذ_Jb8ÉȬg,"@dR"2k-Z0;z=*1ID5\s+kE%{~ZT {RI@~! Y=_ &POĘqC,pm8>l$1fy4 M g(PE4jO!"*R }4CLaJػYbDM SH@7falN1J1QJµaqؼCb Vk^`l^V*iRbjh~fN[DԂu.T*oQؚMVЊriPf𑰵?l}u|Z:ZUyET nc-Vz\b3ncm!debU6GwE[h?lw#ۧpmT?6g}RA@=F{˝ah1R ē,VRm i֟ l-/xn<Ŗ lG/ۛpm2 R ī/H5gYolITr yE"@zBAm@2Ayd>"5@FbEjx3YT}:ºR+[&u8 2w.R qnR$`e )Up275R ',8& R ]8fTHEj8Zo邌%ki͊kN"2Ogµh^H-gY%HXfԷ RQ|Ddf-Z Z<,#݀p2Zt)R ,8Gkj1)PXsQUDEj%_ndYaדE R-;AEe1D5@FrFc3LAFA%E*"@Ȯ1H/ E#@ ӸnZ,f̊(>s"`\d=d,H-~Rьւ?ȟHyӘ-Z&Yg֔ue` }>ӇwvD̞׋3bKV}?ۤ627,‰W7F\r ];k'ڦq9H5~#g}}&X;̆nVBZC{9;e*)b4kvJa#E/|gO9Ba|M&uj=lv(-4U5-I_s,pl+ԡϺSs_n„(=k5FO7Z%lzwF>jZ%#];-bD-D5۸BveڵEխ9Ӗrgꞟ3RJh@Tz-g Uʲ:Ͱ\C:Ȋ\DX#q- m*%QS.n[OOhW0 tgh{Ytfӱ}ܖ@nw-.4h/YIZg#[dl>`|}ھʺj/}Wo)gxMDOU~:^+g_ &u+)7kpMd֧&Q[FA|UM|RJ:"6\?N?CT2^/*ZUd(㵷}F۾p O׷/YP>&-{fiM$%%W+,)Ck.AOjO׉V*=w>==##>-nxlLw~V{3F"H ngas O=lBZabsbqkE\*iX3Ud@ę*zna+BGVl#\V!K7pZ݈3 9ӈŃ|o2oi)A M˴#߂.^mi{O2}[?ZaW{ޗE@|_ ^ГmѨ(?п Qejp@dQ?HoAF"@ ;QU,S = @ԮeZhEj[cm][èoʢ W[ ҥvEA-ROlh`guINd0j:DR[" 4V6YAԖc[~tͯofֶmb.hTԲv6e\0Y=)HOYV?K+ނ#e?"Xw ]jk$Z \kWeY+ fv 6HѨH-PYCJF?,@qkl_K{E KVK}y4#7ծʚ@Aԣ/2@Rk^eZAFe6#[,+ZjV;#HZuH:ւZ-HZJ$ʮK8BµHzn4#ݐƋT'hT֤NfCè.hG`6\odNa#R,fot_*:ڍHAԒK$Z \-hhI`kV(hTLtd7eagK@v36J.诋$Z Ҭp ]fw][Y =j-iTZтtO-hhn[ AԂ'H@QO,hzAF"v6&zhC-Ȱ۱tϗh9D݁K=ANHzAiu#ͬxAhD6J6RJI@QI3{ٙ}"hTh`è;J݃(.5g݋MKo/hMQ ]mK}iuҏMK:[v*R̒hp-?G uT:dE4w\kB(c:/UZ!MTVy- b }7Қw}@-hCVAl5V6+A줲 [C{CD Uve{Ȏ6Dw;Cv7}v%/P~o7%{=Or)wP \(})~Ӵg~{Cv2gh˟ e/zz>DgH/_ோeo!µ!a~ Գ#rdT߼hd=J}#ʲyn~3k![oibG+cʾePoʁRZ eT8o;khC߷BXD1_41k`OH-dCZ ,N3VSjq" Az~ kC"YX j+?>Uբu BQD|o邌y""γԷ""~}aA\d fAaA}ˮNʴ@|Ϯ_~s<`oibob .H9,.uq[ H-?3v eDk!H<8հA92X0*4#R R-WD8dFedh`V RC؍L(؅l҂ Y`26 268xQ ^'ҋ֗?7?Ox,湸y!nc{n wꮬu;nO{=q,h鸗H/ jF1] ,/%4$01b,7_]KߴK|buCk|mwUYs<`:we9wNae9wI0ML̺.ӹѹ]&|O69|t-3Ⓓ1׌1W;s? Ϙ#?lv*W͘є_ 66H9PMw4^'ǵp@$`7 fPpnQ9y@hTѺvj3o+HT+NaBjs hs1wT˘LgBAyA~=lR-ckyjQ y/{1 H.c(yƜCdsXAe9D'H9x{>Q "l u/H9 &T˘ZZZ^ǧR-" jK0J1b eDT˘c/1bDT˘V'dAéXCQ@ép-(W͘R$HPl "ǵHMDls 6S§ R-cV*ۈ1b;Yc۸j] R-cncyjY6 j&HP{D) s Ry=\5cē§xf́Gi"s Hjs 2Mjs˃Tbq,rtpՌ9Pϊ2B*J R-c Tuf́xʋDs ^!kLċ\5cī R-cUau*?_ N84G/PGE)q13rՌ9'hzc\5cěTNW͘6'jwɆW͘Z >U{h|@!QsՌ9:#?s > QqՌ9_f́gDf́p-W͘οUCPg|IkQhys u״f́@kD}- o8U3@|O{oirf́p--W͘a63u{!{K/)U3@LGڿf́.OWf́`fg%H9> R-c/suv-NAA3ڵLA@jֶSnTqj`67VHEjH1ނT˘ЬG})H8f]je 2@kܼnJHXf-[0J1H}KZ4: 2@L[7 R- y%u8%͘ڼBjs ژoiT˘ ~TKvtTу`r[ H-N}Qjs Ts<L7k @f~` s \-j" z]62n~cp-o\o iup8O<3ؕy|b)/6K`2?HcA7 qزs#;Vweq}1鸗H/ v6 O 67`ifAlwy{f̙fU]~y2v4~y `g~y tkpe:/t7.MZ鮽<ײyJ3nb[ұIPx,%b}Snf2y }+$E[Ҩx"bJׯʳ׮_;)UN7GH*~x@?cw4Uƛk|Y}o˿@soWj@s4ŋL=ns@H,~groKE~?,'K<:>vW;7D(|7PqjS؝2j쬯~vַW[;m /-^.{ko_]jrT w9~qֆIKjPJ(u'  MJj(J7 *Bu*J7" 'Z=Wm!ØVL}jfYlcmqlbiic$*;W/Il DdB  S A? 2C 8?a7F( `! 8?a7F(t J08.x}pǟnsD$͋B %V^B+\dPL(igPڗD4KvԶfv)jKFmv>{ IU{7>g|!d_`T"0ݸJL|Bj.j-d{W t cy]>Lj<ԣ|lo"*M0qx9{s)Z&ޒk}5e8Ž.s$wҔS%cbt9s!$XކTֺX֖֭DrK,#U/R1CԫoR$U|ݭ;.M3A=w]տ07ҽV/1:YZvÃkduڛZ=LQRr~]+[Rx*ݩ2unVe]*Bw{~tQu yw*n}ܝKzZugi5C_*'.B;LlL'S1XbKW<XUt؋ʈcw?gB\ 8[Bb8:вXCI]KWٺYMZLReEt okCņ[. qЮ`MwO(X6|VrI4IIo.R06.,b}DNvR {} Pm8~{?$nM<(r/俣`p3~4}hC|>+$I"#5 [GO]?!׃ƅ)qD^Vm8~ -B|F ~ ,bƥ\1bS_O)`ʉOVm8~OSɕ)G[N]9S+~J_TP[f<#7\sK<|jS/ P"FmMo)%`1Eh]D",U0e-2u 10jk~ Wzr+ѬD 4(~5&{wgK7IjdyO+;sl?ˌ'ތ2):h=9GG Tj5mmd=bb7lVze?Q*B*>@> Footnote TextCJOJQJaJ8&@8 Footnote ReferenceH*8 @"8 Footer  ! OJQJaJ8Z@28 Plain TextCJOJQJaJ(_b^a/ zL_b    / zLO  _b*+89& ' ' STxy ""o$p$&& '!'$(%(***@+I,J,--o/p/q/x1y1z1{1|1}1~111111111111:2;2@2M2 4 44.4%6&677788/90939A9:::::::::;;;;;<<<<<<<=<===P=======>>>>??,? @ @@9@@@@AACD!D2DADPDUDeDDDDDDDWFXFYFZF[FFFFFFGkGlGG_H`H{HIIIIIJJJJ*J?L@L}LMNNOOPPPPP PVPTTTTTTTUXYYYYYYZZ[[#[$[G[J[[[[[[[3\4\@\B\D\V\\\\\\\\]] ]7]h]]]]]]]]^^;^>^q^^^^^_(_/_j____A`````Caaa|aaaaaabb.b6b=bVbYb\b]b`b000(00+00+(0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800:0:0:0:0:0:00;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0@0 00000000/0/0/0/0/0/0/0/0/0/0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004"8N__f:>AKNyq3:6<>@ADHXJJkK*N\`/c_f;=?@BCDEFGHIJLMOP^f<8a|_bX   O:::8@x (  B    P   " H  #  B      C F. ``TT`TT H   #   \   3 " V   #  " P     "  V  # "   P    "   B S  ? (  "~1;_bQYw Thx! 4#94 SThTx!@ L#4 "$ Hd4 1$h,X ,,`#+t _997858330 _997859391 _1041148874 _997863952 _997874005 _998220256 _1041151344 _997874282 _997878934 _998207286 _998207313 _998207742 _998207788PPPTTTTYYYYYY`b@@@@@@@@@ @ @ @ @PPPTTTTYYYYYY`bgtA K W f 4:eg!!!""."""""<$K$%%:&I&''( (((((((**--N-X----.9....../;/111133*878;;;;b<q<<<<<<<= ===@=A=M=]=c===========`>j>>>>>>>>>>>>>???)?w?}??? @@@@@@@'@)@,@-@7@@@@@@@@AAA AAhAnAyAAFBPBBBBBTCZCCCCD D DDD!D'D2D8DADGDUD[DeDtDxD~DDDDDDDFFFFFGGG1G7GlGwGxG{GGG`HjHrHyH{HHIIIIIJTTUUWWMXWX!Y-YRZaZZZZZZ[$[/[6[E[[[[[[[4\7\D\R\_\k\\\\\\\\]]]A]H]Q]`]]]]]^^_____________`$`2`3`=`m`{`|``aaa!a#a9aMa]akaxaaaaaaab%b`b4;''(!(((**- --.:... //B1E13344;;<<<<<<==@=====>>>>??w?~? @@@@@@@@AACCDD!D'D2D8DADGDUD[DeDtDDDFFFGlGwGGG)H8H`HjH{HHIJ4J  4 6 ++++,,JLL)M)MPPcPgPuP{P[[[[]b`bdon@Z:\don\AppData\Microsoft\Word\AutoRecovery save of Document1.asddon1E:\public\html\cs1567\reference\robotmanualv3.doc Optics LabGH:\.cs.pitt.edu\usr0\don\public\html\cs1567\reference\robotmanualv3.docdon@Z:\AppData\Microsoft\Word\AutoRecovery save of robotmanualv3.asddon@Z:\AppData\Microsoft\Word\AutoRecovery save of robotmanualv3.asddon1K:\public\html\cs1567\reference\robotmanualv3.docdon1K:\public\html\cs1567\reference\robotmanualv3.doc' Sx p$& '$(**I,-o/w11111:2;2@2M2 4 44.47788/90939A9::<<<<<=<===P=======>>>??,? @ @9@@@ADDDXFYFFFFFFGkGlGG_H`H{HIIIIJJ]b`b@_b`@UnknownG: Times New Roman5Symbol3& : Arial3TimesMMMonacoCourier NewY New YorkTimes New Roman?5 : Courier New"qhQQf0{aFzaF <!20J2Computer Science 1567dondon