<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7028146233533395417</id><updated>2012-02-22T15:54:58.230Z</updated><category term='lpucks'/><category term='player/stage'/><category term='meta'/><category term='cross-compilers'/><category term='technology'/><category term='york doctoral symposium'/><category term='installation'/><category term='research'/><category term='trips'/><category term='history'/><category term='extension board'/><category term='epucks'/><category term='brl'/><category term='sample rate'/><category term='ubuntu'/><category term='microphones'/><category term='boid project'/><category term='aliasing'/><category term='conferences'/><category term='hardware'/><category term='papers'/><category term='evolution'/><category term='sampling'/><category term='manual'/><title type='text'>Adventures in Robotics</title><subtitle type='html'>The ramblings and discoveries of a student of robotics.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-1294387021446930946</id><published>2011-12-13T09:54:00.002Z</published><updated>2011-12-13T10:10:23.912Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Installing Player/Stage in Ubuntu 11.10 (Oneiric Ocelot)</title><content type='html'>This entry is my &lt;a href="http://yorkroboticist.blogspot.com/2011/10/installing-playerstage-in-ubuntu-natty.html" target="_blank"&gt;guide to installing Player/Stage on Ubuntu 11.04&lt;/a&gt; updated for the next version of Ubuntu &lt;a href="http://yorkroboticist.blogspot.com/2011/12/upgrading-to-ubuntu-1110-with.html" target="_blank"&gt;following what I learnt here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have any problems or questions that aren't addressed here then I recommend you email the &lt;a href="http://sourceforge.net/mail/?group_id=42445"&gt;playerstage users mailing list&lt;/a&gt;. &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;These instructions are for Player 3.0.2 and Stage 4.0.0 which are the most recent  stable versions at the time of writing this guide.&lt;br /&gt;It  helps to have a computer which you have sudo rights to. If the computer  is networked and you can't install stuff on it then ask the network  administrator to install playerstage for you, alternatively you can  install Player/Stage into your home director, this is also described  below. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Setup &lt;/h3&gt;&lt;ol&gt;&lt;li&gt;First download Player and Stage.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/playerstage/files/Player/"&gt;Player&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/rtv/Stage/downloads"&gt;Stage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;extract the tar.gz files. Right click on the icon of the thing you just downloaded and select "extract here". &lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Bfsp-nUDnTo/ToGj_qoIk4I/AAAAAAAAAHE/DlpChUacu1s/s1600/Install-playerstage-extracting-tar.gz.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="203" src="http://3.bp.blogspot.com/-Bfsp-nUDnTo/ToGj_qoIk4I/AAAAAAAAAHE/DlpChUacu1s/s320/Install-playerstage-extracting-tar.gz.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Installing Dependencies&lt;/h3&gt;&lt;br /&gt;Player/Stage has a lot of dependencies, but they can be installed with Ubuntu software centre reasonably easily.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;To  open Ubuntu software centre (if you don't know how) click the ubuntu  logo in the very top left of the screen and start typing ubuntu. It  should come up as one of the options.&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-8JKrXLIAacs/TucVsVBWO1I/AAAAAAAAAIY/OwXjcnLQ9as/s1600/openingUSC.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="79" src="http://3.bp.blogspot.com/-8JKrXLIAacs/TucVsVBWO1I/AAAAAAAAAIY/OwXjcnLQ9as/s320/openingUSC.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;The following dependencies need to be installed:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;pkg-config&lt;/li&gt;&lt;li&gt;cmake &lt;/li&gt;&lt;li&gt;FLTK 1.1.x &lt;/li&gt;&lt;li&gt;OpenGL&lt;/li&gt;&lt;li&gt;libpng&lt;/li&gt;&lt;li&gt;ltdl (Libtool)&lt;/li&gt;&lt;li&gt;boost threads&lt;/li&gt;&lt;li&gt;boost signals&lt;/li&gt;&lt;li&gt;STL Runtime libraries&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;In the top right of the ubuntu software centre there's a search bar.  Start typing pkg-config in, that should give you the pkg-config  installer. If it's not already installed, then click install.&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/--f96IhdEbUg/TucXizlSUgI/AAAAAAAAAIk/_8hoxxjqMRg/s1600/pkg-config.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="http://3.bp.blogspot.com/--f96IhdEbUg/TucXizlSUgI/AAAAAAAAAIk/_8hoxxjqMRg/s320/pkg-config.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Now type cmake and install the cmake package.&lt;/li&gt;&lt;li&gt;To  install FLTK type libfltk into the search bar.&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ORc6jqdmyB8/TucZ4PjSMVI/AAAAAAAAAI0/pyrtY07CIKE/s1600/libfltk.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="http://1.bp.blogspot.com/-ORc6jqdmyB8/TucZ4PjSMVI/AAAAAAAAAI0/pyrtY07CIKE/s320/libfltk.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Click on and install from the list of options:  &lt;br /&gt;&lt;ul&gt;&lt;li&gt; Fast Light Toolkit - shared libraries, libfltk1.1 &lt;/li&gt;&lt;li&gt; Fast Light Toolkit - development files, libfltk1.1-dev&amp;nbsp;&lt;/li&gt;&lt;li&gt;IMPORTANT: there will be libfltk1.3-dev in the list of packages, &lt;b&gt;but do not install it&lt;/b&gt;. Using the most recent library causes Stage 4.0.0 to give compile errors. See &lt;a href="http://yorkroboticist.blogspot.com/2011/12/upgrading-to-ubuntu-1110-with.html" target="_blank"&gt;my previous ubuntu 11.10 entry&lt;/a&gt; for details.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Type freeglut into the search bar and install from the list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;OpenGL Utility Toolkit - freeglut3&lt;/li&gt;&lt;li&gt;OpenGL Utility Toolkit development files, freeglut3-dev  &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Type libpng into the search bar and install the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; PNG Library Runtime, libpng12-0 (or whatever is the latest version number)&lt;/li&gt;&lt;li&gt; PNG Library Development, libpng12-dev    &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Type libtool into the search bar. What you need won't be shown, but if you click "show technical items" in the bottom left (see image) it will give you the options you need. &lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-6Le8FY1cdDs/TuccO9KkBKI/AAAAAAAAAJE/_gursXq7nOY/s1600/libtool-tech-items.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" src="http://2.bp.blogspot.com/-6Le8FY1cdDs/TuccO9KkBKI/AAAAAAAAAJE/_gursXq7nOY/s320/libtool-tech-items.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Install the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Generic Library support script, libtool &lt;/li&gt;&lt;li&gt; A system independent dlopen wrapper for GNU libtool, libltdl7&lt;/li&gt;&lt;li&gt; A system independent dlopen wrapper for GNU libtool, libltdl-dev    &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Type boost thread into the search bar and install the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Portable C++ multi-threading (default version), libboost-thread-dev&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Type boost signals into the search bar and install the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Managed signals and slots library for C++ (default version), libboost-signals-dev&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Type libdb5 into the search bar and install the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Berkeley v5.1 Database Libraries [stl runtime], libdb5.1-stl&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-KlSf3KomUYw/TucbjJSAiOI/AAAAAAAAAI8/CRFFCjpJRZc/s1600/stl-library.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://2.bp.blogspot.com/-KlSf3KomUYw/TucbjJSAiOI/AAAAAAAAAI8/CRFFCjpJRZc/s320/stl-library.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Installing Player&lt;/h3&gt;&lt;br /&gt;This should work first time, even on a fresh install of Ubuntu.&lt;br /&gt;Open  a terminal and change directory (cd command) to the folder you  extracted player into. This will probably be called something like  "player-3.02" or whatever version you downloaded. Then enter the  following commands:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;mkdir build&lt;/li&gt;&lt;li&gt;cd build&lt;/li&gt;&lt;li&gt;cmake ..&lt;/li&gt;&lt;li&gt;sudo make install&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;But I don't have sudo!&lt;/h4&gt;Well then you'll have to install  it into your home directory somewhere. This is a pretty similar process,  you just have to change the install prefix.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;mkdir build&lt;/li&gt;&lt;li&gt;cd build&lt;/li&gt;&lt;li&gt;ccmake ..&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Note that's '''ccmake''' not cmake&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;in the terminal scroll menu thing that just opened scroll down  to CMAKE_INSTALL_PREFIX. If nothing is listed press c, things should  appear.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;whilst it is selected press enter to edit the option and then change it to the folder you want player installed into. &lt;/li&gt;&lt;li&gt;press enter to confirm edit&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;press c to configure the settings &lt;/li&gt;&lt;li&gt;if the option appears, press g to generate the make files. If the option doesn't appear press c again until it does.&lt;/li&gt;&lt;li&gt;In the terminal now type make install&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;Installing Stage - Library Dependencies &lt;/h3&gt;&lt;ol&gt;&lt;li&gt;First make sure  that pkg-config can find player, otherwise there may be all sorts of  troubles later when you try and use Stage. In a terminal type:&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;pkg-config --modversion playercore&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;If it gives you a version number it's properly installed.  Otherwise, in your home folder make or edit the file called .bashrc, (it  probably already exists). If you press ctrl+h while looking at the  folder in nautilus it will show up if it's already there. At the end of  this file write the following line &lt;b&gt;IF YOU'RE USING A 64-BIT INSTALL&lt;/b&gt;:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;export PKG_CONFIG_PATH+=/usr/local/lib64/pkgconfig&lt;/li&gt;&lt;/ul&gt;Write the following line &lt;b&gt;IF YOU'RE USING A 32-BIT INSTALL&lt;/b&gt;: &lt;ul&gt;&lt;li&gt;export PKG_CONFIG_PATH+=/usr/local/lib/pkgconfig&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Test this again in a &lt;b&gt;new&lt;/b&gt; terminal with &lt;br /&gt;&lt;ul&gt;&lt;li&gt; pkg-config --modversion playercore&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;Installing Stage - Updating a Compilation Script&lt;/h3&gt;Ubuntu 11.10 links differently to older versions of Ubuntu, and the Stage compilation code needs updating before it can be run.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In your install directory open libstage/CMakeLists.txt in your favourite text editor.&lt;/li&gt;&lt;li&gt;Completely delete the contents.&lt;/li&gt;&lt;li&gt;Go to &lt;a href="http://pastebin.com/y2chM8fz"&gt;http://pastebin.com/y2chM8fz&lt;/a&gt; and copy it into the CMakeLists.txt you have open.&lt;/li&gt;&lt;li&gt;Save the file.&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;Installing Stage&lt;/h3&gt;&lt;br /&gt;In a &lt;b&gt;new&lt;/b&gt; terminal navigate to the stage folder you extracted  earlier. this is probably called something like "Stage-4.0.0-src" or  whatever Stage version you installed. In a terminal type the following  commands:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; mkdir build&lt;/li&gt;&lt;li&gt;cd build&lt;/li&gt;&lt;li&gt; cmake ..&lt;/li&gt;&lt;li&gt; sudo make install&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h4&gt;But I don't have sudo!&lt;/h4&gt;The install is just the same as for Player if you need to install Stage in your home folder or somewhere.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Follow the steps above for updating the libraries and compilation script or this won't work.&lt;/li&gt;&lt;li&gt;Then in a terminal navigate to the Stage source code folder. this is probably  called something like "Stage-4.0.0-src" or  whatever Stage version you installed. In a terminal type the following commands:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;mkdir build&lt;/li&gt;&lt;li&gt;cd build&lt;/li&gt;&lt;li&gt;ccmake ..&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;in the terminal menu thing that just opened scroll down to  CMAKE_INSTALL_PREFIX. If nothing is listed press c, things should  appear.&lt;/li&gt;&lt;li&gt;whilst it is selected press enter to edit the option and then change it to the folder you want player installed into.&lt;/li&gt;&lt;li&gt;press enter to confirm edit&lt;/li&gt;&lt;li&gt;press c to configure the settings&lt;/li&gt;&lt;li&gt;if the option appears, press g to generate the make files. If the option doesn't appear press c again until it does.&lt;/li&gt;&lt;li&gt;In the terminal now type:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;make install&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Testing it Works&lt;/h3&gt;&lt;br /&gt;The stage source code has some handy code that should work if you've got everything installed. &lt;b&gt;To test your install &lt;/b&gt;in  your terminal go to the /worlds directory in the Stage source code folder.  Type player simple.cfg into the terminal. In the unlikely event that  that works you've successfully installed Player/Stage!  &lt;br /&gt;&lt;br /&gt;I got the following error: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;player:  error while loading shared libraries: libplayerdrivers.so.3.0: cannot  open shared object file: No such file or directory.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To fix this open up your .bashrc file and enter the following line &lt;b&gt;IF YOU'RE USING A 64-BIT INSTALL&lt;/b&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;export LD_LIBRARY_PATH+=/usr/local/lib64&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Write the following line &lt;b&gt;IF YOU'RE USING A 32-BIT INSTALL&lt;/b&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;export LD_LIBRARY_PATH+=/usr/local/lib&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you changed CMAKE_INSTALL_PREFIX whilst installing player and or stage then do this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;export LD_LIBRARY_PATH+="whatever install prefix you made"&lt;/li&gt;&lt;/ul&gt;Now retest your install IN A NEW TERMINAL. I got the following error:&lt;br /&gt;Registering driver Player v.3.0.2&lt;br /&gt;* Part of the Player/Stage/Gazebo Project [http://playerstage.sourceforge.net]. &lt;br /&gt;* Copyright (C) 2000 - 2009 Brian Gerkey, Richard Vaughan, Andrew Howard, &lt;br /&gt;* Nate Koenig, and contributors. Released under the GNU General Public License.&lt;br /&gt;* Player comes with ABSOLUTELY NO WARRANTY.&lt;br /&gt;This is free software, and you are welcome to redistribute it under certain conditions; see COPYING for details.&lt;br /&gt;&lt;br /&gt;error : Failed to load plugin stageplugin. &lt;br /&gt;error : libtool reports error: file not found&lt;br /&gt;error : plugin search path: /home/robotlab/playerstage/Stage-4.0.0-src/worlds:.:/usr/local/lib64/&lt;br /&gt;error : failed to load plugin: stageplugin error : failed to parse config file simple.cfg driver blocks&lt;br /&gt;&lt;br /&gt;This is caused by the computer not being able to find Stage. Back to the .bashrc....&lt;br /&gt;&lt;ul&gt;&lt;li&gt;change export LD_LIBRARY_PATH+=/usr/local/lib64 to...&lt;/li&gt;&lt;li&gt;export LD_LIBRARY_PATH+=/usr/local/lib64:/usr/local/lib&lt;/li&gt;&lt;/ul&gt;HOWEVER. This is the error that Stage will give if you didn't set up the compilation script properly before installing. If you Googled your error and came to this page you'll need to completely uninstall and delete Stage and the stage source code. Re-download it and follow all the Stage installation instructions above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-1294387021446930946?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/1294387021446930946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2011/12/installing-playerstage-in-ubuntu-1110.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/1294387021446930946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/1294387021446930946'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2011/12/installing-playerstage-in-ubuntu-1110.html' title='Installing Player/Stage in Ubuntu 11.10 (Oneiric Ocelot)'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Bfsp-nUDnTo/ToGj_qoIk4I/AAAAAAAAAHE/DlpChUacu1s/s72-c/Install-playerstage-extracting-tar.gz.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-918891880680976866</id><published>2011-12-02T16:14:00.002Z</published><updated>2011-12-13T10:11:29.957Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Upgrading to Ubuntu 11.10 with player/stage</title><content type='html'>Yesterday I thought it would be a good idea to upgrade my laptop to 64-bit Ubuntu 11.10 (Oneiric Ocelot), this turned out to be a TERRIBLE idea since I've now spent the last 7 hours trying to reinstall Player/Stage. JOY.&lt;br /&gt;&lt;br /&gt;In this post I'll quickly go over what I did that was different to the install for Ubuntu 11.04 (a comparative breeze). &lt;a href="http://yorkroboticist.blogspot.com/2011/12/installing-playerstage-in-ubuntu-1110.html" target="_blank"&gt;A more user-friendly guide to installing Player/Stage can be found here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Let's get to it!&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;This time round I installed Player version 3.0.2 and Stage version 4.0.0.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/playerstage/files/Player/3.0.2/player-3.0.2.tar.gz/download" target="_blank"&gt;Player&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/downloads/rtv/Stage/Stage-4.0.0-src.tar.gz" target="_blank"&gt;Stage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Dependencies&lt;/h3&gt;The list of dependencies is mostly the same. Download and install these (using ubuntu software centre or aptitude or whatever you like best):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;pkg-config&lt;/li&gt;&lt;li&gt;cmake&lt;/li&gt;&lt;li&gt; Fast Light Toolkit - shared libraries, libfltk1.1 &lt;/li&gt;&lt;li&gt; Fast Light Toolkit - development files, libfltk1.1-dev&lt;/li&gt;&lt;li&gt;OpenGL Utility Toolkit - freeglut3&lt;/li&gt;&lt;li&gt;OpenGL Utility Toolkit development files, freeglut3-dev  &lt;/li&gt;&lt;li&gt; PNG Library Runtime, libpng12-0 (or whatever is the latest version number)&lt;/li&gt;&lt;li&gt; PNG Library Development, libpng12-dev    &lt;/li&gt;&lt;li&gt; Generic Library support script, libtool &lt;/li&gt;&lt;li&gt; A system independent dlopen wrapper for GNU libtool, libltdl7&lt;/li&gt;&lt;li&gt; A system independent dlopen wrapper for GNU libtool, libltdl-dev    &lt;/li&gt;&lt;li&gt; Generic Library support script, libtool &lt;/li&gt;&lt;/ul&gt;New dependencies for 11.10:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Portable C++ Multithreading (default version), libboost-thread-dev&lt;/li&gt;&lt;li&gt; Managed signals and slots library for C++ (default version), libboost-signals-dev&lt;/li&gt;&lt;li&gt; Berkeley v5.1 Database Libraries [stl runtime], libdb5.1-stl&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Some dependency troubles&lt;/h3&gt;I found that if I installed the latest fltk development package (libfltk1.3-dev) it gave the following compile error in Stage:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[ 41%] Building CXX object libstage/CMakeFiles/stage.dir/region.o&lt;br /&gt;/home/jenny/player/source/Stage-4.0.0-src/libstage/region.cc:10:1: error: reference to ‘Region’ is ambiguous&lt;br /&gt;/usr/include/X11/Xutil.h:265:26: error: candidates are: typedef struct _XRegion* Region&lt;br /&gt;/home/jenny/player/source/Stage-4.0.0-src/libstage/region.hh:54:9: error:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Stg::Region&lt;br /&gt;/home/jenny/player/source/Stage-4.0.0-src/libstage/region.cc:10:1: error: ‘Region’ does not name a type&lt;br /&gt;/home/jenny/player/source/Stage-4.0.0-src/libstage/region.cc:17:1: error: reference to ‘Region’ is ambiguous&lt;br /&gt;/usr/include/X11/Xutil.h:265:26: error: candidates are: typedef struct _XRegion* Region&lt;br /&gt;/home/jenny/player/source/Stage-4.0.0-src/libstage/region.hh:54:9: error: class Stg::Region&lt;br /&gt;/home/jenny/player/source/Stage-4.0.0-src/libstage/region.cc:17:1: error: ‘Region’ does not name a type&lt;br /&gt;make[2]: *** [libstage/CMakeFiles/stage.dir/region.o] Error 1&lt;br /&gt;make[1]: *** [libstage/CMakeFiles/stage.dir/all] Error 2&lt;br /&gt;make: *** [all] Error 2&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If I used libfltk1.1-dev instead this problem doesn't happen.&lt;br /&gt;&lt;h3&gt;Installation&lt;/h3&gt;Installing Player was the same as for Ubuntu 11.04. See: &lt;a href="http://yorkroboticist.blogspot.com/2011/10/installing-playerstage-in-ubuntu-natty.html" target="_blank"&gt;http://yorkroboticist.blogspot.com/2011/10/installing-playerstage-in-ubuntu-natty.html&lt;/a&gt;&lt;br /&gt;Also, set up pkg-config as described in steps 1 to 3 of the 11.04&amp;nbsp; instructions.&lt;br /&gt;&lt;br /&gt;Installing Stage 4.0.0 was DIFFICULT. The linking stage of C compiling seems to be done slightly differently in this version of Ubuntu, which meant that Stage's compile scripts don't fully work. So what you need to do is unpack the Stage download, then in a text editor open the libstage/CMakeLists.txt file. Completely replace the contents of the file with this:&lt;br /&gt;&lt;a href="http://pastebin.com/y2chM8fz" target="_blank"&gt;new CMakeLists.txt&lt;/a&gt;&lt;br /&gt;Now that's done you can configure and install Stage as described in point 4 of &lt;a href="http://yorkroboticist.blogspot.com/2011/10/installing-playerstage-in-ubuntu-natty.html" target="_blank"&gt;the natty instructions&lt;/a&gt; onwards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-918891880680976866?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/918891880680976866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2011/12/upgrading-to-ubuntu-1110-with.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/918891880680976866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/918891880680976866'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2011/12/upgrading-to-ubuntu-1110-with.html' title='Upgrading to Ubuntu 11.10 with player/stage'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-7155235075660486912</id><published>2011-10-03T10:14:00.005+01:00</published><updated>2011-12-13T10:12:32.280Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Installing Player/Stage in Ubuntu (Natty Narwhal)</title><content type='html'>A few months ago I wrote a guide to installing Player/Stage on a clean Natty Narwhal Ubuntu install for the robot lab I work at. This was on a protected wiki, but I think maybe it'd also be beneficial to the world in general, so I'll guide you through the installation process (with pictures!) in this blog entry.&lt;br /&gt;&lt;br /&gt;I'm pretty sure this guide will work for any version of Ubuntu that has Ubuntu Software Centre on it, but I've only tested these instructions for Natty. If you followed these instructions to install Player/Stage on a non-Natty version of Ubuntu do leave a comment so that others can know whether it works.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yorkroboticist.blogspot.com/2011/12/installing-playerstage-in-ubuntu-1110.html" target="_blank"&gt;A newer version of these instructions for Ubuntu 11.10 can be found here.&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;If you have any problems or questions that aren't addressed here then I recommend you email the &lt;a href="http://sourceforge.net/mail/?group_id=42445"&gt;playerstage users mailing list&lt;/a&gt;. &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;These instructions are for Player 3.0.2 and Stage 4.0.1 which are the most recent  versions at the time of writing this guide.&lt;br /&gt;It helps to have a computer which you have sudo rights to. If the computer is networked and you can't install stuff on it then ask the network administrator to install playerstage for you, alternatively you can install Player/Stage into your home director, this is also described below. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Setup&lt;/h3&gt;&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;First download Player and Stage.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/playerstage/files/Player/"&gt;Player&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/rtv/Stage/downloads"&gt;Stage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;extract the tar.gz files. Right click on the icon of the thing you just downloaded and select "extract here". &lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Bfsp-nUDnTo/ToGj_qoIk4I/AAAAAAAAAHE/DlpChUacu1s/s1600/Install-playerstage-extracting-tar.gz.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="203" src="http://3.bp.blogspot.com/-Bfsp-nUDnTo/ToGj_qoIk4I/AAAAAAAAAHE/DlpChUacu1s/s320/Install-playerstage-extracting-tar.gz.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Install cmake. Open a terminal and type:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo apt-get install cmake&lt;/li&gt;&lt;li&gt;&amp;nbsp;follow instructions on screen&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Installing Dependencies&lt;/h3&gt;&lt;br /&gt;Player/Stage has a lot of dependencies, but they can be installed with Ubuntu software centre reasonably easily. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;To open Ubuntu software centre (if you don't know how) click the ubuntu logo in the very top left of the screen and start typing ubuntu. It should come up as one of the options.&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-so6x8DvW5Rs/ToGkBxDgyZI/AAAAAAAAAHI/qqxMXzMXKW8/s1600/Opening-Ubuntu-software-centre.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="89" src="http://2.bp.blogspot.com/-so6x8DvW5Rs/ToGkBxDgyZI/AAAAAAAAAHI/qqxMXzMXKW8/s320/Opening-Ubuntu-software-centre.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;The following dependencies need to be installed:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;pkg-config&lt;/li&gt;&lt;li&gt;FLTK 1.1.x &lt;/li&gt;&lt;li&gt;OpenGL&lt;/li&gt;&lt;li&gt;libpng&lt;/li&gt;&lt;li&gt;ltdl (Libtool)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;In the top right of the ubuntu software centre there's a search bar. Start typing pkg-config in, that should give you the pkg-config installer. If it's not already installed, then click install.&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-78Uv_1X8X44/ToGkCmRzaqI/AAAAAAAAAHQ/LBYn5uv02ps/s1600/USC-pkg-config.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="194" src="http://4.bp.blogspot.com/-78Uv_1X8X44/ToGkCmRzaqI/AAAAAAAAAHQ/LBYn5uv02ps/s320/USC-pkg-config.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;To install FLTK type FLTK into the search bar. This time the thing you want probably won't be an option. Click on "show technical items" (see picture)&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UadLgV6wZm0/ToGkCaoIF8I/AAAAAAAAAHM/hDxe9tTCbSo/s1600/USC-installing-fltk-part1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="194" src="http://3.bp.blogspot.com/-UadLgV6wZm0/ToGkCaoIF8I/AAAAAAAAAHM/hDxe9tTCbSo/s320/USC-installing-fltk-part1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Click on and install from the list of options:  &lt;br /&gt;&lt;ul&gt;&lt;li&gt; Fast Light Toolkit - shared libraries, libfltk1.1 &lt;/li&gt;&lt;li&gt; Fast Light Toolkit - development files, libfltk1.1-dev  &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Type opengl into the search bar and install from the list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;OpenGL Utility Toolkit - freeglut3&lt;/li&gt;&lt;li&gt;the OpenGL Utility Toolkit - libglut3&lt;/li&gt;&lt;li&gt;OpenGL Utility Toolkit development files, freeglut3-dev  &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Type libpng into the search bar and install the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; PNG Library Runtime, libpng12-0 (or whatever is the latest version number)&lt;/li&gt;&lt;li&gt; PNG Library Development, libpng12-dev    &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Type libtool into the search bar and install the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Generic Library support script, libtool &lt;/li&gt;&lt;li&gt; A system independent dlopen wrapper for GNU libtool, libltdl7&lt;/li&gt;&lt;li&gt; A system independent dlopen wrapper for GNU libtool, libltdl-dev    &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Installing Player&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;This should work first time, even on a fresh install of Ubuntu.&lt;br /&gt;Open a terminal and change directory (cd command) to the folder you extracted player into. This will probably be called something like "player-3.02" or whatever version you downloaded. Then enter the following commands:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;mkdir build&lt;/li&gt;&lt;li&gt;cd build&lt;/li&gt;&lt;li&gt;cmake ..&lt;/li&gt;&lt;li&gt;sudo make install&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;But I don't have sudo!&lt;/h4&gt;Well then you'll have to install it into your home directory somewhere. This is a pretty similar process, you just have to change the install prefix.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;mkdir build&lt;/li&gt;&lt;li&gt;cd build&lt;/li&gt;&lt;li&gt;ccmake ..&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Note that's '''ccmake''' not cmake&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;in the terminal scroll menu thing that just opened scroll down to CMAKE_INSTALL_PREFIX. If nothing is listed press c, things should appear.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;whilst it is selected press enter to edit the option and then change it to the folder you want player installed into. &lt;/li&gt;&lt;li&gt;press enter to confirm edit&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;press c to configure the settings &lt;/li&gt;&lt;li&gt;if the option appears, press g to generate the make files. If the option doesn't appear press c again until it does.&lt;/li&gt;&lt;li&gt;In the terminal now type make install&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;Installing Stage&lt;/h3&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Make sure that pkg-config can find player, otherwise there may be all sorts of troubles later when you try and use Stage. In a terminal type:&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;pkg-config --modversion playercore&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;If it gives you a version number it's properly installed. Otherwise, in your home folder make or edit the file called .bashrc, (it probably already exists). If you press ctrl+h while looking at the folder in nautilus it will show up if it's already there. At the end of this file write the following line &lt;b&gt;IF YOU'RE USING A 64-BIT INSTALL&lt;/b&gt;:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;export PKG_CONFIG_PATH+=/usr/local/lib64/pkgconfig&lt;/li&gt;&lt;/ul&gt;Write the following line &lt;b&gt;IF YOU'RE USING A 32-BIT INSTALL&lt;/b&gt;: &lt;ul&gt;&lt;li&gt;export PKG_CONFIG_PATH+=/usr/local/lib/pkgconfig&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Test this again in a &lt;b&gt;new&lt;/b&gt; terminal with &lt;br /&gt;&lt;ul&gt;&lt;li&gt; pkg-config --modversion playercore&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In a &lt;b&gt;new&lt;/b&gt; terminal navigate to the stage folder you extracted earlier. this is probably called something like "Stage-4.0.1-Source" or whatever Stage version you installed. In a terminal type the following commands:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; mkdir build&lt;/li&gt;&lt;li&gt;cd build&lt;/li&gt;&lt;li&gt; cmake ..&lt;/li&gt;&lt;li&gt; sudo make install&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;But I don't have sudo!&lt;/h3&gt;The install is just the same as for Player if you need to install Stage in your home folder or somewhere.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Follow steps 1,2 and 3 above for configuring pkg-config (otherwise this will not work).&lt;/li&gt;&lt;li&gt;Then in a terminal&amp;nbsp; navigate to the stage folder you extracted earlier. this is probably  called something like "Stage-4.0.1-Source" or whatever Stage version you  installed. In a terminal type the following commands:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;mkdir build&lt;/li&gt;&lt;li&gt;cd build&lt;/li&gt;&lt;li&gt;ccmake ..&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;in the terminal menu thing that just opened scroll down to CMAKE_INSTALL_PREFIX. If nothing is listed press c, things should appear.&lt;/li&gt;&lt;li&gt;whilst it is selected press enter to edit the option and then change it to the folder you want player installed into.&lt;/li&gt;&lt;li&gt;press enter to confirm edit&lt;/li&gt;&lt;li&gt;press c to configure the settings&lt;/li&gt;&lt;li&gt;if the option appears, press g to generate the make files. If the option doesn't appear press c again until it does.&lt;/li&gt;&lt;li&gt;In the terminal now type:&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;make install&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Testing it works&lt;/h3&gt;&lt;br /&gt;The stage source code has some handy code that should work if you've got everything installed.   &lt;b&gt;To test your install &lt;/b&gt;in your terminal go to the /worlds directory in the source code folder. Type player simple.cfg into the terminal. In the unlikely event that that works you've successfully installed Player/Stage!  &lt;br /&gt;&lt;br /&gt;I got the following error: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;player: error while loading shared libraries: libplayerdrivers.so.3.0: cannot open shared object file: No such file or directory.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To fix this open up your .bashrc file and enter the following line &lt;b&gt;IF YOU'RE USING A 64-BIT INSTALL&lt;/b&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;export LD_LIBRARY_PATH+=/usr/local/lib64&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Write the following line &lt;b&gt;IF YOU'RE USING A 32-BIT INSTALL&lt;/b&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;export LD_LIBRARY_PATH+=/usr/local/lib&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you changed CMAKE_INSTALL_PREFIX whilst installing player and or stage then do this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;export LD_LIBRARY_PATH+="whatever install prefix you made"&lt;/li&gt;&lt;/ul&gt;Now retest your install IN A NEW TERMINAL. I got the following error:&lt;br /&gt;Registering driver Player v.3.0.2&lt;br /&gt;* Part of the Player/Stage/Gazebo Project [http://playerstage.sourceforge.net]. &lt;br /&gt;* Copyright (C) 2000 - 2009 Brian Gerkey, Richard Vaughan, Andrew Howard, &lt;br /&gt;* Nate Koenig, and contributors. Released under the GNU General Public License.&lt;br /&gt;* Player comes with ABSOLUTELY NO WARRANTY.&lt;br /&gt;This is free software, and you are welcome to redistribute it under certain conditions; see COPYING for details.&lt;br /&gt;&lt;br /&gt;error : Failed to load plugin stageplugin. &lt;br /&gt;error : libtool reports error: file not found&lt;br /&gt;error : plugin search path: /home/robotlab/playerstage/Stage-3.2.2-Source/worlds:.:/usr/local/lib/&lt;br /&gt;error : failed to load plugin: stageplugin error : failed to parse config file simple.cfg driver blocks&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is most likely caused by the computer not being able to find Stage. Back to the .bashrc....&lt;br /&gt;&lt;ul&gt;&lt;li&gt;change export LD_LIBRARY_PATH+=/usr/local/lib64 to...&lt;/li&gt;&lt;li&gt;export LD_LIBRARY_PATH+=/usr/local/lib64:/usr/local/lib&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-7155235075660486912?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/7155235075660486912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2011/10/installing-playerstage-in-ubuntu-natty.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/7155235075660486912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/7155235075660486912'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2011/10/installing-playerstage-in-ubuntu-natty.html' title='Installing Player/Stage in Ubuntu (Natty Narwhal)'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Bfsp-nUDnTo/ToGj_qoIk4I/AAAAAAAAAHE/DlpChUacu1s/s72-c/Install-playerstage-extracting-tar.gz.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-9120734332920097638</id><published>2011-09-26T14:59:00.001+01:00</published><updated>2011-09-26T15:00:27.888+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microphones'/><category scheme='http://www.blogger.com/atom/ns#' term='extension board'/><category scheme='http://www.blogger.com/atom/ns#' term='sample rate'/><category scheme='http://www.blogger.com/atom/ns#' term='aliasing'/><category scheme='http://www.blogger.com/atom/ns#' term='sampling'/><title type='text'>Microphone work: Finding out your sample rate.</title><content type='html'>Goodness it's been a while since I updated my blog! This is mostly because I've spent the past year or so designing and building a new extension for the &lt;a href="http://www.e-puck.org/"&gt;epuck&lt;/a&gt; robots. Details about &lt;i&gt;that&lt;/i&gt; I'll leave for another time, although this blog entry is somewhat related.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have a circuit which takes a signal from a microphone and feeds it into a &lt;a href="http://en.wikipedia.org/wiki/PIC_microcontroller"&gt;PIC microcontroller&lt;/a&gt;. This PIC then performs &lt;a href="http://en.wikipedia.org/wiki/Analog-to-digital_converter"&gt;Analogue-to-Digital conversion&lt;/a&gt; and stores the data in memory for me to mess with later.&lt;br /&gt;The process of reading in the signal and storing it in memory is known as "&lt;a href="http://en.wikipedia.org/wiki/Sampling_%28signal_processing%29"&gt;sampling&lt;/a&gt;". A single piece of recorded data is called a "&lt;a href="http://en.wikipedia.org/wiki/Sample_%28signal%29"&gt;sample&lt;/a&gt;", the rate at which you record the information is called the "&lt;a href="http://en.wikipedia.org/wiki/Sample_rate"&gt;sample rate&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Are you following me so far?&lt;br /&gt;&lt;br /&gt;The sample rate is super useful to know if you plan on doing anything clever with your data. For my work I need the sample rate to be as fast as possible so I have my PIC recording samples in a loop until its memory gets full. This means I don't actually know how fast this is happening, so I need to measure it. &lt;br /&gt;&lt;br /&gt;Read on to find out how I did this, and for some handy MATLAB code!&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;The first thing I did was to sample something. My microphone/PIC system has a memory of 128 bytes and each sample uses 1 byte of memory. I played a 1kHz tone at it and sent the recorded data along a serial cable to my computer where I &lt;a href="http://dl.dropbox.com/u/9291393/blog/mic-dump.txt"&gt;logged the results into a text file&lt;/a&gt;. When that'd finished I loaded it all into MATLAB so that I could visualise it properly.&lt;br /&gt;&lt;br /&gt;Here's a graph of what was recorded:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-LsjWlOR9TAo/ToBxXuJKMYI/AAAAAAAAAGc/ahpDr4J0G60/s1600/Raw-Mic-Data.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="275" src="http://1.bp.blogspot.com/-LsjWlOR9TAo/ToBxXuJKMYI/AAAAAAAAAGc/ahpDr4J0G60/s320/Raw-Mic-Data.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;I'll call the sample rate &lt;i&gt;fs&lt;/i&gt;. The sample rate is measured in Hertz (Hz), which is the number of samples recorded per second. I'll call the frequency of the signal I played at the microphones &lt;i&gt;fk&lt;/i&gt;, but it was actually 1000Hz in this example. Below is a really rubbish drawing of how these two values relate to the signal I recorded:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-B5MJijp1uJM/ToB3k21QAsI/AAAAAAAAAGk/m88eZAsxGZw/s1600/sampling.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://4.bp.blogspot.com/-B5MJijp1uJM/ToB3k21QAsI/AAAAAAAAAGk/m88eZAsxGZw/s320/sampling.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;The &lt;i&gt;x&lt;/i&gt; axis in the diagram is time and the graph shows a signal as it is sampled. Each sample lasts 1/&lt;i&gt;fs&lt;/i&gt; seconds before the next sample is recorded. Over the course of one &lt;a href="http://en.wikipedia.org/wiki/Wavelength"&gt;wavelength&lt;/a&gt; of our input signal -which lasts 1/&lt;i&gt;fk&lt;/i&gt; seconds- there are n samples. SO...&lt;br /&gt;&lt;br /&gt;n * 1/&lt;i&gt;fs&lt;/i&gt;&amp;nbsp; = 1/&lt;i&gt;fk&lt;/i&gt;&lt;br /&gt;or...&lt;br /&gt;&lt;i&gt;fs&lt;/i&gt; = n*&lt;i&gt;fk&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Now we just have the problem of finding what n is. There are several ways of doing this.&lt;br /&gt;The first, and easiest, one is visual estimation. If we go back to the first picture there are just under 2 and a half wavelengths in our memory buffer, let's say 2.4 wavelengths. We also know there are 128 samples in the diagram so.. 128/2.4 will give us an estimation of n: 53.333. Multiplying that by &lt;i&gt;fk&lt;/i&gt; gives us an estimated sample rate of 53,333Hz.&lt;br /&gt;&lt;br /&gt;Alternatively we could use MATLAB's "data cursor" button, which becomes available when you plot data. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-TiuzdGbybJk/ToB-SHG7-KI/AAAAAAAAAGw/r-alxuxOTDo/s1600/cursor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-TiuzdGbybJk/ToB-SHG7-KI/AAAAAAAAAGw/r-alxuxOTDo/s1600/cursor.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Use the data cursor to select the beginning of a waveform, note down the x coordinate, then select the end of a waveform and do the same. The difference will be the number of samples per waveform.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_C8fuPK9vsI/ToB_GwX0DgI/AAAAAAAAAG0/Hj13V2vIunk/s1600/cursor-clicky.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="158" src="http://4.bp.blogspot.com/-_C8fuPK9vsI/ToB_GwX0DgI/AAAAAAAAAG0/Hj13V2vIunk/s320/cursor-clicky.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;So here x = 10.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-RIl755-_Ng4/ToB_kHTMMhI/AAAAAAAAAG4/Bac-QjZzLtc/s1600/cursor-clicky2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="107" src="http://1.bp.blogspot.com/-RIl755-_Ng4/ToB_kHTMMhI/AAAAAAAAAG4/Bac-QjZzLtc/s320/cursor-clicky2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;And here x = 69. So n = 69-10 = 59. It's worth doing this a few times to get an average value for n. If n=59 then our sample rate is n*&lt;i&gt;fk&lt;/i&gt; = 59*1000 = 59,000Hz.&lt;br /&gt;&lt;br /&gt;I thought this seemed rather large, so I wrote a MATLAB GUI which shows you the data you might expect if you sampled a signal &lt;i&gt;fk&lt;/i&gt; at sample rate &lt;i&gt;fs&lt;/i&gt;. In the GUI, &lt;i&gt;fk&lt;/i&gt; and &lt;i&gt;fs&lt;/i&gt; can be varied so have a play! There are 2 parts, the &lt;a href="http://dl.dropbox.com/u/9291393/blog/micdataGUI.fig"&gt;gui data&lt;/a&gt; and the &lt;a href="http://dl.dropbox.com/u/9291393/blog/micdataGUI.m"&gt;gui code&lt;/a&gt; which need to be saved in the same folder before MATLAB can open them.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-XcT4s9xC1n8/ToCCwONhyBI/AAAAAAAAAG8/bkDsmq88ukI/s1600/micdataGUI.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://1.bp.blogspot.com/-XcT4s9xC1n8/ToCCwONhyBI/AAAAAAAAAG8/bkDsmq88ukI/s320/micdataGUI.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;When I put in my values for the sample rate and the known frequency input it looks more or less like my original data, a good sign! The GUI can also be used to demonstrate a phenomenon called &lt;a href="http://en.wikipedia.org/wiki/Aliasing"&gt;aliasing&lt;/a&gt;, which happens when the input frequency gets close to and above &lt;i&gt;fs&lt;/i&gt;/2. Basically, because we're taking samples instead of recording the actual sound then signals start to resemble each other even though they're not the same. &lt;a href="http://en.wikipedia.org/wiki/File:AliasingSines.svg"&gt;This wikipedia image of aliasing&lt;/a&gt; illustrates why this happens.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-EOZb5hANu5c/ToCD3Kx84cI/AAAAAAAAAHA/G0NknD9OKfI/s1600/aliasing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://2.bp.blogspot.com/-EOZb5hANu5c/ToCD3Kx84cI/AAAAAAAAAHA/G0NknD9OKfI/s320/aliasing.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-9120734332920097638?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/9120734332920097638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2011/09/microphone-work-finding-out-your-sample.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/9120734332920097638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/9120734332920097638'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2011/09/microphone-work-finding-out-your-sample.html' title='Microphone work: Finding out your sample rate.'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-LsjWlOR9TAo/ToBxXuJKMYI/AAAAAAAAAGc/ahpDr4J0G60/s72-c/Raw-Mic-Data.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-6477336631020030935</id><published>2010-04-21T10:04:00.001+01:00</published><updated>2010-04-22T13:21:45.807+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>New Edition of the Manual Released!</title><content type='html'>I'm pleased to announce that the latest version of the Player/Stage tutorial has been released on my website here: &lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/playerstage-manual.html"&gt;player/stage manual&lt;/a&gt;&lt;br /&gt;Hopefully it'll also be appearing on the official Player/Stage website soon.&lt;br /&gt;&lt;br /&gt;After far too long I've updated the old manual to include stuff in the &lt;a href="http://yorkroboticist.blogspot.com/2009/11/update-of-manual-code-from-stage-211-to.html"&gt;errata&lt;/a&gt; and I've also cleared up a few problems. Specifically, it has been pointed out that the manual code was crap and didn't actually work properly. Also the old manual was too ambiguous about movable objects. &lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-6477336631020030935?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/6477336631020030935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2010/04/new-edition-of-manual-released.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/6477336631020030935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/6477336631020030935'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2010/04/new-edition-of-manual-released.html' title='New Edition of the Manual Released!'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-1681887032542553616</id><published>2010-04-14T08:50:00.010+01:00</published><updated>2010-04-14T12:52:47.780+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cross-compilers'/><category scheme='http://www.blogger.com/atom/ns#' term='epucks'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='lpucks'/><title type='text'>Cross Compilers for the lpuck</title><content type='html'>Firstly, I should apologise for this blog post because it's not about the usual PlayerStage stuff. It's instead about how I made a cross compiler for a specific bit of hardware that we have in the York robot swarm and at &lt;a href="http://www.brl.ac.uk/"&gt;BRL&lt;/a&gt;. It's not really useful for anyone but me...&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Useless background information&lt;/h4&gt;In both these places we use &lt;a href="http://www.e-puck.org/"&gt;epucks&lt;/a&gt; to do our research, however the processing power of the epuck is limited. To fix this &lt;a href="http://people.brl.ac.uk/people/template.jsp?username=Wenguo"&gt;Wenguo Liu&lt;/a&gt; at BRL designed an extension that runs linux (&lt;a href="http://www.emdebian.org/"&gt;emDebian&lt;/a&gt;), which can be attached to the robots so that they can do all their processing onboard (so they can run Player!). The result is called an &lt;a href="http://alanwinfield.blogspot.com/2008/06/linux-e-puck.html"&gt;L-Puck&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Back to the point...&lt;/h4&gt;Anyway, these linux boards run &lt;a href="http://www.emdebian.org/"&gt;emDebian&lt;/a&gt; on the &lt;a href="http://www.atmel.com/dyn/products/product_card.asp?part_id=3870"&gt;AT91SAM9260&lt;/a&gt; processor which is an ARM architecture. To compile stuff locally on the robots takes FOREVER, and some of our Player code is pretty big. Anyway, I've been trying to make a cross-compiler which can compile the player code on the computer so that we just have to copy over a binary. Much faster!&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;My Learnings About Cross Compilers&lt;/h4&gt;&lt;li&gt;The stuff you use to turn code into an executable binary is called a &lt;i&gt;toolchain&lt;/i&gt;. For linux systems this isn't just gcc but g++, ar, as, strip, ranlib and a whole bunch of other things too, all of which are important even if you don't think you use them.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.kegel.com/crosstool/"&gt;Crosstools&lt;/a&gt; is a very useful tool for building cross-compiler toolchains, but it's not updated very often and I had to revert to an old version of gcc to get it to work. Not to mention numerous other troubles like stack overflows and stuff that running it caused. I did get it to build a generic ARM compiler, but it didn't work for me.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;TomTom (the satnav company) provide a very useful pre-built version of the arm-linux- toolchain &lt;a href="http://www.tomtom.com/page.php?Page=gpl"&gt;here&lt;/a&gt;, but that also didn't work for me.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;This is the most important thing: if your processor is running some kind of embedded linux, stuff compiled for your processor to run just won't work. Your binary is going to be run by your OS not by the chip&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Scratchbox and Qemu are useless because there's absolutely no information (that I could find anyway) about how to actually use them once they're installed.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The embedded debian project is very well documented and good!&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;How I actually built the cross compiler&lt;/h4&gt;After realising that compiling stuff for the ARM processor wasn't going to get me anywhere I looked at how to compile stuff for &lt;a href="http://www.emdebian.org/"&gt;emDebian&lt;/a&gt;, and there's loads of information about making emdebian cross compilers for ARM chips. RESULT!&lt;br /&gt;In a nutshell, I followed the instructions here: http://wiki.debian.org/EmdebianToolchain and it worked. Where they say $ARCH I used "armel". Doing &lt;code&gt;$ apt-cross -a armel -u&lt;/code&gt; didn't update anything for me, and I skipped the &lt;code&gt;$ apt-cross -a armel -i $LIBRARY&lt;/code&gt; step because I don't have any libraries that I want to install. Doing this will install the arm-linux-gnueabi toolchain, so to cross compile you use arm-linux-gnueabi-gcc instead of gcc. It should have installed the binaries (or symlinks to binaries) in the /usr/bin folder so you don't need to specify any kind of path.&lt;br /&gt;&lt;br /&gt;I tested the arm-linux-gnueabi toolchain with a simple helloworld program, cross compiled it, copied it onto the robot and it worked!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-1681887032542553616?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/1681887032542553616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2010/04/cross-compilers-for-lpuck.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/1681887032542553616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/1681887032542553616'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2010/04/cross-compilers-for-lpuck.html' title='Cross Compilers for the lpuck'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-3339947621534871817</id><published>2010-03-10T12:19:00.011Z</published><updated>2010-04-14T12:53:27.392+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><title type='text'>Player/Stage on Eclipse</title><content type='html'>Today I've found myself trying to set up Eclipse as my IDE for Player/Stage after moving some files and somehow deleting all the settings. I'm using an Eclipse specifically for C/C++ development, which you can get here: http://www.eclipse.org/downloads/ &lt;br /&gt;&lt;br /&gt;This is how I set it up for Player/Stage:&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Open up Eclipse and select Project (from the top menubar) then Properties. Select the C/C++ Build &amp;gt;&amp;gt; settings from the left sidebar. Tool Settings should be the default tab that is open.&lt;br /&gt;You should now have a window that looks like this (click to enbiggen):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3aC5dl-HTRw/S5eO_40fkYI/AAAAAAAAACQ/VcuSZjN7WXw/s1600-h/Screenshot-Properties+for+EPuckAPI+.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446979502563365250" src="http://4.bp.blogspot.com/_3aC5dl-HTRw/S5eO_40fkYI/AAAAAAAAACQ/VcuSZjN7WXw/s320/Screenshot-Properties+for+EPuckAPI+.png" style="cursor: pointer; display: block; height: 298px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Under the GCC C++ Compiler select the Miscellaneous tab and paste into the "other flags" box:&lt;br /&gt;`pkg-config --cflags playerc++`&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3aC5dl-HTRw/S5eQaLiyRLI/AAAAAAAAACY/XvW_aPgT_2w/s1600-h/ps+eclips+c%2B%2B+misc.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446981053777593522" src="http://4.bp.blogspot.com/_3aC5dl-HTRw/S5eQaLiyRLI/AAAAAAAAACY/XvW_aPgT_2w/s320/ps+eclips+c%2B%2B+misc.png" style="cursor: pointer; display: block; height: 298px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Similarly, under the GCC C Compiler select the Miscellaneous tab and paste into the "other flags" box:&lt;br /&gt;`pkg-config --cflags playerc`&lt;br /&gt;&lt;br /&gt;To set up the linker (which is what connects the object files together into a working binary which can then be executed) select the Miscellaneous tab under the GCC C++ Linker and into the Linker flags box paste: &lt;br /&gt;`pkg-config --libs playerc++`&lt;br /&gt;&lt;br /&gt;If you want to develop in C rather than C++ then paste `pkg-config --libs playerc` into the box instead.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_3aC5dl-HTRw/S5eR6UazIjI/AAAAAAAAACg/WLEBEqCUr8U/s1600-h/ps+eclipse+linker.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446982705427456562" src="http://2.bp.blogspot.com/_3aC5dl-HTRw/S5eR6UazIjI/AAAAAAAAACg/WLEBEqCUr8U/s320/ps+eclipse+linker.png" style="cursor: pointer; display: block; height: 298px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It will probably work now if you have the PATH set on your computer properly. It didn't work for me so I told Eclipse where to look for all the Player libraries. Under the GCC C++ Compiler select the directories tab and paste the location of the folder containing the player headers. On my computer this was /usr/local/include/player-3.0/libplayerc++ it will probably be different on different computers. Do the same for the directories tab in the GCC C Compiler section.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_3aC5dl-HTRw/S5eSipGdVcI/AAAAAAAAACo/UgAL24gexvs/s1600-h/ps+eclipse+include+paths.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5446983398174053826" src="http://1.bp.blogspot.com/_3aC5dl-HTRw/S5eSipGdVcI/AAAAAAAAACo/UgAL24gexvs/s320/ps+eclipse+include+paths.png" style="cursor: pointer; display: block; height: 298px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Congratulations. You can now start working on some Player/Stage code in Eclipse! If you need to test your code it is still necessary to start a Stage simulation by opening a terminal and running &lt;code&gt;$ player yourcfg.cfg&lt;/code&gt;. Then when you hit run in eclipse it'll compile and then start running your code on that simulation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-3339947621534871817?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/3339947621534871817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2010/03/playerstage-on-eclipse.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3339947621534871817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3339947621534871817'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2010/03/playerstage-on-eclipse.html' title='Player/Stage on Eclipse'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3aC5dl-HTRw/S5eO_40fkYI/AAAAAAAAACQ/VcuSZjN7WXw/s72-c/Screenshot-Properties+for+EPuckAPI+.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-5110607837451646374</id><published>2010-03-09T13:57:00.004Z</published><updated>2010-04-14T12:54:10.547+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='boid project'/><category scheme='http://www.blogger.com/atom/ns#' term='epucks'/><title type='text'>Player/Stage API</title><content type='html'>Now I've &lt;span style="font-weight: bold;"&gt;finally&lt;/span&gt; found time to work on Player/Stage full time I've begun to make a handy API for the E-Puck robots we have here in York. The first part of this has been building a Stage model of the E-Puck and then writing an API to interact with all the device proxies.&lt;br /&gt;&lt;br /&gt;The end goal is to have an API which can be used to communicate with simulated robots, but will also work with a real robot. The Player/Stage website is very insistent that this is possible!&lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/epuckAPI.tar" onclick="javascript: pageTracker._trackPageview('/downloads/epuckAPIversion1');"&gt;Source code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The API can interact with a robot that has position2D, sonar and blobfinder devices. Those are all that are supported so far, I plan on adding some more soon. For example, I want to be able to simulate a swarm of robots that communicate with sound and wifi, so I need to somehow get the AudioProxy and WifiProxy working on Stage.&lt;br /&gt;In the API code, EPuck.cc you can see how I'm made my code interact with the proxies and wrapped them in my own function names which are more suited to my needs. One thing I did was make a method called setDifferentialMotors(left, right) which takes speeds for the left and right wheels and converts them to values that can be understood by Player. The maths behind this &lt;a href="http://yorkroboticist.blogspot.com/2009/12/differential-drive-to-forwardturnrate.html"&gt;I've discussed previously&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One major thing I've done to make the blob data more useful is to create a Blob class which contains all the data that the &lt;code&gt;player_blobfinder_blob_t&lt;/code&gt; structure does, but instead of using &lt;code&gt;uint32_t&lt;/code&gt; data types I mainly use int. This made it easier to work with the information but also meant that if I want to interact with blob data I don't need to include the playerc++ header.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;What's in the file?&lt;/h4&gt;&lt;br /&gt;The source code file: &lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/epuckAPI.tar" onclick="javascript: pageTracker._trackPageview('/downloads/epuckAPIversion1');"&gt;epuckAPI.tar&lt;/a&gt; contains the Stage world which I made to test the API, as well as a model of an epuck and the cfg to run the simulation. The API is in EPuck.h and EPuck.cc, these contain source code that is helpful in learning how to use Player proxies. Finally there is some test code TestEpuck.cc which uses the API to command the robots and read some data. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anyway to use the API you just #include EPuck.h at the top of your code and compile EPuck.cc along with all your other code to get a final program that (if all goes well) you can run.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-5110607837451646374?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/5110607837451646374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2010/03/playerstage-api.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/5110607837451646374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/5110607837451646374'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2010/03/playerstage-api.html' title='Player/Stage API'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-8267920573205209797</id><published>2010-02-25T15:09:00.007Z</published><updated>2010-02-25T15:35:38.786Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='research'/><category scheme='http://www.blogger.com/atom/ns#' term='york doctoral symposium'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>York Doctoral Symposium</title><content type='html'>It has been a while since my last blog update. Mostly this is because I've been preparing a paper for the &lt;a href="http://iridia.ulb.ac.be/ants2010/"&gt;ANTS 2010&lt;/a&gt; conference.&lt;br /&gt;What I want to mention in this blog entry is the &lt;a href="http://www.cs.york.ac.uk/yds"&gt;symposium&lt;/a&gt; I'm helping to run!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cs.york.ac.uk/yds"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 68px;" src="http://4.bp.blogspot.com/_3aC5dl-HTRw/S4aUimb5sAI/AAAAAAAAACI/W7Mmhq5cFIA/s320/LogoBinaryMotif.png" alt="" id="BLOGGER_PHOTO_ID_5442200521877860354" title="York Doctoral Symposium 2010" border="0" /&gt;&lt;/a&gt;It's a conference that's run annually by &lt;a href="http://www.blogger.com/www.cs.york.ac.uk"&gt;my department&lt;/a&gt; which is organised by the PhD students. The idea is to give us youths and young researchers an idea about what it's like to actually run a conference and review papers and select them to create a program. There's also the organisation of logistical stuff like location, food advertisment which is the side I'm more involved with.&lt;br /&gt;&lt;br /&gt;The organisation process has only been going on since February but I've learnt a lot about interacting with people and just plain getting stuff done. Right now I'm having to NETWORK and find people in industry who are able to sponsor the event. If I can get that done well then the conference could be completely free for everybody. I have ideas anyway.&lt;br /&gt;&lt;br /&gt;I encourage any PhD students reading this to submit their work to the conference anyway. Last year there were only 10 submissions and 8 presentation slots, I'm hoping this year we can do a bit better. I have plans for getting some really tasty prizes for papers, so it's worth submitting some work, preliminary results totally count as valid research (so long as the science is sound of course)!&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:200%;"&gt;&lt;a href="http://www.cs.york.ac.uk/yds"&gt;SUBMIT.&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-8267920573205209797?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/8267920573205209797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2010/02/york-doctoral-symposium.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/8267920573205209797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/8267920573205209797'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2010/02/york-doctoral-symposium.html' title='York Doctoral Symposium'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3aC5dl-HTRw/S4aUimb5sAI/AAAAAAAAACI/W7Mmhq5cFIA/s72-c/LogoBinaryMotif.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-7277232741294799620</id><published>2009-12-16T13:06:00.012Z</published><updated>2010-04-14T12:54:46.891+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='boid project'/><title type='text'>Differential drive to forward/turnrate conversion</title><content type='html'>When controlling a differential drive robot like the epuck, I like to be able to control the speeds of the left and right wheel with my code. This allows you to easily program simple things like &lt;a href="http://en.wikipedia.org/wiki/Braitenberg_vehicles"&gt;Braitenberg vehicles&lt;/a&gt; because you can directly interact with the wheel speeds.&lt;br /&gt;&lt;br /&gt;HOWEVER. With Player/Stage if you're using a differential drive robot you can only interact with the motors using the robot's forward speed (metres/sec) and its turning rate (radians/sec). In order for your left and right wheel speed controller to properly interact with Player/Stage you need to convert between the two. This involves some pretty horrible maths and kinematics type stuff. For the lazy, here is the conversion between differential wheel speeds in metres/sec into forward speed and turn rates for Player/Stage. Instead of left and right speeds though we use inner and outer wheel speeds because the wheel on the inside must be slower than the outer one because it travels less far and this affects the maths.&lt;br /&gt;&lt;br /&gt;newspeed = Inner_wheel_speed&lt;br /&gt;newturnrate = (Outer_wheel_speed - Inner_wheel_speed)/distance_between_wheels&lt;br /&gt;All measures are given in metres/sec.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Explanation&lt;/h3&gt;In the Player example "laserobstacleavoid.cc" they use the following code to convert from differential wheel speeds to forward speed / turn rate:&lt;br /&gt;&lt;code&gt;newspeed = (r+l)/1e3;&lt;br /&gt;newturnrate = dtor(r-l);&lt;/code&gt;&lt;br /&gt;Where does 1e3 come from? Where do these formulas come from?&lt;br /&gt;&lt;br /&gt;Since I'm no mathematician, so I used Google and came across &lt;a href="http://www.physicsforums.com/showthread.php?t=263149"&gt;this forum thread&lt;/a&gt; which discusses how to turn forward speeds and turn rates into left and right wheel speeds. This is the reverse of what we want to do here. I won't copy and paste the entire post here but these are the relevant formulae:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;inner wheel speed (radians/second) = forward speed (metres/sec) / wheel radius (metres)&lt;/li&gt;&lt;li&gt;outer wheel speed (radians/second) = ( forward speed (metres/sec) + turn rate (radians/sec) * wheel separation )/wheel radius (metres)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The inner wheel is the one on the inside of the turn, and the outer wheel is the one on the outside. I want to provide wheel speeds in metres per second and convert these into a forward speed in metres/sec and a turn speed in radians/sec.&lt;br /&gt;We'll shorted some of these terms to make the formulae sane. Ir is the inner wheel speed in radians/second, Im is the inner wheel speed in metres/second. Similarly Or and Om are the outer wheel speeds in radians and metres respectively. Newspeed will be the foward speed that we want to give Player, and newturnrate is the turning rate to give Player. &lt;br /&gt;&lt;br /&gt;Let's start by looking at the inner wheel speed. The formula from the website says:&lt;br /&gt;Ir = newspeed/wheel_radius&lt;br /&gt;so... &lt;br /&gt;newspeed = Ir*wheel_radius &lt;b&gt;[1]&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Let's convert Ir to Im:&lt;br /&gt;We have the wheel speed Im in m/s as our fuction input, we should find out how many turns of the wheel we need to make in order to cover that distance. The circumference of the wheel is 2pi*wheel_radius so that it how far each wheel turn takes us. To find how many wheel turns are required per second we do:&lt;br /&gt;number of wheel turns per sec = Im/2pi*wheel_radius&lt;br /&gt;A whole wheel revolution is 2pi radians so we multiply our number of wheel revolutions by 2pi to get the number of radians/second we need to turn.&lt;br /&gt;Ir = (2pi*Im)/(2pi*wheel_radius)&lt;br /&gt;Ir = Im/wheel_radius &lt;b&gt;[2]&lt;/b&gt;&lt;br /&gt;substitute &lt;b&gt;[2]&lt;/b&gt; into &lt;b&gt;[1]&lt;/b&gt;:&lt;br /&gt;newspeed = (Im*wheel_radius)/(wheel_radius)&lt;br /&gt;newspeed = Im&lt;br /&gt;&lt;br /&gt;That's easy enough to code! Now for the outer wheel. From the website:&lt;br /&gt;Or = ( newspeed + newturnrate * wheel_separation )/wheel_radius&lt;br /&gt;Now we convert Or to Om in the same way we did for the inner wheel in &lt;b&gt;[2]&lt;/b&gt;&lt;br /&gt;Or = Om/wheel_radius&lt;br /&gt;so...&lt;br /&gt;Om/wheel_radius = ( newspeed + newturnrate * wheel_separation )/wheel_radius&lt;br /&gt;wheel radius cancels out on both sides:&lt;br /&gt;Om = newspeed + (newturnrate * wheel_separation)&lt;br /&gt;rearranging...&lt;br /&gt;newturnrate = (Om - newspeed)/wheel_separation&lt;br /&gt;newturnrate = (Om - Im)/wheel_separation&lt;br /&gt;&lt;br /&gt;Finally we have a conversion! We can get the wheel separation by measuring the robot, Im and Om are our inputs. &lt;br /&gt;Here's what you've all been waiting for, it's my code for converting wheel speeds to player commands:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;/**&lt;br /&gt;converts differential drive wheel speeds into a forward speed and turn rate that Player understands.&lt;br /&gt;@param left speed of left wheel in metres/second&lt;br /&gt;@param right speed of right wheel in metres/second&lt;br /&gt;*/&lt;br /&gt;setMotors(double left, double right)&lt;br /&gt;{&lt;br /&gt;/* conversion of differential drive values to &lt;br /&gt;forward and turn speeds from &lt;br /&gt;http://www.physicsforums.com/showthread.php?t=263149 */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* wheel separation of an epuck. &lt;br /&gt;* Replace with correct value&lt;br /&gt;* for your robot */&lt;br /&gt;const double separation = 52*0.001; //52 mm&lt;br /&gt;double newspeed, newturnrate;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//which is the outer wheel and which is the inner?&lt;br /&gt;if(left &amp;gt; right) //if left is outer wheel&lt;br /&gt;{&lt;br /&gt;//newspeed is inner wheel speed&lt;br /&gt;newspeed = right;&lt;br /&gt;//newturnrate = (outer(m) - newspeed)/separation&lt;br /&gt;newturnrate = (left - newspeed)/separation;&lt;br /&gt;}&lt;br /&gt;else if(right &amp;gt; left) //right is outer wheel&lt;br /&gt;{&lt;br /&gt;//newspeed is inner wheel speed&lt;br /&gt;newspeed = left;&lt;br /&gt;//newturnrate = (outer(m) - newspeed)/separation&lt;br /&gt;newturnrate = (right - newspeed)/separation;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;newspeed = left; //could also be right&lt;br /&gt;newturnrate = 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;p2dProxy.SetSpeed(newspeed, newturnrate);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-7277232741294799620?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/7277232741294799620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/12/differential-drive-to-forwardturnrate.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/7277232741294799620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/7277232741294799620'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/12/differential-drive-to-forwardturnrate.html' title='Differential drive to forward/turnrate conversion'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-5079112380977549206</id><published>2009-11-30T12:31:00.007Z</published><updated>2010-04-14T12:55:33.324+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>Update of the Manual code from Stage 2.1.1 to 3.2.2</title><content type='html'>The Stage models from my manual were written using Stage 2.1.1, since then Stage has been updated a few times and there have been significant changes to the way that models are created.&lt;br /&gt;&lt;br /&gt;Here I'll go through the code that was developed in the manual and I'll make the changes necessary for running the world using the Stage 3.2.X.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;The .cfg File&lt;/h4&gt;&lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/test1.cfg"&gt;This is the old configuration file&lt;/a&gt; I won't bother reprinting the entire thing here.&lt;br /&gt;&lt;br /&gt;This file begins with the following code to make Player use Stage instead of trying to connect to real robot devices:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;driver&lt;br /&gt;(&lt;br /&gt;name "stage"&lt;br /&gt;plugin "libstageplugin"&lt;br /&gt;&lt;br /&gt;provides ["simulation:0"]&lt;br /&gt;&lt;br /&gt;# load the named file into the simulator&lt;br /&gt;worldfile "robots_and_junk.world"&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The only thing that needs changing here is the line &lt;code&gt;plugin "libstageplugin"&lt;/code&gt; to &lt;code&gt;plugin "stageplugin"&lt;/code&gt;. That is, delete the "lib" from the front.&lt;br /&gt;If you don't do this Player will tell you that it can't find the stage library and nothing will happen.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;The .world File&lt;/h4&gt;&lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/robots_and_junk.world"&gt;This is the old .world file.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/bigbob.inc"&gt;This is the old bigbob.inc file.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you try running Player with the revised .cfg file you'll probably encounter the following message:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;err: Loading size. Need a vector of length 3: found 2.&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In the latest version of Stage they upgraded the syntax that describes shapes and things to support 3D models. This included changing the &lt;code&gt;size&lt;/code&gt; parameter, so &lt;code&gt;size [x y]&lt;/code&gt; doesn't work any more, and the command is now &lt;code&gt;size [x y z]&lt;/code&gt; values are still measured in metres. The error it gave means that it is looking for a height, which has not been declared.&lt;br /&gt;&lt;br /&gt;In my file I make the world height and map height to be 3 (so changed &lt;code&gt;size [15 15]&lt;/code&gt; to &lt;code&gt;size [15 15 3]&lt;/code&gt;) which is a somewhat arbitary choice for a height. I also added a height to the orange and carton models in the .world file. The height also needs to be specified in the bigbob.inc file, although for some reason I'd already given that a height of 1 metre, the laser models also needs to be modified because that uses the &lt;code&gt;size&lt;/code&gt; parameter too, the ranger model uses &lt;code&gt;ssize&lt;/code&gt; which does not need to be 3 dimensional.&lt;br /&gt;&lt;br /&gt;Once these corrections have been made, Player gives the following error:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;err: Loading pose. Need a vector of length 4: found 3.&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The move from 2D models to 3D models means that when you declare the model's &lt;code&gt;pose&lt;/code&gt; you also need to tell Stage what height the robot is at.&lt;br /&gt;The &lt;code&gt;pose [x y yaw]&lt;/code&gt; parameter has been changed to &lt;code&gt;pose [x y z yaw]&lt;/code&gt;, so a value for &lt;code&gt;z&lt;/code&gt; needs to be added. For non-flying robots (like the bigbob example) this will be 0.&lt;br /&gt;&lt;br /&gt;In the .world file I set the z pose of all objects in the world to be 0.&lt;br /&gt;In bigbob.inc the laser's pose needed to be set as it uses the &lt;code&gt;pose&lt;/code&gt; parameter, again the ranger model doesn't need altering because it uses &lt;code&gt;spose&lt;/code&gt; instead of &lt;code&gt;pose&lt;/code&gt;.&lt;br /&gt;Also, the &lt;code&gt;origin&lt;/code&gt; parameter in the bigbob position model needs changing, for some reason this will cause the above "pose" error, even though it's the origin parameter. I don't know why.&lt;br /&gt;Anyway, I changed &lt;code&gt;origin [0.125 0 0]&lt;/code&gt; to &lt;code&gt;origin [0.125 0 0 0]&lt;/code&gt; and that stopped the pose error.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next Player gave me these errors:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;err: Model type ptz not found in model typetable&lt;br /&gt;&lt;br /&gt;err: Unknown model type ptz in world file.&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Evidently the &lt;code&gt;ptz&lt;/code&gt; model has been removed completely from Stage. This requires a complete rewrite of the blobfinder code, to update it to use the later syntax. Basically this means getting rid of the ptz stuff and renaming &lt;code&gt;channels&lt;/code&gt; to &lt;code&gt;colors&lt;/code&gt;. This is the old blobfinder code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;# bigbob's blobfinder&lt;br /&gt;define bigbobs_eyes ptz&lt;br /&gt;(&lt;br /&gt;blobfinder&lt;br /&gt;(&lt;br /&gt;# number of colours to look for&lt;br /&gt;channels_count 2&lt;br /&gt;&lt;br /&gt;# which colours to look for&lt;br /&gt;channels ["orange" "DarkBlue"]&lt;br /&gt;&lt;br /&gt;# camera parameters&lt;br /&gt;image [160 120]  #resolution&lt;br /&gt;range_max 5.00&lt;br /&gt;ptz [0 0 60]&lt;br /&gt;)&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Which is replaced with the following code:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;# bigbob's blobfinder&lt;br /&gt;define bigbobs_eyes blobfinder&lt;br /&gt;(&lt;br /&gt;# number of colours to look for&lt;br /&gt;colors_count 2&lt;br /&gt;&lt;br /&gt;# which colours to look for&lt;br /&gt;colors ["orange" "DarkBlue"]&lt;br /&gt;&lt;br /&gt;# camera parameters&lt;br /&gt;image [160 120]  #resolution&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Running Player on the world now will actually produce a simulation, although it's a bit useless:&lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/nopolygons.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/nopolygons.png" style="cursor: pointer; display: block; height: 528px; margin: 0px auto 10px; text-align: center; width: 508px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To fix this the old map.inc is first replaced by &lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/map.inc"&gt;the newest map.inc&lt;/a&gt;.&lt;br /&gt;The map model has been renamed to &lt;code&gt;floorplan&lt;/code&gt; in this newest map.inc so the .world file is changed accordingly. The resulting world still looks like the above picture though.&lt;br /&gt;This is due to changes in the window model. Our code currently looks like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;# size of the whole simulation&lt;br /&gt;size [15 15 3]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# configure the GUI window&lt;br /&gt;window&lt;br /&gt;(&lt;br /&gt;size [ 700.000 700.000]&lt;br /&gt;scale 0.025&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In Stage 3.2.0 it is no longer necessary to declare the size of the simulation outside the window, it's done instead using the &lt;code&gt;scale&lt;/code&gt; parameter of the window. The window &lt;code&gt;scale&lt;/code&gt; used to be calculated by doing map_size/window_size, now it is window_size/map_size. Since we want our window to be 700px by 700px and our map to be 15m by 15m this is 700/15, which works out as 46.6 reuccuring. This needs to be rounded &lt;i&gt;down&lt;/i&gt; to fit in the window properly, after a little trial and error I found a scale of 40 worked ok, although sometimes it doesn't render the box surrounding the map, scrolling up and then down on the Stage window solves that problem or alternatively reducing the scale to 35.&lt;br /&gt;&lt;br /&gt;The Stage simulation now looks like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/addedmap.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="Window has been fixed on stage to now render everything properly." border="0" src="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/addedmap.png" style="cursor: pointer; display: block; height: 528px; margin: 0px auto 10px; text-align: center; width: 508px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next the &lt;code&gt;polygons&lt;/code&gt; parameter has been replaced with &lt;code&gt;block&lt;/code&gt;. usage is similar though, let's look at the bigbob postion model that used polygons:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;polygons 3&lt;br /&gt;polygon[0].points 6&lt;br /&gt;polygon[0].point[0] [0 0]&lt;br /&gt;polygon[0].point[1] [0 1]&lt;br /&gt;polygon[0].point[2] [0.75 1]&lt;br /&gt;polygon[0].point[3] [1 0.75]&lt;br /&gt;polygon[0].point[4] [1 0.25]&lt;br /&gt;polygon[0].point[5] [0.75 0]&lt;br /&gt;&lt;br /&gt;polygon[1].points 4&lt;br /&gt;polygon[1].point[0] [1 0.75]&lt;br /&gt;polygon[1].point[1] [1.25 0.75]&lt;br /&gt;polygon[1].point[2] [1.25 0.625]&lt;br /&gt;polygon[1].point[3] [1 0.625]&lt;br /&gt;&lt;br /&gt;polygon[2].points 4&lt;br /&gt;polygon[2].point[0] [1 0.375]&lt;br /&gt;polygon[2].point[1] [1.25 0.375]&lt;br /&gt;polygon[2].point[2] [1.25 0.25]&lt;br /&gt;polygon[2].point[3] [1 0.25]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;block&lt;br /&gt;(&lt;br /&gt;points 6&lt;br /&gt;point[0] [0 0]&lt;br /&gt;point[1] [0 1]&lt;br /&gt;point[2] [0.75 1]&lt;br /&gt;point[3] [1 0.75]&lt;br /&gt;point[4] [1 0.25]&lt;br /&gt;point[5] [0.75 0]&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;block&lt;br /&gt;(&lt;br /&gt;points 4&lt;br /&gt;point[0] [1 0.75]&lt;br /&gt;point[1] [1.25 0.75]&lt;br /&gt;point[2] [1.25 0.625]&lt;br /&gt;point[3] [1 0.625]&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;block&lt;br /&gt;(&lt;br /&gt;points 4&lt;br /&gt;point[0] [1 0.375]&lt;br /&gt;point[1] [1.25 0.375]&lt;br /&gt;point[2] [1.25 0.25]&lt;br /&gt;point[3] [1 0.25]&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The same was done for the carton model, the simulation now looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/properrobotalmost.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="Changed robot to use blocks" border="0" src="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/properrobotalmost.png" style="cursor: pointer; display: block; height: 528px; margin: 0px auto 10px; text-align: center; width: 508px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The problem with this model is now that the bigbob robot is hollow! If we look at the simulation using Stage 3.2.X's perspective mode (press R) it looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/hollowbotperspective.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="robot is hollow :(" border="0" src="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/hollowbotperspective.png" style="cursor: pointer; display: block; height: 728px; margin: 0px auto 10px; text-align: center; width: 708px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Trying to work out how this code differs from the supplied example code where the robots aren't hollow is SADNESS. To save you the trouble of asking the Player/Stage mailing list the same question I did I can tell you the problem is that the points need to be declared anti-clockwise! If you look at the block code you can see that as you plot from points 0 to 5 the corners progress clockwise.  &lt;a href="http://sourceforge.net/mailarchive/forum.php?thread_name=alpine.DEB.2.00.0911270823530.4100%40anemone.egunn.com&amp;amp;forum_name=playerstage-users"&gt;I can't take credit for finding that out though&lt;/a&gt;. Finally with the blocks you have to declare where the block is in the z plane. This is done with &lt;code&gt;z [height_from height_to]&lt;/code&gt;, so if I wanted my block to be from the floor to 1m in height I'd do &lt;code&gt;z [0 1]&lt;/code&gt;, if I wanted it to be from 50cm off the ground to 1m then I'd use &lt;code&gt;z [0.5 1]&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Let's say that Bigbob is 1m tall (which was established earlier when I set the &lt;code&gt;size&lt;/code&gt;) and the teeth to be 50cm tall and on the ground. Implementing these changes gives block code like so:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;block&lt;br /&gt;(&lt;br /&gt;points 6&lt;br /&gt;point[5] [0 0]&lt;br /&gt;point[4] [0 1]&lt;br /&gt;point[3] [0.75 1]&lt;br /&gt;point[2] [1 0.75]&lt;br /&gt;point[1] [1 0.25]&lt;br /&gt;point[0] [0.75 0]&lt;br /&gt;z [0 1]&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;block&lt;br /&gt;(&lt;br /&gt;points 4&lt;br /&gt;point[3] [1 0.75]&lt;br /&gt;point[2] [1.25 0.75]&lt;br /&gt;point[1] [1.25 0.625]&lt;br /&gt;point[0] [1 0.625]&lt;br /&gt;z [0 0.5]&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;block&lt;br /&gt;(&lt;br /&gt;points 4&lt;br /&gt;point[3] [1 0.375]&lt;br /&gt;point[2] [1.25 0.375]&lt;br /&gt;point[1] [1.25 0.25]&lt;br /&gt;point[0] [1 0.25]&lt;br /&gt;z [0 0.5]&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You may note I've been somewhat lazy in converting the coordinates from clockwise to anti-clockwise. It still works fine though and the finished world looks like this:&lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/finishedmodel.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="The finished Stage model" border="0" src="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/finishedmodel.png" style="cursor: pointer; display: block; height: 528px; margin: 0px auto 10px; text-align: center; width: 508px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This completed code can be downloaded from this link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/stage-3.2.0/bigbob.tar" onclick="javascript: pageTracker._trackPageview('/downloads/psSource320TARupdate');"&gt;Player/Stage 3.2.X Bigbob example code&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-5079112380977549206?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/5079112380977549206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/11/update-of-manual-code-from-stage-211-to.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/5079112380977549206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/5079112380977549206'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/11/update-of-manual-code-from-stage-211-to.html' title='Update of the Manual code from Stage 2.1.1 to 3.2.2'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-8313971175566265831</id><published>2009-10-21T10:32:00.005+01:00</published><updated>2010-04-14T12:55:52.905+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='boid project'/><category scheme='http://www.blogger.com/atom/ns#' term='epucks'/><title type='text'>E-Pucks in Player/Stage: Building a Stage model</title><content type='html'>My latest project using Player/Stage is to implement flocking on my university's swarm of epucks. To do this I'm first going to build a simulation of the flocking in Player/Stage, with the simulation I can check that my code works and that the flocking is performed reasonably well. Then I will transfer the code onto the epucks, which means the epucks will need calibration so that they work together in a way which is (ideally!) close to what the simulation showed they'd do.&lt;br /&gt;&lt;br /&gt;The first thing I'm going to do is build a Stage model of an epuck which I can use for my simulation. This will be based partially on what Player/Stage drivers are written for the epucks, so far only the Position2d, IR, Camera and Blobfinder drivers are available for use. This means I don't need to add any other devices to my model.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;This is Walter(1), he serves as a testing platform for all my code. This is what an e-puck looks like, and what we are trying to create a model of:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3aC5dl-HTRw/SxeMh5f_BjI/AAAAAAAAAB0/AwMCIbrJkt4/s1600-h/Walter+the+epuck+top.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="Walter the epuck" border="0" id="BLOGGER_PHOTO_ID_5410947991307486770" src="http://4.bp.blogspot.com/_3aC5dl-HTRw/SxeMh5f_BjI/AAAAAAAAAB0/AwMCIbrJkt4/s200/Walter+the+epuck+top.jpg" style="cursor: pointer; display: block; height: 160px; margin: 0px auto 10px; text-align: center; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_3aC5dl-HTRw/SxeMnv9jJZI/AAAAAAAAAB8/FfTngsBhZaM/s1600-h/Walter+epuck+side.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="Walter the epuck" border="0" id="BLOGGER_PHOTO_ID_5410948091826349458" src="http://3.bp.blogspot.com/_3aC5dl-HTRw/SxeMnv9jJZI/AAAAAAAAAB8/FfTngsBhZaM/s200/Walter+epuck+side.jpg" style="cursor: pointer; display: block; height: 160px; margin: 0px auto 10px; text-align: center; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(The front side of the epuck is the end where the sticker is)&lt;br /&gt;&lt;br /&gt;Now, happily, someone somewhere has actually already written a stage model for the epuck which I've uploaded &lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/epuck.inc"&gt;here&lt;/a&gt;, I won't include a code listings because it's quite long and complicated. This is how it renders an epuck:&lt;br /&gt;&lt;img alt="old rendering of the epuck model" src="http://img132.imageshack.us/img132/4782/epuckold.png" /&gt;&lt;br /&gt;&lt;br /&gt;You might think that the work is done but no, I like code to be nice and I like it to make sense; this model description is neither. First we'll start on the ranger sensors. Their yaw values are all over the place, 342.8, 314.2, 270, 208.5, 151.5, 90, 405.8 and 377.2. I'll change these to be sensible values between -180 and 180. It's important to note the index that each ranger is given, the counting starts at 0 being the front right IR (that's the black blob above the clear LED in the second photo) and increasing around clockwise (looking down on the robot).&lt;br /&gt;spose[0] [0.030 -0.010 -15] #fr right&lt;br /&gt;spose[1] [0.022 -0.025 -45] #fr right 2&lt;br /&gt;spose[2] [0.0 -0.031 -90] # right &lt;br /&gt;spose[3] [-0.03   -0.015 -150] #back right&lt;br /&gt;spose[4] [-0.03 0.015  150] #back left&lt;br /&gt;spose[5] [0.0   0.031  90] #left&lt;br /&gt;spose[6] [0.022 0.025  45] #fr left 2&lt;br /&gt;spose[7] [0.03 0.01  15] #fr left&lt;br /&gt;&lt;br /&gt;Next I got rid of all the complicated polygon specifications which make the epuck look nice. That includes the "turret" which is the Y shaped thing on top of their model, the wheels (the thick black lines on the model) and I changed the shape of the robot. In the original model the epuck is an 18 cornered polygon, I replaced this with a bitmap called &lt;a href="http://img7.imageshack.us/img7/7744/circlex.png"&gt;"circle.png"&lt;/a&gt; which is just a black circle on a white background. This one in fact:&lt;br /&gt;&lt;img src="http://img7.imageshack.us/img7/7744/circlex.png" /&gt;&lt;br /&gt;&lt;br /&gt;The final step is to fix their blobfinder code. In the original epuck model they do a weird thing where they define the epuck camera and blobfinder inside the position description. I completely re-wrote this so that it makes sense:&lt;br /&gt;&lt;br /&gt;# epuck blobfinder&lt;br /&gt;define epuck_cam ptz&lt;br /&gt;(&lt;br /&gt;blobfinder&lt;br /&gt;(&lt;br /&gt;# number of colours to look for&lt;br /&gt;channels_count 1&lt;br /&gt;&lt;br /&gt;# which colours to look for&lt;br /&gt;channels ["red"]&lt;br /&gt;&lt;br /&gt;# camera parameters&lt;br /&gt;image [640 480]  #resolution&lt;br /&gt;range_max 5.00&lt;br /&gt;ptz [0 0 0] &lt;br /&gt;)&lt;br /&gt;size [0.001 0.001]&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;I'm using Stage 2.1.1 on my computer, so the blobfinder has to be described within a ptz model. I will only use the blobfinder to look for red becuase the epucks have red LEDs around them, so looking for red will mean the epucks can detect each other. The camera on the epuck is fixed in position so it can't pan, tilt or zoom hence ptz [0 0 0]. The size of the camera is set to be 0.1mm x 0.1mm so that it doesn't show up on the stage simulation, the default camera size for the ptz model is much bigger than the epuck so the size parameter MUST be set.&lt;br /&gt;&lt;br /&gt;That's basically it then for the model making! The final version of the epuck Stage model can be downloaded here: &lt;a href="http://www-users.cs.york.ac.uk/jowen/player/code/epuck-mine.inc"&gt;Epuck Stage model&lt;/a&gt;. The model doesn't look as impressive, but it is much easier to understand now. Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;(1) Why is he called Walter you ask? The answer is because &lt;a href="http://magnesite.tripod.com/waltindx.htm"&gt;Walter the Wobot&lt;/a&gt; is just about the cutest robot ever. Cwipes!&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-8313971175566265831?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/8313971175566265831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/10/e-pucks-in-playerstage-building-stage.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/8313971175566265831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/8313971175566265831'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/10/e-pucks-in-playerstage-building-stage.html' title='E-Pucks in Player/Stage: Building a Stage model'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3aC5dl-HTRw/SxeMh5f_BjI/AAAAAAAAAB0/AwMCIbrJkt4/s72-c/Walter+the+epuck+top.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-7324070586928626059</id><published>2009-08-27T11:31:00.001+01:00</published><updated>2009-08-27T11:34:13.004+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='papers'/><category scheme='http://www.blogger.com/atom/ns#' term='evolution'/><title type='text'>The Organisation of Complex Systems</title><content type='html'>Simon, H.A. (1973) "The Organisation of Complex Systems". Book chapter in: Hierarchy Theory - The Challenge of Complex Systems , Pattee, H.H. eds. pp 1-27&lt;br /&gt;&lt;br /&gt;This was quite an interesting paper which draws heavily from his "architecture of complexity" paper. This one is mostly about how complexity is present in pretty much everything. The reason for this is that it's easier to build a systems out of stable subsystems than by building it all at once. He goes into this in greater depth with lots of examples. One of which is a computer system and he suggests that computers will become the most useful experimental tool becuase they can think and we can easily do experiments on them.&lt;br&gt;Another point made in this paper is about "loose horizontal coupling" which is interactions between systems on the same hierarchic complexity level. He says that systems on one level can communicate with lower levels in a certain way, but those lower levels are independent and so long as they produce the same output they can be improved as much as they like without affecting the higher levels this also speeds up evolution because a system can be constantly improving on all levels at once. This idea also discredits the idea of reductionism because if levels are independent of each other then understanding a lower layer fully isn't going to tell you very much about the higher levels so why even bother?&lt;br&gt;Overall this is a good paper and there are some interesting issues discussed, there's a few handy quotes too!    &lt;/br&gt; &lt;br /&gt;&lt;a href="http://www-users.york.ac.uk/~jo115/paper-reviews/TheOrganisationOfComplexSystems.pdf"&gt;My more detailed notes on the paper.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-7324070586928626059?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/7324070586928626059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/08/organisation-of-complex-systems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/7324070586928626059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/7324070586928626059'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/08/organisation-of-complex-systems.html' title='The Organisation of Complex Systems'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-1582954096796551317</id><published>2009-07-24T11:40:00.001+01:00</published><updated>2009-07-29T13:48:55.780+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='trips'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>The Stone Age.</title><content type='html'>I was having dinner with lots of computer sciencists last night, these things happen in academia (I love my job). The older scientists told us all stories about what it was like to do computer science in the olden days, particularly one of my supervisors, &lt;a href="http://www.ias.uwe.ac.uk/%7Ea-winfie/"&gt;Professor Alan Winfield&lt;/a&gt;. He's a real engineer! I don't want to spoil his anecdotes, but this is amazing. When he was doing his PhD back in the 70s one of the academics very excitedly brought in their new (first generation) Intel processor. There was absolutely no software running on it (like y'know an operating system) it was just some hardware attached to a board. Without any support. So what him and a few others did is develop a compiler for it and a system for downloading code and a bootloader and all the stuff that's needed to just make the thing &lt;i&gt;work&lt;/i&gt; (&lt;a href="http://alanwinfield.blogspot.com/2007/03/you-were-lucky.html"&gt;same story as told by Alan&lt;/a&gt;). These days just one of those things would be a phd worthy endeavor, they did it just because it was there! I wouldn't even know where to begin, I don't know what a bootloader even is. It's amazing, I have a Master's degree in electronic engineering and I know NOTHING about real engineering like that. How was it possible for me to get that degree? When I went to Aberystwyth there were guys there (specifically &lt;a href="http://users.aber.ac.uk/mjn/Mark%20Neal%27s%20Home%20Page.htm"&gt;Mark Neal&lt;/a&gt; and &lt;a href="http://users.aber.ac.uk/cjs06/homepage/index.php"&gt;Colin Sauze&lt;/a&gt;) and they could just knock together some stuff and it becomes a fully working robot!&lt;br /&gt;Anyway, back to the point. Alan's mentioned that they transferred code between their giant processors and computers using punch cards. &lt;i&gt;Punch cards!&lt;/i&gt; Really that's only one level up from bashing rocks together. To debug their code it was easier to edit it on the card than in the code on the processor, he would de-bug stuff using a hole punch and some white tape. He had another story about how he de-bugged a problem in his code using an oven! Computer science, it would seem, was difficult in the past. You wrote a program and the next day it would be compiled, the day after that you might be able to get time on the university computer to run your code. What discipline it must take to make your code perfect first time. How much dedication must you have needed to de-bug something on punch card or wait 2 days to find the results of your code?&lt;br /&gt;&lt;br /&gt;The point I'm making here is that technology has come a LONG way since the late 70s / early 80s (hereafter refered to as "the stone age"). Even during my lifetime there's been a hell of an improvement. During the same time there's been a dumbing down of us as computer scientists. I don't think I know anyone (apart from Alan obviously) who is so very capable and dedicated that they could work with this old technology and remain motivated and sane. The sheer range of knowledge required is astounding! So much of this tedious, difficult work is done for us these days. It's easy to write something that doesn't quite work, there's no rigour. I don't need to read and re-read my code to check for syntax errors or memory leaks: it takes 2 seconds not 2 days to compile and run code. The level of dedication and perservance that was required to complete a computer science PhD in the stone age has been lost, what will things be like in the future when I'm Alan's age? Will I be telling the young students about how when I started university computers only had ONE core? Will the role of programmer be usurped altogether? Will robots assemble themselves out of a heap of compoent parts? Given the current rate of technology development the gulf will be even bigger than the current stuff and punch cards. A prospect both scary and exciting. Exciting in that we'll have new toys, but scary to consider how much lazier we'll have become.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-1582954096796551317?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/1582954096796551317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/07/stone-age.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/1582954096796551317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/1582954096796551317'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/07/stone-age.html' title='The Stone Age.'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-8417465724231865655</id><published>2009-07-14T15:23:00.001+01:00</published><updated>2009-07-14T15:25:54.045+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='research'/><category scheme='http://www.blogger.com/atom/ns#' term='papers'/><category scheme='http://www.blogger.com/atom/ns#' term='evolution'/><title type='text'>Interactions Between Learning and Evolution</title><content type='html'>David Ackley and Michael Littman (1991). "Interactions Between Learning and Evolution", &lt;span style="font-style: italic;"&gt;In: Proceedings of the Second Conference on Artificial Life&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;New paper added to my &lt;a href="http://www-users.cs.york.ac.uk/jowen/reading-list.php"&gt;reading list&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is a very interesting paper about some agents that can learn and also evolve. The learning happens over a short time span, the lifetime of an agent, the evolution happens as agents reproduce and populate the simulation. The agents use two neural networks as controllers, one of them is an 'action network' which controls how the agent reacts to a situation. The other is an 'evaluation network' which is how the agent decides what is a good situation and what is bad. The evaluation network and the &lt;b&gt;initialisaiton&lt;/b&gt; for the action network are inherited from parent agents. So natural selection controls what the agents think is good or bad, and how they will initially react to stimuli in the environment, and over time the agent will adapt its action network to learn behaviours that result in situations it believes are good. The agents' aim is to live for as long as possible and to reproduce as often as possible.&lt;br /&gt;The simulation they used was apparently very difficult to survive in, which skewed their results a bit (it made evolution a bit crappy for instance because agents, and most of the population, died before they could pass along genes). The results they presented of the one population that lasted over 9 million time steps were interestin though. They showed how having the population start out knowing that food is good eventually led to the agents instinctively getting food, it also showed that when the agents start off instinctively avoiding predators their evaluation of whether predators are good or bad had little effect. These results are somewhat contradictory but the experiment was successful in that the agents lasted a long time before going extinct.&lt;br /&gt;Overall what they present is a very interesting control structure, and I think how they implement instinctive actions is quite clever (but smart people might think it was obvious) the paper leaves me wondering what would happen if it was easier to survive in the simulation, (probably there would be less adaption and the experiment would be much less interesting).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-8417465724231865655?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/8417465724231865655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/07/interactions-between-learning-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/8417465724231865655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/8417465724231865655'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/07/interactions-between-learning-and.html' title='Interactions Between Learning and Evolution'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-5283685298666672347</id><published>2009-07-13T12:08:00.003+01:00</published><updated>2009-11-30T12:39:33.157Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>Finally, a Player/Stage Manual</title><content type='html'>Well, the Player/Stage manual I've been talking about for so long has finally been released!&lt;br /&gt;I've knocked together a basic web page about it on my work website:&lt;br /&gt;&lt;li&gt;&lt;a href="http://www-users.cs.york.ac.uk/jowen/player/playerstage-manual.html"&gt;Player/Stage manual&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;It's also been published on the &lt;a href="http://www.playerstage.org/"&gt;official Player/Stage Website&lt;/a&gt; by &lt;a href="http://www.cs.sfu.ca/%7Evaughan/"&gt;Richard Vaughan&lt;/a&gt;. This makes me very happy! So far the only feedback I've had about it from people (these were the folks working from the first draft) was that it's great. Personally I just hope I haven't got things horribly wrong. The manual's been released a bit too late for this academic year (as far as students doing their final year projects are concerned) but I'm hoping it could be more widely read now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-5283685298666672347?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/5283685298666672347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/07/finally-playerstage-manual.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/5283685298666672347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/5283685298666672347'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/07/finally-playerstage-manual.html' title='Finally, a Player/Stage Manual'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-3249075096629961334</id><published>2009-07-07T15:19:00.004+01:00</published><updated>2009-11-30T12:40:01.556Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>Player/Stage Manual redux</title><content type='html'>The Player/Stage manual is finished!&lt;br /&gt;The rest of this week will be sent sending it people so they can check it for typos / errors and then I'll release it here, my website and (hopefully) to the Player/Stage website!&lt;br /&gt;I'm very excited that I've actually seen this (very long) project through and I can really add something of value to the robotics community.&lt;br /&gt;At the start of the AIR 2009 summer cam we had to make presentations about who we were and what we do, I mentioned that I'd written a Player/Stage manual and there was a collective sigh of relief and cries of "Publish! Publish now!". It really surprises me that no-one's done this earlier. There seems to be such a massive demand for it?&lt;br /&gt;Anyway dear readers and people who search for "Player/Stage" in Google, wait until next Monday (the 13th July) and you'll be able to download my manual for yourselves!&lt;br /&gt;&lt;br /&gt;ETA: see my next post about the &lt;a href="http://yorkroboticist.blogspot.com/2009/07/finally-playerstage-manual.html"&gt;manual&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-3249075096629961334?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/3249075096629961334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/07/playerstage-manual-redux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3249075096629961334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3249075096629961334'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/07/playerstage-manual-redux.html' title='Player/Stage Manual redux'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-8079029021742770355</id><published>2009-07-03T14:20:00.003+01:00</published><updated>2009-07-03T14:35:08.548+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='research'/><category scheme='http://www.blogger.com/atom/ns#' term='trips'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>AIR 2009 in retrospect</title><content type='html'>After the first two days of lectures we then went on to work on a project in teams. My team were working on an autonomous sailing boat which uses an artificial endocrine system for fault tolerance. Our goal was to make the boat maintain a heading, so for instance it should always try and point towards north, if we can do this then the boat will move in a straight line. The difficulty was that the boat doesn't have a rudder, it steers with two sails, one at the front and one at the back. We only had 3 days to do this work in so although it doesn't sound ambitious it kept us very busy! The main problem came with communicating with the PIC on the boat since you can only receive information every so often without causing latency issues. We spent a long time solving this problem and cursing the PIC. I think it was a problem with the API or something. Anyway we managed to get it working and it can move in the direction we tell it to. It doesn't point the right way whilst doing it... it tends to oscillate around the goal heading and slows down a lot when it faces into the wind but it does move in the right direction.&lt;br /&gt;Now the research camp is over my team (including me) are writing a paper for submission to &lt;a href="http://ima.ac.uk/ukci2009/committees.shtml"&gt;UK Computational Intelligence&lt;/a&gt; in Nottingham. It'll be my first publication!&lt;br /&gt;&lt;br /&gt;Overall the research camp has been a really good experience and I've learnt a lot about robotics and teamwork. The location, Aberystwyth, was also lovely and I miss the epic scenery and the beaches and lakes. I hope to go back soon! I would thoroughly recommend the summer camp to anyone who's interested in robotics as part of their PhD, there were even a couple of people there who knew nothing about robots and it was useful for them too. Very highly recommended, kudos to &lt;a href="http://users.aber.ac.uk/msh/"&gt;Martin Huelse&lt;/a&gt; for organising it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-8079029021742770355?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/8079029021742770355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/07/air-2009-in-retrospect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/8079029021742770355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/8079029021742770355'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/07/air-2009-in-retrospect.html' title='AIR 2009 in retrospect'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-3658434155394367795</id><published>2009-06-27T23:27:00.003+01:00</published><updated>2009-06-27T23:33:50.215+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='research'/><category scheme='http://www.blogger.com/atom/ns#' term='trips'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>AIR 2009 day 2</title><content type='html'>The first talk this morning was by &lt;a href="http://www.tech.plym.ac.uk/soc/Staff/GuidBugm/Bugmann.htm"&gt;Guido Bugmann&lt;/a&gt; who talked about creating stimulus-response mappings. The benefits of which is that you can pre-plan what to do in a specific situation and then map that to an action, the point being that planning what to do is the slowest part of making the robots go and if you have some stuff that is pre-planned then the robot is much (much) quicker to react. One of the inspirations for this was tennis players, because they can decide on a course of action, like which way to run to get to the ball, in an incredibly short space of time ~200ms which is the quickest that a message can propagate through the brain (from seeing the ball being tossed to telling the muscles what to do). One of the things that he found interesting is that it is very very easy to program the brain. The example he used was to get us to raise our left hand if we saw a letter A on screen and our right hand if we see a B. That's a pretty straightforward task right? In the process of telling us what to do he's made us program our brain to do this simple task, which wouldn't have been evolved or taught we can just do it without practise. Psychologists haven't really investigated this phenomenon, they tell subjects to do something and then look at what the subject did, there's not really been any investigation of how long it takes a subject to be "programmed" to do a task.&lt;br /&gt;&lt;br /&gt;The next talk was by&lt;a href="http://users.aber.ac.uk/dpb/"&gt;Dave Barnes&lt;/a&gt; about the challenges of putting robots into space. Basically it's &lt;i&gt;incredibly&lt;/i&gt; difficult! Everything ideally has zero mass, volume and power consumption and it has to be resistant to radiation and the cold and the heat. They spend an enormous amount of time callibrating the robots and all other parts of it, that's most of what they seem to do in Aberystwyth actually. The guys here built the robot arm for the Beagle 2 mission, and there's a lot of work that's gone into it. They were also responsible for the colour callibration thing which is basically some colours on a square which the robot can photograph in order to check the colour correction on the lenses (the Mars atmosphere distorts colour in a different way to Earth's atmosphere apparently). It's nothing more than a square of colours with no mechanics or moving parts but they needed 3 teams of scientists to work on it to prevent colour fading, or dust sticking to it and getting exactly the right colour pigments etc etc. A lot of work! This was easily the most interesting talk of the week. It gave a real insight into the issues of space robotics, basically it's nigh impossible and absolutely everything is working against you. Good stuff.&lt;br /&gt;Another talk was about &lt;a href="http://en.wikipedia.org/wiki/Artificial_immune_system"&gt;Artificial Immune Systems&lt;/a&gt;, in no other field of research I've encountered have people been so adamant about stating that you should consider the pros and cons of their algorithms and that it won't solve everything. I think this is partially because &lt;a href="http://www-users.cs.york.ac.uk/jtimmis/"&gt;Jon&lt;/a&gt; and &lt;a href="http://users.aber.ac.uk/mjn/"&gt;Mark&lt;/a&gt; are very honest about it... mostly because they "haven't found their niche yet", but that's just my opinion and is probably nothing like reality.&lt;br /&gt;&lt;br /&gt;After the talks were all over we were taken to Aberystwyth's Mars Lab, where they test the Mars rovers! They have a scale version of the next Mars rover which is half size in all dimensions (so the real one is 8x bigger) which I photographed here (click to enbiggen):&lt;br /&gt;&lt;a href="http://img33.imageshack.us/img33/8127/marsroveraberystwyth.jpg"&gt;&lt;br /&gt;&lt;img src="http://img33.imageshack.us/img33/8127/marsroveraberystwyth.jpg" alt="Mars Rover, at Aberystwyth Uni" width="400" height="300" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Pretty neat huh? The white blobs are things for tracking the robot's movements across the lab. There's a picture of me with this robot, but that's far too blurry to put online. The white stuff it's stood on is Mars sand D, which is basically sand which is the same consistency and has the same properties as some Mars sand (there are lots of different types of sand on Mars). This rover's job is to look for sedimentary rocks and analyse samples to see if Mars once supported life. It also has a drill on the side (although this model I think does not) which drills down into the Mars soil to take samples from below the surface, because Mars has little/no magnetic field so doesn't protect the surface from the sun's harmful radiation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-3658434155394367795?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/3658434155394367795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/air-2009-day-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3658434155394367795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3658434155394367795'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/air-2009-day-2.html' title='AIR 2009 day 2'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-5606760620252588020</id><published>2009-06-24T18:59:00.000+01:00</published><updated>2009-06-24T19:00:02.185+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='research'/><category scheme='http://www.blogger.com/atom/ns#' term='trips'/><category scheme='http://www.blogger.com/atom/ns#' term='conferences'/><title type='text'>AIR 2009 day 1</title><content type='html'>For this week (23rd - 30th June) I will be at the &lt;a href="http://users.aber.ac.uk/msh/AIR/"&gt;Autonomous Intelligent Robots Summer Camp&lt;/a&gt;. This is at the University of Wales, Aberystwyth. The website has lots of details about the specifics, including a timetable of stuff that's going on.&lt;br /&gt;&lt;br /&gt;This morning was a talk by &lt;a href="http://www.cs.bham.ac.uk/%7Ejlw/"&gt;Jeremy Wyatt&lt;/a&gt; about &lt;a href="http://en.wikipedia.org/wiki/Reinforcement_learning"&gt;reinforcement learning&lt;/a&gt; which is when you use rewards and punishments to make a robot learn about its environment and how to react to it and make predictions about the outcome of its actions. I didn't know very much about it before, I'd read something about game theory in draughts from one of &lt;a href="http://www.amazon.com/Emergence-Chaos-John-H-Holland/dp/0192862111"&gt;John Holland's books&lt;/a&gt; which sounded very similar. Basically a robot can observe the &lt;i&gt;state&lt;/i&gt; of the world, and it has a &lt;i&gt;policy&lt;/i&gt; which control how it &lt;i&gt;acts&lt;/i&gt; when given a particular world state. The robot gets given rewards based on what you want it to do, like if you want it to push a box you can reward it whenever it pushes something. The robot has to modify its &lt;i&gt;policy&lt;/i&gt; in order to maximise the amount of rewards it gets for ALL world states. There are associated issues like it could come up with a behaviour you don't want in order to get lots of rewards (like the box pushing robot might try to push a wall) so you need to be careful when designing the reward system. Also if rewards are too infrequent then the robot can never really learn because it is not told when it does good. He briefly mentioned something called inverse reinforcement learning, which is when you develop a reward system somehow and then use that to teach a robot, then what you teach the robot is fed back into the reward system and modifies it based on the learning process. This is then iterated and so you get a good reward system and a good robot!&lt;br /&gt;&lt;br /&gt;This was followed by some lectures by members of Aberystwyth's robotics department who were talking about the things that are going on in their lab.&lt;br /&gt;The first of these was by &lt;a href="http://users.aber.ac.uk/mhl/"&gt;Mark Lee&lt;/a&gt; who talked about developmental robotics. Which is all about teaching robots to do a task in stages, much like how children/babies learn to do stuff gradually. They have a robot arm which has developed hand-eye coordination, they started by developing an eye and teaching it to centre upon certain coordinates so that it can move quickly towards a point instead of circling around it or searching or whatever. They then taught the arm to understand how its motor movements and positions map to its position on a table (looking down) which uses the eye to look at the robot's actual position. Then they taught the robot how to move to coordinates or objects on the table, effectively hand-eye coordination, since the robot arm know what position it needs to be in to get to a place and it can make minor modifications to its position given what it observes with the eye. Good stuff! It makes sense because they don't try to run before they  can walk. Often, problems are encountered because people try to do too much at once and it's good to try and increment the difficulty of a task. Humans develop hand-eye coordination in a similar manner and we've been doing that for thousands of years, so the system must be good!&lt;br /&gt;&lt;br /&gt;Another talk was on using a 360 degree panoramic camera to navigate to a certain point. This assumes you have a starting picture of where you want to be, they then find the difference between the current camera's image and the one of the goal location. The place where the difference is least will be where you want to go, but as you near that place the difference gets smaller and smaller so it allows you to home in. The good thing about this is that it works &lt;b&gt;better&lt;/b&gt; if you use it in a visually rich environment (ie there are lots of colours and blocks and stuff) because it's basically landmark navigation. This is cool because a lot of vision analysis stuff for robots involves putting the robots in an arena where there's not much to look at so interesting things are easy to pick out, this work is much more applicable to real life because the real world isn't painted white!&lt;br /&gt;&lt;br /&gt;The final presentation was about the &lt;a href="http://www.aber.ac.uk/compsci/Research/bio/robotsci/"&gt;robot scientist&lt;/a&gt; they have in Aberystwyth. This has an understanding of yeast biology and uses that to perform and analyse tests on yeast. It's basically a way of automating science so that you can do a lot of tests in a repeatable manner. They use it for identifying what some yeast genes are responsible for and it's been quite successful in that regard! It can apparently run ~1000 experiments a day and can make over 200,000 observations. Good stuff! We went to see it acutally, and it looks very cool.&lt;br /&gt;&lt;br /&gt;More fun stuff will happen tomorrow I hope, now I'm off for dinner with everyone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-5606760620252588020?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/5606760620252588020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/air-2009-day-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/5606760620252588020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/5606760620252588020'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/air-2009-day-1.html' title='AIR 2009 day 1'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-3606060546202956883</id><published>2009-06-18T14:50:00.003+01:00</published><updated>2009-06-18T15:19:01.608+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trips'/><category scheme='http://www.blogger.com/atom/ns#' term='epucks'/><category scheme='http://www.blogger.com/atom/ns#' term='brl'/><title type='text'>Bristol Robotics Lab Visit 11/06/09 part two.</title><content type='html'>The first thing I did when I got to the &lt;a href="http://www.brl.ac.uk/"&gt;Robotics Lab&lt;/a&gt; was to meet up with Wenguo and their intern Jean-Charles. These guys have been putting linux onto the 50 or so &lt;a href="http://en.wikipedia.org/wiki/E-puck_mobile_robot"&gt;epucks&lt;/a&gt; which they have there, Wenguo being the guy who designed the linux extension (and incidentally is &lt;i&gt;incredibly&lt;/i&gt; knowledgable about pretty much everything), and Jean-Charles being the guy tasked with doing all the repetetive instalation work (so is an expert on how it should all be put together). I spend a good hour or so chatting about how the linux boards work and what I need to install them. Mostly this meant having things patiently explained to me, over and over again until I could understand.&lt;br /&gt;&lt;br /&gt;After the session the three of us went for lunch and met up with my supervisor in Bristol &lt;a href="http://www.brl.ac.uk/people/template.jsp?username=brl1344"&gt;Prof. Alan Winfield&lt;/a&gt;. If you have a passing interest in swarm robots (or robots in general) then you may have seen this video before:&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/SkvpEfAPXn4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/SkvpEfAPXn4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Alan is the guy in the video!&lt;br /&gt;The project they're talking about in the video is called &lt;a href="http://www.symbrion.eu/tiki-index.php"&gt;SYMBRION&lt;/a&gt;, which aims to create swarming robots that can combine together to achieve some goal. In the video they show an example of this end goal with the robots forming an X and walking (1). Wenguo, Alan and one of my supervisors in York, &lt;a href="http://www-users.cs.york.ac.uk/jtimmis/"&gt;Jon Timmis&lt;/a&gt; are important people on this project!&lt;br /&gt;&lt;br /&gt;Anyway, after lunch I was given a small tour of the lab by Wenguo and Jean-Charles picutres and details about this will be included when I get the information from my camera. Unfortunately I didn't get to see &lt;a href="http://en.wikipedia.org/wiki/EcoBot"&gt;EcoBot&lt;/a&gt; this time, which is a shame because it's really cool. EcoBot is a robot which has a digestive system, not a virtual or simulated digestive system a REAL one. It consumes dead insects (2) and converts their bodies into electricity to power its movement. There's a video of &lt;a href="http://www.brl.uwe.ac.uk/movies/EcoBot%20short.mpeg"&gt;EcoBot moving around&lt;/a&gt;, as you may guess the little black blobs it leaves behind are poop! Robots like this are really interesting because it makes you wonder just what qualities make something alive. This robot moves and eats and excretes, it's sensitive to external stimuli (light) it only really lacks reproduction and growth. Does that make it alive?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After visiting BRL I now have a list of extra stuff we need to buy to get the linux boards working on the epucks. I'm hoping that it won't be too difficult. Jean-Charles has written a very thorough guide to installing them and since the boards haven't been officially released yet I'll probably be one of the first people to work from the manual. Hopefully I'll be able to give Jean-Charles some useful feedback about it, having written a manual recently I know how difficult it can be to get constructive feedback on that kind of thing. Since coming back from Bristol our technicians in York have had a lot of questions about building the boards and all the parts required. Hopefully this will help Wenguo to make a really thorough package to describe the PCB and components.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;span style="font-size:85%"&gt;&lt;br /&gt;(1) sadly this hasn't actually been achieved yet and that video is stop-motion animation. The tiny robots just can't make a strong enough connection for that kind of thing yet.&lt;br /&gt;(2) Don't worry animal right activists! They collect them from around the lab from windowsills and dusty corners they don't kill them especially.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-3606060546202956883?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/3606060546202956883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/first-thing-i-did-when-i-got-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3606060546202956883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3606060546202956883'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/first-thing-i-did-when-i-got-to.html' title='Bristol Robotics Lab Visit 11/06/09 part two.'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-3157492690446424458</id><published>2009-06-16T15:28:00.003+01:00</published><updated>2009-06-16T15:33:07.885+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='papers'/><title type='text'>Evolving an Artificial Homeostatic System</title><content type='html'>New paper added to &lt;a href="http://www-users.cs.york.ac.uk/jowen/reading-list.php"&gt;my reading list&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Moioli, R.C. Vargas, P.A. Von Zuben, F.J. and Husbands, P. (2008) “Evolving an Artificial Homeostatic System”. &lt;i&gt;In: Lecture Notes in Artificial Intelligence&lt;/i&gt; vol. 5249 pp. 278–288.    &lt;br /&gt;&lt;a href="http://www.springerlink.com/content/f353tv8u12655776/"&gt;LINK&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In this paper they evolve a robotic controller which uses neural networks to control behaviours (they used something called NSGasNet which they never explain) and an artificial endocrine system to decide which behaviour should be followed at any one time. An artificial endocrine system is a thing which uses "hormones" to assess its internal conditions (battery level etc) and as these get worse more fake hormone is produced (a number gets bigger) until it gets big enough that some kind of action is required. In this experiment they monitored battery level and as battery level decreased hormone increased and when there was enough hormone then the robot would switch from wandering around to going to get more power.&lt;br /&gt;In all it's a thorough(ish) experiment. The way they used to develop the artificial endocrine system seemed to be sound and their results show the robot is robust to changes in battery discharge rate an evolved artificial endocrine system sounds like a good thing. That said, this paper doesn't provide enough information to replicate the results and their measure of when the robot performs well is worryingly qualitative, we effectively have to take their word that the robots performed well (for whatever value of "well" they used).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-3157492690446424458?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/3157492690446424458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/evolving-artificial-homeostatic-system.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3157492690446424458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3157492690446424458'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/evolving-artificial-homeostatic-system.html' title='Evolving an Artificial Homeostatic System'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-1027862942516115683</id><published>2009-06-15T14:06:00.001+01:00</published><updated>2009-06-15T14:08:51.795+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='trips'/><category scheme='http://www.blogger.com/atom/ns#' term='epucks'/><title type='text'>Bristol Robotics Lab Visit 11/06/09 part one.</title><content type='html'>Two weeks ago on the 1st of June York university received a shipment of ten &lt;a href="http://www.e-puck.org/"&gt;epucks&lt;/a&gt;. The e-puck is a small and versatile little robot which is packed with sensors. It's got 8 IR sensors, microphones, a speaker, accelerometers, a camera, bluetooth and probably more stuff I haven't listed, all controlled by a PIC; there's a wikipedia article &lt;a href="http://en.wikipedia.org/wiki/E-puck_mobile_robot"&gt;here&lt;/a&gt;. Anyway it is my job at the moment to get these robots up and running so that they can be used for swarming experiments by students at this uni, probably masters students and some PhD people like me. What I need to do is to set them up so that you can write a Player/Stage simulation, and  the code for your simulation can also be used on the real robots. Now, Player/Stage drivers for the e-puck have already been written and are freely available &lt;a href="http://www.blogger.com/post-create.g?blogID=7028146233533395417" com="" p="" driver=""&gt;here&lt;/a&gt; so surely my job is done?&lt;br /&gt;&lt;br /&gt;Well no. For one thing, the existing Player drivers require that a small piece of code is loaded to the epuck and then your Player/Stage code is run on the computer, commands are sent to your robot via bluetooth. So far my experience with bluetooth and epucks has not been good, mostly this has been down to a lack of drivers, generally I find the connection between the computer and an epuck to be rather fragile. Mostly what I'm doing at the moment is installing Linux onto the robots. Yes that's right, I'm installing linux onto robots that are controlled by a PIC.&lt;br /&gt;It turns out that most of the hard work has been done in this regard. My colleague &lt;a href="http://www.brl.ac.uk/people/template.jsp?username=Wenguo"&gt;Wenguo Liu&lt;/a&gt; at the &lt;a href="http://www.brl.ac.uk/"&gt;Bristol Robotics Lab&lt;/a&gt; has designed an extension to the epuck which is basically a tiny computer which runs linux. It's my job to take these boards and to install them onto our epucks. The linux board technology is pretty new at the moment, so much so that they are waiting for a paper on them to be published before they make the board designs and information open source.&lt;br /&gt;&lt;br /&gt;This is why, on the 11th of June 2009 I visited the Bristol Robotics Lab...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-1027862942516115683?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/1027862942516115683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/bristol-robotics-lab-visit-110609-part.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/1027862942516115683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/1027862942516115683'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/bristol-robotics-lab-visit-110609-part.html' title='Bristol Robotics Lab Visit 11/06/09 part one.'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-2898130402220110117</id><published>2009-06-10T10:41:00.002+01:00</published><updated>2009-11-30T12:40:06.305Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='player/stage'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>A Player/Stage Manual</title><content type='html'>&lt;a href="http://playerstage.sourceforge.net/"&gt;Player/Stage&lt;/a&gt; is an open source robot simulator, which has become pretty much industry standard (at least in academia). It's a really powerful program that allows you to design a model of your robot and then write controlling code to make it do things in your simulation.&lt;br /&gt;The really good thing about it is that the code you write to control your robot in simulation can also be used to control a REAL robot. Think about that for a moment... you can write a simulation and the same code that you simulate you can then put on to the robot. That's a wonderful thing!&lt;br /&gt;&lt;br /&gt;The downside to Player/Stage is that it's a complete pig to learn to use. The &lt;a href="http://playerstage.sourceforge.net/doc/Player-2.1.0/player/"&gt;online&lt;/a&gt; &lt;a href="http://playerstage.sourceforge.net/doc/stage-3.0.1/"&gt;documentation&lt;/a&gt; has a lot of information, but very little of it is in enough depth for you to actually implement it yourself. This is understandable of course, it's an open source project the people who contribute to it generally contribute in ways to add functionality or to iron out any bugs. Trawlling through pages of documentation is no fun and no-one would willingly give up their spare time to do it. This leaves Player/Stage learners like me something of a problem when it comes to actually learning how to get things done.&lt;br /&gt;&lt;br /&gt;Well, I've been learning on and off for the past few months and as I went, I wrote a manual to make the process easier for others in the future. At the moment the first draft is complete and I have someone learning to make simulations from it. So far the feedback is good but I expect I'll need to add more as I learn, things I've missed out, things I got wrong etc. After another re-drafting I'm going to try and submit it to the Player/Stage project to get as many people benefitting from my work as possible!&lt;br /&gt;&lt;br /&gt;Watch this space...&lt;br /&gt;&lt;br /&gt;EDIT: as of 13th July 2009 this manual has been finished and published! &lt;a href ="http://yorkroboticist.blogspot.com/2009/07/finally-playerstage-manual.html"&gt;Finally a Player/Stage manual&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-2898130402220110117?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/2898130402220110117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/playerstage-manual.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/2898130402220110117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/2898130402220110117'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/playerstage-manual.html' title='A Player/Stage Manual'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7028146233533395417.post-3083503039228935565</id><published>2009-06-09T13:22:00.000+01:00</published><updated>2009-06-09T13:23:52.018+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>Introduction</title><content type='html'>So what is this blog?&lt;br /&gt;&lt;br /&gt;I'm a PhD student at the University of York, studying swarm robotics. this blog is where I will put information about stuff I've done with robots that maybe other people might want to repeat or use. Apart from that I'll also blog about things I've discovered which I thought were interesting, journal papers I've read and maybe even other stuff I've done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7028146233533395417-3083503039228935565?l=yorkroboticist.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yorkroboticist.blogspot.com/feeds/3083503039228935565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/introduction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3083503039228935565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7028146233533395417/posts/default/3083503039228935565'/><link rel='alternate' type='text/html' href='http://yorkroboticist.blogspot.com/2009/06/introduction.html' title='Introduction'/><author><name>Jenny</name><uri>http://www.blogger.com/profile/14080715403232385100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-CNDZ1VDENaQ/ToGp_nKNUDI/AAAAAAAAAHc/LEuA-RRQRrM/s220/me_dreddhat.jpg'/></author><thr:total>0</thr:total></entry></feed>
