<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rescue Robotics</title>
	<atom:link href="http://www.rockalypse.org/blogs/rescue/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rockalypse.org/blogs/rescue</link>
	<description>A rescue robot research collaboration between Centenary and Allegheny Colleges</description>
	<lastBuildDate>Mon, 01 Aug 2011 16:02:39 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Loading and Reading in Files!</title>
		<link>http://www.rockalypse.org/blogs/rescue/2011/08/01/loading-and-reading-in-files/</link>
		<comments>http://www.rockalypse.org/blogs/rescue/2011/08/01/loading-and-reading-in-files/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 16:02:39 +0000</pubDate>
		<dc:creator>ecorapci</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rockalypse.org/blogs/rescue/?p=106</guid>
		<description><![CDATA[We now have a great way to create files regarding the Robot&#8217;s brain, along with loading files of previous brains created! We wanted to be able to store into text files the number of altControls a random brain used, the &#8230; <a href="http://www.rockalypse.org/blogs/rescue/2011/08/01/loading-and-reading-in-files/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>We now have a great way to <a href="http://www.roseindia.net/java/beginners/java-write-to-file.shtml">create files</a> regarding the Robot&#8217;s brain, along with <a href="http://www.javapractices.com/topic/TopicAction.do?Id=42">loading files</a> of previous brains created!</p>
<p>We wanted to be able to store into text files the number of altControls a random brain used, the number of processes the brain used, the constants that each Above or Below Threshold was using, and all the variables (the left turn, right turn, and amount of time), for each MotorControl each random brain used.</p>
<p>Now, there is a savetofile() process which allows us to write a file line by line including all of the above methods.  The <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/io/BufferedWriter.html">BufferedWriter()</a> and <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileWriter.html">FileWriter()</a> methods were called to create a new file for each individual random brain. This way we can keep track of what a robot did and run the robot again if we were happy with the brain it used.</p>
<p>In order to run the robot&#8217;s brain again, we needed to create a loadfromfile() process. This process takes in a file already created, and breaks it down line by line. The <a href="http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html">Scanner()</a> method was called in order to read in a file that is given. Again, like above, each line has a different meaning regarding the robots brain (such as the constants it used). This allows for an easy way to see what the robot&#8217;s brain created, along with running the brain again to see if it was a worthwhile brain!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rockalypse.org/blogs/rescue/2011/08/01/loading-and-reading-in-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crossover of virtual robots</title>
		<link>http://www.rockalypse.org/blogs/rescue/2011/07/31/crossover-of-virtual-robots/</link>
		<comments>http://www.rockalypse.org/blogs/rescue/2011/07/31/crossover-of-virtual-robots/#comments</comments>
		<pubDate>Sun, 31 Jul 2011 18:21:30 +0000</pubDate>
		<dc:creator>khardey</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rockalypse.org/blogs/rescue/?p=104</guid>
		<description><![CDATA[This week I focused on creating the evolutionary crossover method. A crossover method needs to take information from one parent robot, information from another parent robot, and swap that information. This mutates our robots without losing information which is what &#8230; <a href="http://www.rockalypse.org/blogs/rescue/2011/07/31/crossover-of-virtual-robots/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This week I focused on creating the evolutionary crossover method. A crossover method needs to take information from one parent robot, information from another parent robot, and swap that information. This mutates our robots without losing information which is what the regular mutation method does. The regular mutation method (changing constants, changing motor directions, adding information pathways, etc) destroys data whereas crossover moves data to a new robot. A different robot may be able to use the data from another in a better way. </p>
<p><span id="more-104"></span></p>
<p>The process of coding the crossover method was complicated. We decided to crossover our robots starting at choosing a sensor. For a chosen sensor, the robots would switch their information pathways attached to that sensor. I&#8217;ll be calling a connection between a sensor, threshold process, AltController process, MotorController process, and MotorFinal process a &#8216;branch&#8217;. This crossover implementation is much like two of our mutation options: adding and removing a random branch. In crossover, I needed to remove one or more branches (depending on how many branches are connected to the chosen sensor) from the two robots and add them to the opposite robot. </p>
<p>My first attempt at writing this method did not turn out so well. As I started writing, I realized I needed to worry about more and more channel connections and processes. The main problem was remembering to delete the old information signal channels from each process and add new channels that were created. Each test of the method would leave channels talking to empty space or process floating by themselves. Eventually, we were able to create a working method after writing some pseudo-code. Learning to write the pseudo-code first has become very handy. </p>
<p>Before the weekend, we were able to run one test of our new crossover method. <a href="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/crossovergraph.png"><img src="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/crossovergraph.png" alt="Virtual robot crossover experiment with 5 trials" title="Crossover Experiment 1" width="601" height="376" class="alignnone size-full wp-image-105" /></a><br />This graph shows the scores for 5 trials using a population size of 12 robots running for 20 generations (That&#8217;s 240 simulations). Trial 1 was able to get its score to get much lower (which is better) than the rest of the trials. This trial created robots which were able to navigate into the island room of the arena, a room which gives the robot a very good score boost because it&#8217;s a difficult room to access. So this trial started selecting robots that got into that room, however, as I watched the robots, they were never able to get out of the room. This may mean we need to change how we mutate the robots so they can learn to escape the room, or change the scoring metric.</p>
<p>All of the other scores in the trials fell as well, meaning all of the robots started doing better eventually. We need to run more experiments with crossover and mutation combined to find out what the best combination of methods and variables is.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rockalypse.org/blogs/rescue/2011/07/31/crossover-of-virtual-robots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smartest Robot Yet!!!!</title>
		<link>http://www.rockalypse.org/blogs/rescue/2011/07/27/smartest-robot-yet/</link>
		<comments>http://www.rockalypse.org/blogs/rescue/2011/07/27/smartest-robot-yet/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 16:26:31 +0000</pubDate>
		<dc:creator>ecorapci</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rockalypse.org/blogs/rescue/?p=100</guid>
		<description><![CDATA[After studying our results yesterday and reading a Graph Crossover Article to better our understanding of the process we are trying to make, we decided to calculate our minimum score&#8217;s a different way! Our new calculations consisted of taking the &#8230; <a href="http://www.rockalypse.org/blogs/rescue/2011/07/27/smartest-robot-yet/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>After studying our results yesterday and reading a <a href="http://alglobus.net/NASAwork/papers/JavaGenes2/JavaGenesPaper.html">Graph Crossover Article</a> to better our understanding of the process we are trying to make, we decided to calculate our minimum score&#8217;s a different way!</p>
<p>Our new calculations consisted of taking the minimum score over every robot generated so far.  For example, if we were looking at all twenty robots in each generation up to generation 5, we would take the single minimum score out of the 100 robots seen so far. With these new minimum calculations, we were able to produce the following graph:</p>
<p><a href="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/MutationRate5Minimum.png"><img class="aligncenter size-full wp-image-101" title="MutationRate5Minimum" src="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/MutationRate5Minimum.png" alt="" width="489" height="336" /></a>This was the graph we produced for a Mutation Rate of 5, having a population of 12 and 20 generations ran. The light blue line, labeled as WallBrain in the key, was our minimum guideline we were following. The unseen scores were produced by a hard-coded robot we new worked. The time alloted for each robot was one minute. After looking at the graph, we saw that for the fifth experiment ran with a Mutation Rate of 5, that there were some robots below the minimum guideline score! We were able to see that the lowest score produced out of all of our runs (even other mutation rates of 10, 15, and mutating only one thing at at time) was 0.77749997377396.</p>
<p>We traced this score back to see that it came from the fifth robot in generation eighteen. Then, we looked back and produced the following directed chart to see what our robots brain looked like!</p>
<p><a href="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/brain5g18.png"><img class="aligncenter size-full wp-image-102" title="brain5g18" src="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/brain5g18.png" alt="" width="968" height="883" /></a>This robots brain is very simple, but our smartest one yet! It covered the most amount of space in one minute. If there was an above threshold of 1.229, then the robot would slightly turn right. It appears that the robot bounced around our arena, successfully covering the most space we have seen yet!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rockalypse.org/blogs/rescue/2011/07/27/smartest-robot-yet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running Experiments</title>
		<link>http://www.rockalypse.org/blogs/rescue/2011/07/26/running-experiments/</link>
		<comments>http://www.rockalypse.org/blogs/rescue/2011/07/26/running-experiments/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 17:39:54 +0000</pubDate>
		<dc:creator>ecorapci</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rockalypse.org/blogs/rescue/?p=95</guid>
		<description><![CDATA[We have finally made it to the point of running multiple experiments after another for our robots! In order to get to this point, we added some important methods into our evolutionary algorithm. The steps we followed are: Initialize the &#8230; <a href="http://www.rockalypse.org/blogs/rescue/2011/07/26/running-experiments/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><span>We have finally made it to the point of running multiple experiments after another for our robots!</span></p>
<p><span>In order to get to this point, we added some important methods into our </span><a href="http://en.wikipedia.org/wiki/Evolutionary_algorithm"><span><span style="color: #ba39a7;">evolutionary algorithm</span></span></a><span>. The steps we followed are:</span></p>
<ol>
<li><span>Initialize the brains of the robots (giving them their random connections to channels)</span></li>
<li><span>Repeat the following steps until all generations have been formed:</span></li>
</ol>
<ul>
<li><span>Evaluate the robot to see how well it did. They are given a score based on our algorithm.</span></li>
<li><a href="http://en.wikipedia.org/wiki/Selection_(genetic_algorithm)"><span><span style="color: #ba38a5;">Select</span></span></a><span> the next set of robots to move onto the next population using our </span><a href="http://en.wikipedia.org/wiki/Tournament_selection"><span><span style="color: #ba36a7;">Tournament Selection</span></span></a><span> method.</span></li>
<li><a href="http://en.wikipedia.org/wiki/Mutation_(genetic_algorithm)"><span><span style="color: #bc36a9;">Mutate</span></span></a><span> the selected robots and add them to the next population created.</span></li>
</ul>
<div><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">We have updated our evaluation process to just take into consideration the amount of the arena the robot did not travel. Therefore, the robots get a score between 0 and 1 where 0 implies that the robot covered the whole arena and 1 means the robot did not move at all.</span></span></div>
<div>
<p><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">Currently, we are in the processes of testing out two different selection methods: Tournament Selection and </span></span></span><span style="color: #bc39ac;"><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;"><a href="http://www.geatbx.com/docu/algindex-02.html">Proportional Selection</a></span></span></span><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">. At the moment, we are thinking that Tournament Selection is the better of the two based on the score results we have seen, but tests are still being done.</span></span></span></p>
<p><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">When running our experiments, we have used a variation of </span></span></span><span style="color: #bc35aa;"><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;"><a href="http://en.wikipedia.org/wiki/Mutation_rate">mutation rates</a></span></span></span><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">. Starting out, we had mutation rates increasing by five, starting at 5 and moving up to a rate of 45. After collecting this data and making graphs, we saw that the best three mutation rates were 5, 10, and 15.</span></span></span></p>
</div>
<div><span class="Apple-style-span" style="line-height: 27px; font-size: 18px;"><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">Our current results and graphs are based on the mutation rates of 5, 10, 15, along with our WallBrain for the robot. The WallBrain is the method we have written that we know traverses the arena like it is suppose to. We are using the average score of the WallBrain as our guideline to see where all scores should be. The graph is as followed for the average score of our unseen method:</span></span></span></div>
<p>&nbsp;</p>
<div><a href="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/chart_1.png"><img class="aligncenter size-full wp-image-96" title="chart_1" src="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/chart_1.png" alt="" width="646" height="454" /></a><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">These experiments are all based on 20 generations of robots, each consisting of a population of 12 robots. The Tournament Selection was the process used. Looking at the different mutation rates, it appears that the mutation rate of 5 has done this best with these processes. This is because the graph has sloped down the most exponentially, along with has the lowest overall scores out of the graphs. The mutation rate of 10 did well too, however it is a bit rocky along the way down. We would like for it to be smoother as it is decreasing.</span></span></span></div>
<div><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;"><br />
</span></span> </span></div>
<div><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">Another graph made was based on the Minimum scores out of the unseen. They used the same mutation rates and the WallBrain again. It is as followed: </span></span></span></div>
<div><a href="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/chart_2.png"><img class="aligncenter size-full wp-image-97" title="chart_2" src="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/chart_2.png" alt="" width="653" height="451" /></a><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">Overall, the minimum scores were closer to our guideline of the WallBrain. Again, mutation rates 5 and 10 had the lowest scores. The graphs overall were a lot more rough compared to just the averages, but we are seeing that we can get some lower scores. </span></span></span></div>
<div><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;"><br />
</span></span> </span></div>
<div><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">As we are moving into the right direction and running more and more experiments, we are looking at mutation one part of the robot at the time, instead of multiple at a time. We are working o</span></span><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">n a </span></span></span></span><span style="color: #bc32ac;"><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;"><a href="http://www.obitko.com/tutorials/genetic-algorithms/crossover-mutation.php">crossover method</a> </span></span></span><span><span style="font-family: Georgia; font-size: medium;"><span class="Apple-style-span" style="font-size: 16px;">to apply in our algorithm.</span></span></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.rockalypse.org/blogs/rescue/2011/07/26/running-experiments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Summary and new brain</title>
		<link>http://www.rockalypse.org/blogs/rescue/2011/07/18/summary-and-new-brain/</link>
		<comments>http://www.rockalypse.org/blogs/rescue/2011/07/18/summary-and-new-brain/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 05:04:17 +0000</pubDate>
		<dc:creator>khardey</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rockalypse.org/blogs/rescue/?p=94</guid>
		<description><![CDATA[This blog post is a brief reminder of our project and a summary of all the work that has been completed this summer. If you would like to read the latest progress since the last post, please skip to the &#8230; <a href="http://www.rockalypse.org/blogs/rescue/2011/07/18/summary-and-new-brain/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This blog post is a brief reminder of our project and a summary of all the work that has been completed this summer. If you would like to read the latest progress since the last post, please skip to the section marked with “Recent Progress”. </p>
<p>Last school year Dr. Goadrich, Dr. Jadud, Molly Mattis, and I were able to build and program a robot to enter into the <a href="http://www.trincoll.edu/events/robot/default.asp">Trinity College Fire Fighting Home Robot Contest</a>. We used an occam-pi library called <a href="http://www.concurrency.cc/">Plumbing</a> to program the robot. Using a parallel programming language allows for processes to run concurrently and makes changing how the robot acts a much easier task.  Our robot was able to place 15th out of 41 contestants.  You can see the video <a href="http://www.youtube.com/watch?v=62vgs-zwNTE&#038;feature=related">here.</a><br />
<span id="more-94"></span><br />
While we were pleased with the results of our first run, our plans for the summer are to hopefully create a better candle search algorithm by introducing AI to evolve the robot brain controller. To do this we need to use a simulator which can run a virtual replication of our robot. We will program the simulator to produce robots for our genetic algorithm to evaluate. After evaluation, we will use crossover and mutation AI techniques to generate new robots which will hopefully be better than the last generation of robots. </p>
<p>At first we tried using <a href="http://sourceforge.net/projects/usarsim/">USARSim</a> as our simulator, but found it to be a bit overly complicated for our needs. For now, we’ve decided to use the <a href="http://simbad.sourceforge.net/index.php">Simbad 3D Robot Simulator</a>. As our project gets closer to completion we may switch back to the USARSim simulator. My project partner Eren Corapcioglu has been working with the simulator to produce all the room configuration options the contest has. The Simbad simulator uses Java as its language and Java3D to render the virtual world. </p>
<p>Because our simulator uses Java and our robot uses a parallel language, we needed to find a way to translate Java into a parallel language. For this, we use <a href="http://www.cs.kent.ac.uk/projects/ofa/jcsp/">JCSP</a>.  In the beginning I tried translating the occam-pi code into Java line for line. I was able to reproduce our physical robot which simply followed the right wall of the arena. We discovered that in order for our genetic programming to work, we would need to break up the processes into smaller parts. Each day we find different ways to produce the same processes but are easier to evolve. </p>
<p>Over the past few weeks we tried several different techniques in creating a program which will create random robots for our genetic algorithm to evaluate. As Eren mentioned in her <a href="http://www.rockalypse.org/blogs/rescue/2011/07/13/updated-graphs/">last post</a>, one attempt simply created processes and picked information channels randomly. This created rather unintelligent robots who listened to instructions from dead air. </p>
<p>&#8212;-Recent Progress &#8212;-</p>
<p>Instead, I expanded the brain processes into three main parts: Motor Control, Motor Final, and Alt Control. Alt Control generates a random number of Above and Below sensor threshold values and listens for a sensor to tell it if some threshold for either distance to an obstacle or light level has been reached. </p>
<p>Alt Control then tells a Motor Control &#8220;Hey, Motors, do something!&#8221; Each Motor Control has an object with values for which direction and speed each wheel should turn and how long the wheels should respond. The Motor Controls then feed into a Motor Final which is a simple alternative process. Motor Final simply keeps the robot from locking up if more than one Motor Control is trying to tell the motors to do different commands. The alternative switch selects which process gets to take place first. </p>
<p><a href="http://i56.tinypic.com/sl5saa.png"><img src="http://i54.tinypic.com/hvv6g4.png" style="float:left;padding-right:8px;"></a>The picture is the graphical representation of this brain configuration using <a href="http://www.graphviz.org/">Graphviz</a>. The numbers for each process represent:<br />
Above/Below Thresh: the sensor threshold level to send a signal.<br />
Motor: The left and right wheel motor values. Negative is backwards, positive forwards. And the time period for this movement.<br />
Node Edges: The channel number information and signals are flowing on.<br />
Score: A score generated using an equation based on the time the robot has been in the world (the simulation ends if the robot runs into a wall) and the odometer number.       </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rockalypse.org/blogs/rescue/2011/07/18/summary-and-new-brain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updated Graphs</title>
		<link>http://www.rockalypse.org/blogs/rescue/2011/07/13/updated-graphs/</link>
		<comments>http://www.rockalypse.org/blogs/rescue/2011/07/13/updated-graphs/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 18:13:37 +0000</pubDate>
		<dc:creator>ecorapci</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rockalypse.org/blogs/rescue/?p=88</guid>
		<description><![CDATA[Yesterday (7/12/2011) we had used the DOT language and graphviz to create a simple directed graph of one of our random brain&#8217;s. Today, we have updated these graphs. This first graph shown below represents our basic working brain of the robot. &#8230; <a href="http://www.rockalypse.org/blogs/rescue/2011/07/13/updated-graphs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Yesterday (7/12/2011) we had used the DOT language and <a href="http://www.graphviz.org/">graphviz</a> to create a simple directed graph of one of our random brain&#8217;s.</p>
<p>Today, we have updated these graphs. This first graph shown below represents our basic working brain of the robot. This brain allows the robot to walk around each room like it&#8217;s suppose to, but the code itself is hardcoded.</p>
<p style="text-align: left;"><a href="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/originalbraingraph.png"><img class="aligncenter size-large wp-image-89" title="originalbraingraph" src="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/originalbraingraph-1024x385.png" alt="" width="832" height="312" /></a>This next graph was created with one of our random brain&#8217;s that we tested out. Here our code was not hard coded; it was assigned random sensors and thresholds to venture through. This one was one of our more interesting random brain graphs.</p>
<p style="text-align: left;"><a href="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/brain5g0.png"><img class="aligncenter size-full wp-image-90" title="brain5g0" src="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/brain5g0.png" alt="" width="820" height="741" /></a>The NOWHERE portion of this graph represents when a channel does not have an input or an output. On our &#8220;normal brain&#8221; you can see that this NOWHERE option is not visible. This is because when the brain works correctly all of the channels take in an input and an receive at least one output.</p>
<p style="text-align: left;">Our next task is to make our random brains functional so there is no longer a NOWHERE option for these random brains.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rockalypse.org/blogs/rescue/2011/07/13/updated-graphs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning occam-pi and using Dot.</title>
		<link>http://www.rockalypse.org/blogs/rescue/2011/07/12/learning-occam-pi-and-using-dot/</link>
		<comments>http://www.rockalypse.org/blogs/rescue/2011/07/12/learning-occam-pi-and-using-dot/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 01:38:28 +0000</pubDate>
		<dc:creator>ecorapci</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rockalypse.org/blogs/rescue/?p=85</guid>
		<description><![CDATA[While researching this summer I have been extending my knowledge on the parallel language in java, which has led into learning about the occam-pi language. This is a parallel language that allows programs to in a sense multi-task; they can &#8230; <a href="http://www.rockalypse.org/blogs/rescue/2011/07/12/learning-occam-pi-and-using-dot/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While researching this summer I have been extending my knowledge on the <a href="http://en.wikipedia.org/wiki/Parallel_programming_model">parallel language</a> in java, which has led into learning about the <a href="http://en.wikipedia.org/wiki/Parallel_programming_model">occam-pi language</a>. This is a parallel language that allows programs to in a sense multi-task; they can preform unrelated tasks at the same time.</p>
<p>Several <a href="http://christian.lyderjacobsen.com/publications/index">papers</a> have been written and published discussing different teachers and students use with occam-pi and how useful they found it. One that I found helpful to my understanding about occam-pi and it&#8217;s specific use with creating robots was the <a href="http://christian.lyderjacobsen.com/publications/pdfs/safe-parallelism-for-robotic-control.pdf">Safe Parallelism for Robotic Control</a>. The paper discusses the building of the students&#8217; and professors working together to build a robot that is controlled by the occam langue. It breaks down what a robot might need to do to execute a command and how the occam langue helps the robot run many tasks at a time. It gave some basic example codes which made the paper easy to understand.</p>
<p style="text-align: center;">Also, as we have been working these last few weeks, we have made progress towards randomize our robots brain and the channels it receives as inputs and what they output. Today, we were able to produce a graph using the <a href="http://en.wikipedia.org/wiki/DOT_language">DOT language</a> to physically see where the connections have been made with our random brains. One graph example is:<a href="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/brain0g0.png"><img class="aligncenter size-medium wp-image-87" title="brain0g0" src="http://www.rockalypse.org/blogs/rescue/wp-content/uploads/2011/07/brain0g0-300x39.png" alt="" width="300" height="39" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rockalypse.org/blogs/rescue/2011/07/12/learning-occam-pi-and-using-dot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Light attenuation in our bonding boxes.</title>
		<link>http://www.rockalypse.org/blogs/rescue/2011/07/07/light-attenuation-in-our-bonding-boxes/</link>
		<comments>http://www.rockalypse.org/blogs/rescue/2011/07/07/light-attenuation-in-our-bonding-boxes/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 16:15:07 +0000</pubDate>
		<dc:creator>ecorapci</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rockalypse.org/blogs/rescue/?p=82</guid>
		<description><![CDATA[As of Wednesday(07/06/2011) we had our simulator working to where we spit out a score for the robot on how well &#8220;it did&#8221;. The score keeps track of the Lifetime of the robot (how long it was moving around in &#8230; <a href="http://www.rockalypse.org/blogs/rescue/2011/07/07/light-attenuation-in-our-bonding-boxes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>As of Wednesday(07/06/2011) we had our simulator working to where we spit out a score for the robot on how well &#8220;it did&#8221;. The score keeps track of the Lifetime of the robot (how long it was moving around in the world), along with the Odometer (the distance travelled). With this score, we are able to tell if the robot crashed into a wall, spotted the light, or if it ran out of time. If the robot either ran out of time (it&#8217;s allotted five minutes were up) or crashed into a wall, the score would not take into account the distance travelled and therefore have a lower score. If it acknowledged that the light was there, the score then takes into account the distance travelled and the Lifetime of the robot.</p>
<p>Our goal was to find equations that allowed us to minimize both the Lifetime of the robot and the Odometer of the robot. We did this by using to simple equations which then gave us the value for both the distance and time of the robot.</p>
<p>During these trials, we ran into two problems: the first, if the robot was located in the negative x-axis of the world, and &#8220;collided&#8221; into a wall, instead of colliding all the way through, the robot would bounce of, and then move towards the way again. It kept repeating this pattern until we stopped the program on our own. After an hour of debugging, we found that this was due to our code since we had turned on the setUsePhysics(true) method (part of the environment description class). This use of physics was telling the robot to bounce of the wall.</p>
<p>Our second problem was the light was not set to a bright enough light, which led to the robot not being able to sense it was there. We also saw that in different rooms, the <a href="http://en.wikipedia.org/wiki/Attenuation">attenuation of the light</a> was different depending on the size of the room and the location of the wall from the light. We looked into the <a href="http://download.oracle.com/docs/cd/E17802_01/j2se/javase/technologies/desktop/java3d/forDevelopers/J3D_1_3_API/j3dapi/javax/media/j3d/PointLight.html">PointLight</a> class to try to understand why this was happening. It reassured us that the brightness of the light depended on where the walls were located with respect to the light. The PointLight class has a method called setAttenuation(), which brings in three constants: the light&#8217;s constant attenuation, the light&#8217;s linear attenuation, and the light&#8217;s quadratic attenuation. We further looked into these constants and found a relative equation which calculates the <a href="http://imdoingitwrong.wordpress.com/2011/01/31/light-attenuation/">lights attenuation</a>. This has helped us to better the brightness of our light in all four rooms.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rockalypse.org/blogs/rescue/2011/07/07/light-attenuation-in-our-bonding-boxes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Occam-pi to Java</title>
		<link>http://www.rockalypse.org/blogs/rescue/2011/07/07/occam-pi-to-java/</link>
		<comments>http://www.rockalypse.org/blogs/rescue/2011/07/07/occam-pi-to-java/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 14:16:26 +0000</pubDate>
		<dc:creator>khardey</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rockalypse.org/blogs/rescue/?p=81</guid>
		<description><![CDATA[Before we can start evolving new &#8216;brains&#8217; for our robot, we need to translate our occam/Plumbing code into Java using JCSP. By using JCSP we are able to create a replica of our robot in the Simbad simulator. The first &#8230; <a href="http://www.rockalypse.org/blogs/rescue/2011/07/07/occam-pi-to-java/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Before we can start evolving new &#8216;brains&#8217; for our robot, we need to translate our occam/Plumbing code into Java using <a href="http://www.cs.kent.ac.uk/projects/ofa/jcsp/">JCSP</a>. By using JCSP we are able to create a replica of our robot in the Simbad simulator. The first step we needed to take was to make an outline the occam-pi code to make translation easier. </p>
<p><a href="http://i53.tinypic.com/28wigk6.png" style="float:left;"><img src="http://i51.tinypic.com/29p2ogm.png" /></a></p>
<p>I created this image using <a href="http://www.thinkbuzan.com/us/">iMindMap</a>. The map shows the channel and signal connections between the different processes. Our Java code will not be completely the same &#8211; our motor control will be different in the virtual world, for example. </p>
<p>So far, I have been able to translate the flame.detected, above and below threshold, and much of the brain components. Dr. Goadrich helped with this process by creating a version of the adc.get.reading process so that both the light sensors and range sensors can read from above and below threshold. Our robot now avoids walls (sort of) while looking for the candle in parallel. Now I need to translate the process which makes the robot follow the right wall.        </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rockalypse.org/blogs/rescue/2011/07/07/occam-pi-to-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding Bounding Boxes</title>
		<link>http://www.rockalypse.org/blogs/rescue/2011/07/05/adding-bounding-boxes/</link>
		<comments>http://www.rockalypse.org/blogs/rescue/2011/07/05/adding-bounding-boxes/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 04:19:54 +0000</pubDate>
		<dc:creator>ecorapci</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rockalypse.org/blogs/rescue/?p=78</guid>
		<description><![CDATA[As am I getting back into the swing of writing code in java once again, I am expanding my coding skills by adding bounding boxes around all of the possible lights in each room. At first, we wanted to create &#8230; <a href="http://www.rockalypse.org/blogs/rescue/2011/07/05/adding-bounding-boxes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>As am I getting back into the swing of writing code in java once again, I am expanding my coding skills by adding bounding boxes around all of the possible lights in each room.</p>
<p>At first, we wanted to create <a href="http://en.wikipedia.org/wiki/Polytope">bounding polytopes</a> again. The problem we found with using the <a href="http://download.java.net/media/java3d/javadoc/1.3.2/javax/media/j3d/BoundingPolytope.html">BoundingPolytope function</a> in java is that all the regions of the polytope have to be convex. This would have worked for some of the rooms, but then some of the regions would have not been convex if we included all possible areas outside of the room where our robot could potentially notice light coming from.</p>
<p>Once understanding a BoundingPolytope would not work, we then decided to just create a bounding box around the rooms themselves. This was decided because Kathryn pointed out with all the overhead lights in the arena, it would be almost impossible for the sensors we are using on the robot to detect light anywhere outside of the room.</p>
<p>With that said, I hard coded a file with all the possible light locations: two in each room; which did include all possibilities for the lights when one of the four rooms was flipped. These next two links will give you a visual on the flipped rooms:</p>
<p><img class="aligncenter" title="Version of Room" src="http://www.trincoll.edu/events/robot/Rules/Rules%202011/Rules_2011-Final-3-html/Rules_2011-Final-33x.png  " alt="" width="330" height="346" /></p>
<p>&nbsp;</p>
<p style="text-align: center;"><img class="aligncenter" title="Version two of Room" src="http://www.trincoll.edu/events/robot/Rules/Rules%202011/Rules_2011-Final-3-html/Rules_2011-Final-35x.png" alt="" width="330" height="341" /></p>
<p>After hardcoding the lights, I was able to create a general code which opened the file and read the lines. The code broke up the numbers in the line in order to read the vector which contained the light location. Also, it retrieved the location of the smaller and larger bounding boxes which are needed for the code. Taking these three pieces, the bounding boxes were created.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rockalypse.org/blogs/rescue/2011/07/05/adding-bounding-boxes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
