<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://gicl.cs.drexel.edu/wiki-data/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://gicl.cs.drexel.edu/wiki-data/api.php?action=feedcontributions&amp;user=Pwt23&amp;feedformat=atom</id>
		<title>GICLWiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://gicl.cs.drexel.edu/wiki-data/api.php?action=feedcontributions&amp;user=Pwt23&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Special:Contributions/Pwt23"/>
		<updated>2013-05-23T12:59:58Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.18.2</generator>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)</id>
		<title>Bio-Robotics Lab (Fall 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)"/>
				<updated>2007-12-14T17:08:10Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
[[Category:Fall 2007 classes]]&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
* Here is the 5x10 Map. It is oriented vertically: http://gicl.cs.drexel.edu/wiki/Image:Cs_final_map_5_10_rect.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 2007-12-05: Assignment 4, the LAST assignment, will be due (and demoed) on Friday, December 14th in the Hill Conference Room (Lebow 240) at 12:00pm&lt;br /&gt;
* 2007-11-14: [[BioInspiredRobotDesignAssignment4|Assignment 4]] is up and '''due Friday November 30, no later than 5pm'''.  A sample map is here [[media:CS485-Assignment4.zip]]&lt;br /&gt;
** Some sample code from Gary Flake's Computational Beauty of Nature [[media:cbn-java.zip]]&lt;br /&gt;
** The environment is [[media:environment.txt|here]]&lt;br /&gt;
* 2007-11-09: There is an EXTENSION on Assignment #3. It is now due on Monday Nov. 12th, no later than 5:00pm.&lt;br /&gt;
* 2007-11-07: [[Fall2007BioInspiredRobotDesignAssignment3|Assignment 3]] is due at the end of this week 11/09&lt;br /&gt;
* 2007-10-23: Some sample code for XPM format is [[XPMSample|here]].  For more in-depth, you can read about it from [http://www.cs.drexel.edu/%7Edavid/Classes/CS430/HWs/Assignment1.html CS430/536 Graphics Assignment 1].&lt;br /&gt;
* 2007-10-15: [[Fall2007BioInspiredRobotDesignAssignment2|Assignment 2]] is up it is due anytime the week of '''October 22nd.'''&lt;br /&gt;
* 2007-10-15: Thanks to Brian Lutz for writing up some instructions for setting up [[Connecting_Roomba_to_Your_Computer#Linux|Bluetooth with Linux]]&lt;br /&gt;
* 2007-10-01: There is a small bug in roombacomm.jar where goBackward(dist) did not go backward.  It is fixed in the jar file included in this '''[[Media:RoombaComm.zip |Roombacomm.zip file]]'''.&lt;br /&gt;
&lt;br /&gt;
==Course Logistics==&lt;br /&gt;
&lt;br /&gt;
Prerequisites: Permission of instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
Class Time: M-W-F 14:00-&amp;gt;14:50&amp;lt;br&amp;gt;&lt;br /&gt;
Class Location: UCross Rm 149&amp;lt;br&amp;gt;&lt;br /&gt;
Office Hours: UCROSS147 Wed and Fri 12-2pm and by appointment&amp;lt;br&amp;gt;&lt;br /&gt;
Course Instructor: [[William C. Regli]], Ph.D.&amp;lt;br&amp;gt;&lt;br /&gt;
Teaching Assistants: Peter Thai &amp;lt;pwt23@drexel.edu&amp;gt; and Duc Nguyen &amp;lt;dn53@drexel.edu&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Instructor Contact: Email regli (at) drexel (DOT) edu (not that this will help keep the spammers away)&amp;lt;br&amp;gt;&lt;br /&gt;
Phone 215.895.6827; Office: UC 143&lt;br /&gt;
&lt;br /&gt;
==Course Objectives and Outcomes==&lt;br /&gt;
&lt;br /&gt;
The goal of this class is to learn how to create software to interact with devices embodied in the physical world.  Students successfully completing this class will: &lt;br /&gt;
#understand the basic concepts of robotics (from a computer-science point of view), including kinematics, dynamics, actuators, controllers, etc; &lt;br /&gt;
#perform software development to control mobile robots (specifically iRobot Roombas); &lt;br /&gt;
#design experiments for robotic platforms; &lt;br /&gt;
#measure the effectiveness of a robotic system on a given problem;&lt;br /&gt;
#gain experience with biologically-inspired robotics techniques (swarming, biologically inspired design, etc)&lt;br /&gt;
#employ cyber-infrastructure (wikis, web, etc) and engineering informatics tools (CAD, simulation, MATLAB, Maple, Pro/E, SolidWorks, ACIS, etc) to better understand the relationship between virtual models and the real world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lectures==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=&amp;quot;75&amp;quot;|Date&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Assignment&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Topic&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Summary Notes&lt;br /&gt;
!width=&amp;quot;500&amp;quot;|Links and References&lt;br /&gt;
|-&lt;br /&gt;
|September 24&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Intro to Robot Lab&lt;br /&gt;
|&lt;br /&gt;
[[Media:CS-Robot-Lab-Spring2007-Lec-1.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Introduction to Robotics&lt;br /&gt;
|[[Media:Introduction_to_Robotics.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 8th&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1 Assignment 1] due&lt;br /&gt;
|&lt;br /&gt;
|[[Robotics Videos]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 15th&lt;br /&gt;
|&lt;br /&gt;
|SLAM&lt;br /&gt;
|[[Media:SLAM.ppt]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|May 9&lt;br /&gt;
|Robotics Videos Quiz&lt;br /&gt;
|Playtime with Roombas&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 16&lt;br /&gt;
|&lt;br /&gt;
|Robot Coordination: flooded out&lt;br /&gt;
|&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|October 22&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2 Assignment 2] due&lt;br /&gt;
|Grading Assignment 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|October 29&lt;br /&gt;
|&lt;br /&gt;
|Path Planning&lt;br /&gt;
|[[Media:Robot-Lab-Path-Planning.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 12&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3 Assignment 3] due&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|November 19&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Thanksgiving holiday, no class Wed 11/21 or Friday 11/23&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 26&lt;br /&gt;
|[[BioInspiredRobotDesignAssignment4]] is due 11/30 by 5pm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|June 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Finals Week&lt;br /&gt;
|&lt;br /&gt;
|}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Text==&lt;br /&gt;
&lt;br /&gt;
Required texts and readings:&amp;lt;br&amp;gt;&lt;br /&gt;
# [http://gicl.cs.drexel.edu/wiki-data/images/a/af/Brooks-representation.pdf Intelligence without Representation], Rodney Brooks.&lt;br /&gt;
# Flesh and Machines: How Robots Will Change Us (Paperback) by Rodney Brooks, Publisher: Vintage (February 4, 2003); ISBN-10: 037572527X.&lt;br /&gt;
#  [http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf Introduction to the Kalman Filter] from UNC.&lt;br /&gt;
# [http://ocw.mit.edu/NR/rdonlyres/Aeronautics-and-Astronautics/16-412JSpring-2005/9D8DB59F-24EC-4B75-BA7A-F0916BAB2440/0/1aslam_blas_repo.pdf SLAM for Dummies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Interested students may wish to examine the following textbooks:&lt;br /&gt;
*J.J. Craig. Introduction to Robotics: Mechanics and Control. Prentice Hall; 3rd edition, 2003.&lt;br /&gt;
*Kiyoshi Toko. Biomimetic Sensor Technology. Cambridge University Press, 2000.&lt;br /&gt;
*Karl Williams. Amphibionics: Build Your Own Biologically Inspired Reptilian Robot. McGraw-Hill/TAB Electronics, 2003.&lt;br /&gt;
*David Cook. Robot Building for Beginners. Apress, 2002.&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
The due dates are listed on the week by week breakdown of the course below.  When an assignment is due on a particular date, that means the assignment is really due that week.  You must arrange a time one of the TAs for this class, during the week the assignment is due in order to have your assignment evaluated and graded.  As there are limited slots per TA session, it is best to schedule a time slot sooner rather than later.  You also will have the opportunity to have your work graded after the lecture during the due week.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Depending on the evolution of the class, students may have an opportunity to gain experience with a variety of computational tools, including MATLAB, SolidWorks, Pro/ENGINEER, ACIS, MAPLE, etc.  Several research prototype tools may also be introduced for physics-based modeling, kinematics, etc.&lt;br /&gt;
&lt;br /&gt;
[[Processing]] Setup&lt;br /&gt;
&lt;br /&gt;
* A skeleton [[Media:CS511.zip|Eclipse Project]] to write full-fledged Java instead of Processing.  Some directions [[Roomba/Eclipse|here]]&lt;br /&gt;
* [[Media:RoombaProject.zip |Another Eclipse Project]] - includes some classes from Lego Mindstorms [http://lejos.sourceforge.net Lejos Project] concerning subsumption architecture.&lt;br /&gt;
* Download Eclipse [http://www.eclipse.org here]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous Resources==&lt;br /&gt;
&lt;br /&gt;
Wiki page for Winter 2007 Roomba Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
Page from Spring 2007 Robotics Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
iRobot Create Forums:  [http://createforums.irobot.com/]&lt;br /&gt;
&lt;br /&gt;
Robotics Primer Workbook based around the Create [http://roboticsprimer.sourceforge.net/workbook/Main_Page]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)</id>
		<title>Bio-Robotics Lab (Fall 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)"/>
				<updated>2007-12-14T17:03:28Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
[[Category:Fall 2007 classes]]&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
* HERE IS THE 5x10 Map: http://gicl.cs.drexel.edu/wiki/Image:Cs_final_map_5_10_rect.txt&lt;br /&gt;
&lt;br /&gt;
* 2007-12-05: Assignment 4, the LAST assignment, will be due (and demoed) on Friday, December 14th in the Hill Conference Room (Lebow 240) at 12:00pm&lt;br /&gt;
* 2007-11-14: [[BioInspiredRobotDesignAssignment4|Assignment 4]] is up and '''due Friday November 30, no later than 5pm'''.  A sample map is here [[media:CS485-Assignment4.zip]]&lt;br /&gt;
** Some sample code from Gary Flake's Computational Beauty of Nature [[media:cbn-java.zip]]&lt;br /&gt;
** The environment is [[media:environment.txt|here]]&lt;br /&gt;
* 2007-11-09: There is an EXTENSION on Assignment #3. It is now due on Monday Nov. 12th, no later than 5:00pm.&lt;br /&gt;
* 2007-11-07: [[Fall2007BioInspiredRobotDesignAssignment3|Assignment 3]] is due at the end of this week 11/09&lt;br /&gt;
* 2007-10-23: Some sample code for XPM format is [[XPMSample|here]].  For more in-depth, you can read about it from [http://www.cs.drexel.edu/%7Edavid/Classes/CS430/HWs/Assignment1.html CS430/536 Graphics Assignment 1].&lt;br /&gt;
* 2007-10-15: [[Fall2007BioInspiredRobotDesignAssignment2|Assignment 2]] is up it is due anytime the week of '''October 22nd.'''&lt;br /&gt;
* 2007-10-15: Thanks to Brian Lutz for writing up some instructions for setting up [[Connecting_Roomba_to_Your_Computer#Linux|Bluetooth with Linux]]&lt;br /&gt;
* 2007-10-01: There is a small bug in roombacomm.jar where goBackward(dist) did not go backward.  It is fixed in the jar file included in this '''[[Media:RoombaComm.zip |Roombacomm.zip file]]'''.&lt;br /&gt;
&lt;br /&gt;
==Course Logistics==&lt;br /&gt;
&lt;br /&gt;
Prerequisites: Permission of instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
Class Time: M-W-F 14:00-&amp;gt;14:50&amp;lt;br&amp;gt;&lt;br /&gt;
Class Location: UCross Rm 149&amp;lt;br&amp;gt;&lt;br /&gt;
Office Hours: UCROSS147 Wed and Fri 12-2pm and by appointment&amp;lt;br&amp;gt;&lt;br /&gt;
Course Instructor: [[William C. Regli]], Ph.D.&amp;lt;br&amp;gt;&lt;br /&gt;
Teaching Assistants: Peter Thai &amp;lt;pwt23@drexel.edu&amp;gt; and Duc Nguyen &amp;lt;dn53@drexel.edu&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Instructor Contact: Email regli (at) drexel (DOT) edu (not that this will help keep the spammers away)&amp;lt;br&amp;gt;&lt;br /&gt;
Phone 215.895.6827; Office: UC 143&lt;br /&gt;
&lt;br /&gt;
==Course Objectives and Outcomes==&lt;br /&gt;
&lt;br /&gt;
The goal of this class is to learn how to create software to interact with devices embodied in the physical world.  Students successfully completing this class will: &lt;br /&gt;
#understand the basic concepts of robotics (from a computer-science point of view), including kinematics, dynamics, actuators, controllers, etc; &lt;br /&gt;
#perform software development to control mobile robots (specifically iRobot Roombas); &lt;br /&gt;
#design experiments for robotic platforms; &lt;br /&gt;
#measure the effectiveness of a robotic system on a given problem;&lt;br /&gt;
#gain experience with biologically-inspired robotics techniques (swarming, biologically inspired design, etc)&lt;br /&gt;
#employ cyber-infrastructure (wikis, web, etc) and engineering informatics tools (CAD, simulation, MATLAB, Maple, Pro/E, SolidWorks, ACIS, etc) to better understand the relationship between virtual models and the real world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lectures==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=&amp;quot;75&amp;quot;|Date&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Assignment&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Topic&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Summary Notes&lt;br /&gt;
!width=&amp;quot;500&amp;quot;|Links and References&lt;br /&gt;
|-&lt;br /&gt;
|September 24&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Intro to Robot Lab&lt;br /&gt;
|&lt;br /&gt;
[[Media:CS-Robot-Lab-Spring2007-Lec-1.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Introduction to Robotics&lt;br /&gt;
|[[Media:Introduction_to_Robotics.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 8th&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1 Assignment 1] due&lt;br /&gt;
|&lt;br /&gt;
|[[Robotics Videos]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 15th&lt;br /&gt;
|&lt;br /&gt;
|SLAM&lt;br /&gt;
|[[Media:SLAM.ppt]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|May 9&lt;br /&gt;
|Robotics Videos Quiz&lt;br /&gt;
|Playtime with Roombas&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 16&lt;br /&gt;
|&lt;br /&gt;
|Robot Coordination: flooded out&lt;br /&gt;
|&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|October 22&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2 Assignment 2] due&lt;br /&gt;
|Grading Assignment 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|October 29&lt;br /&gt;
|&lt;br /&gt;
|Path Planning&lt;br /&gt;
|[[Media:Robot-Lab-Path-Planning.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 12&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3 Assignment 3] due&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|November 19&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Thanksgiving holiday, no class Wed 11/21 or Friday 11/23&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 26&lt;br /&gt;
|[[BioInspiredRobotDesignAssignment4]] is due 11/30 by 5pm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|June 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Finals Week&lt;br /&gt;
|&lt;br /&gt;
|}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Text==&lt;br /&gt;
&lt;br /&gt;
Required texts and readings:&amp;lt;br&amp;gt;&lt;br /&gt;
# [http://gicl.cs.drexel.edu/wiki-data/images/a/af/Brooks-representation.pdf Intelligence without Representation], Rodney Brooks.&lt;br /&gt;
# Flesh and Machines: How Robots Will Change Us (Paperback) by Rodney Brooks, Publisher: Vintage (February 4, 2003); ISBN-10: 037572527X.&lt;br /&gt;
#  [http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf Introduction to the Kalman Filter] from UNC.&lt;br /&gt;
# [http://ocw.mit.edu/NR/rdonlyres/Aeronautics-and-Astronautics/16-412JSpring-2005/9D8DB59F-24EC-4B75-BA7A-F0916BAB2440/0/1aslam_blas_repo.pdf SLAM for Dummies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Interested students may wish to examine the following textbooks:&lt;br /&gt;
*J.J. Craig. Introduction to Robotics: Mechanics and Control. Prentice Hall; 3rd edition, 2003.&lt;br /&gt;
*Kiyoshi Toko. Biomimetic Sensor Technology. Cambridge University Press, 2000.&lt;br /&gt;
*Karl Williams. Amphibionics: Build Your Own Biologically Inspired Reptilian Robot. McGraw-Hill/TAB Electronics, 2003.&lt;br /&gt;
*David Cook. Robot Building for Beginners. Apress, 2002.&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
The due dates are listed on the week by week breakdown of the course below.  When an assignment is due on a particular date, that means the assignment is really due that week.  You must arrange a time one of the TAs for this class, during the week the assignment is due in order to have your assignment evaluated and graded.  As there are limited slots per TA session, it is best to schedule a time slot sooner rather than later.  You also will have the opportunity to have your work graded after the lecture during the due week.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Depending on the evolution of the class, students may have an opportunity to gain experience with a variety of computational tools, including MATLAB, SolidWorks, Pro/ENGINEER, ACIS, MAPLE, etc.  Several research prototype tools may also be introduced for physics-based modeling, kinematics, etc.&lt;br /&gt;
&lt;br /&gt;
[[Processing]] Setup&lt;br /&gt;
&lt;br /&gt;
* A skeleton [[Media:CS511.zip|Eclipse Project]] to write full-fledged Java instead of Processing.  Some directions [[Roomba/Eclipse|here]]&lt;br /&gt;
* [[Media:RoombaProject.zip |Another Eclipse Project]] - includes some classes from Lego Mindstorms [http://lejos.sourceforge.net Lejos Project] concerning subsumption architecture.&lt;br /&gt;
* Download Eclipse [http://www.eclipse.org here]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous Resources==&lt;br /&gt;
&lt;br /&gt;
Wiki page for Winter 2007 Roomba Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
Page from Spring 2007 Robotics Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
iRobot Create Forums:  [http://createforums.irobot.com/]&lt;br /&gt;
&lt;br /&gt;
Robotics Primer Workbook based around the Create [http://roboticsprimer.sourceforge.net/workbook/Main_Page]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/File:Cs_final_map_5_10_rect.txt</id>
		<title>File:Cs final map 5 10 rect.txt</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/File:Cs_final_map_5_10_rect.txt"/>
				<updated>2007-12-14T17:03:19Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)</id>
		<title>Bio-Robotics Lab (Fall 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)"/>
				<updated>2007-12-05T08:46:42Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
[[Category:Fall 2007 classes]]&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
* 2007-12-05: Assignment 4, the LAST assignment, will be due (and demoed) on Friday, December 14th in the Hill Conference Room (Lebow 240) at 12:00pm&lt;br /&gt;
* 2007-11-14: [[BioInspiredRobotDesignAssignment4|Assignment 4]] is up and '''due Friday November 30, no later than 5pm'''.  A sample map is here [[media:CS485-Assignment4.zip]]&lt;br /&gt;
** Some sample code from Gary Flake's Computational Beauty of Nature [[media:cbn-java.zip]]&lt;br /&gt;
** The environment is [[media:environment.txt|here]]&lt;br /&gt;
* 2007-11-09: There is an EXTENSION on Assignment #3. It is now due on Monday Nov. 12th, no later than 5:00pm.&lt;br /&gt;
* 2007-11-07: [[Fall2007BioInspiredRobotDesignAssignment3|Assignment 3]] is due at the end of this week 11/09&lt;br /&gt;
* 2007-10-23: Some sample code for XPM format is [[XPMSample|here]].  For more in-depth, you can read about it from [http://www.cs.drexel.edu/%7Edavid/Classes/CS430/HWs/Assignment1.html CS430/536 Graphics Assignment 1].&lt;br /&gt;
* 2007-10-15: [[Fall2007BioInspiredRobotDesignAssignment2|Assignment 2]] is up it is due anytime the week of '''October 22nd.'''&lt;br /&gt;
* 2007-10-15: Thanks to Brian Lutz for writing up some instructions for setting up [[Connecting_Roomba_to_Your_Computer#Linux|Bluetooth with Linux]]&lt;br /&gt;
* 2007-10-01: There is a small bug in roombacomm.jar where goBackward(dist) did not go backward.  It is fixed in the jar file included in this '''[[Media:RoombaComm.zip |Roombacomm.zip file]]'''.&lt;br /&gt;
&lt;br /&gt;
==Course Logistics==&lt;br /&gt;
&lt;br /&gt;
Prerequisites: Permission of instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
Class Time: M-W-F 14:00-&amp;gt;14:50&amp;lt;br&amp;gt;&lt;br /&gt;
Class Location: UCross Rm 149&amp;lt;br&amp;gt;&lt;br /&gt;
Office Hours: UCROSS147 Wed and Fri 12-2pm and by appointment&amp;lt;br&amp;gt;&lt;br /&gt;
Course Instructor: [[William C. Regli]], Ph.D.&amp;lt;br&amp;gt;&lt;br /&gt;
Teaching Assistants: Peter Thai &amp;lt;pwt23@drexel.edu&amp;gt; and Duc Nguyen &amp;lt;dn53@drexel.edu&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Instructor Contact: Email regli (at) drexel (DOT) edu (not that this will help keep the spammers away)&amp;lt;br&amp;gt;&lt;br /&gt;
Phone 215.895.6827; Office: UC 143&lt;br /&gt;
&lt;br /&gt;
==Course Objectives and Outcomes==&lt;br /&gt;
&lt;br /&gt;
The goal of this class is to learn how to create software to interact with devices embodied in the physical world.  Students successfully completing this class will: &lt;br /&gt;
#understand the basic concepts of robotics (from a computer-science point of view), including kinematics, dynamics, actuators, controllers, etc; &lt;br /&gt;
#perform software development to control mobile robots (specifically iRobot Roombas); &lt;br /&gt;
#design experiments for robotic platforms; &lt;br /&gt;
#measure the effectiveness of a robotic system on a given problem;&lt;br /&gt;
#gain experience with biologically-inspired robotics techniques (swarming, biologically inspired design, etc)&lt;br /&gt;
#employ cyber-infrastructure (wikis, web, etc) and engineering informatics tools (CAD, simulation, MATLAB, Maple, Pro/E, SolidWorks, ACIS, etc) to better understand the relationship between virtual models and the real world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lectures==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=&amp;quot;75&amp;quot;|Date&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Assignment&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Topic&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Summary Notes&lt;br /&gt;
!width=&amp;quot;500&amp;quot;|Links and References&lt;br /&gt;
|-&lt;br /&gt;
|September 24&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Intro to Robot Lab&lt;br /&gt;
|&lt;br /&gt;
[[Media:CS-Robot-Lab-Spring2007-Lec-1.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Introduction to Robotics&lt;br /&gt;
|[[Media:Introduction_to_Robotics.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 8th&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1 Assignment 1] due&lt;br /&gt;
|&lt;br /&gt;
|[[Robotics Videos]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 15th&lt;br /&gt;
|&lt;br /&gt;
|SLAM&lt;br /&gt;
|[[Media:SLAM.ppt]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|May 9&lt;br /&gt;
|Robotics Videos Quiz&lt;br /&gt;
|Playtime with Roombas&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 16&lt;br /&gt;
|&lt;br /&gt;
|Robot Coordination: flooded out&lt;br /&gt;
|&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|October 22&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2 Assignment 2] due&lt;br /&gt;
|Grading Assignment 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|October 29&lt;br /&gt;
|&lt;br /&gt;
|Path Planning&lt;br /&gt;
|[[Media:Robot-Lab-Path-Planning.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 12&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3 Assignment 3] due&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|November 19&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Thanksgiving holiday, no class Wed 11/21 or Friday 11/23&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 26&lt;br /&gt;
|[[BioInspiredRobotDesignAssignment4]] is due 11/30 by 5pm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|June 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Finals Week&lt;br /&gt;
|&lt;br /&gt;
|}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Text==&lt;br /&gt;
&lt;br /&gt;
Required texts and readings:&amp;lt;br&amp;gt;&lt;br /&gt;
# [http://gicl.cs.drexel.edu/wiki-data/images/a/af/Brooks-representation.pdf Intelligence without Representation], Rodney Brooks.&lt;br /&gt;
# Flesh and Machines: How Robots Will Change Us (Paperback) by Rodney Brooks, Publisher: Vintage (February 4, 2003); ISBN-10: 037572527X.&lt;br /&gt;
#  [http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf Introduction to the Kalman Filter] from UNC.&lt;br /&gt;
# [http://ocw.mit.edu/NR/rdonlyres/Aeronautics-and-Astronautics/16-412JSpring-2005/9D8DB59F-24EC-4B75-BA7A-F0916BAB2440/0/1aslam_blas_repo.pdf SLAM for Dummies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Interested students may wish to examine the following textbooks:&lt;br /&gt;
*J.J. Craig. Introduction to Robotics: Mechanics and Control. Prentice Hall; 3rd edition, 2003.&lt;br /&gt;
*Kiyoshi Toko. Biomimetic Sensor Technology. Cambridge University Press, 2000.&lt;br /&gt;
*Karl Williams. Amphibionics: Build Your Own Biologically Inspired Reptilian Robot. McGraw-Hill/TAB Electronics, 2003.&lt;br /&gt;
*David Cook. Robot Building for Beginners. Apress, 2002.&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
The due dates are listed on the week by week breakdown of the course below.  When an assignment is due on a particular date, that means the assignment is really due that week.  You must arrange a time one of the TAs for this class, during the week the assignment is due in order to have your assignment evaluated and graded.  As there are limited slots per TA session, it is best to schedule a time slot sooner rather than later.  You also will have the opportunity to have your work graded after the lecture during the due week.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Depending on the evolution of the class, students may have an opportunity to gain experience with a variety of computational tools, including MATLAB, SolidWorks, Pro/ENGINEER, ACIS, MAPLE, etc.  Several research prototype tools may also be introduced for physics-based modeling, kinematics, etc.&lt;br /&gt;
&lt;br /&gt;
[[Processing]] Setup&lt;br /&gt;
&lt;br /&gt;
* A skeleton [[Media:CS511.zip|Eclipse Project]] to write full-fledged Java instead of Processing.  Some directions [[Roomba/Eclipse|here]]&lt;br /&gt;
* [[Media:RoombaProject.zip |Another Eclipse Project]] - includes some classes from Lego Mindstorms [http://lejos.sourceforge.net Lejos Project] concerning subsumption architecture.&lt;br /&gt;
* Download Eclipse [http://www.eclipse.org here]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous Resources==&lt;br /&gt;
&lt;br /&gt;
Wiki page for Winter 2007 Roomba Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
Page from Spring 2007 Robotics Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
iRobot Create Forums:  [http://createforums.irobot.com/]&lt;br /&gt;
&lt;br /&gt;
Robotics Primer Workbook based around the Create [http://roboticsprimer.sourceforge.net/workbook/Main_Page]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)</id>
		<title>Bio-Robotics Lab (Fall 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)"/>
				<updated>2007-11-13T00:01:31Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
[[Category:Fall 2007 classes]]&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
* 2007-11-09: There is an EXTENSION on Assignment #3. It is now due on Monday Nov. 12th, no later than 5:00pm.&lt;br /&gt;
* 2007-11-07: [[Fall2007BioInspiredRobotDesignAssignment3|Assignment 3]] is due at the end of this week 11/09&lt;br /&gt;
* 2007-10-23: Some sample code for XPM format is [[XPMSample|here]].  For more in-depth, you can read about it from [http://www.cs.drexel.edu/%7Edavid/Classes/CS430/HWs/Assignment1.html CS430/536 Graphics Assignment 1].&lt;br /&gt;
* 2007-10-15: [[Fall2007BioInspiredRobotDesignAssignment2|Assignment 2]] is up it is due anytime the week of '''October 22nd.'''&lt;br /&gt;
* 2007-10-15: Thanks to Brian Lutz for writing up some instructions for setting up [[Connecting_Roomba_to_Your_Computer#Linux|Bluetooth with Linux]]&lt;br /&gt;
* 2007-10-01: There is a small bug in roombacomm.jar where goBackward(dist) did not go backward.  It is fixed in the jar file included in this '''[[Media:RoombaComm.zip |Roombacomm.zip file]]'''.&lt;br /&gt;
&lt;br /&gt;
==Course Logistics==&lt;br /&gt;
&lt;br /&gt;
Prerequisites: Permission of instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
Class Time: M-W-F 14:00-&amp;gt;14:50&amp;lt;br&amp;gt;&lt;br /&gt;
Class Location: UCross Rm 149&amp;lt;br&amp;gt;&lt;br /&gt;
Office Hours: UCROSS147 Wed and Fri 12-2pm and by appointment&amp;lt;br&amp;gt;&lt;br /&gt;
Course Instructor: [[William C. Regli]], Ph.D.&amp;lt;br&amp;gt;&lt;br /&gt;
Teaching Assistants: Peter Thai &amp;lt;pwt23@drexel.edu&amp;gt; and Duc Nguyen &amp;lt;dn53@drexel.edu&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Instructor Contact: Email regli (at) drexel (DOT) edu (not that this will help keep the spammers away)&amp;lt;br&amp;gt;&lt;br /&gt;
Phone 215.895.6827; Office: UC 143&lt;br /&gt;
&lt;br /&gt;
==Course Objectives and Outcomes==&lt;br /&gt;
&lt;br /&gt;
The goal of this class is to learn how to create software to interact with devices embodied in the physical world.  Students successfully completing this class will: &lt;br /&gt;
#understand the basic concepts of robotics (from a computer-science point of view), including kinematics, dynamics, actuators, controllers, etc; &lt;br /&gt;
#perform software development to control mobile robots (specifically iRobot Roombas); &lt;br /&gt;
#design experiments for robotic platforms; &lt;br /&gt;
#measure the effectiveness of a robotic system on a given problem;&lt;br /&gt;
#gain experience with biologically-inspired robotics techniques (swarming, biologically inspired design, etc)&lt;br /&gt;
#employ cyber-infrastructure (wikis, web, etc) and engineering informatics tools (CAD, simulation, MATLAB, Maple, Pro/E, SolidWorks, ACIS, etc) to better understand the relationship between virtual models and the real world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lectures==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=&amp;quot;75&amp;quot;|Date&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Assignment&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Topic&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Summary Notes&lt;br /&gt;
!width=&amp;quot;500&amp;quot;|Links and References&lt;br /&gt;
|-&lt;br /&gt;
|September 24&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Intro to Robot Lab&lt;br /&gt;
|&lt;br /&gt;
[[Media:CS-Robot-Lab-Spring2007-Lec-1.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Introduction to Robotics&lt;br /&gt;
|[[Media:Introduction_to_Robotics.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 8th&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1 Assignment 1] due&lt;br /&gt;
|&lt;br /&gt;
|[[Robotics Videos]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 15th&lt;br /&gt;
|&lt;br /&gt;
|SLAM&lt;br /&gt;
|[[Media:SLAM.ppt]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|May 9&lt;br /&gt;
|Robotics Videos Quiz&lt;br /&gt;
|Playtime with Roombas&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 16&lt;br /&gt;
|&lt;br /&gt;
|Robot Coordination: flooded out&lt;br /&gt;
|&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|October 22&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2 Assignment 2] due&lt;br /&gt;
|Grading Assignment 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|October 29&lt;br /&gt;
|&lt;br /&gt;
|Path Planning&lt;br /&gt;
|[[Media:Robot-Lab-Path-Planning.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 12&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3 Assignment 3] due&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|November 19&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Thanksgiving holiday, no class Wed 11/21 or Friday 11/23&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 26&lt;br /&gt;
|[[BioInspiredRobotDesignAssignment4]] is due 11/30 by 5pm&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|June 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Finals Week&lt;br /&gt;
|&lt;br /&gt;
|}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Text==&lt;br /&gt;
&lt;br /&gt;
Required texts and readings:&amp;lt;br&amp;gt;&lt;br /&gt;
# [http://gicl.cs.drexel.edu/wiki-data/images/a/af/Brooks-representation.pdf Intelligence without Representation], Rodney Brooks.&lt;br /&gt;
# Flesh and Machines: How Robots Will Change Us (Paperback) by Rodney Brooks, Publisher: Vintage (February 4, 2003); ISBN-10: 037572527X.&lt;br /&gt;
#  [http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf Introduction to the Kalman Filter] from UNC.&lt;br /&gt;
# [http://ocw.mit.edu/NR/rdonlyres/Aeronautics-and-Astronautics/16-412JSpring-2005/9D8DB59F-24EC-4B75-BA7A-F0916BAB2440/0/1aslam_blas_repo.pdf SLAM for Dummies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Interested students may wish to examine the following textbooks:&lt;br /&gt;
*J.J. Craig. Introduction to Robotics: Mechanics and Control. Prentice Hall; 3rd edition, 2003.&lt;br /&gt;
*Kiyoshi Toko. Biomimetic Sensor Technology. Cambridge University Press, 2000.&lt;br /&gt;
*Karl Williams. Amphibionics: Build Your Own Biologically Inspired Reptilian Robot. McGraw-Hill/TAB Electronics, 2003.&lt;br /&gt;
*David Cook. Robot Building for Beginners. Apress, 2002.&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
The due dates are listed on the week by week breakdown of the course below.  When an assignment is due on a particular date, that means the assignment is really due that week.  You must arrange a time one of the TAs for this class, during the week the assignment is due in order to have your assignment evaluated and graded.  As there are limited slots per TA session, it is best to schedule a time slot sooner rather than later.  You also will have the opportunity to have your work graded after the lecture during the due week.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Depending on the evolution of the class, students may have an opportunity to gain experience with a variety of computational tools, including MATLAB, SolidWorks, Pro/ENGINEER, ACIS, MAPLE, etc.  Several research prototype tools may also be introduced for physics-based modeling, kinematics, etc.&lt;br /&gt;
&lt;br /&gt;
[[Processing]] Setup&lt;br /&gt;
&lt;br /&gt;
* A skeleton [[Media:CS511.zip|Eclipse Project]] to write full-fledged Java instead of Processing.  Some directions [[Roomba/Eclipse|here]]&lt;br /&gt;
* [[Media:RoombaProject.zip |Another Eclipse Project]] - includes some classes from Lego Mindstorms [http://lejos.sourceforge.net Lejos Project] concerning subsumption architecture.&lt;br /&gt;
* Download Eclipse [http://www.eclipse.org here]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous Resources==&lt;br /&gt;
&lt;br /&gt;
Wiki page for Winter 2007 Roomba Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
Page from Spring 2007 Robotics Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
iRobot Create Forums:  [http://createforums.irobot.com/]&lt;br /&gt;
&lt;br /&gt;
Robotics Primer Workbook based around the Create [http://roboticsprimer.sourceforge.net/workbook/Main_Page]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4</id>
		<title>BioInspiredRobotDesignAssignment4</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4"/>
				<updated>2007-11-12T23:57:24Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: /* Virtual Pheromone */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
Using only simple behaviors, we want to program our Creates to seek out and bring food back to a home base.  At the outset, your robot will begin its search for food by performing random movements and leaving a pheromone in each location visited.  Your robot will be working alone and must perform 3 iterations of finding food then returning home.&lt;br /&gt;
&lt;br /&gt;
[[Image:SystemArchitecture.png|robot find food... mmmm|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=Goal=&lt;br /&gt;
Program the Creates such that they can search and find virtual food using only simple behaviors such as:&lt;br /&gt;
* local movements&lt;br /&gt;
** limited memory (i.e. only know the current location and none of the previous locations).  The robot will not be allowed to perform path planning or use any memory other than the virtual environment map.&lt;br /&gt;
** maintain current location in memory&lt;br /&gt;
* try to avoid walls using the virtual map (otherwise the internal odometry could be thrown off).&lt;br /&gt;
* read pheromone&lt;br /&gt;
* pick up food&lt;br /&gt;
* leave pheromone&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
The robot will begin by searching for food. This will be done via some sort of searching algorithm. As the robot moves, it will leave pheromones at each spot it has visited. To model decay, these pheromones keep track of the elapsed time since since you left the pheromone. &lt;br /&gt;
&lt;br /&gt;
Once food is found, the robot will return to its original place (the colony) by following the pheromones that are the oldest (why is that?). &lt;br /&gt;
&lt;br /&gt;
When the robot has navigated back to the colony, it must again follow a pheromone back to the food (can you figure out which ones?) and return back to the colony.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--The robot begin by executing a search for food.  This is done by random movements until 1) food is found, or 2) a virtual pheromone is encountered.  At each discrete location, the robot will leave a virtual pheromone in the virtual map.  If food is found, return home while leaving a trail every 15cm.  If a pheromone is found, then follow the pheromone trail until it can't find any more pheromones, or until it finds food.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Food==&lt;br /&gt;
Virtual walls are what our ants will use as food.  When our Create encounters a virtual wall, it will &amp;quot;pick up food&amp;quot;, then return home by following it's original pheromone trail while leaving pheromones for the other robots to find.  They will be positioned from above with the IR beam pointing downward to simulate the effect of a food source.  There will be two virtual walls, symbolizing two food sources.&lt;br /&gt;
&lt;br /&gt;
==Virtual Pheromone==&lt;br /&gt;
Once a robot encounters a virtual wall, it will begin its journey home leaving a pheromone trail in the virtual environment.  Leaving a virtual pheromone in the environment is accomplished by sending a location to the Environment Java Class.&lt;br /&gt;
&lt;br /&gt;
Your robot will determine the pheromone trail by querying the map for cells in close proximity with its current location. The pheromones will return values based on the last time you have visited the current location. For example, a pheromone on space X will return 999 if you have left a pheromone there 10 minutes ago while a pheromone will return 10 if you had just recently visited that location.&lt;br /&gt;
&lt;br /&gt;
==Map==&lt;br /&gt;
&lt;br /&gt;
We will be providing you an Environment Java class that the robot will use to represent the hallway.  Do not edit this class.  Your robot may use the following methods from &amp;lt;code&amp;gt;Environment&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Return a Pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;long getPheromone(int x_, int y_)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Leaves a pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;void leavePheromone(int x_, int y_);&amp;lt;/code&amp;gt;&lt;br /&gt;
* Returns whether the cell location has a colony in it&lt;br /&gt;
: boolean isColony(int x_, int y_)&lt;br /&gt;
* Returns whether the cell location is an obstacle (ie. a wall)&lt;br /&gt;
: boolean isObstacle(int x_, int y_)&lt;br /&gt;
&lt;br /&gt;
The map is also able to print the current state of the world in an XPM format.  The pheromone trail is color coded where red spaces is where the robot has traveled most recently and blue is least recently.  The following method will allow you to draw the map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;void drawEnvironment(String outputFileName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
[[image:Assignment4SystemArchitecture.png|center]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=Notes=&lt;br /&gt;
* You MUST use the pheromones to navigate your robot to the food source and back to the colony. Use of map probing or other god-like techniques will result in grade deduction. Remember, you are programming like you are the ant. Be like ant, my friend.&lt;br /&gt;
&lt;br /&gt;
=Administrative=&lt;br /&gt;
* We will provide Java skeleton code as a framework for build the specific behaviors.&lt;br /&gt;
&lt;br /&gt;
The students are responsible for turning in:&lt;br /&gt;
* A final environment map&lt;br /&gt;
* Source code&lt;br /&gt;
* A 2 page write up of the assignment&lt;br /&gt;
** Approach and implementation&lt;br /&gt;
** What worked/didn't work&lt;br /&gt;
** Possible other approaches&lt;br /&gt;
** References&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* Dorigo, M. and Caro, G.D. and Gambardella, L.M., Ant Algorithms for Discrete Optimization, Artificial Life, 1999 vol 5 no. 2, pp 137-172.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4</id>
		<title>BioInspiredRobotDesignAssignment4</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4"/>
				<updated>2007-11-12T23:55:12Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
Using only simple behaviors, we want to program our Creates to seek out and bring food back to a home base.  At the outset, your robot will begin its search for food by performing random movements and leaving a pheromone in each location visited.  Your robot will be working alone and must perform 3 iterations of finding food then returning home.&lt;br /&gt;
&lt;br /&gt;
[[Image:SystemArchitecture.png|robot find food... mmmm|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=Goal=&lt;br /&gt;
Program the Creates such that they can search and find virtual food using only simple behaviors such as:&lt;br /&gt;
* local movements&lt;br /&gt;
** limited memory (i.e. only know the current location and none of the previous locations).  The robot will not be allowed to perform path planning or use any memory other than the virtual environment map.&lt;br /&gt;
** maintain current location in memory&lt;br /&gt;
* try to avoid walls using the virtual map (otherwise the internal odometry could be thrown off).&lt;br /&gt;
* read pheromone&lt;br /&gt;
* pick up food&lt;br /&gt;
* leave pheromone&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
The robot will begin by searching for food. This will be done via some sort of searching algorithm. As the robot moves, it will leave pheromones at each spot it has visited. To model decay, these pheromones keep track of the elapsed time since since you left the pheromone. &lt;br /&gt;
&lt;br /&gt;
Once food is found, the robot will return to its original place (the colony) by following the pheromones that are the oldest (why is that?). &lt;br /&gt;
&lt;br /&gt;
When the robot has navigated back to the colony, it must again follow a pheromone back to the food (can you figure out which ones?) and return back to the colony.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--The robot begin by executing a search for food.  This is done by random movements until 1) food is found, or 2) a virtual pheromone is encountered.  At each discrete location, the robot will leave a virtual pheromone in the virtual map.  If food is found, return home while leaving a trail every 15cm.  If a pheromone is found, then follow the pheromone trail until it can't find any more pheromones, or until it finds food.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Food==&lt;br /&gt;
Virtual walls are what our ants will use as food.  When our Create encounters a virtual wall, it will &amp;quot;pick up food&amp;quot;, then return home by following it's original pheromone trail while leaving pheromones for the other robots to find.  They will be positioned from above with the IR beam pointing downward to simulate the effect of a food source.  There will be two virtual walls, symbolizing two food sources.&lt;br /&gt;
&lt;br /&gt;
==Virtual Pheromone==&lt;br /&gt;
Once a robot encounters a virtual wall, it will begin its journey home leaving a pheromone trail in the virtual environment.  Leaving a virtual pheromone in the environment is accomplished by sending a location to the Environment Java Class.&lt;br /&gt;
&lt;br /&gt;
Other robots will determine if there is a pheromone trail by querying the map with its current location. The pheromones will return values based on the last time you have visited the current location. For example, a pheromone on space X will return 999 if you have left a pheromone there 10 minutes ago while a pheromone will return 10 if you had just recently visited that location.&lt;br /&gt;
&lt;br /&gt;
==Map==&lt;br /&gt;
&lt;br /&gt;
We will be providing you an Environment Java class that the robot will use to represent the hallway.  Do not edit this class.  Your robot may use the following methods from &amp;lt;code&amp;gt;Environment&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Return a Pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;long getPheromone(int x_, int y_)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Leaves a pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;void leavePheromone(int x_, int y_);&amp;lt;/code&amp;gt;&lt;br /&gt;
* Returns whether the cell location has a colony in it&lt;br /&gt;
: boolean isColony(int x_, int y_)&lt;br /&gt;
* Returns whether the cell location is an obstacle (ie. a wall)&lt;br /&gt;
: boolean isObstacle(int x_, int y_)&lt;br /&gt;
&lt;br /&gt;
The map is also able to print the current state of the world in an XPM format.  The pheromone trail is color coded where red spaces is where the robot has traveled most recently and blue is least recently.  The following method will allow you to draw the map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;void drawEnvironment(String outputFileName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
[[image:Assignment4SystemArchitecture.png|center]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=Notes=&lt;br /&gt;
* You MUST use the pheromones to navigate your robot to the food source and back to the colony. Use of map probing or other god-like techniques will result in grade deduction. Remember, you are programming like you are the ant. Be like ant, my friend.&lt;br /&gt;
&lt;br /&gt;
=Administrative=&lt;br /&gt;
* We will provide Java skeleton code as a framework for build the specific behaviors.&lt;br /&gt;
&lt;br /&gt;
The students are responsible for turning in:&lt;br /&gt;
* A final environment map&lt;br /&gt;
* Source code&lt;br /&gt;
* A 2 page write up of the assignment&lt;br /&gt;
** Approach and implementation&lt;br /&gt;
** What worked/didn't work&lt;br /&gt;
** Possible other approaches&lt;br /&gt;
** References&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* Dorigo, M. and Caro, G.D. and Gambardella, L.M., Ant Algorithms for Discrete Optimization, Artificial Life, 1999 vol 5 no. 2, pp 137-172.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4</id>
		<title>BioInspiredRobotDesignAssignment4</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4"/>
				<updated>2007-11-12T23:52:09Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: /* Map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
Using only simple behaviors, we want to program our Creates to seek out and bring food back to a home base.  At the outset, your robot will begin its search for food by performing random movements and leaving a pheromone in each location visited.  Your robot will be working alone and must perform 3 iterations of finding food then returning home.&lt;br /&gt;
&lt;br /&gt;
[[Image:SystemArchitecture.png|robot find food... mmmm|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=Goal=&lt;br /&gt;
Program the Creates such that they can search and find virtual food using only simple behaviors such as:&lt;br /&gt;
* local movements&lt;br /&gt;
** limited memory (i.e. only know the current location and none of the previous locations).  The robot will not be allowed to perform path planning or use any memory other than the virtual environment map.&lt;br /&gt;
** maintain current location in memory&lt;br /&gt;
* try to avoid walls using the virtual map (otherwise the internal odometry could be thrown off).&lt;br /&gt;
* read pheromone&lt;br /&gt;
* pick up food&lt;br /&gt;
* leave pheromone&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
The robot will begin by searching for food. This will be done via some sort of searching algorithm. As the robot moves, it will leave pheromones at each spot it has visited. To model decay, these pheromones keep track of the elapsed time since since you left the pheromone. &lt;br /&gt;
&lt;br /&gt;
Once food is found, the robot will return to its original place (the colony) by following the pheromones that are the oldest (why is that?). &lt;br /&gt;
&lt;br /&gt;
When the robot has navigated back to the colony, it must again follow a pheromone back to the food (can you figure out which ones?) and return back to the colony.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--The robot begin by executing a search for food.  This is done by random movements until 1) food is found, or 2) a virtual pheromone is encountered.  At each discrete location, the robot will leave a virtual pheromone in the virtual map.  If food is found, return home while leaving a trail every 15cm.  If a pheromone is found, then follow the pheromone trail until it can't find any more pheromones, or until it finds food.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Food==&lt;br /&gt;
Virtual walls are what our ants will use as food.  When our Create encounters a virtual wall, it will &amp;quot;pick up food&amp;quot;, then return home by following it's original pheromone trail while leaving pheromones for the other robots to find.  They will be positioned from above with the IR beam pointing downward to simulate the effect of a food source.  There will be two virtual walls, symbolizing two food sources.&lt;br /&gt;
&lt;br /&gt;
==Virtual Pheromone==&lt;br /&gt;
Once a robot encounters a virtual wall, it will begin its journey home leaving a pheromone trail in the virtual environment.  Leaving a virtual pheromone in the environment is accomplished by sending a location to the Environment Java Class.&lt;br /&gt;
&lt;br /&gt;
Other robots will determine if there is a pheromone trail by querying the map with its current location. The pheromones will return values based on the last time you have visited the current location. For example, a pheromone on space X will return 999 if you have left a pheromone there 10 minutes ago while a pheromone will return 10 if you had just recently visited that location.&lt;br /&gt;
&lt;br /&gt;
==Map==&lt;br /&gt;
&lt;br /&gt;
We will be providing you an Environment Java class that the robot will use to represent the hallway.  Do not edit this class.  Your robot may use the following methods from &amp;lt;code&amp;gt;Environment&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Return a Pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;long getPheromone(int x_, int y_)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Leaves a pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;void leavePheromone(int x_, int y_);&amp;lt;/code&amp;gt;&lt;br /&gt;
* Returns whether the cell location has a colony in it&lt;br /&gt;
: boolean isColony(int x_, int y_)&lt;br /&gt;
* Returns whether the cell location is an obstacle (ie. a wall)&lt;br /&gt;
: boolean isObstacle(int x_, int y_)&lt;br /&gt;
&lt;br /&gt;
The map is also able to print the current state of the world in an XPM format.  The pheromone trail is color coded where red spaces is where the robot has traveled most recently and blue is least recently.  The following method will allow you to draw the map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;void drawEnvironment(String outputFileName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
[[image:Assignment4SystemArchitecture.png|center]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Administrative=&lt;br /&gt;
* We will provide Java skeleton code as a framework for build the specific behaviors.&lt;br /&gt;
&lt;br /&gt;
The students are responsible for turning in:&lt;br /&gt;
* A final environment map&lt;br /&gt;
* Source code&lt;br /&gt;
* A 2 page write up of the assignment&lt;br /&gt;
** Approach and implementation&lt;br /&gt;
** What worked/didn't work&lt;br /&gt;
** Possible other approaches&lt;br /&gt;
** References&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* Dorigo, M. and Caro, G.D. and Gambardella, L.M., Ant Algorithms for Discrete Optimization, Artificial Life, 1999 vol 5 no. 2, pp 137-172.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4</id>
		<title>BioInspiredRobotDesignAssignment4</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4"/>
				<updated>2007-11-12T23:45:23Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: /* Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
Using only simple behaviors, we want to program our Creates to seek out and bring food back to a home base.  At the outset, your robot will begin its search for food by performing random movements and leaving a pheromone in each location visited.  Your robot will be working alone and must perform 3 iterations of finding food then returning home.&lt;br /&gt;
&lt;br /&gt;
[[Image:SystemArchitecture.png|robot find food... mmmm|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=Goal=&lt;br /&gt;
Program the Creates such that they can search and find virtual food using only simple behaviors such as:&lt;br /&gt;
* local movements&lt;br /&gt;
** limited memory (i.e. only know the current location and none of the previous locations).  The robot will not be allowed to perform path planning or use any memory other than the virtual environment map.&lt;br /&gt;
** maintain current location in memory&lt;br /&gt;
* try to avoid walls using the virtual map (otherwise the internal odometry could be thrown off).&lt;br /&gt;
* read pheromone&lt;br /&gt;
* pick up food&lt;br /&gt;
* leave pheromone&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
The robot will begin by searching for food. This will be done via some sort of searching algorithm. As the robot moves, it will leave pheromones at each spot it has visited. To model decay, these pheromones keep track of the elapsed time since since you left the pheromone. &lt;br /&gt;
&lt;br /&gt;
Once food is found, the robot will return to its original place (the colony) by following the pheromones that are the oldest (why is that?). &lt;br /&gt;
&lt;br /&gt;
When the robot has navigated back to the colony, it must again follow a pheromone back to the food (can you figure out which ones?) and return back to the colony.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--The robot begin by executing a search for food.  This is done by random movements until 1) food is found, or 2) a virtual pheromone is encountered.  At each discrete location, the robot will leave a virtual pheromone in the virtual map.  If food is found, return home while leaving a trail every 15cm.  If a pheromone is found, then follow the pheromone trail until it can't find any more pheromones, or until it finds food.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Food==&lt;br /&gt;
Virtual walls are what our ants will use as food.  When our Create encounters a virtual wall, it will &amp;quot;pick up food&amp;quot;, then return home by following it's original pheromone trail while leaving pheromones for the other robots to find.  They will be positioned from above with the IR beam pointing downward to simulate the effect of a food source.  There will be two virtual walls, symbolizing two food sources.&lt;br /&gt;
&lt;br /&gt;
==Virtual Pheromone==&lt;br /&gt;
Once a robot encounters a virtual wall, it will begin its journey home leaving a pheromone trail in the virtual environment.  Leaving a virtual pheromone in the environment is accomplished by sending a location to the Environment Java Class.&lt;br /&gt;
&lt;br /&gt;
Other robots will determine if there is a pheromone trail by querying the map with its current location. The pheromones will return values based on the last time you have visited the current location. For example, a pheromone on space X will return 999 if you have left a pheromone there 10 minutes ago while a pheromone will return 10 if you had just recently visited that location.&lt;br /&gt;
&lt;br /&gt;
==Map==&lt;br /&gt;
&lt;br /&gt;
We will be providing you an Environment Java class that the robot will use to represent the hallway.  Do not edit this class.  Your robot may use the following methods from &amp;lt;code&amp;gt;Environment&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Return a Pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;long getPheromone(int x, int y)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Leaves a pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;void leavePheromone(int x, int y);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The map is also able to print the current state of the world in an XPM format.  The pheromone trail is color coded where red spaces is where the robot has traveled most recently and blue is least recently.  The following method will allow you to draw the map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;void drawEnvironment(String outputFileName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
[[image:Assignment4SystemArchitecture.png|center]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Administrative=&lt;br /&gt;
* We will provide Java skeleton code as a framework for build the specific behaviors.&lt;br /&gt;
&lt;br /&gt;
The students are responsible for turning in:&lt;br /&gt;
* A final environment map&lt;br /&gt;
* Source code&lt;br /&gt;
* A 2 page write up of the assignment&lt;br /&gt;
** Approach and implementation&lt;br /&gt;
** What worked/didn't work&lt;br /&gt;
** Possible other approaches&lt;br /&gt;
** References&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* Dorigo, M. and Caro, G.D. and Gambardella, L.M., Ant Algorithms for Discrete Optimization, Artificial Life, 1999 vol 5 no. 2, pp 137-172.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4</id>
		<title>BioInspiredRobotDesignAssignment4</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4"/>
				<updated>2007-11-12T23:44:52Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: /* Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
Using only simple behaviors, we want to program our Creates to seek out and bring food back to a home base.  At the outset, your robot will begin its search for food by performing random movements and leaving a pheromone in each location visited.  Your robot will be working alone and must perform 3 iterations of finding food then returning home.&lt;br /&gt;
&lt;br /&gt;
[[Image:SystemArchitecture.png|robot find food... mmmm|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=Goal=&lt;br /&gt;
Program the Creates such that they can search and find virtual food using only simple behaviors such as:&lt;br /&gt;
* local movements&lt;br /&gt;
** limited memory (i.e. only know the current location and none of the previous locations).  The robot will not be allowed to perform path planning or use any memory other than the virtual environment map.&lt;br /&gt;
** maintain current location in memory&lt;br /&gt;
* try to avoid walls using the virtual map (otherwise the internal odometry could be thrown off).&lt;br /&gt;
* read pheromone&lt;br /&gt;
* pick up food&lt;br /&gt;
* leave pheromone&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
The robot will begin by searching for food. This will be done via some sort of searching algorithm. As the robot moves, it will leave pheromones at each spot it has visited. To model decay, these pheromones keep track of the elapsed time since since you left the pheromone. &lt;br /&gt;
&lt;br /&gt;
Once food is found, the robot will return to its original place (the colony) by following the pheromones that are the oldest (why is that?). &lt;br /&gt;
&lt;br /&gt;
When the robot has navigated back to the colony, it must again follow a pheromone back to the food (can you figure out which ones?) and return back to the colony.&lt;br /&gt;
&amp;lt;--!&lt;br /&gt;
The robot begin by executing a search for food.  This is done by random movements until 1) food is found, or 2) a virtual pheromone is encountered.  At each discrete location, the robot will leave a virtual pheromone in the virtual map.  If food is found, return home while leaving a trail every 15cm.  If a pheromone is found, then follow the pheromone trail until it can't find any more pheromones, or until it finds food.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Food==&lt;br /&gt;
Virtual walls are what our ants will use as food.  When our Create encounters a virtual wall, it will &amp;quot;pick up food&amp;quot;, then return home by following it's original pheromone trail while leaving pheromones for the other robots to find.  They will be positioned from above with the IR beam pointing downward to simulate the effect of a food source.  There will be two virtual walls, symbolizing two food sources.&lt;br /&gt;
&lt;br /&gt;
==Virtual Pheromone==&lt;br /&gt;
Once a robot encounters a virtual wall, it will begin its journey home leaving a pheromone trail in the virtual environment.  Leaving a virtual pheromone in the environment is accomplished by sending a location to the Environment Java Class.&lt;br /&gt;
&lt;br /&gt;
Other robots will determine if there is a pheromone trail by querying the map with its current location. The pheromones will return values based on the last time you have visited the current location. For example, a pheromone on space X will return 999 if you have left a pheromone there 10 minutes ago while a pheromone will return 10 if you had just recently visited that location.&lt;br /&gt;
&lt;br /&gt;
==Map==&lt;br /&gt;
&lt;br /&gt;
We will be providing you an Environment Java class that the robot will use to represent the hallway.  Do not edit this class.  Your robot may use the following methods from &amp;lt;code&amp;gt;Environment&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Return a Pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;long getPheromone(int x, int y)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Leaves a pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;void leavePheromone(int x, int y);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The map is also able to print the current state of the world in an XPM format.  The pheromone trail is color coded where red spaces is where the robot has traveled most recently and blue is least recently.  The following method will allow you to draw the map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;void drawEnvironment(String outputFileName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
[[image:Assignment4SystemArchitecture.png|center]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Administrative=&lt;br /&gt;
* We will provide Java skeleton code as a framework for build the specific behaviors.&lt;br /&gt;
&lt;br /&gt;
The students are responsible for turning in:&lt;br /&gt;
* A final environment map&lt;br /&gt;
* Source code&lt;br /&gt;
* A 2 page write up of the assignment&lt;br /&gt;
** Approach and implementation&lt;br /&gt;
** What worked/didn't work&lt;br /&gt;
** Possible other approaches&lt;br /&gt;
** References&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* Dorigo, M. and Caro, G.D. and Gambardella, L.M., Ant Algorithms for Discrete Optimization, Artificial Life, 1999 vol 5 no. 2, pp 137-172.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4</id>
		<title>BioInspiredRobotDesignAssignment4</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4"/>
				<updated>2007-11-12T23:44:37Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: /* Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
Using only simple behaviors, we want to program our Creates to seek out and bring food back to a home base.  At the outset, your robot will begin its search for food by performing random movements and leaving a pheromone in each location visited.  Your robot will be working alone and must perform 3 iterations of finding food then returning home.&lt;br /&gt;
&lt;br /&gt;
[[Image:SystemArchitecture.png|robot find food... mmmm|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=Goal=&lt;br /&gt;
Program the Creates such that they can search and find virtual food using only simple behaviors such as:&lt;br /&gt;
* local movements&lt;br /&gt;
** limited memory (i.e. only know the current location and none of the previous locations).  The robot will not be allowed to perform path planning or use any memory other than the virtual environment map.&lt;br /&gt;
** maintain current location in memory&lt;br /&gt;
* try to avoid walls using the virtual map (otherwise the internal odometry could be thrown off).&lt;br /&gt;
* read pheromone&lt;br /&gt;
* pick up food&lt;br /&gt;
* leave pheromone&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
The robot will begin by searching for food. This will be done via some sort of searching algorithm. As the robot moves, it will leave pheromones at each spot it has visited. To model decay, these pheromones keep track of the elapsed time since since you left the pheromone. &lt;br /&gt;
&lt;br /&gt;
Once food is found, the robot will return to its original place (the colony) by following the pheromones that are the oldest (why is that?). &lt;br /&gt;
&lt;br /&gt;
When the robot has navigated back to the colony, it must again follow a pheromone back to the food (can you figure out which ones?) and return back to the colony.&lt;br /&gt;
&amp;lt;--&lt;br /&gt;
The robot begin by executing a search for food.  This is done by random movements until 1) food is found, or 2) a virtual pheromone is encountered.  At each discrete location, the robot will leave a virtual pheromone in the virtual map.  If food is found, return home while leaving a trail every 15cm.  If a pheromone is found, then follow the pheromone trail until it can't find any more pheromones, or until it finds food.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Food==&lt;br /&gt;
Virtual walls are what our ants will use as food.  When our Create encounters a virtual wall, it will &amp;quot;pick up food&amp;quot;, then return home by following it's original pheromone trail while leaving pheromones for the other robots to find.  They will be positioned from above with the IR beam pointing downward to simulate the effect of a food source.  There will be two virtual walls, symbolizing two food sources.&lt;br /&gt;
&lt;br /&gt;
==Virtual Pheromone==&lt;br /&gt;
Once a robot encounters a virtual wall, it will begin its journey home leaving a pheromone trail in the virtual environment.  Leaving a virtual pheromone in the environment is accomplished by sending a location to the Environment Java Class.&lt;br /&gt;
&lt;br /&gt;
Other robots will determine if there is a pheromone trail by querying the map with its current location. The pheromones will return values based on the last time you have visited the current location. For example, a pheromone on space X will return 999 if you have left a pheromone there 10 minutes ago while a pheromone will return 10 if you had just recently visited that location.&lt;br /&gt;
&lt;br /&gt;
==Map==&lt;br /&gt;
&lt;br /&gt;
We will be providing you an Environment Java class that the robot will use to represent the hallway.  Do not edit this class.  Your robot may use the following methods from &amp;lt;code&amp;gt;Environment&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Return a Pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;long getPheromone(int x, int y)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Leaves a pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;void leavePheromone(int x, int y);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The map is also able to print the current state of the world in an XPM format.  The pheromone trail is color coded where red spaces is where the robot has traveled most recently and blue is least recently.  The following method will allow you to draw the map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;void drawEnvironment(String outputFileName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
[[image:Assignment4SystemArchitecture.png|center]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Administrative=&lt;br /&gt;
* We will provide Java skeleton code as a framework for build the specific behaviors.&lt;br /&gt;
&lt;br /&gt;
The students are responsible for turning in:&lt;br /&gt;
* A final environment map&lt;br /&gt;
* Source code&lt;br /&gt;
* A 2 page write up of the assignment&lt;br /&gt;
** Approach and implementation&lt;br /&gt;
** What worked/didn't work&lt;br /&gt;
** Possible other approaches&lt;br /&gt;
** References&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* Dorigo, M. and Caro, G.D. and Gambardella, L.M., Ant Algorithms for Discrete Optimization, Artificial Life, 1999 vol 5 no. 2, pp 137-172.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4</id>
		<title>BioInspiredRobotDesignAssignment4</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/BioInspiredRobotDesignAssignment4"/>
				<updated>2007-11-12T23:39:06Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: /* Virtual Pheromone (VirP) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
Using only simple behaviors, we want to program our Creates to seek out and bring food back to a home base.  At the outset, your robot will begin its search for food by performing random movements and leaving a pheromone in each location visited.  Your robot will be working alone and must perform 3 iterations of finding food then returning home.&lt;br /&gt;
&lt;br /&gt;
[[Image:SystemArchitecture.png|robot find food... mmmm|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=Goal=&lt;br /&gt;
Program the Creates such that they can search and find virtual food using only simple behaviors such as:&lt;br /&gt;
* local movements&lt;br /&gt;
** limited memory (i.e. only know the current location and none of the previous locations).  The robot will not be allowed to perform path planning or use any memory other than the virtual environment map.&lt;br /&gt;
** maintain current location in memory&lt;br /&gt;
* try to avoid walls using the virtual map (otherwise the internal odometry could be thrown off).&lt;br /&gt;
* read pheromone&lt;br /&gt;
* pick up food&lt;br /&gt;
* leave pheromone&lt;br /&gt;
&lt;br /&gt;
=Details=&lt;br /&gt;
The robot begin by executing a search for food.  This is done by random movements until 1) food is found, or 2) a virtual pheromone is encountered.  At each discrete location, the robot will leave a virtual pheromone in the virtual map.  If food is found, return home while leaving a trail every 15cm.  If a pheromone is found, then follow the pheromone trail until it can't find any more pheromones, or until it finds food.&lt;br /&gt;
&lt;br /&gt;
==Food==&lt;br /&gt;
Virtual walls are what our ants will use as food.  When our Create encounters a virtual wall, it will &amp;quot;pick up food&amp;quot;, then return home by following it's original pheromone trail while leaving pheromones for the other robots to find.  They will be positioned from above with the IR beam pointing downward to simulate the effect of a food source.  There will be two virtual walls, symbolizing two food sources.&lt;br /&gt;
&lt;br /&gt;
==Virtual Pheromone==&lt;br /&gt;
Once a robot encounters a virtual wall, it will begin its journey home leaving a pheromone trail in the virtual environment.  Leaving a virtual pheromone in the environment is accomplished by sending a location to the Environment Java Class.&lt;br /&gt;
&lt;br /&gt;
Other robots will determine if there is a pheromone trail by querying the map with its current location. The pheromones will return values based on the last time you have visited the current location. For example, a pheromone on space X will return 999 if you have left a pheromone there 10 minutes ago while a pheromone will return 10 if you had just recently visited that location.&lt;br /&gt;
&lt;br /&gt;
==Map==&lt;br /&gt;
&lt;br /&gt;
We will be providing you an Environment Java class that the robot will use to represent the hallway.  Do not edit this class.  Your robot may use the following methods from &amp;lt;code&amp;gt;Environment&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Return a Pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;long getPheromone(int x, int y)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Leaves a pheromone value at this cell location.&lt;br /&gt;
:&amp;lt;code&amp;gt;void leavePheromone(int x, int y);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The map is also able to print the current state of the world in an XPM format.  The pheromone trail is color coded where red spaces is where the robot has traveled most recently and blue is least recently.  The following method will allow you to draw the map:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;void drawEnvironment(String outputFileName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
[[image:Assignment4SystemArchitecture.png|center]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Administrative=&lt;br /&gt;
* We will provide Java skeleton code as a framework for build the specific behaviors.&lt;br /&gt;
&lt;br /&gt;
The students are responsible for turning in:&lt;br /&gt;
* A final environment map&lt;br /&gt;
* Source code&lt;br /&gt;
* A 2 page write up of the assignment&lt;br /&gt;
** Approach and implementation&lt;br /&gt;
** What worked/didn't work&lt;br /&gt;
** Possible other approaches&lt;br /&gt;
** References&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* Dorigo, M. and Caro, G.D. and Gambardella, L.M., Ant Algorithms for Discrete Optimization, Artificial Life, 1999 vol 5 no. 2, pp 137-172.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)</id>
		<title>Bio-Robotics Lab (Fall 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)"/>
				<updated>2007-11-09T20:53:12Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
[[Category:Fall 2007 classes]]&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
* 2007-11-09: There is an EXTENSION on Assignment #3. It is now due on Monday Nov. 12th, no later than 5:00pm.&lt;br /&gt;
* 2007-11-07: [[Fall2007BioInspiredRobotDesignAssignment3|Assignment 3]] is due at the end of this week 11/09&lt;br /&gt;
* 2007-10-23: Some sample code for XPM format is [[XPMSample|here]].  For more in-depth, you can read about it from [http://www.cs.drexel.edu/%7Edavid/Classes/CS430/HWs/Assignment1.html CS430/536 Graphics Assignment 1].&lt;br /&gt;
* 2007-10-15: [[Fall2007BioInspiredRobotDesignAssignment2|Assignment 2]] is up it is due anytime the week of '''October 22nd.'''&lt;br /&gt;
* 2007-10-15: Thanks to Brian Lutz for writing up some instructions for setting up [[Connecting_Roomba_to_Your_Computer#Linux|Bluetooth with Linux]]&lt;br /&gt;
* 2007-10-01: There is a small bug in roombacomm.jar where goBackward(dist) did not go backward.  It is fixed in the jar file included in this '''[[Media:RoombaComm.zip |Roombacomm.zip file]]'''.&lt;br /&gt;
&lt;br /&gt;
==Course Logistics==&lt;br /&gt;
&lt;br /&gt;
Prerequisites: Permission of instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
Class Time: M-W-F 14:00-&amp;gt;14:50&amp;lt;br&amp;gt;&lt;br /&gt;
Class Location: UCross Rm 149&amp;lt;br&amp;gt;&lt;br /&gt;
Office Hours: UCROSS147 Wed and Fri 12-2pm and by appointment&amp;lt;br&amp;gt;&lt;br /&gt;
Course Instructor: [[William C. Regli]], Ph.D.&amp;lt;br&amp;gt;&lt;br /&gt;
Teaching Assistants: Peter Thai &amp;lt;pwt23@drexel.edu&amp;gt; and Duc Nguyen &amp;lt;dn53@drexel.edu&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Instructor Contact: Email regli (at) drexel (DOT) edu (not that this will help keep the spammers away)&amp;lt;br&amp;gt;&lt;br /&gt;
Phone 215.895.6827; Office: UC 143&lt;br /&gt;
&lt;br /&gt;
==Course Objectives and Outcomes==&lt;br /&gt;
&lt;br /&gt;
The goal of this class is to learn how to create software to interact with devices embodied in the physical world.  Students successfully completing this class will: &lt;br /&gt;
#understand the basic concepts of robotics (from a computer-science point of view), including kinematics, dynamics, actuators, controllers, etc; &lt;br /&gt;
#perform software development to control mobile robots (specifically iRobot Roombas); &lt;br /&gt;
#design experiments for robotic platforms; &lt;br /&gt;
#measure the effectiveness of a robotic system on a given problem;&lt;br /&gt;
#gain experience with biologically-inspired robotics techniques (swarming, biologically inspired design, etc)&lt;br /&gt;
#employ cyber-infrastructure (wikis, web, etc) and engineering informatics tools (CAD, simulation, MATLAB, Maple, Pro/E, SolidWorks, ACIS, etc) to better understand the relationship between virtual models and the real world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lectures==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=&amp;quot;75&amp;quot;|Date&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Assignment&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Topic&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Summary Notes&lt;br /&gt;
!width=&amp;quot;500&amp;quot;|Links and References&lt;br /&gt;
|-&lt;br /&gt;
|September 24&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Intro to Robot Lab&lt;br /&gt;
|&lt;br /&gt;
[[Media:CS-Robot-Lab-Spring2007-Lec-1.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Introduction to Robotics&lt;br /&gt;
|[[Media:Introduction_to_Robotics.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 8th&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1 Assignment 1] due&lt;br /&gt;
|&lt;br /&gt;
|[[Robotics Videos]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 15th&lt;br /&gt;
|&lt;br /&gt;
|SLAM&lt;br /&gt;
|[[Media:SLAM.ppt]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|May 9&lt;br /&gt;
|Robotics Videos Quiz&lt;br /&gt;
|Playtime with Roombas&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 16&lt;br /&gt;
|&lt;br /&gt;
|Robot Coordination: flooded out&lt;br /&gt;
|&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|October 22&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2 Assignment 2] due&lt;br /&gt;
|Grading Assignment 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|October 29&lt;br /&gt;
|&lt;br /&gt;
|Path Planning&lt;br /&gt;
|[[Media:Robot-Lab-Path-Planning.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 12&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3 Assignment 3] due&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|June 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Finals Week&lt;br /&gt;
|&lt;br /&gt;
|}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Text==&lt;br /&gt;
&lt;br /&gt;
Required texts and readings:&amp;lt;br&amp;gt;&lt;br /&gt;
# [http://gicl.cs.drexel.edu/wiki-data/images/a/af/Brooks-representation.pdf Intelligence without Representation], Rodney Brooks.&lt;br /&gt;
# Flesh and Machines: How Robots Will Change Us (Paperback) by Rodney Brooks, Publisher: Vintage (February 4, 2003); ISBN-10: 037572527X.&lt;br /&gt;
#  [http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf Introduction to the Kalman Filter] from UNC.&lt;br /&gt;
# [http://ocw.mit.edu/NR/rdonlyres/Aeronautics-and-Astronautics/16-412JSpring-2005/9D8DB59F-24EC-4B75-BA7A-F0916BAB2440/0/1aslam_blas_repo.pdf SLAM for Dummies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Interested students may wish to examine the following textbooks:&lt;br /&gt;
*J.J. Craig. Introduction to Robotics: Mechanics and Control. Prentice Hall; 3rd edition, 2003.&lt;br /&gt;
*Kiyoshi Toko. Biomimetic Sensor Technology. Cambridge University Press, 2000.&lt;br /&gt;
*Karl Williams. Amphibionics: Build Your Own Biologically Inspired Reptilian Robot. McGraw-Hill/TAB Electronics, 2003.&lt;br /&gt;
*David Cook. Robot Building for Beginners. Apress, 2002.&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
The due dates are listed on the week by week breakdown of the course below.  When an assignment is due on a particular date, that means the assignment is really due that week.  You must arrange a time one of the TAs for this class, during the week the assignment is due in order to have your assignment evaluated and graded.  As there are limited slots per TA session, it is best to schedule a time slot sooner rather than later.  You also will have the opportunity to have your work graded after the lecture during the due week.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Depending on the evolution of the class, students may have an opportunity to gain experience with a variety of computational tools, including MATLAB, SolidWorks, Pro/ENGINEER, ACIS, MAPLE, etc.  Several research prototype tools may also be introduced for physics-based modeling, kinematics, etc.&lt;br /&gt;
&lt;br /&gt;
[[Processing]] Setup&lt;br /&gt;
&lt;br /&gt;
* A skeleton [[Media:CS511.zip|Eclipse Project]] to write full-fledged Java instead of Processing.  Some directions [[Roomba/Eclipse|here]]&lt;br /&gt;
* [[Media:RoombaProject.zip |Another Eclipse Project]] - includes some classes from Lego Mindstorms [http://lejos.sourceforge.net Lejos Project] concerning subsumption architecture.&lt;br /&gt;
* Download Eclipse [http://www.eclipse.org here]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous Resources==&lt;br /&gt;
&lt;br /&gt;
Wiki page for Winter 2007 Roomba Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
Page from Spring 2007 Robotics Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
iRobot Create Forums:  [http://createforums.irobot.com/]&lt;br /&gt;
&lt;br /&gt;
Robotics Primer Workbook based around the Create [http://roboticsprimer.sourceforge.net/workbook/Main_Page]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3</id>
		<title>Fall2007BioInspiredRobotDesignAssignment3</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3"/>
				<updated>2007-11-09T20:35:20Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
&lt;br /&gt;
=== Assignment 3: Path Planning Basics===&lt;br /&gt;
&lt;br /&gt;
We will not be using Roombas in this first part; rather, we will simulate a point robot. You will write a program to calculate a path through an occupancy map using the Wavefront algorithm, a breadth first search.  Once the path has been planned, this turns into a dead reckoning problem, which we have already seen, and since we know how temperamental dead reckoning is, this will introduce a wrinkle.  We know with dead reckoning the path your robot takes is not exactly the path you specify, and over the course of the path your robot's error grows.  If your robot hits an obstacle, this will throw off the path that you had told your robot to execute and your robot may not finish the course.  Before creating the path, your program must first adapt the map so that your robot will not come close to any obstacle or any wall except for the start and end positions.  Then you should calculate the possible paths in the map using the Wavefront algorithm, and finally calculate a best path for your robot given the Wavefront map.&lt;br /&gt;
&lt;br /&gt;
==== Updates ====&lt;br /&gt;
* 2007-11-09: Here is the original map before it was scaled up [[Image:InitialMap.txt]]&lt;br /&gt;
*rows and columns were written backwards, the first number is columns, the second number is rows&lt;br /&gt;
*All parts of the assignment should be done in your code, your code can be whatever language you like&lt;br /&gt;
*The number of rows and columns start from 1, so if rows = 9, then there are 9 rows&lt;br /&gt;
*For lettering your path, rather than A-Z,AA-AZ you can just start over at A again.&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
&lt;br /&gt;
Your program should take in a text file called path_input.txt which will look like:&lt;br /&gt;
&lt;br /&gt;
[[Media:Path input.txt]]&lt;br /&gt;
&lt;br /&gt;
'''Note''' that this is an example input, which will be followed in the assignment.  The actual input file will be provided below.&lt;br /&gt;
&lt;br /&gt;
The first line tells how many columns (9), the second line tells how many rows (8) the map has.  The starting point for the path will have an S, and the ending point will have an E.  All obstacles will have a 1, and open cells will have a 0.&lt;br /&gt;
&lt;br /&gt;
We will assume that your robot can move one square at a time in any direction (up, down, left, right, all four diagonals), as long as it does not go off the map or into an occupied cell.  We also assume that your robot takes up 1 cell.  To provide your robot with a buffer so that it does not run into an obstacle or a wall given the error in its path, you will add extra occupied cells to the map.  You should first increase the size of all obstacles by the size of your robot in all directions by adding a 1 in all directions around all obstacles.&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the obstacles:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_obstacles.txt]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next you will expand all walls by adding a 1 above the lower wall, to the right of the left wall, below the upper wall, and to the left of the right wall, do this for all cells that are not currently occupied and are not the start and end positions (i.e. for any cell that has a 0).&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the walls:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_walls.txt]]&lt;br /&gt;
&lt;br /&gt;
Now we perform the Wavefront algorithm.  This is a breadth first search that starts at the end position, and expands out from there, noting how far every other cell is from the end position.  You should replace the E (end position) with a 2, then until your algorithm encounters the S (but will not replace the S), you will expand out in a wave from the end position, setting all adjacent cells to 3, then the adjacent cells of the 3's to 4, etc.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_map.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_map.txt]]&lt;br /&gt;
&lt;br /&gt;
Finally you will calculate the shortest path from the S to the 2.  Note that this minimal distance path may not be unique.  Your path will replace the S with an A, then increment through alphabet (B..Z, then AA, AB, AC..AZ if needed) with one letter per cell to indicate your path.  Since some environments don't allow more than one character in a position, you may start your path over at A, i.e. A-Z, then A-Z again.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_plan.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_plan.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that there is an alternative path with F the cell below the displayed F, and then another choice for G, as all of these paths will have the same length.&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be given the &amp;lt;!--[[Media:A3_path_input.txt ]]--&amp;gt; [[Image:Hallway path input.txt]] file (and change the name to path_input.txt), and your code should execute on that input file, producing the two output files.&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' Each character in the input file represents a 3x3 inch square, so a 16 character square represents 1 tile in the floor.&lt;br /&gt;
&lt;br /&gt;
You should turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*hallway_path_map.txt&lt;br /&gt;
*hallway_path_plan.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- For gradudate students, you must implement the Wavefront algorithm in addition to one other path-planning algorithm that you find (other than a Random Walk).  For some examples, see chapter 2 of Steven LaValle's Planning Algorithms book at http://planning.cs.uiuc.edu/.  Please provide a short description of what other algorithm you choose and how it works.  Graduate students must then turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
*the output file of your additional algorithm&lt;br /&gt;
*any other support files for your additional algorithm&lt;br /&gt;
*README file, containing a short description of your additional algorithm and how it works, and an explanation of what additional files you are turning in--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Assignment 3 Part B: Path Planning Execution===&lt;br /&gt;
While you used simulated robots in the first part, you will use real robots in this section. In this section, you will be provided with an initial text file that represents part of the hallway on which you will perform path planning techniques you learned in the first section, but taking into account the challenges of executing the path with a real robot.&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
&lt;br /&gt;
*Perform path planning techniques from section A onto the provided text document of the hallway (below). Each character represents a forth of a foot. &lt;br /&gt;
&lt;br /&gt;
*Take in account the diameter of the robot in the path planning. The path planning algorithms in part 1 may return paths that a point robot may travers, but not a real robot. For example, some paths might bring your robot through a 1 foot passage, but your robot's diameter is more than 1 foot. You might want iterate through potential paths returned by your path planning algorithm and discard ones that would not work for a real robot.&lt;br /&gt;
&lt;br /&gt;
*Write code that would allow your robot to follow the calculated path. The robot will start facing any direction you please.&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
* The initial map (not expanded) can be found here: [[Image:InitialMap.txt]]&lt;br /&gt;
* This assignment should be included all in one program (ie your program should calculate a path, perform corrections on the path, and then move the robot without user assistance between stages).&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)</id>
		<title>Bio-Robotics Lab (Fall 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)"/>
				<updated>2007-11-09T20:34:29Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
[[Category:Fall 2007 classes]]&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
* 2007-11-07: [[Fall2007BioInspiredRobotDesignAssignment3|Assignment 3]] is due at the end of this week 11/09&lt;br /&gt;
* 2007-10-23: Some sample code for XPM format is [[XPMSample|here]].  For more in-depth, you can read about it from [http://www.cs.drexel.edu/%7Edavid/Classes/CS430/HWs/Assignment1.html CS430/536 Graphics Assignment 1].&lt;br /&gt;
* 2007-10-15: [[Fall2007BioInspiredRobotDesignAssignment2|Assignment 2]] is up it is due anytime the week of '''October 22nd.'''&lt;br /&gt;
* 2007-10-15: Thanks to Brian Lutz for writing up some instructions for setting up [[Connecting_Roomba_to_Your_Computer#Linux|Bluetooth with Linux]]&lt;br /&gt;
* 2007-10-01: There is a small bug in roombacomm.jar where goBackward(dist) did not go backward.  It is fixed in the jar file included in this '''[[Media:RoombaComm.zip |Roombacomm.zip file]]'''.&lt;br /&gt;
&lt;br /&gt;
==Course Logistics==&lt;br /&gt;
&lt;br /&gt;
Prerequisites: Permission of instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
Class Time: M-W-F 14:00-&amp;gt;14:50&amp;lt;br&amp;gt;&lt;br /&gt;
Class Location: UCross Rm 149&amp;lt;br&amp;gt;&lt;br /&gt;
Office Hours: UCROSS147 Wed and Fri 12-2pm and by appointment&amp;lt;br&amp;gt;&lt;br /&gt;
Course Instructor: [[William C. Regli]], Ph.D.&amp;lt;br&amp;gt;&lt;br /&gt;
Teaching Assistants: Peter Thai &amp;lt;pwt23@drexel.edu&amp;gt; and Duc Nguyen &amp;lt;dn53@drexel.edu&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Instructor Contact: Email regli (at) drexel (DOT) edu (not that this will help keep the spammers away)&amp;lt;br&amp;gt;&lt;br /&gt;
Phone 215.895.6827; Office: UC 143&lt;br /&gt;
&lt;br /&gt;
==Course Objectives and Outcomes==&lt;br /&gt;
&lt;br /&gt;
The goal of this class is to learn how to create software to interact with devices embodied in the physical world.  Students successfully completing this class will: &lt;br /&gt;
#understand the basic concepts of robotics (from a computer-science point of view), including kinematics, dynamics, actuators, controllers, etc; &lt;br /&gt;
#perform software development to control mobile robots (specifically iRobot Roombas); &lt;br /&gt;
#design experiments for robotic platforms; &lt;br /&gt;
#measure the effectiveness of a robotic system on a given problem;&lt;br /&gt;
#gain experience with biologically-inspired robotics techniques (swarming, biologically inspired design, etc)&lt;br /&gt;
#employ cyber-infrastructure (wikis, web, etc) and engineering informatics tools (CAD, simulation, MATLAB, Maple, Pro/E, SolidWorks, ACIS, etc) to better understand the relationship between virtual models and the real world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lectures==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=&amp;quot;75&amp;quot;|Date&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Assignment&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Topic&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Summary Notes&lt;br /&gt;
!width=&amp;quot;500&amp;quot;|Links and References&lt;br /&gt;
|-&lt;br /&gt;
|September 24&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Intro to Robot Lab&lt;br /&gt;
|&lt;br /&gt;
[[Media:CS-Robot-Lab-Spring2007-Lec-1.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Introduction to Robotics&lt;br /&gt;
|[[Media:Introduction_to_Robotics.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 8th&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1 Assignment 1] due&lt;br /&gt;
|&lt;br /&gt;
|[[Robotics Videos]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 15th&lt;br /&gt;
|&lt;br /&gt;
|SLAM&lt;br /&gt;
|[[Media:SLAM.ppt]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|May 9&lt;br /&gt;
|Robotics Videos Quiz&lt;br /&gt;
|Playtime with Roombas&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 16&lt;br /&gt;
|&lt;br /&gt;
|Robot Coordination: flooded out&lt;br /&gt;
|&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|October 22&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2 Assignment 2] due&lt;br /&gt;
|Grading Assignment 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|October 29&lt;br /&gt;
|&lt;br /&gt;
|Path Planning&lt;br /&gt;
|[[Media:Robot-Lab-Path-Planning.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 5&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3 Assignment 3] due&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|June 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Finals Week&lt;br /&gt;
|&lt;br /&gt;
|}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Text==&lt;br /&gt;
&lt;br /&gt;
Required texts and readings:&amp;lt;br&amp;gt;&lt;br /&gt;
# [http://gicl.cs.drexel.edu/wiki-data/images/a/af/Brooks-representation.pdf Intelligence without Representation], Rodney Brooks.&lt;br /&gt;
# Flesh and Machines: How Robots Will Change Us (Paperback) by Rodney Brooks, Publisher: Vintage (February 4, 2003); ISBN-10: 037572527X.&lt;br /&gt;
#  [http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf Introduction to the Kalman Filter] from UNC.&lt;br /&gt;
# [http://ocw.mit.edu/NR/rdonlyres/Aeronautics-and-Astronautics/16-412JSpring-2005/9D8DB59F-24EC-4B75-BA7A-F0916BAB2440/0/1aslam_blas_repo.pdf SLAM for Dummies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Interested students may wish to examine the following textbooks:&lt;br /&gt;
*J.J. Craig. Introduction to Robotics: Mechanics and Control. Prentice Hall; 3rd edition, 2003.&lt;br /&gt;
*Kiyoshi Toko. Biomimetic Sensor Technology. Cambridge University Press, 2000.&lt;br /&gt;
*Karl Williams. Amphibionics: Build Your Own Biologically Inspired Reptilian Robot. McGraw-Hill/TAB Electronics, 2003.&lt;br /&gt;
*David Cook. Robot Building for Beginners. Apress, 2002.&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
The due dates are listed on the week by week breakdown of the course below.  When an assignment is due on a particular date, that means the assignment is really due that week.  You must arrange a time one of the TAs for this class, during the week the assignment is due in order to have your assignment evaluated and graded.  As there are limited slots per TA session, it is best to schedule a time slot sooner rather than later.  You also will have the opportunity to have your work graded after the lecture during the due week.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Depending on the evolution of the class, students may have an opportunity to gain experience with a variety of computational tools, including MATLAB, SolidWorks, Pro/ENGINEER, ACIS, MAPLE, etc.  Several research prototype tools may also be introduced for physics-based modeling, kinematics, etc.&lt;br /&gt;
&lt;br /&gt;
[[Processing]] Setup&lt;br /&gt;
&lt;br /&gt;
* A skeleton [[Media:CS511.zip|Eclipse Project]] to write full-fledged Java instead of Processing.  Some directions [[Roomba/Eclipse|here]]&lt;br /&gt;
* [[Media:RoombaProject.zip |Another Eclipse Project]] - includes some classes from Lego Mindstorms [http://lejos.sourceforge.net Lejos Project] concerning subsumption architecture.&lt;br /&gt;
* Download Eclipse [http://www.eclipse.org here]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous Resources==&lt;br /&gt;
&lt;br /&gt;
Wiki page for Winter 2007 Roomba Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
Page from Spring 2007 Robotics Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
iRobot Create Forums:  [http://createforums.irobot.com/]&lt;br /&gt;
&lt;br /&gt;
Robotics Primer Workbook based around the Create [http://roboticsprimer.sourceforge.net/workbook/Main_Page]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)</id>
		<title>Bio-Robotics Lab (Fall 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)"/>
				<updated>2007-11-09T19:51:19Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
[[Category:Fall 2007 classes]]&lt;br /&gt;
&lt;br /&gt;
==Announcements==&lt;br /&gt;
* 2007-11-09: Here is the original map before it was scaled up [[Image:InitialMap.txt]]&lt;br /&gt;
* 2007-11-07: [[Fall2007BioInspiredRobotDesignAssignment3|Assignment 3]] is due at the end of this week 11/09&lt;br /&gt;
* 2007-10-23: Some sample code for XPM format is [[XPMSample|here]].  For more in-depth, you can read about it from [http://www.cs.drexel.edu/%7Edavid/Classes/CS430/HWs/Assignment1.html CS430/536 Graphics Assignment 1].&lt;br /&gt;
* 2007-10-15: [[Fall2007BioInspiredRobotDesignAssignment2|Assignment 2]] is up it is due anytime the week of '''October 22nd.'''&lt;br /&gt;
* 2007-10-15: Thanks to Brian Lutz for writing up some instructions for setting up [[Connecting_Roomba_to_Your_Computer#Linux|Bluetooth with Linux]]&lt;br /&gt;
* 2007-10-01: There is a small bug in roombacomm.jar where goBackward(dist) did not go backward.  It is fixed in the jar file included in this '''[[Media:RoombaComm.zip |Roombacomm.zip file]]'''.&lt;br /&gt;
&lt;br /&gt;
==Course Logistics==&lt;br /&gt;
&lt;br /&gt;
Prerequisites: Permission of instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
Class Time: M-W-F 14:00-&amp;gt;14:50&amp;lt;br&amp;gt;&lt;br /&gt;
Class Location: UCross Rm 149&amp;lt;br&amp;gt;&lt;br /&gt;
Office Hours: UCROSS147 Wed and Fri 12-2pm and by appointment&amp;lt;br&amp;gt;&lt;br /&gt;
Course Instructor: [[William C. Regli]], Ph.D.&amp;lt;br&amp;gt;&lt;br /&gt;
Teaching Assistants: Peter Thai &amp;lt;pwt23@drexel.edu&amp;gt; and Duc Nguyen &amp;lt;dn53@drexel.edu&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Instructor Contact: Email regli (at) drexel (DOT) edu (not that this will help keep the spammers away)&amp;lt;br&amp;gt;&lt;br /&gt;
Phone 215.895.6827; Office: UC 143&lt;br /&gt;
&lt;br /&gt;
==Course Objectives and Outcomes==&lt;br /&gt;
&lt;br /&gt;
The goal of this class is to learn how to create software to interact with devices embodied in the physical world.  Students successfully completing this class will: &lt;br /&gt;
#understand the basic concepts of robotics (from a computer-science point of view), including kinematics, dynamics, actuators, controllers, etc; &lt;br /&gt;
#perform software development to control mobile robots (specifically iRobot Roombas); &lt;br /&gt;
#design experiments for robotic platforms; &lt;br /&gt;
#measure the effectiveness of a robotic system on a given problem;&lt;br /&gt;
#gain experience with biologically-inspired robotics techniques (swarming, biologically inspired design, etc)&lt;br /&gt;
#employ cyber-infrastructure (wikis, web, etc) and engineering informatics tools (CAD, simulation, MATLAB, Maple, Pro/E, SolidWorks, ACIS, etc) to better understand the relationship between virtual models and the real world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lectures==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=&amp;quot;75&amp;quot;|Date&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Assignment&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Topic&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Summary Notes&lt;br /&gt;
!width=&amp;quot;500&amp;quot;|Links and References&lt;br /&gt;
|-&lt;br /&gt;
|September 24&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Intro to Robot Lab&lt;br /&gt;
|&lt;br /&gt;
[[Media:CS-Robot-Lab-Spring2007-Lec-1.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Introduction to Robotics&lt;br /&gt;
|[[Media:Introduction_to_Robotics.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 8th&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1 Assignment 1] due&lt;br /&gt;
|&lt;br /&gt;
|[[Robotics Videos]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 15th&lt;br /&gt;
|&lt;br /&gt;
|SLAM&lt;br /&gt;
|[[Media:SLAM.ppt]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|May 9&lt;br /&gt;
|Robotics Videos Quiz&lt;br /&gt;
|Playtime with Roombas&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 16&lt;br /&gt;
|&lt;br /&gt;
|Robot Coordination: flooded out&lt;br /&gt;
|&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|October 22&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2 Assignment 2] due&lt;br /&gt;
|Grading Assignment 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|October 29&lt;br /&gt;
|&lt;br /&gt;
|Path Planning&lt;br /&gt;
|[[Media:Robot-Lab-Path-Planning.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|November 5&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3 Assignment 3] due&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|June 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Finals Week&lt;br /&gt;
|&lt;br /&gt;
|}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Text==&lt;br /&gt;
&lt;br /&gt;
Required texts and readings:&amp;lt;br&amp;gt;&lt;br /&gt;
# [http://gicl.cs.drexel.edu/wiki-data/images/a/af/Brooks-representation.pdf Intelligence without Representation], Rodney Brooks.&lt;br /&gt;
# Flesh and Machines: How Robots Will Change Us (Paperback) by Rodney Brooks, Publisher: Vintage (February 4, 2003); ISBN-10: 037572527X.&lt;br /&gt;
#  [http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf Introduction to the Kalman Filter] from UNC.&lt;br /&gt;
# [http://ocw.mit.edu/NR/rdonlyres/Aeronautics-and-Astronautics/16-412JSpring-2005/9D8DB59F-24EC-4B75-BA7A-F0916BAB2440/0/1aslam_blas_repo.pdf SLAM for Dummies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Interested students may wish to examine the following textbooks:&lt;br /&gt;
*J.J. Craig. Introduction to Robotics: Mechanics and Control. Prentice Hall; 3rd edition, 2003.&lt;br /&gt;
*Kiyoshi Toko. Biomimetic Sensor Technology. Cambridge University Press, 2000.&lt;br /&gt;
*Karl Williams. Amphibionics: Build Your Own Biologically Inspired Reptilian Robot. McGraw-Hill/TAB Electronics, 2003.&lt;br /&gt;
*David Cook. Robot Building for Beginners. Apress, 2002.&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
The due dates are listed on the week by week breakdown of the course below.  When an assignment is due on a particular date, that means the assignment is really due that week.  You must arrange a time one of the TAs for this class, during the week the assignment is due in order to have your assignment evaluated and graded.  As there are limited slots per TA session, it is best to schedule a time slot sooner rather than later.  You also will have the opportunity to have your work graded after the lecture during the due week.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Depending on the evolution of the class, students may have an opportunity to gain experience with a variety of computational tools, including MATLAB, SolidWorks, Pro/ENGINEER, ACIS, MAPLE, etc.  Several research prototype tools may also be introduced for physics-based modeling, kinematics, etc.&lt;br /&gt;
&lt;br /&gt;
[[Processing]] Setup&lt;br /&gt;
&lt;br /&gt;
* A skeleton [[Media:CS511.zip|Eclipse Project]] to write full-fledged Java instead of Processing.  Some directions [[Roomba/Eclipse|here]]&lt;br /&gt;
* [[Media:RoombaProject.zip |Another Eclipse Project]] - includes some classes from Lego Mindstorms [http://lejos.sourceforge.net Lejos Project] concerning subsumption architecture.&lt;br /&gt;
* Download Eclipse [http://www.eclipse.org here]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous Resources==&lt;br /&gt;
&lt;br /&gt;
Wiki page for Winter 2007 Roomba Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
Page from Spring 2007 Robotics Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
iRobot Create Forums:  [http://createforums.irobot.com/]&lt;br /&gt;
&lt;br /&gt;
Robotics Primer Workbook based around the Create [http://roboticsprimer.sourceforge.net/workbook/Main_Page]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/File:InitialMap.txt</id>
		<title>File:InitialMap.txt</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/File:InitialMap.txt"/>
				<updated>2007-11-09T19:49:54Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3</id>
		<title>Fall2007BioInspiredRobotDesignAssignment3</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3"/>
				<updated>2007-11-01T16:28:47Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
&lt;br /&gt;
=== Assignment 3: Path Planning Basics===&lt;br /&gt;
&lt;br /&gt;
We will not be using Roombas in this first part; rather, we will simulate a point robot. You will write a program to calculate a path through an occupancy map using the Wavefront algorithm, a breadth first search.  Once the path has been planned, this turns into a dead reckoning problem, which we have already seen, and since we know how temperamental dead reckoning is, this will introduce a wrinkle.  We know with dead reckoning the path your robot takes is not exactly the path you specify, and over the course of the path your robot's error grows.  If your robot hits an obstacle, this will throw off the path that you had told your robot to execute and your robot may not finish the course.  Before creating the path, your program must first adapt the map so that your robot will not come close to any obstacle or any wall except for the start and end positions.  Then you should calculate the possible paths in the map using the Wavefront algorithm, and finally calculate a best path for your robot given the Wavefront map.&lt;br /&gt;
&lt;br /&gt;
==== Updates ====&lt;br /&gt;
* &lt;br /&gt;
*rows and columns were written backwards, the first number is columns, the second number is rows&lt;br /&gt;
*All parts of the assignment should be done in your code, your code can be whatever language you like&lt;br /&gt;
*The number of rows and columns start from 1, so if rows = 9, then there are 9 rows&lt;br /&gt;
*For lettering your path, rather than A-Z,AA-AZ you can just start over at A again.&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
&lt;br /&gt;
Your program should take in a text file called path_input.txt which will look like:&lt;br /&gt;
&lt;br /&gt;
[[Media:Path input.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that this is an example input, which will be followed in the assignment.  The actual input file will be provided below.&lt;br /&gt;
&lt;br /&gt;
The first line tells how many columns (9), the second line tells how many rows (8) the map has.  The starting point for the path will have an S, and the ending point will have an E.  All obstacles will have a 1, and open cells will have a 0.&lt;br /&gt;
&lt;br /&gt;
We will assume that your robot can move one square at a time in any direction (up, down, left, right, all four diagonals), as long as it does not go off the map or into an occupied cell.  We also assume that your robot takes up 1 cell.  To provide your robot with a buffer so that it does not run into an obstacle or a wall given the error in its path, you will add extra occupied cells to the map.  You should first increase the size of all obstacles by the size of your robot in all directions by adding a 1 in all directions around all obstacles.&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the obstacles:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_obstacles.txt]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next you will expand all walls by adding a 1 above the lower wall, to the right of the left wall, below the upper wall, and to the left of the right wall, do this for all cells that are not currently occupied and are not the start and end positions (i.e. for any cell that has a 0).&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the walls:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_walls.txt]]&lt;br /&gt;
&lt;br /&gt;
Now we perform the Wavefront algorithm.  This is a breadth first search that starts at the end position, and expands out from there, noting how far every other cell is from the end position.  You should replace the E (end position) with a 2, then until your algorithm encounters the S (but will not replace the S), you will expand out in a wave from the end position, setting all adjacent cells to 3, then the adjacent cells of the 3's to 4, etc.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_map.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_map.txt]]&lt;br /&gt;
&lt;br /&gt;
Finally you will calculate the shortest path from the S to the 2.  Note that this minimal distance path may not be unique.  Your path will replace the S with an A, then increment through alphabet (B..Z, then AA, AB, AC..AZ if needed) with one letter per cell to indicate your path.  Since some environments don't allow more than one character in a position, you may start your path over at A, i.e. A-Z, then A-Z again.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_plan.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_plan.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that there is an alternative path with F the cell below the displayed F, and then another choice for G, as all of these paths will have the same length.&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be given the &amp;lt;!--[[Media:A3_path_input.txt ]]--&amp;gt; [[Image:Hallway path input.txt]] file (and change the name to path_input.txt), and your code should execute on that input file, producing the two output files.&lt;br /&gt;
&lt;br /&gt;
You should turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*hallway_path_map.txt&lt;br /&gt;
*hallway_path_plan.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- For gradudate students, you must implement the Wavefront algorithm in addition to one other path-planning algorithm that you find (other than a Random Walk).  For some examples, see chapter 2 of Steven LaValle's Planning Algorithms book at http://planning.cs.uiuc.edu/.  Please provide a short description of what other algorithm you choose and how it works.  Graduate students must then turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
*the output file of your additional algorithm&lt;br /&gt;
*any other support files for your additional algorithm&lt;br /&gt;
*README file, containing a short description of your additional algorithm and how it works, and an explanation of what additional files you are turning in--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Assignment 3 Part B: Path Planning Execution===&lt;br /&gt;
While you used simulated robots in the first part, you will use real robots in this section. In this section, you will be provided with an initial text file that represents part of the hallway on which you will perform path planning techniques you learned in the first section, but taking into account the challenges of executing the path with a real robot.&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
&lt;br /&gt;
*Perform path planning techniques from section A onto the provided text document of the hallway (below). Each character represents a forth of a foot. &lt;br /&gt;
&lt;br /&gt;
[[Initial Text Document]]&lt;br /&gt;
&lt;br /&gt;
*Take in account the diameter of the robot in the path planning. The path planning algorithms in part 1 may return paths that a point robot may travers, but not a real robot. For example, some paths might bring your robot through a 1 foot passage, but your robot's diameter is more than 1 foot. You might want iterate through potential paths returned by your path planning algorithm and discard ones that would not work for a real robot.&lt;br /&gt;
&lt;br /&gt;
*Write code that would allow your robot to follow the calculated path. The robot will start facing any direction you please.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* This assignment should be included all in one program (ie your program should calculate a path, perform corrections on the path, and then move the robot without user assistance between stages).&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/File:Hallway_path_input.txt</id>
		<title>File:Hallway path input.txt</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/File:Hallway_path_input.txt"/>
				<updated>2007-11-01T16:27:56Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3</id>
		<title>Fall2007BioInspiredRobotDesignAssignment3</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3"/>
				<updated>2007-10-31T19:44:03Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
&lt;br /&gt;
=== Assignment 3: Path Planning Basics===&lt;br /&gt;
&lt;br /&gt;
We will not be using Roombas in this first part; rather, we will simulate a point robot. You will write a program to calculate a path through an occupancy map using the Wavefront algorithm, a breadth first search.  Once the path has been planned, this turns into a dead reckoning problem, which we have already seen, and since we know how temperamental dead reckoning is, this will introduce a wrinkle.  We know with dead reckoning the path your robot takes is not exactly the path you specify, and over the course of the path your robot's error grows.  If your robot hits an obstacle, this will throw off the path that you had told your robot to execute and your robot may not finish the course.  Before creating the path, your program must first adapt the map so that your robot will not come close to any obstacle or any wall except for the start and end positions.  Then you should calculate the possible paths in the map using the Wavefront algorithm, and finally calculate a best path for your robot given the Wavefront map.&lt;br /&gt;
&lt;br /&gt;
==== Updates ====&lt;br /&gt;
* &lt;br /&gt;
*rows and columns were written backwards, the first number is columns, the second number is rows&lt;br /&gt;
*All parts of the assignment should be done in your code, your code can be whatever language you like&lt;br /&gt;
*The number of rows and columns start from 1, so if rows = 9, then there are 9 rows&lt;br /&gt;
*For lettering your path, rather than A-Z,AA-AZ you can just start over at A again.&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
&lt;br /&gt;
Your program should take in a text file called path_input.txt which will look like:&lt;br /&gt;
&lt;br /&gt;
[[Media:Path input.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that this is an example input, which will be followed in the assignment.  The actual input file will be provided below.&lt;br /&gt;
&lt;br /&gt;
The first line tells how many columns (9), the second line tells how many rows (8) the map has.  The starting point for the path will have an S, and the ending point will have an E.  All obstacles will have a 1, and open cells will have a 0.&lt;br /&gt;
&lt;br /&gt;
We will assume that your robot can move one square at a time in any direction (up, down, left, right, all four diagonals), as long as it does not go off the map or into an occupied cell.  We also assume that your robot takes up 1 cell.  To provide your robot with a buffer so that it does not run into an obstacle or a wall given the error in its path, you will add extra occupied cells to the map.  You should first increase the size of all obstacles by the size of your robot in all directions by adding a 1 in all directions around all obstacles.&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the obstacles:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_obstacles.txt]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next you will expand all walls by adding a 1 above the lower wall, to the right of the left wall, below the upper wall, and to the left of the right wall, do this for all cells that are not currently occupied and are not the start and end positions (i.e. for any cell that has a 0).&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the walls:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_walls.txt]]&lt;br /&gt;
&lt;br /&gt;
Now we perform the Wavefront algorithm.  This is a breadth first search that starts at the end position, and expands out from there, noting how far every other cell is from the end position.  You should replace the E (end position) with a 2, then until your algorithm encounters the S (but will not replace the S), you will expand out in a wave from the end position, setting all adjacent cells to 3, then the adjacent cells of the 3's to 4, etc.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_map.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_map.txt]]&lt;br /&gt;
&lt;br /&gt;
Finally you will calculate the shortest path from the S to the 2.  Note that this minimal distance path may not be unique.  Your path will replace the S with an A, then increment through alphabet (B..Z, then AA, AB, AC..AZ if needed) with one letter per cell to indicate your path.  Since some environments don't allow more than one character in a position, you may start your path over at A, i.e. A-Z, then A-Z again.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_plan.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_plan.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that there is an alternative path with F the cell below the displayed F, and then another choice for G, as all of these paths will have the same length.&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be given the &amp;lt;!--[[Media:A3_path_input.txt ]]--&amp;gt; [[Media:hallway_path_input.txt]] file (and change the name to path_input.txt), and your code should execute on that input file, producing the two output files.&lt;br /&gt;
&lt;br /&gt;
You should turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*hallway_path_map.txt&lt;br /&gt;
*hallway_path_plan.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- For gradudate students, you must implement the Wavefront algorithm in addition to one other path-planning algorithm that you find (other than a Random Walk).  For some examples, see chapter 2 of Steven LaValle's Planning Algorithms book at http://planning.cs.uiuc.edu/.  Please provide a short description of what other algorithm you choose and how it works.  Graduate students must then turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
*the output file of your additional algorithm&lt;br /&gt;
*any other support files for your additional algorithm&lt;br /&gt;
*README file, containing a short description of your additional algorithm and how it works, and an explanation of what additional files you are turning in--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Assignment 3 Part B: Path Planning Execution===&lt;br /&gt;
While you used simulated robots in the first part, you will use real robots in this section. In this section, you will be provided with an initial text file that represents part of the hallway on which you will perform path planning techniques you learned in the first section, but taking into account the challenges of executing the path with a real robot.&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
&lt;br /&gt;
*Perform path planning techniques from section A onto the provided text document of the hallway (below). Each character represents a forth of a foot. &lt;br /&gt;
&lt;br /&gt;
[[Initial Text Document]]&lt;br /&gt;
&lt;br /&gt;
*Take in account the diameter of the robot in the path planning. The path planning algorithms in part 1 may return paths that a point robot may travers, but not a real robot. For example, some paths might bring your robot through a 1 foot passage, but your robot's diameter is more than 1 foot. You might want iterate through potential paths returned by your path planning algorithm and discard ones that would not work for a real robot.&lt;br /&gt;
&lt;br /&gt;
*Write code that would allow your robot to follow the calculated path. The robot will start facing any direction you please.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* This assignment should be included all in one program (ie your program should calculate a path, perform corrections on the path, and then move the robot without user assistance between stages).&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3</id>
		<title>Fall2007BioInspiredRobotDesignAssignment3</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3"/>
				<updated>2007-10-31T19:38:59Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
&lt;br /&gt;
=== Assignment 3 Part A: Path Planning Basics===&lt;br /&gt;
&lt;br /&gt;
We will not be using Roombas in this first part; rather, we will simulate a point robot. You will write a program to calculate a path through an occupancy map using the Wavefront algorithm, a breadth first search.  Once the path has been planned, this turns into a dead reckoning problem, which we have already seen, and since we know how temperamental dead reckoning is, this will introduce a wrinkle.  We know with dead reckoning the path your robot takes is not exactly the path you specify, and over the course of the path your robot's error grows.  If your robot hits an obstacle, this will throw off the path that you had told your robot to execute and your robot may not finish the course.  Before creating the path, your program must first adapt the map so that your robot will not come close to any obstacle or any wall except for the start and end positions.  Then you should calculate the possible paths in the map using the Wavefront algorithm, and finally calculate a best path for your robot given the Wavefront map.&lt;br /&gt;
&lt;br /&gt;
==== Updates ====&lt;br /&gt;
* &lt;br /&gt;
*rows and columns were written backwards, the first number is columns, the second number is rows&lt;br /&gt;
*All parts of the assignment should be done in your code, your code can be whatever language you like&lt;br /&gt;
*The number of rows and columns start from 1, so if rows = 9, then there are 9 rows&lt;br /&gt;
*For lettering your path, rather than A-Z,AA-AZ you can just start over at A again.&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
&lt;br /&gt;
Your program should take in a text file called path_input.txt which will look like:&lt;br /&gt;
&lt;br /&gt;
[[Media:Path input.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that this is an example input, which will be followed in the assignment.  The actual input file will be provided below.&lt;br /&gt;
&lt;br /&gt;
The first line tells how many columns (9), the second line tells how many rows (8) the map has.  The starting point for the path will have an S, and the ending point will have an E.  All obstacles will have a 1, and open cells will have a 0.&lt;br /&gt;
&lt;br /&gt;
We will assume that your robot can move one square at a time in any direction (up, down, left, right, all four diagonals), as long as it does not go off the map or into an occupied cell.  We also assume that your robot takes up 1 cell.  To provide your robot with a buffer so that it does not run into an obstacle or a wall given the error in its path, you will add extra occupied cells to the map.  You should first increase the size of all obstacles by the size of your robot in all directions by adding a 1 in all directions around all obstacles.&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the obstacles:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_obstacles.txt]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next you will expand all walls by adding a 1 above the lower wall, to the right of the left wall, below the upper wall, and to the left of the right wall, do this for all cells that are not currently occupied and are not the start and end positions (i.e. for any cell that has a 0).&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the walls:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_walls.txt]]&lt;br /&gt;
&lt;br /&gt;
Now we perform the Wavefront algorithm.  This is a breadth first search that starts at the end position, and expands out from there, noting how far every other cell is from the end position.  You should replace the E (end position) with a 2, then until your algorithm encounters the S (but will not replace the S), you will expand out in a wave from the end position, setting all adjacent cells to 3, then the adjacent cells of the 3's to 4, etc.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_map.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_map.txt]]&lt;br /&gt;
&lt;br /&gt;
Finally you will calculate the shortest path from the S to the 2.  Note that this minimal distance path may not be unique.  Your path will replace the S with an A, then increment through alphabet (B..Z, then AA, AB, AC..AZ if needed) with one letter per cell to indicate your path.  Since some environments don't allow more than one character in a position, you may start your path over at A, i.e. A-Z, then A-Z again.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_plan.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_plan.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that there is an alternative path with F the cell below the displayed F, and then another choice for G, as all of these paths will have the same length.&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be given the &amp;lt;!--[[Media:A3_path_input.txt ]]--&amp;gt; [[Media:hallway_path_input.txt]] file (and change the name to path_input.txt), and your code should execute on that input file, producing the two output files.&lt;br /&gt;
&lt;br /&gt;
You should turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*hallway_path_map.txt&lt;br /&gt;
*hallway_path_plan.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- For gradudate students, you must implement the Wavefront algorithm in addition to one other path-planning algorithm that you find (other than a Random Walk).  For some examples, see chapter 2 of Steven LaValle's Planning Algorithms book at http://planning.cs.uiuc.edu/.  Please provide a short description of what other algorithm you choose and how it works.  Graduate students must then turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
*the output file of your additional algorithm&lt;br /&gt;
*any other support files for your additional algorithm&lt;br /&gt;
*README file, containing a short description of your additional algorithm and how it works, and an explanation of what additional files you are turning in--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === Assignment 3 Part B: Path Planning Execution===&lt;br /&gt;
While you used simulated robots in the first part, you will use real robots in this section. In this section, you will be provided with an initial text file that represents part of the hallway on which you will perform path planning techniques you learned in the first section, but taking into account the challenges of executing the path with a real robot.&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
&lt;br /&gt;
*Perform path planning techniques from section A onto the provided text document of the hallway (below). Each character represents a forth of a foot. &lt;br /&gt;
&lt;br /&gt;
[[Initial Text Document]]&lt;br /&gt;
&lt;br /&gt;
*Take in account the diameter of the robot in the path planning. The path planning algorithms in part 1 may return paths that a point robot may travers, but not a real robot. For example, some paths might bring your robot through a 1 foot passage, but your robot's diameter is more than 1 foot. You might want iterate through potential paths returned by your path planning algorithm and discard ones that would not work for a real robot.&lt;br /&gt;
&lt;br /&gt;
*Write code that would allow your robot to follow the calculated path. The robot will start facing any direction you please.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* This assignment should be included all in one program (ie your program should calculate a path, perform corrections on the path, and then move the robot without user assistance between stages).&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3</id>
		<title>Fall2007BioInspiredRobotDesignAssignment3</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3"/>
				<updated>2007-10-31T19:28:33Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
&lt;br /&gt;
=== Assignment 3 Part A: Path Planning Basics===&lt;br /&gt;
&lt;br /&gt;
We will not be using Roombas in this first part; rather, we will simulate a point robot. You will write a program to calculate a path through an occupancy map using the Wavefront algorithm, a breadth first search.  Once the path has been planned, this turns into a dead reckoning problem, which we have already seen, and since we know how temperamental dead reckoning is, this will introduce a wrinkle.  We know with dead reckoning the path your robot takes is not exactly the path you specify, and over the course of the path your robot's error grows.  If your robot hits an obstacle, this will throw off the path that you had told your robot to execute and your robot may not finish the course.  Before creating the path, your program must first adapt the map so that your robot will not come close to any obstacle or any wall except for the start and end positions.  Then you should calculate the possible paths in the map using the Wavefront algorithm, and finally calculate a best path for your robot given the Wavefront map.&lt;br /&gt;
&lt;br /&gt;
==== Updates ====&lt;br /&gt;
&lt;br /&gt;
*rows and columns were written backwards, the first number is columns, the second number is rows&lt;br /&gt;
*All parts of the assignment should be done in your code, your code can be whatever language you like&lt;br /&gt;
*The number of rows and columns start from 1, so if rows = 9, then there are 9 rows&lt;br /&gt;
*For lettering your path, rather than A-Z,AA-AZ you can just start over at A again.&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
&lt;br /&gt;
Your program should take in a text file called path_input.txt which will look like:&lt;br /&gt;
&lt;br /&gt;
[[Media:Path input.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that this is an example input, which will be followed in the assignment.  The actual input file will be provided below.&lt;br /&gt;
&lt;br /&gt;
The first line tells how many columns (9), the second line tells how many rows (8) the map has.  The starting point for the path will have an S, and the ending point will have an E.  All obstacles will have a 1, and open cells will have a 0.&lt;br /&gt;
&lt;br /&gt;
We will assume that your robot can move one square at a time in any direction (up, down, left, right, all four diagonals), as long as it does not go off the map or into an occupied cell.  We also assume that your robot takes up 1 cell.  To provide your robot with a buffer so that it does not run into an obstacle or a wall given the error in its path, you will add extra occupied cells to the map.  You should first increase the size of all obstacles by the size of your robot in all directions by adding a 1 in all directions around all obstacles.&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the obstacles:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_obstacles.txt]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next you will expand all walls by adding a 1 above the lower wall, to the right of the left wall, below the upper wall, and to the left of the right wall, do this for all cells that are not currently occupied and are not the start and end positions (i.e. for any cell that has a 0).&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the walls:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_walls.txt]]&lt;br /&gt;
&lt;br /&gt;
Now we perform the Wavefront algorithm.  This is a breadth first search that starts at the end position, and expands out from there, noting how far every other cell is from the end position.  You should replace the E (end position) with a 2, then until your algorithm encounters the S (but will not replace the S), you will expand out in a wave from the end position, setting all adjacent cells to 3, then the adjacent cells of the 3's to 4, etc.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_map.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_map.txt]]&lt;br /&gt;
&lt;br /&gt;
Finally you will calculate the shortest path from the S to the 2.  Note that this minimal distance path may not be unique.  Your path will replace the S with an A, then increment through alphabet (B..Z, then AA, AB, AC..AZ if needed) with one letter per cell to indicate your path.  Since some environments don't allow more than one character in a position, you may start your path over at A, i.e. A-Z, then A-Z again.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_plan.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_plan.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that there is an alternative path with F the cell below the displayed F, and then another choice for G, as all of these paths will have the same length.&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be given the [[Media:A3_path_input.txt ]] file (and change the name to path_input.txt), and your code should execute on that input file, producing the two output files.&lt;br /&gt;
&lt;br /&gt;
You should turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- For gradudate students, you must implement the Wavefront algorithm in addition to one other path-planning algorithm that you find (other than a Random Walk).  For some examples, see chapter 2 of Steven LaValle's Planning Algorithms book at http://planning.cs.uiuc.edu/.  Please provide a short description of what other algorithm you choose and how it works.  Graduate students must then turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
*the output file of your additional algorithm&lt;br /&gt;
*any other support files for your additional algorithm&lt;br /&gt;
*README file, containing a short description of your additional algorithm and how it works, and an explanation of what additional files you are turning in--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Assignment 3 Part B: Path Planning Execution===&lt;br /&gt;
While you used simulated robots in the first part, you will use real robots in this section. In this section, you will be provided with an initial text file that represents part of the hallway on which you will perform path planning techniques you learned in the first section, but taking into account the challenges of executing the path with a real robot.&lt;br /&gt;
&lt;br /&gt;
==== Description ====&lt;br /&gt;
&lt;br /&gt;
*Perform path planning techniques from section A onto the provided text document of the hallway (below). Each character represents a forth of a foot. &lt;br /&gt;
&lt;br /&gt;
[[Initial Text Document]]&lt;br /&gt;
&lt;br /&gt;
*Take in account the diameter of the robot in the path planning. The path planning algorithms in part 1 may return paths that a point robot may travers, but not a real robot. For example, some paths might bring your robot through a 1 foot passage, but your robot's diameter is more than 1 foot. You might want iterate through potential paths returned by your path planning algorithm and discard ones that would not work for a real robot.&lt;br /&gt;
&lt;br /&gt;
*Write code that would allow your robot to follow the calculated path. The robot will start facing any direction you please.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
* This assignment should be included all in one program (ie your program should calculate a path, perform corrections on the path, and then move the robot without user assistance between stages).&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Connecting_Roomba_to_Your_Computer</id>
		<title>Connecting Roomba to Your Computer</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Connecting_Roomba_to_Your_Computer"/>
				<updated>2007-10-05T18:52:42Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Roomba Design Lab (Winter 2007)]]&lt;br /&gt;
This page covers the various ways that the roomba can be connected to the computer -- namely by Bluetooth (RooTooth) and Serial (RooStick). In this lab, you should have been given a 7-pin serial cable and a Roostick (a USB to serial converter).&lt;br /&gt;
==Serial &amp;amp; RooStick==&lt;br /&gt;
===Windows===&lt;br /&gt;
#Connect the computer to the '''internet'''&lt;br /&gt;
#Plug the '''RooStick''' into the computer&lt;br /&gt;
#A '''&amp;quot;Found New Hardware&amp;quot;''' bubble should appear and install the necessary drivers&lt;br /&gt;
##If this does not happen, the drivers can be found by allowing Windows to search for them on the internet&lt;br /&gt;
##They can also be found here: http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/USB/en/mcu_vcp.htm&lt;br /&gt;
&amp;lt;!--##You can also manually install drivers found at http://www.roombadevtools.com/productcart/pc/viewPrd.asp?idcategory=4&amp;amp;idproduct=3--&amp;gt;&lt;br /&gt;
#When the USB (CP2103) to Serial (UART) Converter is '''installed''', you can now connect your Roomba to your computer via the '''serial cable'''.&lt;br /&gt;
#This next step is important. You must now find the '''Serial Port Number''', a.k.a. '''Roomba Port'''. The serial port number is used to tell applications through which port must be used to talk to your Roomba. This can be found by accessing '''Device Manager''', which is Window's interface for managing hardware communicating with Windows. To access Device Manager, follow these steps:&lt;br /&gt;
##Right-click on '''&amp;quot;My Computer&amp;quot;''' and select '''Properties''' (you can also open My Computer Right-click somewhere in the folder, then Properties)&lt;br /&gt;
##A dialogue box should now appear. Click on the '''&amp;quot;Hardware&amp;quot;''' tab near the center top of the dialogue box.&lt;br /&gt;
##Select '''&amp;quot;Device Manager&amp;quot;'''&lt;br /&gt;
##If the Converter was installed correctly, in the list of devices, there should be a '''&amp;quot;Ports (COM &amp;amp; LPT)&amp;quot;''' Expand this menu&lt;br /&gt;
##Once exanded, there should be a device called '''&amp;quot;CP210x USB to UART Bridge Controller&amp;quot;''' Next to this is your Serial Port Number; Example: (COM3), (COM4), (COM6)&lt;br /&gt;
#'''Remember''' this port for Future reference. This is your '''Roomba Port'''.&lt;br /&gt;
&amp;lt;!-- ===OSX===&lt;br /&gt;
As of now, there is no driver for Intel-Macs, only Power PC based Macs. However, Intel-Macs have blutooth and can be used with RooTooth. --&amp;gt;&lt;br /&gt;
==BlueTooth &amp;amp; RooTooth==&lt;br /&gt;
===Windows===&lt;br /&gt;
Run Bluetooth Setup Wizard&lt;br /&gt;
# Select 2nd Option (&amp;quot;I want to find a specific Bluetooth device and configure how this computer will use its services&amp;quot;)&lt;br /&gt;
# Windows Searches for BT devices in Neighborhood (have rootooth plugged into roomba and powered on)&lt;br /&gt;
# Select RooTooth&lt;br /&gt;
# Use &amp;quot;default&amp;quot; or &amp;quot;1234&amp;quot;for the pincode&lt;br /&gt;
# Click Initiate Pairing&lt;br /&gt;
# Select COM0 Service (check mark)&lt;br /&gt;
# Click Configure (windows will install drivers)&lt;br /&gt;
# Windows Selected COM6 as the Virtual Serial Port&lt;br /&gt;
# Click Finish&lt;br /&gt;
# In &amp;quot;My Bluetooth Places&amp;quot;, right-click on &amp;quot;Rootooth COM0&amp;quot; and click Connect&lt;br /&gt;
# open cmd.exe and run 'java -Djava.library.path=rxtxlib -classpath &amp;quot;.;rxtxlib/RXTXcomm.jar&amp;quot; roombacomm.RoombaCommTest' from the roombacomm directory&lt;br /&gt;
# Select &amp;quot;COM6&amp;quot; at the top and hit connect&lt;br /&gt;
# Have fun (you might have to use reset to get it going)&lt;br /&gt;
===OSX===&lt;br /&gt;
#Plug the RooTooth into Roomba&lt;br /&gt;
#Go into your Mac System Preferences.&lt;br /&gt;
#Under the Hardware category, select Bluetooth.&lt;br /&gt;
#There should be three tabs that appear at the lower top center of the box, &amp;quot;Settings,&amp;quot; &amp;quot;Devices,&amp;quot;, and &amp;quot;Sharing.&amp;quot; Select &amp;quot;Devices.&amp;quot;&lt;br /&gt;
# Now, click on the &amp;quot;Setup New Device&amp;quot; on the lower right of the box.&lt;br /&gt;
#Great, you have located the new-bluetooth-setup wizard... and it welcomes you. &amp;lt;br&amp;gt;[[Image:Rootooth 1.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#Go ahead and select &amp;quot;Any device,&amp;quot; because no other option is for programming robot vacuum cleaners (why, Apple, why!?) &amp;lt;br&amp;gt;[[Image:Rootooth 2.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#The wizard now searches for the RooTooth. Depending on your RooTooth, it may say &amp;quot;RooTooth,&amp;quot; as it appears in this screen-shot, or it may say &amp;quot;BlueRadios,&amp;quot; which is the bluetooth chip used in the newer RooTooths (RooTeeth?). There will be many other bluetooth devices that appear, but just fish through the options, find RooTooth, and continue. &amp;lt;br&amp;gt;[[Image:Rootooth 3.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#So the wizard finishes gathering information on the RooTooth device. Yay. Continue. &amp;lt;br&amp;gt;[[Image:Rootooth 4.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#In order to &amp;quot;pair&amp;quot; RooTooth with your computer (connect RooTooth with only your computer), you must enter its password. This password may be different for each RooTooth, so consult your instructor about the matter. The password is either 'default' or '1234'&amp;lt;br&amp;gt;[[Image:Rootooth 5.png|The logo for this Wiki]]&lt;br /&gt;
#Great, you are now paired. There are no services found -- this is normal. &amp;lt;br&amp;gt;[[Image:Rootooth 6.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#Congratulations! You have finished with the wizard...! But you are not quite finished :(&amp;lt;br&amp;gt;[[Image:Rootooth 7.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#This next step is important. Now you must find your '''Roomba Port'''. The Roomba Port is used to tell applications through which port must be used to talk to your Roomba. The Roomba Port can be found through several methods... which will now be covered here:&lt;br /&gt;
##'''Commnand Line'''&amp;lt;br&amp;gt;This is probably the easiest way of finding the Roomba Port, but many people are intimidated by command-lines or do not know how they work. If this is you, skip to &amp;quot;Mac BlueTooth Preferences.&amp;quot; If you choose to take this method, take note that you have gained cool-points (you are that much more 1337), which can be used to buy approving head-nods from certain peers, but are otherwise worth nothing.&lt;br /&gt;
###Open up Terminal.app from the Utilities folder in the Applications folder (*The terminal provided as an example here may be different colors than yours)&lt;br /&gt;
###Type into the prompt, &amp;quot;cd /dev&amp;quot; and hit enter&lt;br /&gt;
###Type into the prompt, &amp;quot;ls&amp;quot;. &amp;lt;br&amp;gt;[[Image:Rootooth 8.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
###A long list of stuff will appear. Scroll up until you see lines of stuff that say something like &amp;quot;cu.something&amp;quot;&lt;br /&gt;
###Your incomplete Roomba Port is the one that says &amp;quot;cu.RooTooth-COM0-1,&amp;quot; for example. Again, this depends on your RooTooth and can be something else, such as Blueradios.&amp;lt;br&amp;gt;[[Image:Rootooth 9.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
###Your complete Roomba Port is this cu.something text with the text &amp;quot;/dev/&amp;quot; appended onto the front of it. So if you see &amp;quot;cu.something,&amp;quot; than your complete Roomba Port is &amp;quot;/dev/cu.something&amp;quot;&lt;br /&gt;
###Copy they port down for future reference.&lt;br /&gt;
##'''Mac BlueTooth Preferences'''&lt;br /&gt;
###Go into your Mac System Preferences.&lt;br /&gt;
###Under the Hardware category, select Bluetooth.&lt;br /&gt;
###There should be three tabs that appear at the lower top center of the box, &amp;quot;Settings,&amp;quot; &amp;quot;Devices,&amp;quot;, and &amp;quot;Sharing.&amp;quot; Select &amp;quot;Devices.&amp;quot;&lt;br /&gt;
### There should be an option such as &amp;quot;RooTooth&amp;quot; or &amp;quot;Blueradios (depending on your RooTooth)&lt;br /&gt;
###Highlight this option and click on &amp;quot;Edit Serial ports&amp;quot;&lt;br /&gt;
###Your incomplete Roomba Port is listed as the &amp;quot;Port Name.&amp;quot;&lt;br /&gt;
###Your complete Roomba Port is that &amp;quot;Port Name&amp;quot; with &amp;quot;/dev/cu.&amp;quot; appended onto the front of it. So if the &amp;quot;Port Name&amp;quot; is &amp;quot;RooTooth-COM0-1,&amp;quot; than your complete Roomba Port is &amp;quot;/dev/cu.RooTooth-COM0-1&amp;quot;&lt;br /&gt;
###Copy they port down for future reference.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)</id>
		<title>Bio-Robotics Lab (Fall 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Bio-Robotics_Lab_(Fall_2007)"/>
				<updated>2007-09-28T19:27:01Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bio Robots (Fall 2007)]]&lt;br /&gt;
[[Category:Fall 2007 classes]]&lt;br /&gt;
&lt;br /&gt;
==Course Logistics==&lt;br /&gt;
&lt;br /&gt;
Prerequisites: Permission of instructor.&amp;lt;br&amp;gt;&lt;br /&gt;
Class Time: M-W-F 14:00-&amp;gt;14:50&amp;lt;br&amp;gt;&lt;br /&gt;
Class Location: UCross Rm 149&amp;lt;br&amp;gt;&lt;br /&gt;
Office Hours: UCROSS147 Wed and Fri 12-2pm and by appointment&amp;lt;br&amp;gt;&lt;br /&gt;
Course Instructor: [[William C. Regli]], Ph.D.&amp;lt;br&amp;gt;&lt;br /&gt;
Teaching Assistants: Peter Thai &amp;lt;pwt23@drexel.edu&amp;gt; and Duc Nguyen &amp;lt;dn53@drexel.edu&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Instructor Contact: Email regli (at) drexel (DOT) edu (not that this will help keep the spammers away)&amp;lt;br&amp;gt;&lt;br /&gt;
Phone 215.895.6827; Office: UC 143&lt;br /&gt;
&lt;br /&gt;
==Course Objectives and Outcomes==&lt;br /&gt;
&lt;br /&gt;
The goal of this class is to learn how to create software to interact with devices embodied in the physical world.  Students successfully completing this class will: &lt;br /&gt;
#understand the basic concepts of robotics (from a computer-science point of view), including kinematics, dynamics, actuators, controllers, etc; &lt;br /&gt;
#perform software development to control mobile robots (specifically iRobot Roombas); &lt;br /&gt;
#design experiments for robotic platforms; &lt;br /&gt;
#measure the effectiveness of a robotic system on a given problem;&lt;br /&gt;
#gain experience with biologically-inspired robotics techniques (swarming, biologically inspired design, etc)&lt;br /&gt;
#employ cyber-infrastructure (wikis, web, etc) and engineering informatics tools (CAD, simulation, MATLAB, Maple, Pro/E, SolidWorks, ACIS, etc) to better understand the relationship between virtual models and the real world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lectures==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
!width=&amp;quot;75&amp;quot;|Date&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Assignment&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Topic&lt;br /&gt;
!width=&amp;quot;150&amp;quot;|Summary Notes&lt;br /&gt;
!width=&amp;quot;500&amp;quot;|Links and References&lt;br /&gt;
|-&lt;br /&gt;
|September 24&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
Intro to Robot Lab&lt;br /&gt;
|&lt;br /&gt;
[[Media:CS-Robot-Lab-Spring2007-Lec-1.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Introduction to Robotics&lt;br /&gt;
|[[Media:Introduction_to_Robotics.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|September 26&lt;br /&gt;
|&lt;br /&gt;
|Simulation&lt;br /&gt;
|[[Media:Simulation_of_Robotic_Systems.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Week of October 8th&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1 Assignment 1] due&lt;br /&gt;
|&lt;br /&gt;
|[[Robotics Videos]]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|October &lt;br /&gt;
|&lt;br /&gt;
|SLAM&lt;br /&gt;
|[[Media:SLAM.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 9&lt;br /&gt;
|Robotics Videos Quiz&lt;br /&gt;
|Playtime with Roombas&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 16&lt;br /&gt;
|&lt;br /&gt;
|Robot Coordination: flooded out&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 23&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2 Assignment 2] due&lt;br /&gt;
|Grading Assignment 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|May 30&lt;br /&gt;
|&lt;br /&gt;
|Path Planning&lt;br /&gt;
|[[Media:Robot-Lab-Path-Planning.ppt]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|June 6&lt;br /&gt;
|[http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3 Assignment 3] due&lt;br /&gt;
|No Class&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|June 13&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Finals Week&lt;br /&gt;
|&lt;br /&gt;
|}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Text==&lt;br /&gt;
&lt;br /&gt;
Required texts and readings:&amp;lt;br&amp;gt;&lt;br /&gt;
# [http://gicl.cs.drexel.edu/wiki-data/images/a/af/Brooks-representation.pdf Intelligence without Representation], Rodney Brooks.&lt;br /&gt;
# Flesh and Machines: How Robots Will Change Us (Paperback) by Rodney Brooks, Publisher: Vintage (February 4, 2003); ISBN-10: 037572527X.&lt;br /&gt;
#  [http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf Introduction to the Kalman Filter]&lt;br /&gt;
# [http://ocw.mit.edu/NR/rdonlyres/Aeronautics-and-Astronautics/16-412JSpring-2005/9D8DB59F-24EC-4B75-BA7A-F0916BAB2440/0/1aslam_blas_repo.pdf SLAM for Dummies]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Interested students may wish to examine the following textbooks:&lt;br /&gt;
*J.J. Craig. Introduction to Robotics: Mechanics and Control. Prentice Hall; 3rd edition, 2003.&lt;br /&gt;
*Kiyoshi Toko. Biomimetic Sensor Technology. Cambridge University Press, 2000.&lt;br /&gt;
*Karl Williams. Amphibionics: Build Your Own Biologically Inspired Reptilian Robot. McGraw-Hill/TAB Electronics, 2003.&lt;br /&gt;
*David Cook. Robot Building for Beginners. Apress, 2002.&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
The due dates are listed on the week by week breakdown of the course below.  When an assignment is due on a particular date, that means the assignment is really due that week.  You must arrange a time one of the TAs for this class, during the week the assignment is due in order to have your assignment evaluated and graded.  As there are limited slots per TA session, it is best to schedule a time slot sooner rather than later.  You also will have the opportunity to have your work graded after the lecture during the due week.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Depending on the evolution of the class, students may have an opportunity to gain experience with a variety of computational tools, including MATLAB, SolidWorks, Pro/ENGINEER, ACIS, MAPLE, etc.  Several research prototype tools may also be introduced for physics-based modeling, kinematics, etc.&lt;br /&gt;
&lt;br /&gt;
[[Processing]] Setup&lt;br /&gt;
&lt;br /&gt;
A skeleton [[Media:CS511.zip|Eclipse Project]] to write full-fledged Java instead of Processing.  Some directions [[Roomba/Eclipse|here]]&lt;br /&gt;
&lt;br /&gt;
Download Eclipse here [http://www.eclipse.org]&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous Resources==&lt;br /&gt;
&lt;br /&gt;
Wiki page for Winter 2007 Roomba Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
Page from Spring 2007 Robotics Lab:&lt;br /&gt;
[http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_%28Winter_2007%29]&lt;br /&gt;
&lt;br /&gt;
iRobot Create Forums:  [http://createforums.irobot.com/]&lt;br /&gt;
&lt;br /&gt;
Robotics Primer Workbook based around the Create [http://roboticsprimer.sourceforge.net/workbook/Main_Page]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2</id>
		<title>Fall2007BioInspiredRobotDesignAssignment2</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2"/>
				<updated>2007-09-24T05:09:30Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
== Assignment 2: Robotic SLAM (Simultaneous Localization and Mapping) ==&lt;br /&gt;
&lt;br /&gt;
==== Description of Assignment ====&lt;br /&gt;
&lt;br /&gt;
Your Roomba will be placed in a random location in a rectangular arena of unknown dimension.  The arena will have an unknown number of Roomba invisible walls (IR walls projecting a cone) pointing into the arena.  Your Roomba must explore the arena and provide a map of the arena including an estimate of the dimensions of the arena, the location of the invisible walls, and an estimate of the number of invisible walls.  In order to allow all students to get time in the arena, your Roomba must do this in 10 minutes, and your procedure must terminate.&lt;br /&gt;
&lt;br /&gt;
Your source code will need to output the dimensions of the arena and have one of the TAs check this at the end of the execution (physically show the printout to the TA).&lt;br /&gt;
&lt;br /&gt;
Your source code will also need to generate an xpm file (see [http://en.wikipedia.org/wiki/XPM_%28image_format%29]&lt;br /&gt;
) and a printout of the mapping from X and Y pixel dimensions to real world dimensions (e.g. each pixel represents an area of 6 inches by 6 inches) which must also be shown to the TA upon completion.  The xpm file &amp;quot;wallmap.xpm&amp;quot; will contain your automated mapping of the arena, and will plot the locations of the invisible wall fields in the arena (display everywhere in the arena that your Roomba encountered the presence of an invisible wall).  You should use white for the arena background and black for the locations of the invisible wall fields.&lt;br /&gt;
&lt;br /&gt;
You should create a short writeup of this lab (2 pages at most) which details your strategies/algorithms/ideas for performing this lab, and references or other resources you used, any problems you encountered and how you overcame them.  If you tried multiple different strategies before your final one then describe the progression of ideas, and why you gave up on earlier ideas.  Your writeup should also include your estimate for how many invisible walls there were, the dimensions of the arena, and the scale of your xpm file and directionally mapping, basically everything you showed to the TA upon completion of your execution.  Finally, include any conclusions that you have from this lab, analysis of your strategies and estimates of error would be appropriate here, along with anything else you feel is relevant.&lt;br /&gt;
&lt;br /&gt;
==== Information about Roomba Virtual Walls ====&lt;br /&gt;
&lt;br /&gt;
RoombaComm provides a method to access whether your Roomba can detect a virtual wall, which returns a boolean value.  You must refresh the sensors before checking for a virtual wall.&lt;br /&gt;
&lt;br /&gt;
The following information is from Dan Lofaro:&lt;br /&gt;
&lt;br /&gt;
The Virtual Wall projects an IR cone because it is simply emitting IR light out from the IR LED.  This light goes in all directions if there was nothing to block it.  The intensity of the light is the same whenever you are a distance 'x' from the LED.  this means that you can sweep an arc or radius 'x' in all directions, up down left and right, that has the same IR intensity on the given surface.  the roomba's IR sensor picks up this signal and will trigger at a specific intensity.  Thus the area that the roomba will pickup that there is a virtual wall looks like a cone.&lt;br /&gt;
&lt;br /&gt;
[[Image:roomba_Vwall.JPG|center|thumb|450px]]&lt;br /&gt;
&lt;br /&gt;
==== Deliverables for this Assignment ====&lt;br /&gt;
&lt;br /&gt;
*Have a TA watch your execution, the TA will place your Roomba in a random location&lt;br /&gt;
*The TA must see that your program terminates&lt;br /&gt;
*Upon termination, the TA must see that your program outputs the xpm file (and checks what it displays as your estimates for the invisible wall maps), the printout of the mapping between the xpms and real world dimensions, the printout of the dimensions of the arena, and the printout of the estimate for the number of invisible walls&lt;br /&gt;
*You must include a directional mapping of your bitmap file to the arena, see below for more information&lt;br /&gt;
*You must then turn in a writeup of the assignment, your source code, and your xpm file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*you may assume that your Roomba is facing one of the four walls if you want, please note this and any other assumptions in your report&lt;br /&gt;
&lt;br /&gt;
==== Arena for this Assignment ====&lt;br /&gt;
&lt;br /&gt;
This picture presents the dimensions of the arena, and the number and placement of the invisible walls for this assignment.  You can use this info to construct a test arena and to estimate your error.&lt;br /&gt;
&lt;br /&gt;
North and East are indicated on the arena picture, these are not real directions, just reference directions for this arena, with SouthWest in the corner with the virtual wall.  You must indicate the mapping from your bitmap file of the arena to the arena directions using two directions.  In other words, something like &amp;quot;in my bitmap file, left maps to west and up maps to north&amp;quot; or &amp;quot;in my bitmap file, left maps to north and up maps to east&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[Image:Arena.JPG |center|thumb|600px]]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1</id>
		<title>Fall2007BioInspiredRobotDesignAssignment1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1"/>
				<updated>2007-09-24T05:08:20Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
==Assignment 1: Robotic Control and Dead-reckoning==&lt;br /&gt;
The three parts of this assignment basically amount to the Freshman [[Roomba Design Lab (Winter 2007)]]. The purpose of this assignment is to familiarize you with controlling the Robot using a computer while introducing some basic algorithms for movement.&lt;br /&gt;
== Part 1 ==&lt;br /&gt;
===Objective===&lt;br /&gt;
Roomba Challenge #1 is a set of &amp;quot;cattle chutes&amp;quot;, i.e. a maze with 1 path and no detours. The maze requires the Roomba to make several turns to reach the end. The maze can be &amp;quot;short cut&amp;quot; for a faster time via some measurements and sensing.&lt;br /&gt;
===Implementation Challenges===&lt;br /&gt;
Though the first maze is relatively easy, setting up the environment will provide that extra bit of frustration that puts it on par with the other mazes. The challenges you can hope to face are as such (maybe more?):&lt;br /&gt;
#Getting Roomba and your computer interacting&lt;br /&gt;
#Understanding how to communicate with Roomba via your computer&lt;br /&gt;
#Developing an algorithm/solution to solve the maze&lt;br /&gt;
#Implementing and testing the said algorithm&lt;br /&gt;
#Compensating for the error introduced by controlling a physical entity through digital means&lt;br /&gt;
While setting up and learning how to send Roomba commands is a pretty straightforward task (the only pitfalls will be troubleshooting situations), the task of designing a solution for the maze is a much more involved process. There are many ways to implement the same behavior, but some ways work better with the rest of your code. This is just the first maze, so creating an elegant algorithm is not yet necessary, but come later assignments (or even the second maze), you will have to make conscious decisions on what types of programming structures to use. The main concern here is the disparity between what your code does and how your Roomba acts. Your Roomba's strange behavior that deviates from what you perceive your algorithm to be can be attributed to external forces affecting the Roomba; this includes movement of the vehicle, friction, uncertainty in orientation, and, of course, human error. Programming and programming robots is different in this respect -- the environment is not ideal, the robot's shortcomings must be accounted for, and your code must compensate for the less than perfect conditions the surface while controlling a non-virtual entity.&lt;br /&gt;
&lt;br /&gt;
The actual maze will be the hallway of University Commons.  Below is a map of the &lt;br /&gt;
hallway in University Crossings between room 147 and room&lt;br /&gt;
151.  You will start at room 147 and follow the path indicated by the&lt;br /&gt;
yellow arrows towards 151.  You should avoid all of the colored&lt;br /&gt;
squares in the hall.  Each tile in the hallway is 1 sq. ft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Hallway Map.gif]]&lt;br /&gt;
&lt;br /&gt;
== Part 2 ==&lt;br /&gt;
===Objective===&lt;br /&gt;
Now that you have become more familiar with the Roomba programming environment, you should now be able to develop more complex uses of the senors, as well as implement more advanced algorithms to aid you in exploring a richer worlds...! &lt;br /&gt;
&lt;br /&gt;
The Roomba must navigate a similar set of pathways as in Part 1. While most of the maze can be navigated via dead reckoning (like Part 1), use of additional sensors will be required to find the exit the Maze.  Sensors that the teams may want to explore how to use include the wall sensor and other bump sensors. You may want to implement a general maze exiting strategy (such as DFS/wall following).&lt;br /&gt;
&lt;br /&gt;
You will not be graded on the time it takes your Roomba to exit the maze, only that it succeeds in exiting the maze.&lt;br /&gt;
&lt;br /&gt;
===Implementation Challenges===&lt;br /&gt;
The primary areas of concern in this challenge are as such:&lt;br /&gt;
#More complex usages of Roomba Sensors&lt;br /&gt;
#Developing behaviors that handle dead-ends, diagonal turns, curves, etc...&lt;br /&gt;
#Detecting short-cuts that may be harder to 'sense' with basic algorithms&lt;br /&gt;
Because the layout of this maze will be provided for you, this maze allows you to use a combination of dead-reckoning and autonomy. You should already have a good feel of what needs to be done to move the Roomba in whichever direction you need, so the challenge here is to exercise some insight into what will allow Roomba to see what you see if you were the one walking through the maze, and then translate such a thought process into a behavior. This maze differs from the first maze in that some degree of autonomy must be achieved in order for Roomba to find its way through. However, you, Roomba's all-knowledgeable, omnipotent deity, knows the layout of the maze... so a good approach would be to guide Roomba through the certain parts of the maze that can be easily traversed via conventional dead-reckoning, and then write a behavior to sense its way through a specific obstacle, whether that be a short-cut or a traffic circle (a.k.a. roundabout, as they call them in the UK). &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:Maze 2.png|Maze 2]]&lt;br /&gt;
&lt;br /&gt;
== Part 3 ==&lt;br /&gt;
&lt;br /&gt;
Part 3 is intended to be a fun one: get the Roomba to play a tune.  Four suggestions are given.  &lt;br /&gt;
&lt;br /&gt;
There are many sources of information about this problem on the Internet.  Apple Mac users may have a slightly easier time, however ultimately you need to send a sequence of notes to the Roomba for it to play automatically.  This can be done from MAC, Windows or Linux.  &lt;br /&gt;
&lt;br /&gt;
It may indeed be possible to write a direct interface (i.e. a program) that takes a MIDI file and &amp;quot;pipes&amp;quot; it directly to the Roomba.  For example:&lt;br /&gt;
[[http://www.midisite.co.uk/midi_search/star_wars_imperial_march.html http://www.midisite.co.uk/midi_search/star_wars_imperial_march.html]] has about 20 versions of the Star Wars Imperial March.  The Roomba's MIDI palette is more limited than a musical keyboard, hence you may need to remove or truncate notes outside of the Roomba's audio range.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2</id>
		<title>Fall2007BioInspiredRobotDesignAssignment2</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2"/>
				<updated>2007-09-24T05:02:32Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assignment 2: robotic SLAM (simultaneous localization and mapping) ==&lt;br /&gt;
&lt;br /&gt;
==== Description of Assignment ====&lt;br /&gt;
&lt;br /&gt;
Your Roomba will be placed in a random location in a rectangular arena of unknown dimension.  The arena will have an unknown number of Roomba invisible walls (IR walls projecting a cone) pointing into the arena.  Your Roomba must explore the arena and provide a map of the arena including an estimate of the dimensions of the arena, the location of the invisible walls, and an estimate of the number of invisible walls.  In order to allow all students to get time in the arena, your Roomba must do this in 10 minutes, and your procedure must terminate.&lt;br /&gt;
&lt;br /&gt;
Your source code will need to output the dimensions of the arena and have one of the TAs check this at the end of the execution (physically show the printout to the TA).&lt;br /&gt;
&lt;br /&gt;
Your source code will also need to generate an xpm file (see [http://en.wikipedia.org/wiki/XPM_%28image_format%29]&lt;br /&gt;
) and a printout of the mapping from X and Y pixel dimensions to real world dimensions (e.g. each pixel represents an area of 6 inches by 6 inches) which must also be shown to the TA upon completion.  The xpm file &amp;quot;wallmap.xpm&amp;quot; will contain your automated mapping of the arena, and will plot the locations of the invisible wall fields in the arena (display everywhere in the arena that your Roomba encountered the presence of an invisible wall).  You should use white for the arena background and black for the locations of the invisible wall fields.&lt;br /&gt;
&lt;br /&gt;
You should create a short writeup of this lab (2 pages at most) which details your strategies/algorithms/ideas for performing this lab, and references or other resources you used, any problems you encountered and how you overcame them.  If you tried multiple different strategies before your final one then describe the progression of ideas, and why you gave up on earlier ideas.  Your writeup should also include your estimate for how many invisible walls there were, the dimensions of the arena, and the scale of your xpm file and directionally mapping, basically everything you showed to the TA upon completion of your execution.  Finally, include any conclusions that you have from this lab, analysis of your strategies and estimates of error would be appropriate here, along with anything else you feel is relevant.&lt;br /&gt;
&lt;br /&gt;
==== Information about Roomba Virtual Walls ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RoombaComm provides a method to access whether your Roomba can detect a virtual wall, which returns a boolean value.  You must refresh the sensors before checking for a virtual wall.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following information is from Dan Lofaro:&lt;br /&gt;
&lt;br /&gt;
The Virtual Wall projects an IR cone because it is simply emitting IR light out from the IR LED.  This light goes in all directions if there was nothing to block it.  The intensity of the light is the same whenever you are a distance 'x' from the LED.  this means that you can sweep an arc or radius 'x' in all directions, up down left and right, that has the same IR intensity on the given surface.  the roomba's IR sensor picks up this signal and will trigger at a specific intensity.  Thus the area that the roomba will pickup that there is a virtual wall looks like a cone.&lt;br /&gt;
&lt;br /&gt;
[[Image:roomba_Vwall.JPG|center|thumb|450px]]&lt;br /&gt;
&lt;br /&gt;
==== Deliverables for this Assignment ====&lt;br /&gt;
&lt;br /&gt;
*Have a TA watch your execution, the TA will place your Roomba in a random location&lt;br /&gt;
*The TA must see that your program terminates&lt;br /&gt;
*Upon termination, the TA must see that your program outputs the xpm file (and checks what it displays as your estimates for the invisible wall maps), the printout of the mapping between the xpms and real world dimensions, the printout of the dimensions of the arena, and the printout of the estimate for the number of invisible walls&lt;br /&gt;
*You must include a directional mapping of your bitmap file to the arena, see below for more information&lt;br /&gt;
*You must then turn in a writeup of the assignment, your source code, and your xpm file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
*you may assume that your Roomba is facing one of the four walls if you want, please note this and any other assumptions in your report&lt;br /&gt;
&lt;br /&gt;
==== Arena for this Assignment ====&lt;br /&gt;
&lt;br /&gt;
This picture presents the dimensions of the arena, and the number and placement of the invisible walls for this assignment.  You can use this info to construct a test arena and to estimate your error.&lt;br /&gt;
&lt;br /&gt;
North and East are indicated on the arena picture, these are not real directions, just reference directions for this arena, with SouthWest in the corner with the virtual wall.  You must indicate the mapping from your bitmap file of the arena to the arena directions using 2 directions.  In other words, something like &amp;quot;in my bitmap file, left maps to west and up maps to north&amp;quot; or &amp;quot;in my bitmap file, left maps to north and up maps to east&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[Image:Arena.JPG |center|thumb|600px]]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1</id>
		<title>Fall2007BioInspiredRobotDesignAssignment1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1"/>
				<updated>2007-09-24T04:50:29Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
The three parts of this assignment basically amount to the Freshman [[Roomba Design Lab (Winter 2007)]]. The purpose of this assignment is to familiarize you with controlling the Robot using a computer while introducing some basic algorithms for movement.&lt;br /&gt;
&lt;br /&gt;
== Part 1 ==&lt;br /&gt;
===Objective===&lt;br /&gt;
Roomba Challenge #1 is a set of &amp;quot;cattle chutes&amp;quot;, i.e. a maze with 1 path and no detours. The maze requires the Roomba to make several turns to reach the end. The maze can be &amp;quot;short cut&amp;quot; for a faster time via some measurements and sensing.&lt;br /&gt;
===Implementation Challenges===&lt;br /&gt;
Though the first maze is relatively easy, setting up the environment will provide that extra bit of frustration that puts it on par with the other mazes. The challenges you can hope to face are as such (maybe more?):&lt;br /&gt;
#Getting Roomba and your computer interacting&lt;br /&gt;
#Understanding how to communicate with Roomba via your computer&lt;br /&gt;
#Developing an algorithm/solution to solve the maze&lt;br /&gt;
#Implementing and testing the said algorithm&lt;br /&gt;
#Compensating for the error introduced by controlling a physical entity through digital means&lt;br /&gt;
While setting up and learning how to send Roomba commands is a pretty straightforward task (the only pitfalls will be troubleshooting situations), the task of designing a solution for the maze is a much more involved process. There are many ways to implement the same behavior, but some ways work better with the rest of your code. This is just the first maze, so creating an elegant algorithm is not yet necessary, but come later assignments (or even the second maze), you will have to make conscious decisions on what types of programming structures to use. The main concern here is the disparity between what your code does and how your Roomba acts. Your Roomba's strange behavior that deviates from what you perceive your algorithm to be can be attributed to external forces affecting the Roomba; this includes movement of the vehicle, friction, uncertainty in orientation, and, of course, human error. Programming and programming robots is different in this respect -- the environment is not ideal, the robot's shortcomings must be accounted for, and your code must compensate for the less than perfect conditions the surface while controlling a non-virtual entity.&lt;br /&gt;
&lt;br /&gt;
The actual maze will be the hallway of University Commons.  Below is a map of the &lt;br /&gt;
hallway in University Crossings between room 147 and room&lt;br /&gt;
151.  You will start at room 147 and follow the path indicated by the&lt;br /&gt;
yellow arrows towards 151.  You should avoid all of the colored&lt;br /&gt;
squares in the hall.  Each tile in the hallway is 1 sq. ft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Hallway Map.gif]]&lt;br /&gt;
&lt;br /&gt;
== Part 2 ==&lt;br /&gt;
===Objective===&lt;br /&gt;
Now that you have become more familiar with the Roomba programming environment, you should now be able to develop more complex uses of the senors, as well as implement more advanced algorithms to aid you in exploring a richer worlds...! &lt;br /&gt;
&lt;br /&gt;
The Roomba must navigate a similar set of pathways as in Part 1. While most of the maze can be navigated via dead reckoning (like Part 1), use of additional sensors will be required to find the exit the Maze.  Sensors that the teams may want to explore how to use include the wall sensor and other bump sensors. You may want to implement a general maze exiting strategy (such as DFS/wall following).&lt;br /&gt;
&lt;br /&gt;
You will not be graded on the time it takes your Roomba to exit the maze, only that it succeeds in exiting the maze.&lt;br /&gt;
&lt;br /&gt;
===Implementation Challenges===&lt;br /&gt;
The primary areas of concern in this challenge are as such:&lt;br /&gt;
#More complex usages of Roomba Sensors&lt;br /&gt;
#Developing behaviors that handle dead-ends, diagonal turns, curves, etc...&lt;br /&gt;
#Detecting short-cuts that may be harder to 'sense' with basic algorithms&lt;br /&gt;
Because the layout of this maze will be provided for you, this maze allows you to use a combination of dead-reckoning and autonomy. You should already have a good feel of what needs to be done to move the Roomba in whichever direction you need, so the challenge here is to exercise some insight into what will allow Roomba to see what you see if you were the one walking through the maze, and then translate such a thought process into a behavior. This maze differs from the first maze in that some degree of autonomy must be achieved in order for Roomba to find its way through. However, you, Roomba's all-knowledgeable, omnipotent deity, knows the layout of the maze... so a good approach would be to guide Roomba through the certain parts of the maze that can be easily traversed via conventional dead-reckoning, and then write a behavior to sense its way through a specific obstacle, whether that be a short-cut or a traffic circle (a.k.a. roundabout, as they call them in the UK). &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:Maze 2.png|Maze 2]]&lt;br /&gt;
&lt;br /&gt;
== Part 3 ==&lt;br /&gt;
&lt;br /&gt;
Part 3 is intended to be a fun one: get the Roomba to play a tune.  Four suggestions are given.  &lt;br /&gt;
&lt;br /&gt;
There are many sources of information about this problem on the Internet.  Apple Mac users may have a slightly easier time, however ultimately you need to send a sequence of notes to the Roomba for it to play automatically.  This can be done from MAC, Windows or Linux.  &lt;br /&gt;
&lt;br /&gt;
It may indeed be possible to write a direct interface (i.e. a program) that takes a MIDI file and &amp;quot;pipes&amp;quot; it directly to the Roomba.  For example:&lt;br /&gt;
[[http://www.midisite.co.uk/midi_search/star_wars_imperial_march.html http://www.midisite.co.uk/midi_search/star_wars_imperial_march.html]] has about 20 versions of the Star Wars Imperial March.  The Roomba's MIDI palette is more limited than a musical keyboard, hence you may need to remove or truncate notes outside of the Roomba's audio range.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1</id>
		<title>Fall2007BioInspiredRobotDesignAssignment1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1"/>
				<updated>2007-09-24T04:48:38Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
The three parts of this assignment basically amount to the Freshman [[Roomba Design Lab (Winter 2007)]]. The purpose of this assignment is to familiarize you with controlling the Robot using a computer while introducing some basic algorithms for movement.&lt;br /&gt;
&lt;br /&gt;
== Part 1 ==&lt;br /&gt;
===Objective===&lt;br /&gt;
Roomba Challenge #1 is a set of &amp;quot;cattle chutes&amp;quot;, i.e. a maze with 1 path and no detours. The maze requires the Roomba to make several turns to reach the end. The maze can be &amp;quot;short cut&amp;quot; for a faster time via some measurements and sensing.&lt;br /&gt;
===Implementation Challenges===&lt;br /&gt;
Though the first maze is relatively easy, setting up the environment will provide that extra bit of frustration that puts it on par with the other mazes. The challenges you can hope to face are as such (maybe more?):&lt;br /&gt;
#Getting Roomba and your computer interacting&lt;br /&gt;
#Understanding how to communicate with Roomba via your computer&lt;br /&gt;
#Developing an algorithm/solution to solve the maze&lt;br /&gt;
#Implementing and testing the said algorithm&lt;br /&gt;
#Compensating for the error introduced by controlling a physical entity through digital means&lt;br /&gt;
While setting up and learning how to send Roomba commands is a pretty straightforward task (the only pitfalls will be troubleshooting situations), the task of designing a solution for the maze is a much more involved process. There are many ways to implement the same behavior, but some ways work better with the rest of your code. This is just the first maze, so creating an elegant algorithm is not yet necessary, but come later assignments (or even the second maze), you will have to make conscious decisions on what types of programming structures to use. The main concern here is the disparity between what your code does and how your Roomba acts. Your Roomba's strange behavior that deviates from what you perceive your algorithm to be can be attributed to external forces affecting the Roomba; this includes movement of the vehicle, friction, uncertainty in orientation, and, of course, human error. Programming and programming robots is different in this respect -- the environment is not ideal, the robot's shortcomings must be accounted for, and your code must compensate for the less than perfect conditions the surface while controlling a non-virtual entity.&lt;br /&gt;
&lt;br /&gt;
The actual maze will be the hallway of University Commons.  Below is a map of the &lt;br /&gt;
hallway in University Crossings between room 147 and room&lt;br /&gt;
151.  You will start at room 147 and follow the path indicated by the&lt;br /&gt;
yellow arrows towards 151.  You should avoid all of the colored&lt;br /&gt;
squares in the hall.  Each tile in the hallway is 1 sq. ft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Hallway Map.gif]]&lt;br /&gt;
&lt;br /&gt;
== Part 2 ==&lt;br /&gt;
===Objective===&lt;br /&gt;
Now that you have become more familiar with the Roomba programming environment, you should now be able to develop more complex uses of the senors, as well as implement more advanced algorithms to aid you in exploring a richer worlds...! &lt;br /&gt;
&lt;br /&gt;
The Roomba must navigate a similar set of pathways as in Part 1. While most of the maze can be navigated via dead reckoning (like Part 1), use of additional sensors will be required to find the exit the Maze.  Sensors that the teams may want to explore how to use include the wall sensor and other bump sensors. You may want to implement a general maze exiting strategy (such as DFS/wall following).&lt;br /&gt;
&lt;br /&gt;
You will not be graded on the time it takes your Roomba to exit the maze, only that it succeeds in exiting the maze.&lt;br /&gt;
&lt;br /&gt;
===Implementation Challenges===&lt;br /&gt;
The primary areas of concern in this challenge are as such:&lt;br /&gt;
#More complex usages of Roomba Sensors&lt;br /&gt;
#Developing behaviors that handle dead-ends, diagonal turns, curves, etc...&lt;br /&gt;
#Detecting short-cuts that may be harder to 'sense' with basic algorithms&lt;br /&gt;
Because the layout of this maze will be provided for you, this maze allows you to use a combination of dead-reckoning and autonomy. You should already have a good feel of what needs to be done to move the Roomba in whichever direction you need, so the challenge here is to exercise some insight into what will allow Roomba to see what you see if you were the one walking through the maze, and then translate such a thought process into a behavior. This maze differs from the first maze in that some degree of autonomy must be achieved in order for Roomba to find its way through. However, you, Roomba's all-knowledgeable, omnipotent deity, knows the layout of the maze... so a good approach would be to guide Roomba through the certain parts of the maze that can be easily traversed via conventional dead-reckoning, and then write a behavior to sense its way through a specific obstacle, whether that be a short-cut or a traffic circle (a.k.a. roundabout, as they call them in the UK). &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:Maze 2.png|Maze 2]]&lt;br /&gt;
&lt;br /&gt;
== Part 3 ==&lt;br /&gt;
&lt;br /&gt;
Have the Roomba sing a song.&lt;br /&gt;
&lt;br /&gt;
see [http://gicl.cs.drexel.edu/wiki/Challenge_4 Winter 2007 Challenge 4]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1</id>
		<title>Fall2007BioInspiredRobotDesignAssignment1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1"/>
				<updated>2007-09-24T04:40:30Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
&lt;br /&gt;
The three parts of this assignment basically amount to the Freshman [[Roomba Design Lab (Winter 2007)]]. The purpose of this assignment is to familiarize you with controlling the Robot using a computer while introducing some basic algorithms for movement.&lt;br /&gt;
&lt;br /&gt;
=== Part 1 ===&lt;br /&gt;
==Objective==&lt;br /&gt;
Roomba Challenge #1 is a set of &amp;quot;cattle chutes&amp;quot;, i.e. a maze with 1 path and no detours. The maze requires the Roomba to make several turns to reach the end. The maze can be &amp;quot;short cut&amp;quot; for a faster time via some measurements and sensing.&lt;br /&gt;
==Implementation Challenges==&lt;br /&gt;
Though the first maze is relatively easy, setting up the environment will provide that extra bit of frustration that puts it on par with the other mazes. The challenges you can hope to face are as such (maybe more?):&lt;br /&gt;
#Getting Roomba and your computer interacting&lt;br /&gt;
#Understanding how to communicate with Roomba via your computer&lt;br /&gt;
#Developing an algorithm/solution to solve the maze&lt;br /&gt;
#Implementing and testing the said algorithm&lt;br /&gt;
#Compensating for the error introduced by controlling a physical entity through digital means&lt;br /&gt;
While setting up and learning how to send Roomba commands is a pretty straightforward task (the only pitfalls will be troubleshooting situations), the task of designing a solution for the maze is a much more involved process. There are many ways to implement the same behavior, but some ways work better with the rest of your code. This is just the first maze, so creating an elegant algorithm is not yet necessary, but come later assignments (or even the second maze), you will have to make conscious decisions on what types of programming structures to use. The main concern here is the disparity between what your code does and how your Roomba acts. Your Roomba's strange behavior that deviates from what you perceive your algorithm to be can be attributed to external forces affecting the Roomba; this includes movement of the vehicle, friction, uncertainty in orientation, and, of course, human error. Programming and programming robots is different in this respect -- the environment is not ideal, the robot's shortcomings must be accounted for, and your code must compensate for the less than perfect conditions the surface while controlling a non-virtual entity.&lt;br /&gt;
&lt;br /&gt;
The actual maze will be the hallway of University Commons.  Below is a map of the &lt;br /&gt;
hallway in University Crossings between room 147 and room&lt;br /&gt;
151.  You will start at room 147 and follow the path indicated by the&lt;br /&gt;
yellow arrows towards 151.  You should avoid all of the colored&lt;br /&gt;
squares in the hall.  Each tile in the hallway is 1 sq. ft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Hallway Map.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Part 2 ===&lt;br /&gt;
&lt;br /&gt;
Implement a general maze exiting strategy (such as DFS/wall following) for the Roomba to exit a maze.&lt;br /&gt;
&lt;br /&gt;
see [http://gicl.cs.drexel.edu/wiki/Challenge_2 Winter 2007 Challenge 2] for more information.&lt;br /&gt;
&lt;br /&gt;
You will not be graded on the time it takes your Roomba to exit the maze, only that it succeeds in exiting the maze.&lt;br /&gt;
&lt;br /&gt;
=== Part 3 ===&lt;br /&gt;
&lt;br /&gt;
Have the Roomba sing a song.&lt;br /&gt;
&lt;br /&gt;
see [http://gicl.cs.drexel.edu/wiki/Challenge_4 Winter 2007 Challenge 4]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3</id>
		<title>Fall2007BioInspiredRobotDesignAssignment3</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment3"/>
				<updated>2007-09-24T04:14:39Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment 3: Path Planning ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We will not be using Roombas in this assignment, rather we will simulate a point robot.  In this assignment you will write a program to calculate a path through an occupancy map using the Wavefront algorithm, a breadth first search.  Once the path has been planned, this turns into a dead reckoning problem, which we have already seen, and since we know how temperamental dead reckoning is, this will introduce a wrinkle.  We know with dead reckoning the path your robot takes is not exactly the path you specify, and over the course of the path your robot's error grows.  If your robot hits an obstacle, this will throw off the path that you had told your robot to execute and your robot may not finish the course.  Before creating the path, your program must first adapt the map so that your robot will not come close to any obstacle or any wall except for the start and end positions.  Then you should calculate the possible paths in the map using the Wavefront algorithm, and finally calculate a best path for your robot given the Wavefront map.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Updates ====&lt;br /&gt;
&lt;br /&gt;
*rows and columns were written backwards, the first number is columns, the second number is rows&lt;br /&gt;
*All parts of the assignment should be done in your code, your code can be whatever language you like&lt;br /&gt;
*The number of rows and columns start from 1, so if rows = 9, then there are 9 rows&lt;br /&gt;
*For lettering your path, rather than A-Z,AA-AZ you can just start over at A again.&lt;br /&gt;
&lt;br /&gt;
==== Description of Assignment ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your program should take in a text file called path_input.txt which will look like:&lt;br /&gt;
&lt;br /&gt;
[[Media:Path input.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that this is an example input, which will be followed in the assignment.  The actual input file will be provided below.&lt;br /&gt;
&lt;br /&gt;
The first line tells how many columns (9), the second line tells how many rows (8) the map has.  The starting point for the path will have an S, and the ending point will have an E.  All obstacles will have a 1, and open cells will have a 0.&lt;br /&gt;
&lt;br /&gt;
We will assume that your robot can move one square at a time in any direction (up, down, left, right, all four diagonals), as long as it does not go off the map or into an occupied cell.  We also assume that your robot takes up 1 cell.  To provide your robot with a buffer so that it does not run into an obstacle or a wall given the error in its path, you will add extra occupied cells to the map.  You should first increase the size of all obstacles by the size of your robot in all directions by adding a 1 in all directions around all obstacles.&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the obstacles:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_obstacles.txt]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next you will expand all walls by adding a 1 above the lower wall, to the right of the left wall, below the upper wall, and to the left of the right wall, do this for all cells that are not currently occupied and are not the start and end positions (i.e. for any cell that has a 0).&lt;br /&gt;
&lt;br /&gt;
You will not turn this step in, but here is a representation so that you can see what the input map would look like after your program expands the walls:&lt;br /&gt;
&lt;br /&gt;
[[Media:Expanded_walls.txt]]&lt;br /&gt;
&lt;br /&gt;
Now we perform the Wavefront algorithm.  This is a breadth first search that starts at the end position, and expands out from there, noting how far every other cell is from the end position.  You should replace the E (end position) with a 2, then until your algorithm encounters the S (but will not replace the S), you will expand out in a wave from the end position, setting all adjacent cells to 3, then the adjacent cells of the 3's to 4, etc.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_map.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_map.txt]]&lt;br /&gt;
&lt;br /&gt;
Finally you will calculate the shortest path from the S to the 2.  Note that this minimal distance path may not be unique.  Your path will replace the S with an A, then increment through alphabet (B..Z, then AA, AB, AC..AZ if needed) with one letter per cell to indicate your path.  Since some environments don't allow more than one character in a position, you may start your path over at A, i.e. A-Z, then A-Z again.&lt;br /&gt;
&lt;br /&gt;
You will turn this step in, so your program should output a file named wavefront_path_plan.txt that looks like the following:&lt;br /&gt;
&lt;br /&gt;
[[Media:Wavefront_path_plan.txt]]&lt;br /&gt;
&lt;br /&gt;
Note that there is an alternative path with F the cell below the displayed F, and then another choice for G, as all of these paths will have the same length.&lt;br /&gt;
&lt;br /&gt;
==== Deliverables ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will be given the [[Media:A3_path_input.txt ]] file (and change the name to path_input.txt), and your code should execute on that input file, producing the two output files.&lt;br /&gt;
&lt;br /&gt;
You should turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For gradudate students, you must implement the Wavefront algorithm in addition to one other path-planning algorithm that you find (other than a Random Walk).  For some examples, see chapter 2 of Steven LaValle's Planning Algorithms book at http://planning.cs.uiuc.edu/.  Please provide a short description of what other algorithm you choose and how it works.  Graduate students must then turn in:&lt;br /&gt;
&lt;br /&gt;
*your code&lt;br /&gt;
*wavefront_path_map.txt&lt;br /&gt;
*wavefront_path_plan.txt&lt;br /&gt;
*the output file of your additional algorithm&lt;br /&gt;
*any other support files for your additional algorithm&lt;br /&gt;
*README file, containing a short description of your additional algorithm and how it works, and an explanation of what additional files you are turning in&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2</id>
		<title>Fall2007BioInspiredRobotDesignAssignment2</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment2"/>
				<updated>2007-09-24T04:13:59Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assignment 2: robotic SLAM (simultaneous localization and mapping) ===&lt;br /&gt;
&lt;br /&gt;
Updates:&lt;br /&gt;
*note the change from bmp to xpm&lt;br /&gt;
*after some discussion, reporting your original location has been removed from the assignment&lt;br /&gt;
*you may assume that your Roomba is facing one of the four walls if you want, please note this and any other assumptions in your report&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Description of Assignment ====&lt;br /&gt;
&lt;br /&gt;
Your Roomba will be placed in a random location in a rectangular arena of unknown dimension.  The arena will have an unknown number of Roomba invisible walls (IR walls projecting a cone) pointing into the arena.  Your Roomba must explore the arena and provide a map of the arena including an estimate of the dimensions of the arena, the location of the invisible walls, and an estimate of the number of invisible walls.  In order to allow all students to get time in the arena, your Roomba must do this in 10 minutes, and your procedure must terminate.&lt;br /&gt;
&lt;br /&gt;
Your source code will need to output the dimensions of the arena and have one of the TAs check this at the end of the execution (physically show the printout to the TA).&lt;br /&gt;
&lt;br /&gt;
Your source code will also need to generate an xpm file (see [http://en.wikipedia.org/wiki/XPM_%28image_format%29]&lt;br /&gt;
) and a printout of the mapping from X and Y pixel dimensions to real world dimensions (e.g. each pixel represents an area of 6 inches by 6 inches) which must also be shown to the TA upon completion.  The xpm file &amp;quot;wallmap.xpm&amp;quot; will contain your automated mapping of the arena, and will plot the locations of the invisible wall fields in the arena (display everywhere in the arena that your Roomba encountered the presence of an invisible wall).  You should use white for the arena background and black for the locations of the invisible wall fields.&lt;br /&gt;
&lt;br /&gt;
You should create a short writeup of this lab (2 pages at most) which details your strategies/algorithms/ideas for performing this lab, and references or other resources you used, any problems you encountered and how you overcame them.  If you tried multiple different strategies before your final one then describe the progression of ideas, and why you gave up on earlier ideas.  Your writeup should also include your estimate for how many invisible walls there were, the dimensions of the arena, and the scale of your xpm file and directionally mapping, basically everything you showed to the TA upon completion of your execution.  Finally, include any conclusions that you have from this lab, analysis of your strategies and estimates of error would be appropriate here, along with anything else you feel is relevant.&lt;br /&gt;
&lt;br /&gt;
==== Information about Roomba Virtual Walls ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RoombaComm provides a method to access whether your Roomba can detect a virtual wall, which returns a boolean value.  You must refresh the sensors before checking for a virtual wall.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following information is from Dan Lofaro:&lt;br /&gt;
&lt;br /&gt;
The Virtual Wall projects an IR cone because it is simply emitting IR light out from the IR LED.  This light goes in all directions if there was nothing to block it.  The intensity of the light is the same whenever you are a distance 'x' from the LED.  this means that you can sweep an arc or radius 'x' in all directions, up down left and right, that has the same IR intensity on the given surface.  the roomba's IR sensor picks up this signal and will trigger at a specific intensity.  Thus the area that the roomba will pickup that there is a virtual wall looks like a cone.&lt;br /&gt;
&lt;br /&gt;
[[Image:roomba_Vwall.JPG|center|thumb|450px]]&lt;br /&gt;
&lt;br /&gt;
==== Deliverables for this Assignment ====&lt;br /&gt;
&lt;br /&gt;
*have a TA watch your execution, the TA will place your Roomba in a random location&lt;br /&gt;
*the TA must see that your program terminates&lt;br /&gt;
*upon termination, the TA must see that your program outputs the xpm file (and checks what it displays as your estimates for the invisible wall maps), the printout of the mapping between the xpms and real world dimensions, the printout of the dimensions of the arena, and the printout of the estimate for the number of invisible walls&lt;br /&gt;
*you must include a directional mapping of your bitmap file to the arena, see below for more information&lt;br /&gt;
*you must then turn in a writeup of the assignment, your source code, and your xpm file&lt;br /&gt;
&lt;br /&gt;
==== Arena for this Assignment ====&lt;br /&gt;
&lt;br /&gt;
This picture presents the dimensions of the arena, and the number and placement of the invisible walls for this assignment.  You can use this info to construct a test arena and to estimate your error.&lt;br /&gt;
&lt;br /&gt;
North and East are indicated on the arena picture, these are not real directions, just reference directions for this arena, with SouthWest in the corner with the virtual wall.  You must indicate the mapping from your bitmap file of the arena to the arena directions using 2 directions.  In other words, something like &amp;quot;in my bitmap file, left maps to west and up maps to north&amp;quot; or &amp;quot;in my bitmap file, left maps to north and up maps to east&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
[[Image:Arena.JPG |center|thumb|600px]]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1</id>
		<title>Fall2007BioInspiredRobotDesignAssignment1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Fall2007BioInspiredRobotDesignAssignment1"/>
				<updated>2007-09-24T04:13:24Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Robot Lab (Spring 2007)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Assignment 1 consists of 3 parts, which basically amount to the Freshman robot design lab course.&lt;br /&gt;
&lt;br /&gt;
Assignment 1 will be further refined, but this is a good starting point for you to work towards.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Part 1 ===&lt;br /&gt;
&lt;br /&gt;
Have the Roomba exit a predefined maze (this may not be the exact maze, we will update this) by dead reckoning.&lt;br /&gt;
&lt;br /&gt;
see [http://gicl.cs.drexel.edu/wiki/Challenge_1 Winter 2007 Challenge 1] for more information about the task, but note that this is not the actual maze.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The actual maze will be the hallway of University Commons.  Below is a map of the &lt;br /&gt;
hallway in University Crossings between room 147 and room&lt;br /&gt;
151.  You will start at room 147 and follow the path indicated by the&lt;br /&gt;
yellow arrows towards 151.  You should avoid all of the colored&lt;br /&gt;
squares in the hall.  Each tile in the hallway is 1 sq. ft.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Hallway Map.gif]]&lt;br /&gt;
&lt;br /&gt;
=== Part 2 ===&lt;br /&gt;
&lt;br /&gt;
Implement a general maze exiting strategy (such as DFS/wall following) for the Roomba to exit a maze.&lt;br /&gt;
&lt;br /&gt;
see [http://gicl.cs.drexel.edu/wiki/Challenge_2 Winter 2007 Challenge 2] for more information.&lt;br /&gt;
&lt;br /&gt;
You will not be graded on the time it takes your Roomba to exit the maze, only that it succeeds in exiting the maze.&lt;br /&gt;
&lt;br /&gt;
=== Part 3 ===&lt;br /&gt;
&lt;br /&gt;
Have the Roomba sing a song.&lt;br /&gt;
&lt;br /&gt;
see [http://gicl.cs.drexel.edu/wiki/Challenge_4 Winter 2007 Challenge 4]&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Challenge_1</id>
		<title>Challenge 1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Challenge_1"/>
				<updated>2007-09-20T23:21:53Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Roomba Design Lab (Winter 2007)]]&lt;br /&gt;
==Objective==&lt;br /&gt;
Roomba Challenge #1 is a set of &amp;quot;cattle chutes&amp;quot;, i.e. a maze with 1 path and no detours. The maze is 6ft by 12ft and requires the Roomba to make several turns to reach the end. The maze can be &amp;quot;short cut&amp;quot; for a faster time via some measurements and sensing.&lt;br /&gt;
==Implementation Challenges==&lt;br /&gt;
Though the first maze is relatively easy compared to the other two, setting up the environment will provide that extra bit of frustration that makes it on par with the other mazes. The challenges that you will will be exposed to in this first maze are as such (maybe more?):&lt;br /&gt;
#Getting Roomba and your computer interacting&lt;br /&gt;
#Understanding how to communicate with Roomba via your computer&lt;br /&gt;
#Developing an algorithm/solution to solve the maze&lt;br /&gt;
#Implementing and testing the said algorithm&lt;br /&gt;
#Compensating for the error introduced by controlling a physical entity through digital means&lt;br /&gt;
While setting up and learning how to send Roomba commands is a pretty straightforward task (the only pitfalls will be troubleshooting sitations), the task of designing a solution for the maze is a much more involved process. There are many ways to implement the same behavior, but some ways work better with the rest of your code. This is just the first maze, so creating an elegant algorithm is not yet necessary, but come the third and even the second maze, you will have to make conscious decisions on what types of programming structures to use. The main concern here is the disparity between what your code does and how your Roomba acts. Your Roomba's strange behavior that deviates from what you perceive your algorithm to be can be attributed to external forces affecting the Roomba; this includes movement of the vehicle, friction, uncertainty in orientation, and, of course, human error. Programming and programming robots is different in this respect -- the environment is not ideal, the robot's shortcomings must be accounted for, and your code must compensate for the less than perfect conditions the surface while controlling a non-virtual entity.&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:Maze 1.png|Maze 1]]&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Roomba Challenge #1 is a set of &amp;quot;cattle chutes&amp;quot;, i.e. a maze with 1 path and no detours.  The maze is 6ft by 12ft and requires the Roomba make several turns to reach the end.  The maze can be &amp;quot;short cut&amp;quot; for a faster time via some measurements and sensing.&lt;br /&gt;
&lt;br /&gt;
Information on this challenge is available in the PowerPoint slides presented in the main lecture:&lt;br /&gt;
&lt;br /&gt;
[http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt [http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Challenge_2</id>
		<title>Challenge 2</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Challenge_2"/>
				<updated>2007-02-19T00:27:02Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Roomba Design Lab (Winter 2007)]]&lt;br /&gt;
==Objective==&lt;br /&gt;
In Roomba Challenge #2, The Maze, the Roomba must navigate a similar set of pathways as in Challenge #1.  While most of the maze can be navigated via dead reckoning (like Challenge #1), use of additional sensors will be required to find the exit the Maze.  Sensors that the teams may want to explore how to use include the wall sensor and other bump sensors.  &lt;br /&gt;
&lt;br /&gt;
The Maze will start off somewhat like that of Challenge #1, however it will be 12x12 and require additional smarts to get out of.  It will be set up for practice by the Feb 11 (location TBA).&lt;br /&gt;
&lt;br /&gt;
==Implementation Challenges==&lt;br /&gt;
Now that you have become more familiar with the Roomba programming environment, you should now be able to develop more complex uses of the senors, as well as implement more advanced algorithms to aid you in exploring a richer worlds...! Program your Roomba from one end to other and, if you are smart, discover well hidden pathways to hasten your endeavor! The primary areas of concern in this challenge are such:&lt;br /&gt;
#More complex usages of Roomba Sensors&lt;br /&gt;
#Developing behaviors that handle dead-ends, diagonal turns, curves, etc...&lt;br /&gt;
#Detecting short-cuts that may be harder to 'sense' with basic algorithms&lt;br /&gt;
Because the layout of this maze will be provided for you (though with less time than the first maze), this maze allows you to use a combination of dead-reckoning and autonomy. You should already have a good feel of what needs to be done to move the Roomba in whichever direction you need, so the challenge here is to exersize some insight into what will allow Roomba to see what you see if you were the one walking through the maze, and then translate such a thought process into a behavior. This maze differs from the first maze in that some degree of autonomy must be achieved in order for Roomba to find its way through the maze. However, you, Roomba's all-knowledgeable, omnipotent deity, knows the layout of the maze... so a good approach would be to guide Roomba through the certain parts of the maze that can be easily traversed via conventional dead-reckoning, and then write a behavior to sense its way through a specific obstacle, whether that be a short-cut or a traffic circle (a.k.a. roundabout, as they call them in the UK). &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:Maze 2.png|Maze 2]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Information on this challenge is available in the PPTs for the module:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt [http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Challenge_1</id>
		<title>Challenge 1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Challenge_1"/>
				<updated>2007-02-19T00:26:32Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Roomba Design Lab (Winter 2007)]]&lt;br /&gt;
==Objective==&lt;br /&gt;
Roomba Challenge #1 is a set of &amp;quot;cattle chutes&amp;quot;, i.e. a maze with 1 path and no detours. The maze is 6ft by 12ft and requires the Roomba to make several turns to reach the end. The maze can be &amp;quot;short cut&amp;quot; for a faster time via some measurements and sensing.&lt;br /&gt;
==Implementation Challenges==&lt;br /&gt;
Though the first maze is relatively easy compared to the other two, setting up the environment will provide that extra bit of frustration that makes it on par with the other mazes. The challenges that you will will be exposed to in this first maze are as such (maybe more?):&lt;br /&gt;
#Getting Roomba and your computer interacting&lt;br /&gt;
#Understanding how to communicate with Roomba via the Processing language, which is actually something like Java&lt;br /&gt;
#Developing an algorithm/solution to solve the maze&lt;br /&gt;
#Implementing and testing the said algorithm&lt;br /&gt;
#Compensating for the error introduced by controlling a physical entity through digital means&lt;br /&gt;
While setting up and learning how to send Roomba commands is a pretty straightforward task (the only pitfalls will be troubleshooting sitations), the task of designing a solution for the maze is a much more involved process. There are many ways to implement the same behavior, but some ways work better with the rest of your code. This is just the first maze, so creating an elegant algorithm is not yet necessary, but come the third and even the second maze, you will have to make conscious decisions on what types of programming structures to use. The main concern here is the disparity between what your code does and how your Roomba acts. Your Roomba's strange behavior that deviates from what you perceive your algorithm to be can be attributed to external forces affecting the Roomba; this includes movement of the vehicle, friction, uncertainty in orientation, and, of course, human error. Programming and programming robots is different in this respect -- the environment is not ideal, the robot's shortcomings must be accounted for, and your code must compensate for the less than perfect conditions the surface while controlling a non-virtual entity.&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:Maze 1.png|Maze 1]]&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Roomba Challenge #1 is a set of &amp;quot;cattle chutes&amp;quot;, i.e. a maze with 1 path and no detours.  The maze is 6ft by 12ft and requires the Roomba make several turns to reach the end.  The maze can be &amp;quot;short cut&amp;quot; for a faster time via some measurements and sensing.&lt;br /&gt;
&lt;br /&gt;
Information on this challenge is available in the PowerPoint slides presented in the main lecture:&lt;br /&gt;
&lt;br /&gt;
[http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt [http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Challenge_1</id>
		<title>Challenge 1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Challenge_1"/>
				<updated>2007-02-19T00:26:21Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Roomba Design Lab (Winter 2007)]]&lt;br /&gt;
==Objective==&lt;br /&gt;
Roomba Challenge #1 is a set of &amp;quot;cattle chutes&amp;quot;, i.e. a maze with 1 path and no detours. The maze is 6ft by 12ft and requires the Roomba to make several turns to reach the end. The maze can be &amp;quot;short cut&amp;quot; for a faster time via some measurements and sensing.&lt;br /&gt;
==Implementation Challenges==&lt;br /&gt;
Though the first maze is relatively easy compared to the other two, setting up the environment will provide that extra bit of frustration that makes it on par with the other mazes. The challenges that you will will be exposed to in this first maze are as such (maybe more?):&lt;br /&gt;
#Getting Roomba and your computer interacting&lt;br /&gt;
#Understanding how to communicate with Roomba via the Processing language, which is actually something like Java&lt;br /&gt;
#Developing an algorithm/solution to solve the maze&lt;br /&gt;
#Implementing and testing the said algorithm&lt;br /&gt;
#Compensating for the error introduced by controlling a physical entity through digital means&lt;br /&gt;
While setting up and learning how to send Roomba commands is a pretty straightforward task (the only pitfalls will be troubleshooting sitations), the task of designing a solution for the maze is a much more involved process. There are many ways to implement the same behavior, but some ways work better with the rest of your code. This is just the first maze, so creating an elegant algorithm is not yet necessary, but come the third and even the second maze, you will have to make conscious decisions on what types of programming structures to use. The main concern here is the disparity between what your code does and how your Roomba acts. Your Roomba's strange behavior that deviates from what you perceive your algorithm to be can be attributed to external forces affecting the Roomba; this includes movement of the vehicle, friction, uncertainty in orientation, and, of course, human error. Programming and programming robots is different in this respect -- the environment is not ideal, the robot's shortcomings must be accounted for, and your code must compensate for the less than perfect conditions the surface while controlling a non-virtual entity.&lt;br /&gt;
[[Image:Maze 1.png|Maze 1]]&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Roomba Challenge #1 is a set of &amp;quot;cattle chutes&amp;quot;, i.e. a maze with 1 path and no detours.  The maze is 6ft by 12ft and requires the Roomba make several turns to reach the end.  The maze can be &amp;quot;short cut&amp;quot; for a faster time via some measurements and sensing.&lt;br /&gt;
&lt;br /&gt;
Information on this challenge is available in the PowerPoint slides presented in the main lecture:&lt;br /&gt;
&lt;br /&gt;
[http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt [http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/File:Maze_2.png</id>
		<title>File:Maze 2.png</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/File:Maze_2.png"/>
				<updated>2007-02-19T00:24:50Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/File:Maze_1.png</id>
		<title>File:Maze 1.png</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/File:Maze_1.png"/>
				<updated>2007-02-19T00:24:36Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)</id>
		<title>Category:Roomba Design Lab (Winter 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)"/>
				<updated>2007-02-14T05:58:17Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Updates==&lt;br /&gt;
#Drivers for the RooStick can be found here: http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/USB/en/mcu_vcp.htm&lt;br /&gt;
&amp;lt;!--#A bulletin board system has been set up by one of your peers for your benefit. It can be found at: http://pages.pgsit.org/2005/petert/phpBB2--&amp;gt;&lt;br /&gt;
#The bulletin board system is temporarily out of service...&lt;br /&gt;
#The code on the [http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt Roomba Module powerpoint] is more or less outdated.&lt;br /&gt;
==Goal==&lt;br /&gt;
This page and those in his category are to support students in Freshman Design Lab, Winter 2007.&lt;br /&gt;
&lt;br /&gt;
The goal of the &amp;quot;Roomba Module&amp;quot; is to identify and encode a set of behaviors to control a Roomba Robot, enabling it to perform a series of challenges (beyond the typical vacuuming of the floor). In this lab, you will encounter the interdisciplinary realities of the real world. A Roomba robot is a electro-mechanical system, control by software, that senses and acts in the world.&lt;br /&gt;
&lt;br /&gt;
In this set of assignments, you are the creator of its behavior. You must deal with the limitations and inaccuracies of the Roomba platform and its sensors by designing software that can effectively use these flawed senses to successfully carry out a set of tasks.&lt;br /&gt;
==Where to begin==&lt;br /&gt;
In order to start programming Roomba, you need to set up your environment for Roomba Development; that is, you must make the connection between your Roomba and your computer, then make sure your programming software, which is called Processing, is working properly. In order to do this, you should read these pages:&lt;br /&gt;
#[[Connecting Roomba to Your Computer]] - This will get Roomba configured to your computer&lt;br /&gt;
#[[Processing]] - This will get the programming environment Processing running on your computer&lt;br /&gt;
#[[RoombaComm]] - This will provide the basic commands to communicate with Roomba&lt;br /&gt;
#[[Roomba Program 1]] - This provides a tutorial of what your first Roomba program might look like&lt;br /&gt;
#[[Roomba Template]] - Download the template from this page and start writing your own program&lt;br /&gt;
==TheChallenge==&lt;br /&gt;
There are three tasks that you must be able to preform with your Roomba. The tasks and their descriptions are listed below as a quick reference. More detailed descriptions can be found at their respective pages.&lt;br /&gt;
===Challenge #1: The Chutes===&lt;br /&gt;
For more information, go to [[Challenge 1]]&lt;br /&gt;
===Challenge #2: The Maze===&lt;br /&gt;
For more information, go to [[Challenge 2]]&lt;br /&gt;
===Challenge #3: The Great Escape===&lt;br /&gt;
For more information, go to [[Challenge 3]]&lt;br /&gt;
===Challenge #4: Name that Tune===&lt;br /&gt;
For more information, go to [[Challenge 4]]&lt;br /&gt;
==Materials Provided==&lt;br /&gt;
There are two easy ways to connect Roomba to your Computer:&lt;br /&gt;
#7-pin Serial Cable with RooStick (CP2103 USB to UART converter)&lt;br /&gt;
#Rootooth (Bluetooth connector)&lt;br /&gt;
Both methods will be available in the labs for you to experiment with, but if I were, I would go Rootooth any chance I get. While RooStick still provides a solid interface, RooTooth provides untethered flexibility that allows you to not follow your Roomba around, program Roomba from the comfort of your seat (and not in awkward places where Roomba has wondered to), and eliminate the chance that Roomba pulls your laptop off your desk or snap the RooStick in half.&lt;br /&gt;
&amp;lt;!--#[[Loops]] - This will provide the basic programming loops structures that will help control your program--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)</id>
		<title>Category:Roomba Design Lab (Winter 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)"/>
				<updated>2007-02-12T15:36:14Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Updates==&lt;br /&gt;
#Drivers for the RooStick can be found here: http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/USB/en/mcu_vcp.htm&lt;br /&gt;
#A bulletin board system has been set up by one of your peers for your benefit. It can be found at: http://pages.pgsit.org/2005/petert/phpBB2&lt;br /&gt;
#The code on the [http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt Roomba Module powerpoint] is more or less outdated.&lt;br /&gt;
==Goal==&lt;br /&gt;
This page and those in his category are to support students in Freshman Design Lab, Winter 2007.&lt;br /&gt;
&lt;br /&gt;
The goal of the &amp;quot;Roomba Module&amp;quot; is to identify and encode a set of behaviors to control a Roomba Robot, enabling it to perform a series of challenges (beyond the typical vacuuming of the floor). In this lab, you will encounter the interdisciplinary realities of the real world. A Roomba robot is a electro-mechanical system, control by software, that senses and acts in the world.&lt;br /&gt;
&lt;br /&gt;
In this set of assignments, you are the creator of its behavior. You must deal with the limitations and inaccuracies of the Roomba platform and its sensors by designing software that can effectively use these flawed senses to successfully carry out a set of tasks.&lt;br /&gt;
==Where to begin==&lt;br /&gt;
In order to start programming Roomba, you need to set up your environment for Roomba Development; that is, you must make the connection between your Roomba and your computer, then make sure your programming software, which is called Processing, is working properly. In order to do this, you should read these pages:&lt;br /&gt;
#[[Connecting Roomba to Your Computer]] - This will get Roomba configured to your computer&lt;br /&gt;
#[[Processing]] - This will get the programming environment Processing running on your computer&lt;br /&gt;
#[[RoombaComm]] - This will provide the basic commands to communicate with Roomba&lt;br /&gt;
#[[Roomba Program 1]] - This provides a tutorial of what your first Roomba program might look like&lt;br /&gt;
#[[Roomba Template]] - Download the template from this page and start writing your own program&lt;br /&gt;
==TheChallenge==&lt;br /&gt;
There are three tasks that you must be able to preform with your Roomba. The tasks and their descriptions are listed below as a quick reference. More detailed descriptions can be found at their respective pages.&lt;br /&gt;
===Challenge #1: The Chutes===&lt;br /&gt;
For more information, go to [[Challenge 1]]&lt;br /&gt;
===Challenge #2: The Maze===&lt;br /&gt;
For more information, go to [[Challenge 2]]&lt;br /&gt;
===Challenge #3: The Great Escape===&lt;br /&gt;
For more information, go to [[Challenge 3]]&lt;br /&gt;
===Challenge #4: Name that Tune===&lt;br /&gt;
For more information, go to [[Challenge 4]]&lt;br /&gt;
==Materials Provided==&lt;br /&gt;
There are two easy ways to connect Roomba to your Computer:&lt;br /&gt;
#7-pin Serial Cable with RooStick (CP2103 USB to UART converter)&lt;br /&gt;
#Rootooth (Bluetooth connector)&lt;br /&gt;
Both methods will be available in the labs for you to experiment with, but if I were, I would go Rootooth any chance I get. While RooStick still provides a solid interface, RooTooth provides untethered flexibility that allows you to not follow your Roomba around, program Roomba from the comfort of your seat (and not in awkward places where Roomba has wondered to), and eliminate the chance that Roomba pulls your laptop off your desk or snap the RooStick in half.&lt;br /&gt;
&amp;lt;!--#[[Loops]] - This will provide the basic programming loops structures that will help control your program--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)</id>
		<title>Category:Roomba Design Lab (Winter 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)"/>
				<updated>2007-02-07T06:03:27Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Updates==&lt;br /&gt;
#Drivers for the RooStick can be found here: http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/USB/en/mcu_vcp.htm&lt;br /&gt;
#A bulletin board system has been set up by one of your peers for your benefit. It can be found at: pages.pgsit.org/2005/petert/phpBB2&lt;br /&gt;
#The code on the [http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt Roomba Module powerpoint] is more or less outdated.&lt;br /&gt;
==Goal==&lt;br /&gt;
This page and those in his category are to support students in Freshman Design Lab, Winter 2007.&lt;br /&gt;
&lt;br /&gt;
The goal of the &amp;quot;Roomba Module&amp;quot; is to identify and encode a set of behaviors to control a Roomba Robot, enabling it to perform a series of challenges (beyond the typical vacuuming of the floor). In this lab, you will encounter the interdisciplinary realities of the real world. A Roomba robot is a electro-mechanical system, control by software, that senses and acts in the world.&lt;br /&gt;
&lt;br /&gt;
In this set of assignments, you are the creator of its behavior. You must deal with the limitations and inaccuracies of the Roomba platform and its sensors by designing software that can effectively use these flawed senses to successfully carry out a set of tasks.&lt;br /&gt;
==Where to begin==&lt;br /&gt;
In order to start programming Roomba, you need to set up your environment for Roomba Development; that is, you must make the connection between your Roomba and your computer, then make sure your programming software, which is called Processing, is working properly. In order to do this, you should read these pages:&lt;br /&gt;
#[[Connecting Roomba to Your Computer]] - This will get Roomba configured to your computer&lt;br /&gt;
#[[Processing]] - This will get the programming environment Processing running on your computer&lt;br /&gt;
#[[RoombaComm]] - This will provide the basic commands to communicate with Roomba&lt;br /&gt;
#[[Roomba Program 1]] - This provides a tutorial of what your first Roomba program might look like&lt;br /&gt;
#[[Roomba Template]] - Download the template from this page and start writing your own program&lt;br /&gt;
==TheChallenge==&lt;br /&gt;
There are three tasks that you must be able to preform with your Roomba. The tasks and their descriptions are listed below as a quick reference. More detailed descriptions can be found at their respective pages.&lt;br /&gt;
===Challenge #1: The Chutes===&lt;br /&gt;
For more information, go to [[Challenge 1]]&lt;br /&gt;
===Challenge #2: The Maze===&lt;br /&gt;
For more information, go to [[Challenge 2]]&lt;br /&gt;
===Challenge #3: The Great Escape===&lt;br /&gt;
For more information, go to [[Challenge 3]]&lt;br /&gt;
===Challenge #4: Name that Tune===&lt;br /&gt;
For more information, go to [[Challenge 4]]&lt;br /&gt;
==Materials Provided==&lt;br /&gt;
There are two easy ways to connect Roomba to your Computer:&lt;br /&gt;
#7-pin Serial Cable with RooStick (CP2103 USB to UART converter)&lt;br /&gt;
#Rootooth (Bluetooth connector)&lt;br /&gt;
Both methods will be available in the labs for you to experiment with, but if I were, I would go Rootooth any chance I get. While RooStick still provides a solid interface, RooTooth provides untethered flexibility that allows you to not follow your Roomba around, program Roomba from the comfort of your seat (and not in awkward places where Roomba has wondered to), and eliminate the chance that Roomba pulls your laptop off your desk or snap the RooStick in half.&lt;br /&gt;
&amp;lt;!--#[[Loops]] - This will provide the basic programming loops structures that will help control your program--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)</id>
		<title>Category:Roomba Design Lab (Winter 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)"/>
				<updated>2007-02-07T05:54:39Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Updates==&lt;br /&gt;
#Drivers for the RooStick can be found here: http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/USB/en/mcu_vcp.htm&lt;br /&gt;
#A bulletin board system has been set up by one of your peers for your benefit. It can be found at: pages.pgsit.org/2005/petert/phpBB2&lt;br /&gt;
#The information on the [http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt Roomba Module powerpoint] is more or less outdated.&lt;br /&gt;
==Goal==&lt;br /&gt;
This page and those in his category are to support students in Freshman Design Lab, Winter 2007.&lt;br /&gt;
&lt;br /&gt;
The goal of the &amp;quot;Roomba Module&amp;quot; is to identify and encode a set of behaviors to control a Roomba Robot, enabling it to perform a series of challenges (beyond the typical vacuuming of the floor). In this lab, you will encounter the interdisciplinary realities of the real world. A Roomba robot is a electro-mechanical system, control by software, that senses and acts in the world.&lt;br /&gt;
&lt;br /&gt;
In this set of assignments, you are the creator of its behavior. You must deal with the limitations and inaccuracies of the Roomba platform and its sensors by designing software that can effectively use these flawed senses to successfully carry out a set of tasks.&lt;br /&gt;
==Where to begin==&lt;br /&gt;
In order to start programming Roomba, you need to set up your environment for Roomba Development; that is, you must make the connection between your Roomba and your computer, then make sure your programming software, which is called Processing, is working properly. In order to do this, you should read these pages:&lt;br /&gt;
#[[Connecting Roomba to Your Computer]] - This will get Roomba configured to your computer&lt;br /&gt;
#[[Processing]] - This will get the programming environment Processing running on your computer&lt;br /&gt;
#[[RoombaComm]] - This will provide the basic commands to communicate with Roomba&lt;br /&gt;
#[[Roomba Program 1]] - This provides a tutorial of what your first Roomba program might look like&lt;br /&gt;
#[[Roomba Template]] - Download the template from this page and start writing your own program&lt;br /&gt;
==TheChallenge==&lt;br /&gt;
There are three tasks that you must be able to preform with your Roomba. The tasks and their descriptions are listed below as a quick reference. More detailed descriptions can be found at their respective pages.&lt;br /&gt;
===Challenge #1: The Chutes===&lt;br /&gt;
For more information, go to [[Challenge 1]]&lt;br /&gt;
===Challenge #2: The Maze===&lt;br /&gt;
For more information, go to [[Challenge 2]]&lt;br /&gt;
===Challenge #3: The Great Escape===&lt;br /&gt;
For more information, go to [[Challenge 3]]&lt;br /&gt;
===Challenge #4: Name that Tune===&lt;br /&gt;
For more information, go to [[Challenge 4]]&lt;br /&gt;
==Materials Provided==&lt;br /&gt;
There are two easy ways to connect Roomba to your Computer:&lt;br /&gt;
#7-pin Serial Cable with RooStick (CP2103 USB to UART converter)&lt;br /&gt;
#Rootooth (Bluetooth connector)&lt;br /&gt;
Both methods will be available in the labs for you to experiment with, but if I were, I would go Rootooth any chance I get. While RooStick still provides a solid interface, RooTooth provides untethered flexibility that allows you to not follow your Roomba around, program Roomba from the comfort of your seat (and not in awkward places where Roomba has wondered to), and eliminate the chance that Roomba pulls your laptop off your desk or snap the RooStick in half.&lt;br /&gt;
&amp;lt;!--#[[Loops]] - This will provide the basic programming loops structures that will help control your program--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Connecting_Roomba_to_Your_Computer</id>
		<title>Connecting Roomba to Your Computer</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Connecting_Roomba_to_Your_Computer"/>
				<updated>2007-02-07T05:54:20Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Roomba Design Lab (Winter 2007)]]&lt;br /&gt;
This page covers the various ways that the roomba can be connected to the computer -- namely by Bluetooth (RooTooth) and Serial (RooStick). In this lab, you should have been given a 7-pin serial cable and a Roostick (a USB to serial converter).&lt;br /&gt;
==Serial &amp;amp; RooStick==&lt;br /&gt;
===Windows===&lt;br /&gt;
#Connect the computer to the '''internet'''&lt;br /&gt;
#Plug the '''RooStick''' into the computer&lt;br /&gt;
#A '''&amp;quot;Found New Hardware&amp;quot;''' bubble should appear and install the necessary drivers&lt;br /&gt;
##If this does not happen, the drivers can be found by allowing Windows to search for them on the internet&lt;br /&gt;
##They can also be found here: http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/USB/en/mcu_vcp.htm&lt;br /&gt;
&amp;lt;!--##You can also manually install drivers found at http://www.roombadevtools.com/productcart/pc/viewPrd.asp?idcategory=4&amp;amp;idproduct=3--&amp;gt;&lt;br /&gt;
#When the USB (CP2103) to Serial (UART) Converter is '''installed''', you can now connect your Roomba to your computer via the '''serial cable'''.&lt;br /&gt;
#This next step is important. You must now find the '''Serial Port Number''', a.k.a. '''Roomba Port'''. The serial port number is used to tell applications through which port must be used to talk to your Roomba. This can be found by accessing '''Device Manager''', which is Window's interface for managing hardware communicating with Windows. To access Device Manager, follow these steps:&lt;br /&gt;
##Right-click on '''&amp;quot;My Computer&amp;quot;''' and select '''Properties''' (you can also open My Computer Right-click somewhere in the folder, then Properties)&lt;br /&gt;
##A dialogue box should now appear. Click on the '''&amp;quot;Hardware&amp;quot;''' tab near the center top of the dialogue box.&lt;br /&gt;
##Select '''&amp;quot;Device Manager&amp;quot;'''&lt;br /&gt;
##If the Converter was installed correctly, in the list of devices, there should be a '''&amp;quot;Ports (COM &amp;amp; LPT)&amp;quot;''' Expand this menu&lt;br /&gt;
##Once exanded, there should be a device called '''&amp;quot;CP210x USB to UART Bridge Controller&amp;quot;''' Next to this is your Serial Port Number; Example: (COM3), (COM4), (COM6)&lt;br /&gt;
##'''Remember''' this port for Future reference. This is your '''Roomba Port'''.&lt;br /&gt;
===OSX===&lt;br /&gt;
As of now, there is no driver for Intel-Macs, only Power PC based Macs. However, Intel-Macs have blutooth and can be used with RooTooth.&lt;br /&gt;
==BlueTooth &amp;amp; RooTooth==&lt;br /&gt;
===Windows===&lt;br /&gt;
Run Bluetooth Setup Wizard&lt;br /&gt;
# Select 2nd Option (&amp;quot;I want to find a specific Bluetooth device and configure how this computer will use its services&amp;quot;)&lt;br /&gt;
# Windows Searches for BT devices in Neighborhood (have rootooth plugged into roomba and powered on)&lt;br /&gt;
# Select RooTooth&lt;br /&gt;
# Use &amp;quot;default&amp;quot; for pincode&lt;br /&gt;
# Click Initiate Pairing&lt;br /&gt;
# Select COM0 Service (check mark)&lt;br /&gt;
# Click Configure (windows will install drivers)&lt;br /&gt;
# Windows Selected COM6 as the Virtual Serial Port&lt;br /&gt;
# Click Finish&lt;br /&gt;
# In &amp;quot;My Bluetooth Places&amp;quot;, right-click on &amp;quot;Rootooth COM0&amp;quot; and click Connect&lt;br /&gt;
# open cmd.exe and run 'java -Djava.library.path=rxtxlib -classpath &amp;quot;.;rxtxlib/RXTXcomm.jar&amp;quot; roombacomm.RoombaCommTest' from the roombacomm directory&lt;br /&gt;
# Select &amp;quot;COM6&amp;quot; at the top and hit connect&lt;br /&gt;
# Have fun (you might have to use reset to get it going)&lt;br /&gt;
===OSX===&lt;br /&gt;
#Plug the RooTooth into Roomba&lt;br /&gt;
#Go into your Mac System Preferences.&lt;br /&gt;
#Under the Hardware category, select Bluetooth.&lt;br /&gt;
#There should be three tabs that appear at the lower top center of the box, &amp;quot;Settings,&amp;quot; &amp;quot;Devices,&amp;quot;, and &amp;quot;Sharing.&amp;quot; Select &amp;quot;Devices.&amp;quot;&lt;br /&gt;
# Now, click on the &amp;quot;Setup New Device&amp;quot; on the lower right of the box.&lt;br /&gt;
#Great, you have located the new-bluetooth-setup wizard... and it welcomes you. &amp;lt;br&amp;gt;[[Image:Rootooth 1.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#Go ahead and select &amp;quot;Any device,&amp;quot; because no other option is for programming robot vacuum cleaners (why, Apple, why!?) &amp;lt;br&amp;gt;[[Image:Rootooth 2.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#The wizard now searches for the RooTooth. Depending on your RooTooth, it may say &amp;quot;RooTooth,&amp;quot; as it appears in this screen-shot, or it may say &amp;quot;BlueRadios,&amp;quot; which is the bluetooth chip used in the newer RooTooths (RooTeeth?). There will be many other bluetooth devices that appear, but just fish through the options, find RooTooth, and continue. &amp;lt;br&amp;gt;[[Image:Rootooth 3.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#So the wizard finishes gathering information on the RooTooth device. Yay. Continue. &amp;lt;br&amp;gt;[[Image:Rootooth 4.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#In order to &amp;quot;pair&amp;quot; RooTooth with your computer (connect RooTooth with only your computer), you must enter its password. This password may be different for each RooTooth, so consult your instructor about the matter.&amp;lt;br&amp;gt;[[Image:Rootooth 5.png|The logo for this Wiki]]&lt;br /&gt;
#Great, you are now paired. There are no services found -- this is normal. &amp;lt;br&amp;gt;[[Image:Rootooth 6.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#Congratulations! You have finished with the wizard...! But you are not quite finished :(&amp;lt;br&amp;gt;[[Image:Rootooth 7.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
#This next step is important. Now you must find your '''Roomba Port'''. The Roomba Port is used to tell applications through which port must be used to talk to your Roomba. The Roomba Port can be found through several methods... which will now be covered here:&lt;br /&gt;
##'''Commnand Line'''&amp;lt;br&amp;gt;This is probably the easiest way of finding the Roomba Port, but many people are intimidated by command-lines or do not know how they work. If this is you, skip to &amp;quot;Mac BlueTooth Preferences.&amp;quot; If you choose to take this method, take note that you have gained cool-points (you are that much more 1337), which can be used to buy approving head-nods from certain peers, but are otherwise worth nothing.&lt;br /&gt;
###Open up Terminal.app from the Utilities folder in the Applications folder (*The terminal provided as an example here may be different colors than yours)&lt;br /&gt;
###Type into the prompt, &amp;quot;cd /dev&amp;quot; and hit enter&lt;br /&gt;
###Type into the prompt, &amp;quot;ls&amp;quot;. &amp;lt;br&amp;gt;[[Image:Rootooth 8.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
###A long list of stuff will appear. Scroll up until you see lines of stuff that say something like &amp;quot;cu.something&amp;quot;&lt;br /&gt;
###Your incomplete Roomba Port is the one that says &amp;quot;cu.RooTooth-COM0-1,&amp;quot; for example. Again, this depends on your RooTooth and can be something else, such as Blueradios.&amp;lt;br&amp;gt;[[Image:Rootooth 9.png|The logo for this Wiki]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
###Your complete Roomba Port is this cu.something text with the text &amp;quot;/dev/&amp;quot; appended onto the front of it. So if you see &amp;quot;cu.something,&amp;quot; than your complete Roomba Port is &amp;quot;/dev/cu.something&amp;quot;&lt;br /&gt;
###Copy they port down for future reference.&lt;br /&gt;
##'''Mac BlueTooth Preferences'''&lt;br /&gt;
###Go into your Mac System Preferences.&lt;br /&gt;
###Under the Hardware category, select Bluetooth.&lt;br /&gt;
###There should be three tabs that appear at the lower top center of the box, &amp;quot;Settings,&amp;quot; &amp;quot;Devices,&amp;quot;, and &amp;quot;Sharing.&amp;quot; Select &amp;quot;Devices.&amp;quot;&lt;br /&gt;
### There should be an option such as &amp;quot;RooTooth&amp;quot; or &amp;quot;Blueradios (depending on your RooTooth)&lt;br /&gt;
###Highlight this option and click on &amp;quot;Edit Serial ports&amp;quot;&lt;br /&gt;
###Your incomplete Roomba Port is listed as the &amp;quot;Port Name.&amp;quot;&lt;br /&gt;
###Your complete Roomba Port is that &amp;quot;Port Name&amp;quot; with &amp;quot;/dev/cu.&amp;quot; appended onto the front of it. So if the &amp;quot;Port Name&amp;quot; is &amp;quot;RooTooth-COM0-1,&amp;quot; than your complete Roomba Port is &amp;quot;/dev/cu.RooTooth-COM0-1&amp;quot;&lt;br /&gt;
###Copy they port down for future reference.&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)</id>
		<title>Category:Roomba Design Lab (Winter 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)"/>
				<updated>2007-02-07T05:53:37Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Notes==&lt;br /&gt;
#Drivers for the RooStick can be found here: http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/USB/en/mcu_vcp.htm&lt;br /&gt;
#A bulletin board system has been set up by one of your peers for your benefit. It can be found at: pages.pgsit.org/2005/petert/phpBB2&lt;br /&gt;
#The information on the [http://gicl.cs.drexel.edu/people/regli/tmp/roomba-module-v5.ppt Roomba Module powerpoint] is more or less outdated.&lt;br /&gt;
==Goal==&lt;br /&gt;
This page and those in his category are to support students in Freshman Design Lab, Winter 2007.&lt;br /&gt;
&lt;br /&gt;
The goal of the &amp;quot;Roomba Module&amp;quot; is to identify and encode a set of behaviors to control a Roomba Robot, enabling it to perform a series of challenges (beyond the typical vacuuming of the floor). In this lab, you will encounter the interdisciplinary realities of the real world. A Roomba robot is a electro-mechanical system, control by software, that senses and acts in the world.&lt;br /&gt;
&lt;br /&gt;
In this set of assignments, you are the creator of its behavior. You must deal with the limitations and inaccuracies of the Roomba platform and its sensors by designing software that can effectively use these flawed senses to successfully carry out a set of tasks.&lt;br /&gt;
==Where to begin==&lt;br /&gt;
In order to start programming Roomba, you need to set up your environment for Roomba Development; that is, you must make the connection between your Roomba and your computer, then make sure your programming software, which is called Processing, is working properly. In order to do this, you should read these pages:&lt;br /&gt;
#[[Connecting Roomba to Your Computer]] - This will get Roomba configured to your computer&lt;br /&gt;
#[[Processing]] - This will get the programming environment Processing running on your computer&lt;br /&gt;
#[[RoombaComm]] - This will provide the basic commands to communicate with Roomba&lt;br /&gt;
#[[Roomba Program 1]] - This provides a tutorial of what your first Roomba program might look like&lt;br /&gt;
#[[Roomba Template]] - Download the template from this page and start writing your own program&lt;br /&gt;
==TheChallenge==&lt;br /&gt;
There are three tasks that you must be able to preform with your Roomba. The tasks and their descriptions are listed below as a quick reference. More detailed descriptions can be found at their respective pages.&lt;br /&gt;
===Challenge #1: The Chutes===&lt;br /&gt;
For more information, go to [[Challenge 1]]&lt;br /&gt;
===Challenge #2: The Maze===&lt;br /&gt;
For more information, go to [[Challenge 2]]&lt;br /&gt;
===Challenge #3: The Great Escape===&lt;br /&gt;
For more information, go to [[Challenge 3]]&lt;br /&gt;
===Challenge #4: Name that Tune===&lt;br /&gt;
For more information, go to [[Challenge 4]]&lt;br /&gt;
==Materials Provided==&lt;br /&gt;
There are two easy ways to connect Roomba to your Computer:&lt;br /&gt;
#7-pin Serial Cable with RooStick (CP2103 USB to UART converter)&lt;br /&gt;
#Rootooth (Bluetooth connector)&lt;br /&gt;
Both methods will be available in the labs for you to experiment with, but if I were, I would go Rootooth any chance I get. While RooStick still provides a solid interface, RooTooth provides untethered flexibility that allows you to not follow your Roomba around, program Roomba from the comfort of your seat (and not in awkward places where Roomba has wondered to), and eliminate the chance that Roomba pulls your laptop off your desk or snap the RooStick in half.&lt;br /&gt;
&amp;lt;!--#[[Loops]] - This will provide the basic programming loops structures that will help control your program--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)</id>
		<title>Category:Roomba Design Lab (Winter 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)"/>
				<updated>2007-02-05T17:05:28Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Goal==&lt;br /&gt;
This page and those in his category are to support students in Freshman Design Lab, Winter 2007.&lt;br /&gt;
&lt;br /&gt;
The goal of the &amp;quot;Roomba Module&amp;quot; is to identify and encode a set of behaviors to control a Roomba Robot, enabling it to perform a series of challenges (beyond the typical vacuuming of the floor). In this lab, you will encounter the interdisciplinary realities of the real world. A Roomba robot is a electro-mechanical system, control by software, that senses and acts in the world.&lt;br /&gt;
&lt;br /&gt;
In this set of assignments, you are the creator of its behavior. You must deal with the limitations and inaccuracies of the Roomba platform and its sensors by designing software that can effectively use these flawed senses to successfully carry out a set of tasks.&lt;br /&gt;
==Where to begin==&lt;br /&gt;
In order to start programming Roomba, you need to set up your environment for Roomba Development; that is, you must make the connection between your Roomba and your computer, then make sure your programming software, which is called Processing, is working properly. In order to do this, you should read these pages:&lt;br /&gt;
#[[Connecting Roomba to Your Computer]] - This will get Roomba configured to your computer&lt;br /&gt;
#[[Processing]] - This will get the programming environment Processing running on your computer&lt;br /&gt;
#[[RoombaComm]] - This will provide the basic commands to communicate with Roomba&lt;br /&gt;
#[[Roomba Program 1]] - This provides a tutorial of what your first Roomba program might look like&lt;br /&gt;
#[[Roomba Template]] - Download the template from this page and start writing your own program&lt;br /&gt;
==TheChallenge==&lt;br /&gt;
There are three tasks that you must be able to preform with your Roomba. The tasks and their descriptions are listed below as a quick reference. More detailed descriptions can be found at their respective pages.&lt;br /&gt;
===Challenge #1: The Chutes===&lt;br /&gt;
For more information, go to [[Challenge 1]]&lt;br /&gt;
===Challenge #2: The Maze===&lt;br /&gt;
For more information, go to [[Challenge 2]]&lt;br /&gt;
===Challenge #3: The Great Escape===&lt;br /&gt;
For more information, go to [[Challenge 3]]&lt;br /&gt;
===Challenge #4: Name that Tune===&lt;br /&gt;
For more information, go to [[Challenge 4]]&lt;br /&gt;
==Materials Provided==&lt;br /&gt;
There are two easy ways to connect Roomba to your Computer:&lt;br /&gt;
#7-pin Serial Cable with RooStick (CP2103 USB to UART converter)&lt;br /&gt;
#Rootooth (Bluetooth connector)&lt;br /&gt;
Both methods will be available in the labs for you to experiment with, but if I were, I would go Rootooth any chance I get. While RooStick still provides a solid interface, RooTooth provides untethered flexibility that allows you to not follow your Roomba around, program Roomba from the comfort of your seat (and not in awkward places where Roomba has wondered to), and eliminate the chance that Roomba pulls your laptop off your desk or snap the RooStick in half.&lt;br /&gt;
==Notes==&lt;br /&gt;
#A bulletin board system has been set up by one of your peers for your benefit. It can be found at: pages.pgsit.org/2005/petert/phpBB2&lt;br /&gt;
#The information on the Roomba Module powerpoint is more or less outdated.&lt;br /&gt;
&amp;lt;!--#[[Loops]] - This will provide the basic programming loops structures that will help control your program--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)</id>
		<title>Category:Roomba Design Lab (Winter 2007)</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Category:Roomba_Design_Lab_(Winter_2007)"/>
				<updated>2007-02-05T17:05:13Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Goal==&lt;br /&gt;
This page and those in his category are to support students in Freshman Design Lab, Winter 2007.&lt;br /&gt;
&lt;br /&gt;
The goal of the &amp;quot;Roomba Module&amp;quot; is to identify and encode a set of behaviors to control a Roomba Robot, enabling it to perform a series of challenges (beyond the typical vacuuming of the floor). In this lab, you will encounter the interdisciplinary realities of the real world. A Roomba robot is a electro-mechanical system, control by software, that senses and acts in the world.&lt;br /&gt;
&lt;br /&gt;
In this set of assignments, you are the creator of its behavior. You must deal with the limitations and inaccuracies of the Roomba platform and its sensors by designing software that can effectively use these flawed senses to successfully carry out a set of tasks.&lt;br /&gt;
==Where to begin==&lt;br /&gt;
In order to start programming Roomba, you need to set up your environment for Roomba Development; that is, you must make the connection between your Roomba and your computer, then make sure your programming software, which is called Processing, is working properly. In order to do this, you should read these pages:&lt;br /&gt;
#[[Connecting Roomba to Your Computer]] - This will get Roomba configured to your computer&lt;br /&gt;
#[[Processing]] - This will get the programming environment Processing running on your computer&lt;br /&gt;
#[[RoombaComm]] - This will provide the basic commands to communicate with Roomba&lt;br /&gt;
#[[Roomba Program 1]] - This provides a tutorial of what your first Roomba program might look like&lt;br /&gt;
#[[Roomba Template]] - Download the template from this page and start writing your own program&lt;br /&gt;
==TheChallenge==&lt;br /&gt;
There are three tasks that you must be able to preform with your Roomba. The tasks and their descriptions are listed below as a quick reference. More detailed descriptions can be found at their respective pages.&lt;br /&gt;
===Challenge #1: The Chutes===&lt;br /&gt;
For more information, go to [[Challenge 1]]&lt;br /&gt;
===Challenge #2: The Maze===&lt;br /&gt;
For more information, go to [[Challenge 2]]&lt;br /&gt;
===Challenge #3: The Great Escape===&lt;br /&gt;
For more information, go to [[Challenge 3]]&lt;br /&gt;
===Challenge #4: Name that Tune===&lt;br /&gt;
For more information, go to [[Challenge 4]]&lt;br /&gt;
==Materials Provided==&lt;br /&gt;
There are two easy ways to connect Roomba to your Computer:&lt;br /&gt;
#7-pin Serial Cable with RooStick (CP2103 USB to UART converter)&lt;br /&gt;
#Rootooth (Bluetooth connector)&lt;br /&gt;
Both methods will be available in the labs for you to experiment with, but if I were, I would go Rootooth any chance I get. While RooStick still provides a solid interface, RooTooth provides untethered flexibility that allows you to not follow your Roomba around, program Roomba from the comfort of your seat (and not in awkward places where Roomba has wondered to), and eliminate the chance that Roomba pulls your laptop off your desk or snap the RooStick in half.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Notes==&lt;br /&gt;
#A bulletin board system has been set up by one of your peers for your benefit. It can be found at: pages.pgsit.org/2005/petert/phpBB2&lt;br /&gt;
#The information on the Roomba Module powerpoint is more or less outdated.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--#[[Loops]] - This will provide the basic programming loops structures that will help control your program--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Roomba_Program_1</id>
		<title>Roomba Program 1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Roomba_Program_1"/>
				<updated>2007-02-05T15:46:40Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This program is a basic autonomous behavior for Roomba and can be used as a starting place. In essence, the Roomba turns right 45 degrees when the left bump sensor is triggered, and 45 degrees left when the right bump sensor is triggered.&lt;br /&gt;
&lt;br /&gt;
The source file can be found here: http://gicl.cs.drexel.edu/wiki-data/images/0/03/ROOMBA_PROGRAM_1.zip&lt;br /&gt;
==The Explanation==&lt;br /&gt;
You do not have to know how this first section works.&lt;br /&gt;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    // Program: ROOMBA_TEMPLATE&lt;br /&gt;
    // Description: - This a template for any Roomba program. In order to use this, simple place code in the 'while' loop in place of &amp;quot;// ((&amp;gt;&amp;gt;&amp;gt;&amp;gt;]]}- PLACE CODE HERE -{[[&amp;lt;&amp;lt;&amp;lt;&amp;lt;))&amp;quot;&lt;br /&gt;
    //              - As a Disclaimer, this loops much more complicated than it is...&lt;br /&gt;
    //&lt;br /&gt;
    // Drexelized By: Peter Thai - [pwt23@drexel.edu]&lt;br /&gt;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    &lt;br /&gt;
    // This imports the libraries necessary for communicating with Roomba (namely RoomabComm)&lt;br /&gt;
    import roombacomm.*;&lt;br /&gt;
    import roombacomm.net.*;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    //This stops Roomba and disconnects it from your computer.&lt;br /&gt;
    String roombacommPort = &amp;quot;COM3&amp;quot;; // &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;::::::::::::: ENTER YOUR ROOMBA PORT :::::::::::::&lt;br /&gt;
    //String roombacommPort = &amp;quot;/dev/cu.RooTooth-COM0-1&amp;quot;;&lt;br /&gt;
    boolean hwhandshake = false; &lt;br /&gt;
    RoombaCommSerial roombacomm = new RoombaCommSerial();&lt;br /&gt;
    roombacomm.waitForDSR = hwhandshake;&lt;br /&gt;
    &lt;br /&gt;
        &lt;br /&gt;
    // If Roomba fails to connect, it will print out an error and terminate the program &lt;br /&gt;
    if ( ! roombacomm.connect(roombacommPort) )&lt;br /&gt;
        {&lt;br /&gt;
            println(&amp;quot;Couldn't connect to &amp;quot;+roombacommPort);&lt;br /&gt;
            System.exit(1);  &lt;br /&gt;
        }&lt;br /&gt;
The only line that you need to worry about is this line:&lt;br /&gt;
  String roombacommPort = &amp;quot;COM3&amp;quot;; // &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;::::::::::::: ENTER YOUR ROOMBA PORT :::::::::::::&lt;br /&gt;
Here, the Roomba Port is COM3. You must replace this Roomba Port with your own Roomba Port. If you do not know your Roomba Port, please refer to the end of each installation section of each [[Connecting Roomba to Your Computer]] page.&lt;br /&gt;
&lt;br /&gt;
The next section informs you that the Roomba is indeed connected to your computer. First, it connects to the Roomba to your computer and puts the Roomba in &amp;quot;Safe Mode,&amp;quot; which is is a mode programmed by the 1337 h4ck0rz at MIT that allows a certain degree of control of the Roomba brain over the physical components of Roomba.&lt;br /&gt;
    // Once Roomba is connected, it will perform the following actions to indicate it has connected&lt;br /&gt;
    println(&amp;quot;Roomba startup on port&amp;quot;+roombacommPort); // Prints out the Port on which Roomba is connected&lt;br /&gt;
    roombacomm.startup();&lt;br /&gt;
    roombacomm.control(); // Puts Roomba in &amp;quot;Safe Mode&amp;quot;&lt;br /&gt;
Now that the Roomba is connected, it plays a note, pauses so that the Roomba can finish playing the note, and then updates the state of all sensors on the Roomba so that it starts fresh. The state of the sensors can be used later with commands such as roombacomm.bumpLeft() and must be updated with the updateSensors().&lt;br /&gt;
    roombacomm.playNote(72,50); // Plays a note&lt;br /&gt;
    roombacomm.pause(100); // Pauses Roomba while note is being played&lt;br /&gt;
    roombacomm.updateSensors(); // Updates the state of all sensors &lt;br /&gt;
    &lt;br /&gt;
This next section is the actual loop that drives the robot, the algorithm, if you will. It first creates a boolean variable (boolean refers to a variable of only True or False) called &amp;quot;done&amp;quot; that is set to false. This variable &amp;quot;done&amp;quot; is set into the &amp;quot;while&amp;quot; loop as a condition to terminate or reiterate the loop. The '!' in &amp;quot;(!done)&amp;quot; negates the done, which is initially set as false... so it is now true and will continue the while loop.&lt;br /&gt;
    // This is the main loop. It is executed continuously until the variable 'done' is set to true&lt;br /&gt;
    boolean done = false; // This instantiates the variable 'done' and sets it to false&lt;br /&gt;
    while (!done) &lt;br /&gt;
        {&lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
            // ::::::::::::: START CODE (Code goes between this thing and.... *look down*) :::::::::::::&lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
Now that we're actually in the while loop and we know that these next few lines of code will be reiterated continuously, we can finally start commanding Roomba. This first line, &amp;quot;roombacomm.goForward(),&amp;quot; simply drives the Roomba forward. The next line, &amp;quot;roombacomm.pause(200),&amp;quot; stops the future execution of commands for 200 milliseconds so that the previous line of code can finish executing in the Roomba.&lt;br /&gt;
            roombacomm.goForward();&lt;br /&gt;
            roombacomm.pause(200);&lt;br /&gt;
Here is the &amp;quot;roombacomm.updateSensors()&amp;quot; command again... this is just to make sure that the sensors are updated again for the next few lines of code.&lt;br /&gt;
            roombacomm.updateSensors();      &lt;br /&gt;
Now comes the heart of the Roomba logic. The &amp;quot;if&amp;quot; statement here makes the Roomba turn right 45 degrees if the left bump sensor is triggered. The Roomba only has 2 sensors, right and a left sensor. When the &amp;quot;roombacom.bumpLeft()&amp;quot; command is called, it returns true if the left sensor is triggered and false if it is not.&lt;br /&gt;
             if (roombacomm.bumpLeft())            &lt;br /&gt;
                        {                &lt;br /&gt;
                            roombacomm.spinRight(45); &lt;br /&gt;
                        }         &lt;br /&gt;
This next else if statement turns the Roomba left 45 degrees if the right bump sensor is triggered (the &amp;quot;roombacomm.bumpRight()&amp;quot; command returns a true).&lt;br /&gt;
             else if (roombacomm.bumpRight())             &lt;br /&gt;
                        {                &lt;br /&gt;
                            roombacomm.spinLeft(45);                      &lt;br /&gt;
                        }       &lt;br /&gt;
                    roombacomm.updateSensors();    &lt;br /&gt;
    &lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
                // ::::::::::::: END CODE (Code goes between this thing and... *look up*) :::::::::::::&lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
These last few lines of code simple stop your Roomba and then disconnect the Roomba from your computer... the chances that these few lines will ever be ran are rare.&lt;br /&gt;
    //This stops Roomba and disconnects it from your computer.&lt;br /&gt;
    roombacomm.stop(); &lt;br /&gt;
    roombacomm.disconnect();&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Roomba_Program_1</id>
		<title>Roomba Program 1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Roomba_Program_1"/>
				<updated>2007-02-05T15:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This program is a basic autonomous behavior for Roomba and can be used as a starting place. Where you should be looking in this sample code is the &amp;quot;ROOMBA PORT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The source file can be found here: http://gicl.cs.drexel.edu/wiki-data/images/0/03/ROOMBA_PROGRAM_1.zip&lt;br /&gt;
&lt;br /&gt;
==The Explanation==&lt;br /&gt;
You do not have to know how this first section works.&lt;br /&gt;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    // Program: ROOMBA_TEMPLATE&lt;br /&gt;
    // Description: - This a template for any Roomba program. In order to use this, simple place code in the 'while' loop in place of &amp;quot;// ((&amp;gt;&amp;gt;&amp;gt;&amp;gt;]]}- PLACE CODE HERE -{[[&amp;lt;&amp;lt;&amp;lt;&amp;lt;))&amp;quot;&lt;br /&gt;
    //              - As a Disclaimer, this loops much more complicated than it is...&lt;br /&gt;
    //&lt;br /&gt;
    // Drexelized By: Peter Thai - [pwt23@drexel.edu]&lt;br /&gt;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    &lt;br /&gt;
    // This imports the libraries necessary for communicating with Roomba (namely RoomabComm)&lt;br /&gt;
    import roombacomm.*;&lt;br /&gt;
    import roombacomm.net.*;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    //This stops Roomba and disconnects it from your computer.&lt;br /&gt;
    String roombacommPort = &amp;quot;COM3&amp;quot;; // &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;::::::::::::: ENTER YOUR ROOMBA PORT :::::::::::::&lt;br /&gt;
    //String roombacommPort = &amp;quot;/dev/cu.RooTooth-COM0-1&amp;quot;;&lt;br /&gt;
    boolean hwhandshake = false; &lt;br /&gt;
    RoombaCommSerial roombacomm = new RoombaCommSerial();&lt;br /&gt;
    roombacomm.waitForDSR = hwhandshake;&lt;br /&gt;
    &lt;br /&gt;
        &lt;br /&gt;
    // If Roomba fails to connect, it will print out an error and terminate the program &lt;br /&gt;
    if ( ! roombacomm.connect(roombacommPort) )&lt;br /&gt;
        {&lt;br /&gt;
            println(&amp;quot;Couldn't connect to &amp;quot;+roombacommPort);&lt;br /&gt;
            System.exit(1);  &lt;br /&gt;
        }&lt;br /&gt;
The only line that you need to worry about is this line:&lt;br /&gt;
  String roombacommPort = &amp;quot;COM3&amp;quot;; // &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;::::::::::::: ENTER YOUR ROOMBA PORT :::::::::::::&lt;br /&gt;
Here, the Roomba Port is COM3. You must replace this Roomba Port with your own Roomba Port. If you do not know your Roomba Port, please refer to the end of each installation section of each [[Connecting Roomba to Your Computer]] page.&lt;br /&gt;
&lt;br /&gt;
The next section informs you that the Roomba is indeed connected to your computer. First, it connects to the Roomba to your computer and puts the Roomba in &amp;quot;Safe Mode,&amp;quot; which is is a mode programmed by the 1337 h4ck0rz at MIT that allows a certain degree of control of the Roomba brain over the physical components of Roomba.&lt;br /&gt;
    // Once Roomba is connected, it will perform the following actions to indicate it has connected&lt;br /&gt;
    println(&amp;quot;Roomba startup on port&amp;quot;+roombacommPort); // Prints out the Port on which Roomba is connected&lt;br /&gt;
    roombacomm.startup();&lt;br /&gt;
    roombacomm.control(); // Puts Roomba in &amp;quot;Safe Mode&amp;quot;&lt;br /&gt;
Now that the Roomba is connected, it plays a note, pauses so that the Roomba can finish playing the note, and then updates the state of all sensors on the Roomba so that it starts fresh. The state of the sensors can be used later with commands such as roombacomm.bumpLeft() and must be updated with the updateSensors().&lt;br /&gt;
    roombacomm.playNote(72,50); // Plays a note&lt;br /&gt;
    roombacomm.pause(100); // Pauses Roomba while note is being played&lt;br /&gt;
    roombacomm.updateSensors(); // Updates the state of all sensors &lt;br /&gt;
    &lt;br /&gt;
This next section is the actual loop that drives the robot, the algorithm, if you will. It first creates a boolean variable (boolean refers to a variable of only True or False) called &amp;quot;done&amp;quot; that is set to false. This variable &amp;quot;done&amp;quot; is set into the &amp;quot;while&amp;quot; loop as a condition to terminate or reiterate the loop. The '!' in &amp;quot;(!done)&amp;quot; negates the done, which is initially set as false... so it is now true and will continue the while loop.&lt;br /&gt;
    // This is the main loop. It is executed continuously until the variable 'done' is set to true&lt;br /&gt;
    boolean done = false; // This instantiates the variable 'done' and sets it to false&lt;br /&gt;
    while (!done) &lt;br /&gt;
        {&lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
            // ::::::::::::: START CODE (Code goes between this thing and.... *look down*) :::::::::::::&lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
Now that we're actually in the while loop and we know that these next few lines of code will be reiterated continuously, we can finally start commanding Roomba. This first line, &amp;quot;roombacomm.goForward(),&amp;quot; simply drives the Roomba forward. The next line, &amp;quot;roombacomm.pause(200),&amp;quot; stops the future execution of commands for 200 milliseconds so that the previous line of code can finish executing in the Roomba.&lt;br /&gt;
            roombacomm.goForward();&lt;br /&gt;
            roombacomm.pause(200);&lt;br /&gt;
Here is the &amp;quot;roombacomm.updateSensors()&amp;quot; command again... this is just to make sure that the sensors are updated again for the next few lines of code.&lt;br /&gt;
            roombacomm.updateSensors();      &lt;br /&gt;
Now comes the heart of the Roomba logic. The &amp;quot;if&amp;quot; statement here makes the Roomba turn right 45 degrees if the left bump sensor is triggered. The Roomba only has 2 sensors, right and a left sensor. When the &amp;quot;roombacom.bumpLeft()&amp;quot; command is called, it returns true if the left sensor is triggered and false if it is not.&lt;br /&gt;
             if (roombacomm.bumpLeft())            &lt;br /&gt;
                        {                &lt;br /&gt;
                            roombacomm.spinRight(45); &lt;br /&gt;
                        }         &lt;br /&gt;
This next else if statement turns the Roomba left if the right bump sensor is triggered (the &amp;quot;roombacomm.bumpRight()&amp;quot; command returns a true).&lt;br /&gt;
             else if (roombacomm.bumpRight())             &lt;br /&gt;
                        {                &lt;br /&gt;
                            roombacomm.spinLeft(45);                      &lt;br /&gt;
                        }       &lt;br /&gt;
                    roombacomm.updateSensors();    &lt;br /&gt;
    &lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
                // ::::::::::::: END CODE (Code goes between this thing and... *look up*) :::::::::::::&lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
These last few lines of code simple stop your Roomba and then disconnect the Roomba from your computer... the chances that these few lines will ever be ran are rare.&lt;br /&gt;
    //This stops Roomba and disconnects it from your computer.&lt;br /&gt;
    roombacomm.stop(); &lt;br /&gt;
    roombacomm.disconnect();&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/RoombaComm</id>
		<title>RoombaComm</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/RoombaComm"/>
				<updated>2007-02-05T15:04:38Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Roomba Design Lab (Winter 2007)]]&lt;br /&gt;
RoombaComm is a Java library created by Tod E. Kurt that allows users to communicate with Roomba through a high-level language (Java). This library is already included in the issued Processing package. The documentary of commands provided in this library are officially available at http://todbot.com/roomba/roombacomm/javadoc/&amp;lt;!--but a more abbreviated (for more concise coverage) list of commands will be available --&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
RoombaComm is a Java library created by Tod E. Kurt that allows users to communicate with Roomba through a high-level language (Java). This library is already included in the issued Processing package. The documentary of commands provided in this library are officially available at http://todbot.com/roomba/roombacomm/javadoc/, but a more abreviated (for easier access) and more thorough documentary are included below.&lt;br /&gt;
&lt;br /&gt;
The following page is list of commands that can be sent to your Roomba and a description of how they are used.&lt;br /&gt;
&lt;br /&gt;
==goForward()==&lt;br /&gt;
&lt;br /&gt;
==goBackward()==&lt;br /&gt;
&lt;br /&gt;
==spinLeft()==&lt;br /&gt;
This turns Roomba &amp;quot;degrees&amp;quot; degrees in the left direction.&lt;br /&gt;
==spinRight(float &amp;quot;degrees&amp;quot;)==&lt;br /&gt;
This turns Roomba &amp;quot;degrees&amp;quot; degrees in the right direction.&lt;br /&gt;
&lt;br /&gt;
==updateSensors()==&lt;br /&gt;
This updates all sensor data from the roomba. This data is used by various methods, such as bumpLeft(). &lt;br /&gt;
&lt;br /&gt;
==playNote()==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==bump()==&lt;br /&gt;
This returns a boolean indicating whether any of the bump sensors have been triggered.&lt;br /&gt;
==bumpLeft()==&lt;br /&gt;
This returns a boolean indicating whether the left bump sensor has been triggered.&lt;br /&gt;
==bumpRight()==&lt;br /&gt;
This returns a boolean indicating whether the right bump sensor has been triggered.&lt;br /&gt;
==wall()==&lt;br /&gt;
This returns a boolean indicating whether the wall sensors detect a wall.&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	<entry>
		<id>http://gicl.cs.drexel.edu/wiki/Roomba_Program_1</id>
		<title>Roomba Program 1</title>
		<link rel="alternate" type="text/html" href="http://gicl.cs.drexel.edu/wiki/Roomba_Program_1"/>
				<updated>2007-02-05T14:58:23Z</updated>
		
		<summary type="html">&lt;p&gt;Pwt23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This program is a basic autonomous behavior for Roomba and can be used as a starting place. Where you should be looking in this sample code is the &amp;quot;ROOMBA PORT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The source file can be found here: http://gicl.cs.drexel.edu/wiki-data/images/0/03/ROOMBA_PROGRAM_1.zip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    // Program: ROOMBA_TEMPLATE&lt;br /&gt;
    // Description: - This a template for any Roomba program. In order to use this, simple place code in the 'while' loop in place of &amp;quot;// ((&amp;gt;&amp;gt;&amp;gt;&amp;gt;]]}- PLACE CODE HERE -{[[&amp;lt;&amp;lt;&amp;lt;&amp;lt;))&amp;quot;&lt;br /&gt;
    //              - As a Disclaimer, this loops much more complicated than it is...&lt;br /&gt;
    //&lt;br /&gt;
    // Drexelized By: Peter Thai - [pwt23@drexel.edu]&lt;br /&gt;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    &lt;br /&gt;
    // This imports the libraries necessary for communicating with Roomba (namely RoomabComm)&lt;br /&gt;
    import roombacomm.*;&lt;br /&gt;
    import roombacomm.net.*;&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    //This stops Roomba and disconnects it from your computer.&lt;br /&gt;
        String roombacommPort = &amp;quot;COM3&amp;quot;; // &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;::::::::::::: ENTER YOUR ROOMBA PORT :::::::::::::&lt;br /&gt;
    //String roombacommPort = &amp;quot;/dev/cu.RooTooth-COM0-1&amp;quot;;&lt;br /&gt;
    boolean hwhandshake = false; &lt;br /&gt;
    RoombaCommSerial roombacomm = new RoombaCommSerial();&lt;br /&gt;
    roombacomm.waitForDSR = hwhandshake;&lt;br /&gt;
    &lt;br /&gt;
        &lt;br /&gt;
    // If Roomba fails to connect, it will print out an error and terminate the program &lt;br /&gt;
    if ( ! roombacomm.connect(roombacommPort) )&lt;br /&gt;
        {&lt;br /&gt;
            println(&amp;quot;Couldn't connect to &amp;quot;+roombacommPort);&lt;br /&gt;
            System.exit(1);  &lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    // Once Roomba is connected, it will perform the following actions to indicate it has connected&lt;br /&gt;
    println(&amp;quot;Roomba startup on port&amp;quot;+roombacommPort); // Prints out the Port on which Roomba is connected&lt;br /&gt;
    roombacomm.startup();&lt;br /&gt;
    roombacomm.control(); // Puts Roomba in &amp;quot;Safe Mode&amp;quot;&lt;br /&gt;
    roombacomm.playNote(72,50); // Plays a note&lt;br /&gt;
    roombacomm.pause(100); // Pauses Roomba while note is being played&lt;br /&gt;
    roombacomm.updateSensors(); // Updates the state of all sensors &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    // This is the main loop. It is executed continuously until the variable 'done' is set to true&lt;br /&gt;
    boolean done = false; // This instantiates the variable 'done' and sets it to false&lt;br /&gt;
    while (!done) &lt;br /&gt;
        {&lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
            // ::::::::::::: START CODE (Code goes between this thing and.... *look down*) :::::::::::::&lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
            roombacomm.goForward();&lt;br /&gt;
            roombacomm.pause(200);&lt;br /&gt;
            roombacomm.updateSensors();      &lt;br /&gt;
             if (roombacomm.bumpLeft())            &lt;br /&gt;
                        {                &lt;br /&gt;
                            roombacomm.spinRight(45); &lt;br /&gt;
                        }         &lt;br /&gt;
             else if (roombacomm.bumpRight())             &lt;br /&gt;
                        {                &lt;br /&gt;
                            roombacomm.spinLeft(45);                      &lt;br /&gt;
                        }        &lt;br /&gt;
                    roombacomm.updateSensors();    &lt;br /&gt;
    &lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
                // ::::::::::::: END CODE (Code goes between this thing and... *look up*) :::::::::::::&lt;br /&gt;
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
         &lt;br /&gt;
    //This stops Roomba and disconnects it from your computer.&lt;br /&gt;
    roombacomm.stop(); &lt;br /&gt;
    roombacomm.disconnect();&lt;/div&gt;</summary>
		<author><name>Pwt23</name></author>	</entry>

	</feed>