User Tools

Site Tools


marvin:lab8

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
marvin:lab8 [2008/11/09 10:34] devamarvin:lab8 [2008/11/14 08:50] (current) rieper
Line 8: Line 8:
  
 ====Plan==== ====Plan====
-  * Modify code by Ole Caprani(([[http://legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson8.dir/]])) to work with the our own physical implementation of Marvin.+  * Modify code by Ole Caprani(([[http://legolab.daimi.au.dk/DigitalControl.dir/NXT/Lesson8.dir/]])) to work with our own physical implementation of Marvin.
     * Test individual behaviors seperately and re-calibrate constants.     * Test individual behaviors seperately and re-calibrate constants.
   * Make modular priority system.   * Make modular priority system.
Line 14: Line 14:
  
 ====Execution==== ====Execution====
-We modified the code to be more modular. This was not part of the exercise, but it made it a lot easier to test individual modules. Below follows  the modifications made.+We modified the code to be more modular. This was not part of the exercise, but it made it a lot easier to test individual modules. Below follows the modifications made.
  
 {{marvin:lab8-2.jpg?300}} {{marvin:lab8-2.jpg?300}}
-  * The constant ''tooCloseThreshold'' was initially set to be 20 cm, but this was not enough to take into account our modified Marvin which has a plate separating the two light sensors. There this constant was changed to 35 instead. +  * The constant ''tooCloseThreshold'' was initially set to be 20 cm, but this was not enough to take into account our modified Marvin which has a plate separating the two light sensors. Therefore this constant was changed to 35 instead. 
-  * The constants in the thread ''RandonDrive.java'' has been change to accommodate more action, less waiting. We wanted Marvin to move longer before there were the tread ended. This caused Marvin to be more "exploring."+  * The constants in the thread ''RandomDrive.java'' has been changed to accommodate more action, less waiting. We wanted Marvin to move longer before the tread ended. This caused Marvin to be more "exploring."
 **Video of Marvin running with default code**\\ **Video of Marvin running with default code**\\
 [[http://www.youtube.com/v/OuSbJ5-chXI|{{marvin:lab8-1.jpg}}]]\\ [[http://www.youtube.com/v/OuSbJ5-chXI|{{marvin:lab8-1.jpg}}]]\\
  
 ===RandomDrive=== ===RandomDrive===
-Prints an f on the screen to show the direction of movement. The thread drives forward with different random numbers between 50 and 100 on each motor. This means that Marvin not necessarily (in fact not likely) will drive straight ahead. It will do this between 1 and 3 seconds. Then print s on the screen to indicate a stop and wait between 0.5 and 1 second. All these intervals are computed using a random function from Math library.+Prints an "f" (forward) on the screen to show the direction of movement. The thread drives forward with different random numbers between 50 and 100 on each motor. This means that Marvin not necessarily (in fact not likely) will drive straight ahead. It will do this between 1 and 3 seconds. Then print "son the screen to indicate a stop and wait between 0.5 and 1 second. All these intervals are computed using a random function from Math library.
  
 ===AvoidFront=== ===AvoidFront===
-Implemented using a sonic sensor. Prints a b on the screen to indicate a backwards motion, and set full power to both motors and do this for 1 second to get a away from the obstacle. Afterward Marvin stops both motors, and sets right motor to full power to make a left turn. Marvin does this for 0.8 seconds, and it seems this corresponds to a 90 degree turn to the left. This thread shows a f while this happens. Lastly shows en stops for 0.5 seconds.+Implemented using a sonic sensor. Prints a "bon the screen to indicate a backwards motion, and set full power to both motors and do this for 1 second to get a away from the obstacle. Afterwards Marvin stops both motors, and sets right motor to full power to make a left turn. Marvin does this for 0.8 seconds, and it seems to correspond to a 90 degree turn to the left. This thread shows a "fwhile this happens. Lastly Marvin shows an "s" and stops for 0.5 seconds.
  
 ===PlaySound=== ===PlaySound===
-This thread waits for 10 seconds, then stops and plays a sound while printing an s on the screen. +This thread waits for 10 seconds, then stops and plays a sound while printing an "son the screen. 
  
 ====Modular Priority System==== ====Modular Priority System====
-The priority handling was in the initial code created by handing pointers to all lower priority Behavior to each Behavior, as shown in the code below:+The priority handling was in the initial code created by handing pointers to all lower priority behaviour to each behaviour, as shown in the code below:
 <code java> <code java>
 rd = new RandomDrive("Drive",1); rd = new RandomDrive("Drive",1);
Line 38: Line 38:
 ps = new PlaySounds ("Play ",3,af,rd); ps = new PlaySounds ("Play ",3,af,rd);
 </code> </code>
-This however makes shuffling of the priorities, as well as making the introduction of new Behaviors, a very tedious task. We therefore rewrote the priority system to make it more modular and flexible.\\+This however makes shuffling of the priorities, as well as making the introduction of new behaviours a very tedious task. We therefore rewrote the priority system to make it more modular and flexible.\\
 Below is the new structure: Below is the new structure:
 <code java> <code java>
Line 53: Line 53:
 ps = new PlaySounds("Play ", behaviors); behaviors.add(ps); ps = new PlaySounds("Play ", behaviors); behaviors.add(ps);
 </code> </code>
-The idea is to use an array of Behaviors containing all lower priority Behaviors in each Behavior.\\+The idea is to use an array of Behavior objects containing all lower priority Behaviors in each Behavior.\\
 this array is copied and stored in the constructor of each Behavior, and can then be iterated whenever suppression of the lower levels are needed. this array is copied and stored in the constructor of each Behavior, and can then be iterated whenever suppression of the lower levels are needed.
 <code java> <code java>
Line 66: Line 66:
   // Clone the Behavior list.   // Clone the Behavior list.
   this.behaviors = new ArrayList();   this.behaviors = new ArrayList();
 +
   for(int i = 0; i < behaviors.size(); i++) {   for(int i = 0; i < behaviors.size(); i++) {
     Behavior b = (Behavior)behaviors.get(i);     Behavior b = (Behavior)behaviors.get(i);
Line 87: Line 88:
 ====Threaded implementation of "Driving Towards Light"==== ====Threaded implementation of "Driving Towards Light"====
 The ''DriveTowardsLight'' class was implemented based on the code from [[marvin:lab7]].\\ The ''DriveTowardsLight'' class was implemented based on the code from [[marvin:lab7]].\\
-The wanted behavior is the following: +The wanted behaviour is the following: 
-  * suppress lower behaviors+  * suppress lower behaviours
   * read light values   * read light values
   * assign modified light values as motor power (l1 -> m2, l2 -> m1).   * assign modified light values as motor power (l1 -> m2, l2 -> m1).
-  * unsuppress lower behaviors+  * unsuppress lower behaviours
 Here is the most important code from the class: Here is the most important code from the class:
 <code java> <code java>
marvin/lab8.1226223255.txt.gz · Last modified: 2008/11/09 10:34 by deva