<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.jderobot.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.jderobot.org/api.php?action=feedcontributions&amp;user=Jvazquez&amp;feedformat=atom</id>
		<title>jderobot - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://www.jderobot.org/api.php?action=feedcontributions&amp;user=Jvazquez&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Special:Contributions/Jvazquez"/>
		<updated>2012-05-20T01:32:17Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.18.1</generator>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-06-30T16:07:42Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.6.30)&lt;br /&gt;
&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.6.30) Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
&lt;br /&gt;
Canvas area was finally implemented as part of introrobgui interface. From this area, it's posible so show the robot, sonar and laser signals, grid area and reference coordinates. Any of them can be individually activated/desactivated. It's also possible to focos robot's position as center of canvas area or disable this option and select a different focus by using the canvas sroll bars. Finally, zoom capability is also exixsting and makes posible to precise the visualization area dimension.&lt;br /&gt;
&lt;br /&gt;
This is an example of the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;600&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/introrob-completo-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.6.5) '''Add gazeboserver and introrob introduction in JDErobot 5.0 Manual'''&lt;br /&gt;
&lt;br /&gt;
A brief introduction to these two components have been written in 5.0 Manual. The introductions also explain which are the provided/required interfaces (ICE/non-ICE), how they can be set up from their configuration files and what are the following improvements.&lt;br /&gt;
&lt;br /&gt;
In the case of introrob, it's said how to use the graphical interface and how navigation logic can be changed, updating nagetación method, at navega class.&lt;br /&gt;
&lt;br /&gt;
(2010.6.2) '''Implementation of 2D map on Introrob canvas area'''&lt;br /&gt;
&lt;br /&gt;
At this moment, there is no yet a finished canvas area representing robot, laser and sonars, due to it's difficult to intregate gnome::Canvas component into introrob glade interface. This is due to currrent version of Glade, 3.7, doesn't support this and other gnome library component but only gkt ones. During two weeks, the author, has being investigating how this components can be used, from a c++ library called &amp;quot;libgnomecanvasmm&amp;quot; and trying to implement a grid representation. It has been also difficult to integrate gnome canvas with a ScrolledWindow, modelated in in Glade to achieve a final integrated representation.&lt;br /&gt;
&lt;br /&gt;
It has been implemented a derivated version of Gnome::Canvas::Canvas class, called &amp;quot;introrobcanvas&amp;quot;, in order to manage any robot ilustation on canvas area and to manage this elements from introrobgui class.&lt;br /&gt;
&lt;br /&gt;
At this moment, canvas component is integrated withing introrob interface but there are two main tasks to be completed:&lt;br /&gt;
&lt;br /&gt;
* Solve &amp;quot;Segmentation Fault&amp;quot; issue when a introrobcanvas methed is invoked from introrobgui object. I don't understand yet why I get a segmentation abort when trying to call a specific method for representing the robot or move it across the grid. This problem is under investigation.&lt;br /&gt;
* Implement the logic for representing laser, sonar and move focus of canvas area.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;400&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/introrob-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.18) '''Upload gazeboserver and introrob to SVN repository'''&lt;br /&gt;
&lt;br /&gt;
The components, new ICE interfaces and several changes on Makefile.am files and configure.in were sucessfully commited.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN)'''&lt;br /&gt;
&lt;br /&gt;
The target of this activity is verify, before uploading gazeboserver, introrob components and several new interfaces to SVN repository, that the las JDE 5.0 version doesn't impact on my current developments.&lt;br /&gt;
&lt;br /&gt;
However, just after synchronize my local repository and launch the compilation, I get the following error with gazeboserver component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gazeboserver.cpp: In member function ‘virtual void gazeboserver::Component::start()’:&lt;br /&gt;
gazeboserver.cpp:685: error: cannot allocate an object of abstract type ‘gazeboserver::CameraI’&lt;br /&gt;
gazeboserver.cpp:65: note:   because the following virtual functions are pure within ‘gazeboserver::CameraI’:&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:716: note: 	virtual std::string jderobot::Camera::startCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:719: note: 	virtual void jderobot::Camera::stopCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's due to one of the interfaces supported by gazeboserver is &amp;quot;camera&amp;quot;, also used by other JDE 5.0 components such us cameraserver or cameraview. It seems some changes where added to camera interface definition and &amp;quot;startCameraStreaming&amp;quot; and startCameraStreaming&amp;quot; operations are not implemented in my gazeboserver code.&lt;br /&gt;
&lt;br /&gt;
We added its definition with no logic but that's was enogh to solve the problem.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTEncodersData&lt;br /&gt;
  {&lt;br /&gt;
  	float panAngle;&lt;br /&gt;
	float tiltAngle;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent PTEncodersData getPTEncodersData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  class SonarsData&lt;br /&gt;
  {&lt;br /&gt;
    IntSeq us;&lt;br /&gt;
	int numSonars;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent SonarsData getSonarsData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the three interfaces to gazebo sensors were implemented on gazeboserver's logic.&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-06-06T10:04:18Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.6.5)&lt;br /&gt;
&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.6.5) '''Add gazeboserver and introrob introduction in JDErobot 5.0 Manual'''&lt;br /&gt;
&lt;br /&gt;
A brief introduction to these two components have been written in 5.0 Manual. The introductions also explain which are the provided/required interfaces (ICE/non-ICE), how they can be set up from their configuration files and what are the following improvements.&lt;br /&gt;
&lt;br /&gt;
In the case of introrob, it's said how to use the graphical interface and how navigation logic can be changed, updating nagetación method, at navega class.&lt;br /&gt;
&lt;br /&gt;
(2010.6.2) '''Implementation of 2D map on Introrob canvas area'''&lt;br /&gt;
&lt;br /&gt;
At this moment, there is no yet a finished canvas area representing robot, laser and sonars, due to it's difficult to intregate gnome::Canvas component into introrob glade interface. This is due to currrent version of Glade, 3.7, doesn't support this and other gnome library component but only gkt ones. During two weeks, the author, has being investigating how this components can be used, from a c++ library called &amp;quot;libgnomecanvasmm&amp;quot; and trying to implement a grid representation. It has been also difficult to integrate gnome canvas with a ScrolledWindow, modelated in in Glade to achieve a final integrated representation.&lt;br /&gt;
&lt;br /&gt;
It has been implemented a derivated version of Gnome::Canvas::Canvas class, called &amp;quot;introrobcanvas&amp;quot;, in order to manage any robot ilustation on canvas area and to manage this elements from introrobgui class.&lt;br /&gt;
&lt;br /&gt;
At this moment, canvas component is integrated withing introrob interface but there are two main tasks to be completed:&lt;br /&gt;
&lt;br /&gt;
* Solve &amp;quot;Segmentation Fault&amp;quot; issue when a introrobcanvas methed is invoked from introrobgui object. I don't understand yet why I get a segmentation abort when trying to call a specific method for representing the robot or move it across the grid. This problem is under investigation.&lt;br /&gt;
* Implement the logic for representing laser, sonar and move focus of canvas area.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;400&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/introrob-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.18) '''Upload gazeboserver and introrob to SVN repository'''&lt;br /&gt;
&lt;br /&gt;
The components, new ICE interfaces and several changes on Makefile.am files and configure.in were sucessfully commited.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN)'''&lt;br /&gt;
&lt;br /&gt;
The target of this activity is verify, before uploading gazeboserver, introrob components and several new interfaces to SVN repository, that the las JDE 5.0 version doesn't impact on my current developments.&lt;br /&gt;
&lt;br /&gt;
However, just after synchronize my local repository and launch the compilation, I get the following error with gazeboserver component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gazeboserver.cpp: In member function ‘virtual void gazeboserver::Component::start()’:&lt;br /&gt;
gazeboserver.cpp:685: error: cannot allocate an object of abstract type ‘gazeboserver::CameraI’&lt;br /&gt;
gazeboserver.cpp:65: note:   because the following virtual functions are pure within ‘gazeboserver::CameraI’:&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:716: note: 	virtual std::string jderobot::Camera::startCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:719: note: 	virtual void jderobot::Camera::stopCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's due to one of the interfaces supported by gazeboserver is &amp;quot;camera&amp;quot;, also used by other JDE 5.0 components such us cameraserver or cameraview. It seems some changes where added to camera interface definition and &amp;quot;startCameraStreaming&amp;quot; and startCameraStreaming&amp;quot; operations are not implemented in my gazeboserver code.&lt;br /&gt;
&lt;br /&gt;
We added its definition with no logic but that's was enogh to solve the problem.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTEncodersData&lt;br /&gt;
  {&lt;br /&gt;
  	float panAngle;&lt;br /&gt;
	float tiltAngle;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent PTEncodersData getPTEncodersData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  class SonarsData&lt;br /&gt;
  {&lt;br /&gt;
    IntSeq us;&lt;br /&gt;
	int numSonars;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent SonarsData getSonarsData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the three interfaces to gazebo sensors were implemented on gazeboserver's logic.&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-06-06T09:58:09Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Using introrob */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
The API documentation can be found [http://jderobot.org/apidoc/jderobot/5.0/doc/html/index.html here].&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
JDErobot 5.0 is a collection of components that communicate between them through [http://www.zeroc.com/ice.html ICE]. These components use a set of defined interfaces to interact with each other, being this the only coupling mechanism between components. This way we can achieve what we were trying with older versions of JDErobot, a components based architecture, but without the drawbacks of trying to program middleware related code.&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running components ==&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some entries are required, like the ones defining the component address, if we are connecting our components directly or the locator service if we are using IceGrid. And others are optional, that can define the behavior of our component in some cases. Each component have a set of configuration entries to set its specific parts. A common configuration file may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we can see the component's name ''CameraSrv'' and the define endpoints, that are the network addresses where our component will tie. The syntax to describe an endpoint is explained in the ICE manual. If we are using a locator service we don't need to define an specific address since we won't connect directly to it but with the indirect proxy that the locator will give us. In this case the configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default&lt;br /&gt;
CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this last case, we have to define an unique ''AdapterId'' that will be used to ask to the locator service, since may exists more than one instance of our server.&lt;br /&gt;
&lt;br /&gt;
The rest of the configuration is used by the component implementation, in this case to set the video sources.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
== Programming style ==&lt;br /&gt;
JDErobot code is documented using doxygen. You can find more information [[FAQ#Documenting_the_code|here]].&lt;br /&gt;
&lt;br /&gt;
=Interfaces=&lt;br /&gt;
==ImageProvider==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/image.ice Slice definition]&lt;br /&gt;
==Camera==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/camera.ice Slice definition]&lt;br /&gt;
==RecordingManager==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/recording.ice Slice definition]&lt;br /&gt;
==Motors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/motors.ice Slice definition]&lt;br /&gt;
==Laser==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/laser.ice Slice definition]&lt;br /&gt;
==Encoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/encoders.ice Slice definition]&lt;br /&gt;
==PTMotors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptmotors.ice Slice definition]&lt;br /&gt;
==PTEncoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptencoders.ice Slice definition]&lt;br /&gt;
==Sonars==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/sonars.ice Slice definition]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
In this section, we describe the main components distributed with JDErobot 5.0. They go from simple components to access hardware, to other more complex that process data and produce derived data, like motion detection from images. They are a valuable examples to create new components as well, so we will describe how to use them and how they work.&lt;br /&gt;
&lt;br /&gt;
==cameraserver==&lt;br /&gt;
Cameraserver is a component to serve N cameras, either real or simulated from a video file. It uses [http://www.gstreamer.net/ gstreamer] internally to handle and to process the video sources. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using cameraserver===&lt;br /&gt;
To use cameraserver we just have to edit the component's configuration to set the video sources and to set the served formats of our cameras. We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
===Inside cameraserver===&lt;br /&gt;
&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
==gazeboserver==&lt;br /&gt;
gazeboserver is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
gazeboserver bases its capabilities on gazebo platform comunication. Any gazeboserver provided interface requieres a equivalent service in gazebo. As mentioned above, for the time beign, the gazebo robot reference is fixed at code level and it maps &amp;quot;robot1&amp;quot; sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;model:Pioneer2DX&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;robot1&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;xyz&amp;gt;2. 2. 0.200&amp;lt;/xyz&amp;gt;&lt;br /&gt;
     &amp;lt;rpy&amp;gt;0.0 0.0 0.0&amp;lt;/rpy&amp;gt;	&lt;br /&gt;
    &amp;lt;model:SickLMS200&amp;gt;&lt;br /&gt;
      &amp;lt;id&amp;gt;laser1&amp;lt;/id&amp;gt;&lt;br /&gt;
      &amp;lt;xyz&amp;gt;0.0 0.0 0.00&amp;lt;/xyz&amp;gt;	&lt;br /&gt;
     &amp;lt;model:SonyVID30&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;camera1&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;xyz&amp;gt;0 0 0.2&amp;lt;/xyz&amp;gt;&lt;br /&gt;
	&amp;lt;renderMethod&amp;gt;xlib&amp;lt;/renderMethod&amp;gt;&lt;br /&gt;
      &amp;lt;/model:SonyVID30&amp;gt;&lt;br /&gt;
      &amp;lt;rayCount&amp;gt;180&amp;lt;/rayCount&amp;gt;&lt;br /&gt;
      &amp;lt;rangeCount&amp;gt;180&amp;lt;/rangeCount&amp;gt;&lt;br /&gt;
    &amp;lt;/model:SickLMS200&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/model:Pioneer2DX&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
==introrob==&lt;br /&gt;
introrob is a component to visualize robot sensor information and to control its actuators. It's implemented with a GUI that facilitates the usage of these capabilities. The initial version was develop for working with gazeboserver component though it's possible to adapt its configuration file to refer to different data signals.&lt;br /&gt;
&lt;br /&gt;
As it was supported the previous version of JDERobot 4.3, &lt;br /&gt;
&lt;br /&gt;
to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
&lt;br /&gt;
Nothing but GUI for introbot user. It's also posible to encapsulate a different navigation code in an specific class, with all sensor data available and actuators interfactes, in order to change robots behaviour when &amp;quot;Your code&amp;quot; mode is selected. It's very useful to test different navigation algorithms on different gazebo worlds. See below, more information about how to adaptate navigation logic for automatic mode.&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
Note: All of them are served by gazeboserver altough they can be individually redirect to different providers (i.e: camera coming from cameraserver and not from gazeboserver).&lt;br /&gt;
&lt;br /&gt;
===Configuring introrob===&lt;br /&gt;
To use introrob we just have to edit the component's configuration to set the sensor and actuator pointers. This current specification will be improved during the next months:&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Introrob.Camera.Proxy=cameraA:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Motors.Proxy=motors1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Laser.Proxy=laser1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Encoders.Proxy=encoders1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the format &amp;quot;Introrob.X.Proxy=Y:Z&amp;quot;, it is possible to specify the individual services to be used. X corresponds to sensor or actuator name: Motors, PTMotors, Encoders, PTEncoders, Sonars, Camera, Laser. Y refers to service name (how it has been denominated at ICE interface). The example shows the default name given by gazeboserver. Finally, Z means the network connection path (protocol, IP address and TCP port).&lt;br /&gt;
&lt;br /&gt;
===Using introrob===&lt;br /&gt;
Introrob provides the following interface by default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;400&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/introrob-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the left side of the window, a scrolled canvas area is shown for representing robot's map, and laser and sonar measurements. It's also a zoom bar which can be used to increase or decrease the pizel per unit factor on cavas rectangle.&lt;br /&gt;
&lt;br /&gt;
On the right side, from top to bottom, we find first a radio button menu which allows the user to chose between manual navigation and automatic one (base on your code behind). If manual navigation is pressed, two scrolled bars are displayed, one to select V (linear speed) value and the other to do the same with W (angular speed). Both have a reset button bellow, in order to change the value to 0 (stop linear or radial speed).&lt;br /&gt;
&lt;br /&gt;
In both modes (automatic or manual), it's possible to pause the navigation by clicking &amp;quot;stop&amp;quot; button. It's a toggled button type, so it can be pressed twice to enable again the navigation.&lt;br /&gt;
&lt;br /&gt;
Finally, camera display is represented in the righ-bottom corner. It's also provides frame-per-second (fps) figure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;400&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/introrob-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Changing introrob automatic navigation logic===&lt;br /&gt;
Introrob has the following classes distribution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  ICE API &amp;lt;----&amp;gt; introrob ------&amp;gt; introrobgui ---&amp;gt; introrobcanvas&lt;br /&gt;
                     |            &lt;br /&gt;
                     |&lt;br /&gt;
                     v&lt;br /&gt;
                  navega&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
introrob class is the main class, responsable for communicating with ICE services, open graphical interface and feed it with sensor data, cath menu events and implement a reaction and and coordinate navigation changes.&lt;br /&gt;
&lt;br /&gt;
introrobgui is accountable for any GUI update and manual navigation event catch. It uses introrobcanvas to represent canvas area information.&lt;br /&gt;
&lt;br /&gt;
navega embbeds automatic mode navigation logic. All this logic is located at navegacion method, inside navega class. From this method, it's possible to access to any sensor information and save V, W values robot behaviour update.&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-06-06T09:57:42Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* introrob */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
The API documentation can be found [http://jderobot.org/apidoc/jderobot/5.0/doc/html/index.html here].&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
JDErobot 5.0 is a collection of components that communicate between them through [http://www.zeroc.com/ice.html ICE]. These components use a set of defined interfaces to interact with each other, being this the only coupling mechanism between components. This way we can achieve what we were trying with older versions of JDErobot, a components based architecture, but without the drawbacks of trying to program middleware related code.&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running components ==&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some entries are required, like the ones defining the component address, if we are connecting our components directly or the locator service if we are using IceGrid. And others are optional, that can define the behavior of our component in some cases. Each component have a set of configuration entries to set its specific parts. A common configuration file may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we can see the component's name ''CameraSrv'' and the define endpoints, that are the network addresses where our component will tie. The syntax to describe an endpoint is explained in the ICE manual. If we are using a locator service we don't need to define an specific address since we won't connect directly to it but with the indirect proxy that the locator will give us. In this case the configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default&lt;br /&gt;
CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this last case, we have to define an unique ''AdapterId'' that will be used to ask to the locator service, since may exists more than one instance of our server.&lt;br /&gt;
&lt;br /&gt;
The rest of the configuration is used by the component implementation, in this case to set the video sources.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
== Programming style ==&lt;br /&gt;
JDErobot code is documented using doxygen. You can find more information [[FAQ#Documenting_the_code|here]].&lt;br /&gt;
&lt;br /&gt;
=Interfaces=&lt;br /&gt;
==ImageProvider==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/image.ice Slice definition]&lt;br /&gt;
==Camera==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/camera.ice Slice definition]&lt;br /&gt;
==RecordingManager==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/recording.ice Slice definition]&lt;br /&gt;
==Motors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/motors.ice Slice definition]&lt;br /&gt;
==Laser==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/laser.ice Slice definition]&lt;br /&gt;
==Encoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/encoders.ice Slice definition]&lt;br /&gt;
==PTMotors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptmotors.ice Slice definition]&lt;br /&gt;
==PTEncoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptencoders.ice Slice definition]&lt;br /&gt;
==Sonars==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/sonars.ice Slice definition]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
In this section, we describe the main components distributed with JDErobot 5.0. They go from simple components to access hardware, to other more complex that process data and produce derived data, like motion detection from images. They are a valuable examples to create new components as well, so we will describe how to use them and how they work.&lt;br /&gt;
&lt;br /&gt;
==cameraserver==&lt;br /&gt;
Cameraserver is a component to serve N cameras, either real or simulated from a video file. It uses [http://www.gstreamer.net/ gstreamer] internally to handle and to process the video sources. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using cameraserver===&lt;br /&gt;
To use cameraserver we just have to edit the component's configuration to set the video sources and to set the served formats of our cameras. We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
===Inside cameraserver===&lt;br /&gt;
&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
==gazeboserver==&lt;br /&gt;
gazeboserver is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
gazeboserver bases its capabilities on gazebo platform comunication. Any gazeboserver provided interface requieres a equivalent service in gazebo. As mentioned above, for the time beign, the gazebo robot reference is fixed at code level and it maps &amp;quot;robot1&amp;quot; sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;model:Pioneer2DX&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;robot1&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;xyz&amp;gt;2. 2. 0.200&amp;lt;/xyz&amp;gt;&lt;br /&gt;
     &amp;lt;rpy&amp;gt;0.0 0.0 0.0&amp;lt;/rpy&amp;gt;	&lt;br /&gt;
    &amp;lt;model:SickLMS200&amp;gt;&lt;br /&gt;
      &amp;lt;id&amp;gt;laser1&amp;lt;/id&amp;gt;&lt;br /&gt;
      &amp;lt;xyz&amp;gt;0.0 0.0 0.00&amp;lt;/xyz&amp;gt;	&lt;br /&gt;
     &amp;lt;model:SonyVID30&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;camera1&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;xyz&amp;gt;0 0 0.2&amp;lt;/xyz&amp;gt;&lt;br /&gt;
	&amp;lt;renderMethod&amp;gt;xlib&amp;lt;/renderMethod&amp;gt;&lt;br /&gt;
      &amp;lt;/model:SonyVID30&amp;gt;&lt;br /&gt;
      &amp;lt;rayCount&amp;gt;180&amp;lt;/rayCount&amp;gt;&lt;br /&gt;
      &amp;lt;rangeCount&amp;gt;180&amp;lt;/rangeCount&amp;gt;&lt;br /&gt;
    &amp;lt;/model:SickLMS200&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/model:Pioneer2DX&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
==introrob==&lt;br /&gt;
introrob is a component to visualize robot sensor information and to control its actuators. It's implemented with a GUI that facilitates the usage of these capabilities. The initial version was develop for working with gazeboserver component though it's possible to adapt its configuration file to refer to different data signals.&lt;br /&gt;
&lt;br /&gt;
As it was supported the previous version of JDERobot 4.3, &lt;br /&gt;
&lt;br /&gt;
to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
&lt;br /&gt;
Nothing but GUI for introbot user. It's also posible to encapsulate a different navigation code in an specific class, with all sensor data available and actuators interfactes, in order to change robots behaviour when &amp;quot;Your code&amp;quot; mode is selected. It's very useful to test different navigation algorithms on different gazebo worlds. See below, more information about how to adaptate navigation logic for automatic mode.&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
Note: All of them are served by gazeboserver altough they can be individually redirect to different providers (i.e: camera coming from cameraserver and not from gazeboserver).&lt;br /&gt;
&lt;br /&gt;
===Configuring introrob===&lt;br /&gt;
To use introrob we just have to edit the component's configuration to set the sensor and actuator pointers. This current specification will be improved during the next months:&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Introrob.Camera.Proxy=cameraA:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Motors.Proxy=motors1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Laser.Proxy=laser1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Encoders.Proxy=encoders1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the format &amp;quot;Introrob.X.Proxy=Y:Z&amp;quot;, it is possible to specify the individual services to be used. X corresponds to sensor or actuator name: Motors, PTMotors, Encoders, PTEncoders, Sonars, Camera, Laser. Y refers to service name (how it has been denominated at ICE interface). The example shows the default name given by gazeboserver. Finally, Z means the network connection path (protocol, IP address and TCP port).&lt;br /&gt;
&lt;br /&gt;
===Using introrob===&lt;br /&gt;
Introrob provides the following interface by default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;400&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/introrob-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the left side of the window, a scrolled canvas area is shown for representing robot's map, and laser and sonar measurements. It's also a zoom bar which can be used to increase or decrease the pizel per unit factor on cavas rectangle.&lt;br /&gt;
&lt;br /&gt;
On the right side, from top to bottom, we find first a radio button menu which allows the user to chose between manual navigation and automatic one (base on your code behind). If manual navigation is pressed, two scrolled bars are displayed, one to select V (linear speed) value and the other to do the same with W (angular speed). Both have a reset button bellow, in order to change the value to 0 (stop linear or radial speed).&lt;br /&gt;
&lt;br /&gt;
In both modes (automatic or manual), it's possible to pause the navigation by clicking &amp;quot;stop&amp;quot; button. It's a toggled button type, so it can be pressed twice to enable again the navigation.&lt;br /&gt;
&lt;br /&gt;
Finally, camera display is represented in the righ-bottom corner. It's also provides frame-per-second (fps) figure.  &lt;br /&gt;
&lt;br /&gt;
===Changing introrob automatic navigation logic===&lt;br /&gt;
Introrob has the following classes distribution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  ICE API &amp;lt;----&amp;gt; introrob ------&amp;gt; introrobgui ---&amp;gt; introrobcanvas&lt;br /&gt;
                     |            &lt;br /&gt;
                     |&lt;br /&gt;
                     v&lt;br /&gt;
                  navega&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
introrob class is the main class, responsable for communicating with ICE services, open graphical interface and feed it with sensor data, cath menu events and implement a reaction and and coordinate navigation changes.&lt;br /&gt;
&lt;br /&gt;
introrobgui is accountable for any GUI update and manual navigation event catch. It uses introrobcanvas to represent canvas area information.&lt;br /&gt;
&lt;br /&gt;
navega embbeds automatic mode navigation logic. All this logic is located at navegacion method, inside navega class. From this method, it's possible to access to any sensor information and save V, W values robot behaviour update.&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-06-06T09:29:45Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* introrob */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
The API documentation can be found [http://jderobot.org/apidoc/jderobot/5.0/doc/html/index.html here].&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
JDErobot 5.0 is a collection of components that communicate between them through [http://www.zeroc.com/ice.html ICE]. These components use a set of defined interfaces to interact with each other, being this the only coupling mechanism between components. This way we can achieve what we were trying with older versions of JDErobot, a components based architecture, but without the drawbacks of trying to program middleware related code.&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running components ==&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some entries are required, like the ones defining the component address, if we are connecting our components directly or the locator service if we are using IceGrid. And others are optional, that can define the behavior of our component in some cases. Each component have a set of configuration entries to set its specific parts. A common configuration file may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we can see the component's name ''CameraSrv'' and the define endpoints, that are the network addresses where our component will tie. The syntax to describe an endpoint is explained in the ICE manual. If we are using a locator service we don't need to define an specific address since we won't connect directly to it but with the indirect proxy that the locator will give us. In this case the configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default&lt;br /&gt;
CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this last case, we have to define an unique ''AdapterId'' that will be used to ask to the locator service, since may exists more than one instance of our server.&lt;br /&gt;
&lt;br /&gt;
The rest of the configuration is used by the component implementation, in this case to set the video sources.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
== Programming style ==&lt;br /&gt;
JDErobot code is documented using doxygen. You can find more information [[FAQ#Documenting_the_code|here]].&lt;br /&gt;
&lt;br /&gt;
=Interfaces=&lt;br /&gt;
==ImageProvider==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/image.ice Slice definition]&lt;br /&gt;
==Camera==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/camera.ice Slice definition]&lt;br /&gt;
==RecordingManager==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/recording.ice Slice definition]&lt;br /&gt;
==Motors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/motors.ice Slice definition]&lt;br /&gt;
==Laser==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/laser.ice Slice definition]&lt;br /&gt;
==Encoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/encoders.ice Slice definition]&lt;br /&gt;
==PTMotors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptmotors.ice Slice definition]&lt;br /&gt;
==PTEncoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptencoders.ice Slice definition]&lt;br /&gt;
==Sonars==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/sonars.ice Slice definition]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
In this section, we describe the main components distributed with JDErobot 5.0. They go from simple components to access hardware, to other more complex that process data and produce derived data, like motion detection from images. They are a valuable examples to create new components as well, so we will describe how to use them and how they work.&lt;br /&gt;
&lt;br /&gt;
==cameraserver==&lt;br /&gt;
Cameraserver is a component to serve N cameras, either real or simulated from a video file. It uses [http://www.gstreamer.net/ gstreamer] internally to handle and to process the video sources. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using cameraserver===&lt;br /&gt;
To use cameraserver we just have to edit the component's configuration to set the video sources and to set the served formats of our cameras. We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
===Inside cameraserver===&lt;br /&gt;
&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
==gazeboserver==&lt;br /&gt;
gazeboserver is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
gazeboserver bases its capabilities on gazebo platform comunication. Any gazeboserver provided interface requieres a equivalent service in gazebo. As mentioned above, for the time beign, the gazebo robot reference is fixed at code level and it maps &amp;quot;robot1&amp;quot; sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;model:Pioneer2DX&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;robot1&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;xyz&amp;gt;2. 2. 0.200&amp;lt;/xyz&amp;gt;&lt;br /&gt;
     &amp;lt;rpy&amp;gt;0.0 0.0 0.0&amp;lt;/rpy&amp;gt;	&lt;br /&gt;
    &amp;lt;model:SickLMS200&amp;gt;&lt;br /&gt;
      &amp;lt;id&amp;gt;laser1&amp;lt;/id&amp;gt;&lt;br /&gt;
      &amp;lt;xyz&amp;gt;0.0 0.0 0.00&amp;lt;/xyz&amp;gt;	&lt;br /&gt;
     &amp;lt;model:SonyVID30&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;camera1&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;xyz&amp;gt;0 0 0.2&amp;lt;/xyz&amp;gt;&lt;br /&gt;
	&amp;lt;renderMethod&amp;gt;xlib&amp;lt;/renderMethod&amp;gt;&lt;br /&gt;
      &amp;lt;/model:SonyVID30&amp;gt;&lt;br /&gt;
      &amp;lt;rayCount&amp;gt;180&amp;lt;/rayCount&amp;gt;&lt;br /&gt;
      &amp;lt;rangeCount&amp;gt;180&amp;lt;/rangeCount&amp;gt;&lt;br /&gt;
    &amp;lt;/model:SickLMS200&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/model:Pioneer2DX&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
==introrob==&lt;br /&gt;
introrob is a component to visualize robot sensor information and to control its actuators. It's implemented with a GUI that facilitates the usage of these capabilities. The initial version was develop for working with gazeboserver component though it's possible to adapt its configuration file to refer to different data signals.&lt;br /&gt;
&lt;br /&gt;
As it was supported the previous version of JDERobot 4.3, &lt;br /&gt;
&lt;br /&gt;
to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
&lt;br /&gt;
Nothing but GUI for introbot user. It's also posible to encapsulate a different navigation code in an specific class, with all sensor data available and actuators interfactes, in order to change robots behaviour when &amp;quot;Your code&amp;quot; mode is selected. It's very useful to test different navigation algorithms on different gazebo worlds. See below, more information about how to adaptate navigation logic for automatic mode.&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
Note: All of them are served by gazeboserver altough they can be individually redirect to different providers (i.e: camera coming from cameraserver and not from gazeboserver).&lt;br /&gt;
&lt;br /&gt;
===Configuring introrob===&lt;br /&gt;
To use introrob we just have to edit the component's configuration to set the sensor and actuator pointers. This current specification will be improved during the next months:&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Introrob.Camera.Proxy=cameraA:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Motors.Proxy=motors1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Laser.Proxy=laser1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Encoders.Proxy=encoders1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the format &amp;quot;Introrob.X.Proxy=Y:Z&amp;quot;, it is possible to specify the individual services to be used. X corresponds to sensor or actuator name: Motors, PTMotors, Encoders, PTEncoders, Sonars, Camera, Laser. Y refers to service name (how it has been denominated at ICE interface). The example shows the default name given by gazeboserver. Finally, Z means the network connection path (protocol, IP address and TCP port).&lt;br /&gt;
&lt;br /&gt;
===Using introrob===&lt;br /&gt;
Introrob provides the following interface by default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;400&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/introrob-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-06-06T09:28:13Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* introrob */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
The API documentation can be found [http://jderobot.org/apidoc/jderobot/5.0/doc/html/index.html here].&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
JDErobot 5.0 is a collection of components that communicate between them through [http://www.zeroc.com/ice.html ICE]. These components use a set of defined interfaces to interact with each other, being this the only coupling mechanism between components. This way we can achieve what we were trying with older versions of JDErobot, a components based architecture, but without the drawbacks of trying to program middleware related code.&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running components ==&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some entries are required, like the ones defining the component address, if we are connecting our components directly or the locator service if we are using IceGrid. And others are optional, that can define the behavior of our component in some cases. Each component have a set of configuration entries to set its specific parts. A common configuration file may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we can see the component's name ''CameraSrv'' and the define endpoints, that are the network addresses where our component will tie. The syntax to describe an endpoint is explained in the ICE manual. If we are using a locator service we don't need to define an specific address since we won't connect directly to it but with the indirect proxy that the locator will give us. In this case the configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default&lt;br /&gt;
CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this last case, we have to define an unique ''AdapterId'' that will be used to ask to the locator service, since may exists more than one instance of our server.&lt;br /&gt;
&lt;br /&gt;
The rest of the configuration is used by the component implementation, in this case to set the video sources.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
== Programming style ==&lt;br /&gt;
JDErobot code is documented using doxygen. You can find more information [[FAQ#Documenting_the_code|here]].&lt;br /&gt;
&lt;br /&gt;
=Interfaces=&lt;br /&gt;
==ImageProvider==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/image.ice Slice definition]&lt;br /&gt;
==Camera==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/camera.ice Slice definition]&lt;br /&gt;
==RecordingManager==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/recording.ice Slice definition]&lt;br /&gt;
==Motors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/motors.ice Slice definition]&lt;br /&gt;
==Laser==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/laser.ice Slice definition]&lt;br /&gt;
==Encoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/encoders.ice Slice definition]&lt;br /&gt;
==PTMotors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptmotors.ice Slice definition]&lt;br /&gt;
==PTEncoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptencoders.ice Slice definition]&lt;br /&gt;
==Sonars==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/sonars.ice Slice definition]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
In this section, we describe the main components distributed with JDErobot 5.0. They go from simple components to access hardware, to other more complex that process data and produce derived data, like motion detection from images. They are a valuable examples to create new components as well, so we will describe how to use them and how they work.&lt;br /&gt;
&lt;br /&gt;
==cameraserver==&lt;br /&gt;
Cameraserver is a component to serve N cameras, either real or simulated from a video file. It uses [http://www.gstreamer.net/ gstreamer] internally to handle and to process the video sources. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using cameraserver===&lt;br /&gt;
To use cameraserver we just have to edit the component's configuration to set the video sources and to set the served formats of our cameras. We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
===Inside cameraserver===&lt;br /&gt;
&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
==gazeboserver==&lt;br /&gt;
gazeboserver is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
gazeboserver bases its capabilities on gazebo platform comunication. Any gazeboserver provided interface requieres a equivalent service in gazebo. As mentioned above, for the time beign, the gazebo robot reference is fixed at code level and it maps &amp;quot;robot1&amp;quot; sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;model:Pioneer2DX&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;robot1&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;xyz&amp;gt;2. 2. 0.200&amp;lt;/xyz&amp;gt;&lt;br /&gt;
     &amp;lt;rpy&amp;gt;0.0 0.0 0.0&amp;lt;/rpy&amp;gt;	&lt;br /&gt;
    &amp;lt;model:SickLMS200&amp;gt;&lt;br /&gt;
      &amp;lt;id&amp;gt;laser1&amp;lt;/id&amp;gt;&lt;br /&gt;
      &amp;lt;xyz&amp;gt;0.0 0.0 0.00&amp;lt;/xyz&amp;gt;	&lt;br /&gt;
     &amp;lt;model:SonyVID30&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;camera1&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;xyz&amp;gt;0 0 0.2&amp;lt;/xyz&amp;gt;&lt;br /&gt;
	&amp;lt;renderMethod&amp;gt;xlib&amp;lt;/renderMethod&amp;gt;&lt;br /&gt;
      &amp;lt;/model:SonyVID30&amp;gt;&lt;br /&gt;
      &amp;lt;rayCount&amp;gt;180&amp;lt;/rayCount&amp;gt;&lt;br /&gt;
      &amp;lt;rangeCount&amp;gt;180&amp;lt;/rangeCount&amp;gt;&lt;br /&gt;
    &amp;lt;/model:SickLMS200&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/model:Pioneer2DX&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
==introrob==&lt;br /&gt;
introrob is a component to visualize robot sensor information and to control its actuators. It's implemented with a GUI that facilitates the usage of these capabilities. The initial version was develop for working with gazeboserver component though it's possible to adapt its configuration file to refer to different data signals.&lt;br /&gt;
&lt;br /&gt;
As it was supported the previous version of JDERobot 4.3, &lt;br /&gt;
&lt;br /&gt;
to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
&lt;br /&gt;
Nothing but GUI for introbot user. It's also posible to encapsulate a different navigation code in an specific class, with all sensor data available and actuators interfactes, in order to change robots behaviour when &amp;quot;Your code&amp;quot; mode is selected. It's very useful to test different navigation algorithms on different gazebo worlds. See below, more information about how to adaptate navigation logic for automatic mode.&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
Note: All of them are served by gazeboserver altough they can be individually redirect to different providers (i.e: camera coming from cameraserver and not from gazeboserver).&lt;br /&gt;
&lt;br /&gt;
===Configuring introrob===&lt;br /&gt;
To use introrob we just have to edit the component's configuration to set the sensor and actuator pointers. This current specification will be improved during the next months:&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Introrob.Camera.Proxy=cameraA:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Motors.Proxy=motors1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Laser.Proxy=laser1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
Introrob.Encoders.Proxy=encoders1:tcp -h 127.0.0.1 -p 9999&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the format &amp;quot;Introrob.X.Proxy=Y:Z&amp;quot;, it is possible to specify the individual services to be used. X corresponds to sensor or actuator name: Motors, PTMotors, Encoders, PTEncoders, Sonars, Camera, Laser. Y refers to service name (how it has been denominated at ICE interface). The example shows the default name given by gazeboserver. Finally, Z means the network connection path (protocol, IP address and TCP port).&lt;br /&gt;
&lt;br /&gt;
===Configuring introrob===&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-06-06T09:20:53Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* introrob */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
The API documentation can be found [http://jderobot.org/apidoc/jderobot/5.0/doc/html/index.html here].&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
JDErobot 5.0 is a collection of components that communicate between them through [http://www.zeroc.com/ice.html ICE]. These components use a set of defined interfaces to interact with each other, being this the only coupling mechanism between components. This way we can achieve what we were trying with older versions of JDErobot, a components based architecture, but without the drawbacks of trying to program middleware related code.&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running components ==&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some entries are required, like the ones defining the component address, if we are connecting our components directly or the locator service if we are using IceGrid. And others are optional, that can define the behavior of our component in some cases. Each component have a set of configuration entries to set its specific parts. A common configuration file may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we can see the component's name ''CameraSrv'' and the define endpoints, that are the network addresses where our component will tie. The syntax to describe an endpoint is explained in the ICE manual. If we are using a locator service we don't need to define an specific address since we won't connect directly to it but with the indirect proxy that the locator will give us. In this case the configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default&lt;br /&gt;
CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this last case, we have to define an unique ''AdapterId'' that will be used to ask to the locator service, since may exists more than one instance of our server.&lt;br /&gt;
&lt;br /&gt;
The rest of the configuration is used by the component implementation, in this case to set the video sources.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
== Programming style ==&lt;br /&gt;
JDErobot code is documented using doxygen. You can find more information [[FAQ#Documenting_the_code|here]].&lt;br /&gt;
&lt;br /&gt;
=Interfaces=&lt;br /&gt;
==ImageProvider==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/image.ice Slice definition]&lt;br /&gt;
==Camera==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/camera.ice Slice definition]&lt;br /&gt;
==RecordingManager==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/recording.ice Slice definition]&lt;br /&gt;
==Motors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/motors.ice Slice definition]&lt;br /&gt;
==Laser==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/laser.ice Slice definition]&lt;br /&gt;
==Encoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/encoders.ice Slice definition]&lt;br /&gt;
==PTMotors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptmotors.ice Slice definition]&lt;br /&gt;
==PTEncoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptencoders.ice Slice definition]&lt;br /&gt;
==Sonars==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/sonars.ice Slice definition]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
In this section, we describe the main components distributed with JDErobot 5.0. They go from simple components to access hardware, to other more complex that process data and produce derived data, like motion detection from images. They are a valuable examples to create new components as well, so we will describe how to use them and how they work.&lt;br /&gt;
&lt;br /&gt;
==cameraserver==&lt;br /&gt;
Cameraserver is a component to serve N cameras, either real or simulated from a video file. It uses [http://www.gstreamer.net/ gstreamer] internally to handle and to process the video sources. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using cameraserver===&lt;br /&gt;
To use cameraserver we just have to edit the component's configuration to set the video sources and to set the served formats of our cameras. We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
===Inside cameraserver===&lt;br /&gt;
&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
==gazeboserver==&lt;br /&gt;
gazeboserver is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
gazeboserver bases its capabilities on gazebo platform comunication. Any gazeboserver provided interface requieres a equivalent service in gazebo. As mentioned above, for the time beign, the gazebo robot reference is fixed at code level and it maps &amp;quot;robot1&amp;quot; sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;model:Pioneer2DX&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;robot1&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;xyz&amp;gt;2. 2. 0.200&amp;lt;/xyz&amp;gt;&lt;br /&gt;
     &amp;lt;rpy&amp;gt;0.0 0.0 0.0&amp;lt;/rpy&amp;gt;	&lt;br /&gt;
    &amp;lt;model:SickLMS200&amp;gt;&lt;br /&gt;
      &amp;lt;id&amp;gt;laser1&amp;lt;/id&amp;gt;&lt;br /&gt;
      &amp;lt;xyz&amp;gt;0.0 0.0 0.00&amp;lt;/xyz&amp;gt;	&lt;br /&gt;
     &amp;lt;model:SonyVID30&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;camera1&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;xyz&amp;gt;0 0 0.2&amp;lt;/xyz&amp;gt;&lt;br /&gt;
	&amp;lt;renderMethod&amp;gt;xlib&amp;lt;/renderMethod&amp;gt;&lt;br /&gt;
      &amp;lt;/model:SonyVID30&amp;gt;&lt;br /&gt;
      &amp;lt;rayCount&amp;gt;180&amp;lt;/rayCount&amp;gt;&lt;br /&gt;
      &amp;lt;rangeCount&amp;gt;180&amp;lt;/rangeCount&amp;gt;&lt;br /&gt;
    &amp;lt;/model:SickLMS200&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/model:Pioneer2DX&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
==introrob==&lt;br /&gt;
introrob is a component to visualize robot sensor information and to control its actuators. It's implemented with a GUI that facilitates the usage of these capabilities. The initial version was develop for working with gazeboserver component though it's possible to adapt its configuration file to refer to different data signals.&lt;br /&gt;
&lt;br /&gt;
As it was supported the previous version of JDERobot 4.3, &lt;br /&gt;
&lt;br /&gt;
to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
&lt;br /&gt;
Nothing but GUI for introbot user. It's also posible to encapsulate a different navigation code in an specific class, with all sensor data available and actuators interfactes, in order to change robots behaviour when &amp;quot;Your code&amp;quot; mode is selected. It's very useful to test different navigation algorithms on different gazebo worlds. See below, more information about how to adaptate navigation logic for automatic mode.&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
Note: Al of them are served by gazeboserver altough they can be individually redirect to different providers (i.e: camera coming from cameraserver and not from gazeboserver).&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-06-06T09:09:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Required Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
The API documentation can be found [http://jderobot.org/apidoc/jderobot/5.0/doc/html/index.html here].&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
JDErobot 5.0 is a collection of components that communicate between them through [http://www.zeroc.com/ice.html ICE]. These components use a set of defined interfaces to interact with each other, being this the only coupling mechanism between components. This way we can achieve what we were trying with older versions of JDErobot, a components based architecture, but without the drawbacks of trying to program middleware related code.&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running components ==&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some entries are required, like the ones defining the component address, if we are connecting our components directly or the locator service if we are using IceGrid. And others are optional, that can define the behavior of our component in some cases. Each component have a set of configuration entries to set its specific parts. A common configuration file may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we can see the component's name ''CameraSrv'' and the define endpoints, that are the network addresses where our component will tie. The syntax to describe an endpoint is explained in the ICE manual. If we are using a locator service we don't need to define an specific address since we won't connect directly to it but with the indirect proxy that the locator will give us. In this case the configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default&lt;br /&gt;
CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this last case, we have to define an unique ''AdapterId'' that will be used to ask to the locator service, since may exists more than one instance of our server.&lt;br /&gt;
&lt;br /&gt;
The rest of the configuration is used by the component implementation, in this case to set the video sources.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
== Programming style ==&lt;br /&gt;
JDErobot code is documented using doxygen. You can find more information [[FAQ#Documenting_the_code|here]].&lt;br /&gt;
&lt;br /&gt;
=Interfaces=&lt;br /&gt;
==ImageProvider==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/image.ice Slice definition]&lt;br /&gt;
==Camera==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/camera.ice Slice definition]&lt;br /&gt;
==RecordingManager==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/recording.ice Slice definition]&lt;br /&gt;
==Motors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/motors.ice Slice definition]&lt;br /&gt;
==Laser==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/laser.ice Slice definition]&lt;br /&gt;
==Encoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/encoders.ice Slice definition]&lt;br /&gt;
==PTMotors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptmotors.ice Slice definition]&lt;br /&gt;
==PTEncoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptencoders.ice Slice definition]&lt;br /&gt;
==Sonars==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/sonars.ice Slice definition]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
In this section, we describe the main components distributed with JDErobot 5.0. They go from simple components to access hardware, to other more complex that process data and produce derived data, like motion detection from images. They are a valuable examples to create new components as well, so we will describe how to use them and how they work.&lt;br /&gt;
&lt;br /&gt;
==cameraserver==&lt;br /&gt;
Cameraserver is a component to serve N cameras, either real or simulated from a video file. It uses [http://www.gstreamer.net/ gstreamer] internally to handle and to process the video sources. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using cameraserver===&lt;br /&gt;
To use cameraserver we just have to edit the component's configuration to set the video sources and to set the served formats of our cameras. We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
===Inside cameraserver===&lt;br /&gt;
&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
==gazeboserver==&lt;br /&gt;
gazeboserver is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
gazeboserver bases its capabilities on gazebo platform comunication. Any gazeboserver provided interface requieres a equivalent service in gazebo. As mentioned above, for the time beign, the gazebo robot reference is fixed at code level and it maps &amp;quot;robot1&amp;quot; sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;model:Pioneer2DX&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;robot1&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;xyz&amp;gt;2. 2. 0.200&amp;lt;/xyz&amp;gt;&lt;br /&gt;
     &amp;lt;rpy&amp;gt;0.0 0.0 0.0&amp;lt;/rpy&amp;gt;	&lt;br /&gt;
    &amp;lt;model:SickLMS200&amp;gt;&lt;br /&gt;
      &amp;lt;id&amp;gt;laser1&amp;lt;/id&amp;gt;&lt;br /&gt;
      &amp;lt;xyz&amp;gt;0.0 0.0 0.00&amp;lt;/xyz&amp;gt;	&lt;br /&gt;
     &amp;lt;model:SonyVID30&amp;gt;&lt;br /&gt;
        &amp;lt;id&amp;gt;camera1&amp;lt;/id&amp;gt;&lt;br /&gt;
        &amp;lt;xyz&amp;gt;0 0 0.2&amp;lt;/xyz&amp;gt;&lt;br /&gt;
	&amp;lt;renderMethod&amp;gt;xlib&amp;lt;/renderMethod&amp;gt;&lt;br /&gt;
      &amp;lt;/model:SonyVID30&amp;gt;&lt;br /&gt;
      &amp;lt;rayCount&amp;gt;180&amp;lt;/rayCount&amp;gt;&lt;br /&gt;
      &amp;lt;rangeCount&amp;gt;180&amp;lt;/rangeCount&amp;gt;&lt;br /&gt;
    &amp;lt;/model:SickLMS200&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/model:Pioneer2DX&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
==introrob==&lt;br /&gt;
introrob is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-06-06T08:58:48Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
The API documentation can be found [http://jderobot.org/apidoc/jderobot/5.0/doc/html/index.html here].&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
JDErobot 5.0 is a collection of components that communicate between them through [http://www.zeroc.com/ice.html ICE]. These components use a set of defined interfaces to interact with each other, being this the only coupling mechanism between components. This way we can achieve what we were trying with older versions of JDErobot, a components based architecture, but without the drawbacks of trying to program middleware related code.&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running components ==&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some entries are required, like the ones defining the component address, if we are connecting our components directly or the locator service if we are using IceGrid. And others are optional, that can define the behavior of our component in some cases. Each component have a set of configuration entries to set its specific parts. A common configuration file may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we can see the component's name ''CameraSrv'' and the define endpoints, that are the network addresses where our component will tie. The syntax to describe an endpoint is explained in the ICE manual. If we are using a locator service we don't need to define an specific address since we won't connect directly to it but with the indirect proxy that the locator will give us. In this case the configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default&lt;br /&gt;
CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this last case, we have to define an unique ''AdapterId'' that will be used to ask to the locator service, since may exists more than one instance of our server.&lt;br /&gt;
&lt;br /&gt;
The rest of the configuration is used by the component implementation, in this case to set the video sources.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
== Programming style ==&lt;br /&gt;
JDErobot code is documented using doxygen. You can find more information [[FAQ#Documenting_the_code|here]].&lt;br /&gt;
&lt;br /&gt;
=Interfaces=&lt;br /&gt;
==ImageProvider==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/image.ice Slice definition]&lt;br /&gt;
==Camera==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/camera.ice Slice definition]&lt;br /&gt;
==RecordingManager==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/recording.ice Slice definition]&lt;br /&gt;
==Motors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/motors.ice Slice definition]&lt;br /&gt;
==Laser==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/laser.ice Slice definition]&lt;br /&gt;
==Encoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/encoders.ice Slice definition]&lt;br /&gt;
==PTMotors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptmotors.ice Slice definition]&lt;br /&gt;
==PTEncoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptencoders.ice Slice definition]&lt;br /&gt;
==Sonars==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/sonars.ice Slice definition]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
In this section, we describe the main components distributed with JDErobot 5.0. They go from simple components to access hardware, to other more complex that process data and produce derived data, like motion detection from images. They are a valuable examples to create new components as well, so we will describe how to use them and how they work.&lt;br /&gt;
&lt;br /&gt;
==cameraserver==&lt;br /&gt;
Cameraserver is a component to serve N cameras, either real or simulated from a video file. It uses [http://www.gstreamer.net/ gstreamer] internally to handle and to process the video sources. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using cameraserver===&lt;br /&gt;
To use cameraserver we just have to edit the component's configuration to set the video sources and to set the served formats of our cameras. We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
===Inside cameraserver===&lt;br /&gt;
&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
==gazeboserver==&lt;br /&gt;
gazeboserver is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
==introrob==&lt;br /&gt;
introrob is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-06-06T08:37:03Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
The API documentation can be found [http://jderobot.org/apidoc/jderobot/5.0/doc/html/index.html here].&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
JDErobot 5.0 is a collection of components that communicate between them through [http://www.zeroc.com/ice.html ICE]. These components use a set of defined interfaces to interact with each other, being this the only coupling mechanism between components. This way we can achieve what we were trying with older versions of JDErobot, a components based architecture, but without the drawbacks of trying to program middleware related code.&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running components ==&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some entries are required, like the ones defining the component address, if we are connecting our components directly or the locator service if we are using IceGrid. And others are optional, that can define the behavior of our component in some cases. Each component have a set of configuration entries to set its specific parts. A common configuration file may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we can see the component's name ''CameraSrv'' and the define endpoints, that are the network addresses where our component will tie. The syntax to describe an endpoint is explained in the ICE manual. If we are using a locator service we don't need to define an specific address since we won't connect directly to it but with the indirect proxy that the locator will give us. In this case the configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default&lt;br /&gt;
CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this last case, we have to define an unique ''AdapterId'' that will be used to ask to the locator service, since may exists more than one instance of our server.&lt;br /&gt;
&lt;br /&gt;
The rest of the configuration is used by the component implementation, in this case to set the video sources.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
== Programming style ==&lt;br /&gt;
JDErobot code is documented using doxygen. You can find more information [[FAQ#Documenting_the_code|here]].&lt;br /&gt;
&lt;br /&gt;
=Interfaces=&lt;br /&gt;
==ImageProvider==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/image.ice Slice definition]&lt;br /&gt;
==Camera==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/camera.ice Slice definition]&lt;br /&gt;
==RecordingManager==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/recording.ice Slice definition]&lt;br /&gt;
==Motors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/motors.ice Slice definition]&lt;br /&gt;
==Laser==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/laser.ice Slice definition]&lt;br /&gt;
==Encoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/encoders.ice Slice definition]&lt;br /&gt;
==PTMotors==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptmotors.ice Slice definition]&lt;br /&gt;
==PTEncoders==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/ptencoders.ice Slice definition]&lt;br /&gt;
==Sonars==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/sonars.ice Slice definition]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
In this section, we describe the main components distributed with JDErobot 5.0. They go from simple components to access hardware, to other more complex that process data and produce derived data, like motion detection from images. They are a valuable examples to create new components as well, so we will describe how to use them and how they work.&lt;br /&gt;
&lt;br /&gt;
==cameraserver==&lt;br /&gt;
Cameraserver is a component to serve N cameras, either real or simulated from a video file. It uses [http://www.gstreamer.net/ gstreamer] internally to handle and to process the video sources. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using cameraserver===&lt;br /&gt;
To use cameraserver we just have to edit the component's configuration to set the video sources and to set the served formats of our cameras. We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
===Inside cameraserver===&lt;br /&gt;
&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
==gazeboserver==&lt;br /&gt;
gazeboserver is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-06-06T08:34:11Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Using gazeboserver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
The API documentation can be found [http://jderobot.org/apidoc/jderobot/5.0/doc/html/index.html here].&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
JDErobot 5.0 is a collection of components that communicate between them through [http://www.zeroc.com/ice.html ICE]. These components use a set of defined interfaces to interact with each other, being this the only coupling mechanism between components. This way we can achieve what we were trying with older versions of JDErobot, a components based architecture, but without the drawbacks of trying to program middleware related code.&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running components ==&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some entries are required, like the ones defining the component address, if we are connecting our components directly or the locator service if we are using IceGrid. And others are optional, that can define the behavior of our component in some cases. Each component have a set of configuration entries to set its specific parts. A common configuration file may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we can see the component's name ''CameraSrv'' and the define endpoints, that are the network addresses where our component will tie. The syntax to describe an endpoint is explained in the ICE manual. If we are using a locator service we don't need to define an specific address since we won't connect directly to it but with the indirect proxy that the locator will give us. In this case the configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default&lt;br /&gt;
CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this last case, we have to define an unique ''AdapterId'' that will be used to ask to the locator service, since may exists more than one instance of our server.&lt;br /&gt;
&lt;br /&gt;
The rest of the configuration is used by the component implementation, in this case to set the video sources.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
== Programming style ==&lt;br /&gt;
JDErobot code is documented using doxygen. You can find more information [[FAQ#Documenting_the_code|here]].&lt;br /&gt;
&lt;br /&gt;
=Interfaces=&lt;br /&gt;
==ImageProvider==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/image.ice Slice definition]&lt;br /&gt;
==Camera==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/camera.ice Slice definition]&lt;br /&gt;
==RecordingManager==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/recording.ice Slice definition]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
In this section, we describe the main components distributed with JDErobot 5.0. They go from simple components to access hardware, to other more complex that process data and produce derived data, like motion detection from images. They are a valuable examples to create new components as well, so we will describe how to use them and how they work.&lt;br /&gt;
&lt;br /&gt;
==cameraserver==&lt;br /&gt;
Cameraserver is a component to serve N cameras, either real or simulated from a video file. It uses [http://www.gstreamer.net/ gstreamer] internally to handle and to process the video sources. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using cameraserver===&lt;br /&gt;
To use cameraserver we just have to edit the component's configuration to set the video sources and to set the served formats of our cameras. We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
===Inside cameraserver===&lt;br /&gt;
&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
==gazeboserver==&lt;br /&gt;
gazeboserver is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the coming changes, to support gazebo robot's name as well as available devices in the same configuration file.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 1&lt;br /&gt;
GazeboServer.Camera.0.Name=cameraA&lt;br /&gt;
GazeboServer.Camera.0.ImageWidth=320&lt;br /&gt;
GazeboServer.Camera.0.ImageHeight=240&lt;br /&gt;
GazeboServer.Camera.0.Format=RGB888&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. Although, this format is open to support several cameras description, it's just only one recognized by the code during gazebo communication. It's an identified improvement to work with a second camera. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. Refer to cameraserver description, in order to know more about the meaning of each field. Gaseboserver and cameraserver provides the same camera interface and, therefore, use a common configuration format on this file.&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-06-06T08:28:24Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
The API documentation can be found [http://jderobot.org/apidoc/jderobot/5.0/doc/html/index.html here].&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
JDErobot 5.0 is a collection of components that communicate between them through [http://www.zeroc.com/ice.html ICE]. These components use a set of defined interfaces to interact with each other, being this the only coupling mechanism between components. This way we can achieve what we were trying with older versions of JDErobot, a components based architecture, but without the drawbacks of trying to program middleware related code.&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running components ==&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some entries are required, like the ones defining the component address, if we are connecting our components directly or the locator service if we are using IceGrid. And others are optional, that can define the behavior of our component in some cases. Each component have a set of configuration entries to set its specific parts. A common configuration file may be like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we can see the component's name ''CameraSrv'' and the define endpoints, that are the network addresses where our component will tie. The syntax to describe an endpoint is explained in the ICE manual. If we are using a locator service we don't need to define an specific address since we won't connect directly to it but with the indirect proxy that the locator will give us. In this case the configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CameraSrv.Endpoints=default&lt;br /&gt;
CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=2&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this last case, we have to define an unique ''AdapterId'' that will be used to ask to the locator service, since may exists more than one instance of our server.&lt;br /&gt;
&lt;br /&gt;
The rest of the configuration is used by the component implementation, in this case to set the video sources.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
== Programming style ==&lt;br /&gt;
JDErobot code is documented using doxygen. You can find more information [[FAQ#Documenting_the_code|here]].&lt;br /&gt;
&lt;br /&gt;
=Interfaces=&lt;br /&gt;
==ImageProvider==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/image.ice Slice definition]&lt;br /&gt;
==Camera==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/camera.ice Slice definition]&lt;br /&gt;
==RecordingManager==&lt;br /&gt;
[http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/slice/jderobot/recording.ice Slice definition]&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
In this section, we describe the main components distributed with JDErobot 5.0. They go from simple components to access hardware, to other more complex that process data and produce derived data, like motion detection from images. They are a valuable examples to create new components as well, so we will describe how to use them and how they work.&lt;br /&gt;
&lt;br /&gt;
==cameraserver==&lt;br /&gt;
Cameraserver is a component to serve N cameras, either real or simulated from a video file. It uses [http://www.gstreamer.net/ gstreamer] internally to handle and to process the video sources. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using cameraserver===&lt;br /&gt;
To use cameraserver we just have to edit the component's configuration to set the video sources and to set the served formats of our cameras. We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
===Inside cameraserver===&lt;br /&gt;
&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
==gazeboserver==&lt;br /&gt;
gazeboserver is a component to communicate with gazebo using JDErobot platform. It's possible to retrieve information from several sensor devices, such us: laser, encoders, cameraand  ptencoders sonar, ptencoders. It's also possible to control robot's behaviour by sending control signals to motors and ptmotors. &lt;br /&gt;
&lt;br /&gt;
In the initial version, it's assumed gazebo robot just supports one sensor/actuator of each type. &lt;br /&gt;
&lt;br /&gt;
===Provided Interfaces===&lt;br /&gt;
* [[Manual-5#Camera|Camera]]&lt;br /&gt;
* [[Manual-5#Motors|Motors]]&lt;br /&gt;
* [[Manual-5#Laser|Laser]]&lt;br /&gt;
* [[Manual-5#Encoders|Encoders]]&lt;br /&gt;
* [[Manual-5#PTMotors|PTMotors]]&lt;br /&gt;
* [[Manual-5#PTEncoders|PTEncoders]]&lt;br /&gt;
* [[Manual-5#Sonars|Sonars]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Required Interfaces===&lt;br /&gt;
&lt;br /&gt;
===Using gazeboserver===&lt;br /&gt;
To use gazeboserver we just have to edit the component's configuration to set ICE communication channel plus the video source and and format. &lt;br /&gt;
On this initial version, the reference paths to gazebo robot is hardcoded yet. It'll be one of the comming We also have to set the network address where our component will be listening to for new connections or to choose the locator service.&lt;br /&gt;
&lt;br /&gt;
A configuration file example may be like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#network configuration&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraA&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera pluged to /dev/video0&lt;br /&gt;
CameraSrv.Camera.0.Uri=v4l2:///dev/video0&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first paragraph define the network configuration, that is the address where our server will be listening to request. Next paragraph define the number of cameras our server will provide. And following it, we have the configuration for the cameras. Notice that each camera will have its parameters after the prefix ''CameraSrv.Camera.X.'', with X in the interval [0..NCameras). In this example we have only one camera. A camera has several parameters:&lt;br /&gt;
&lt;br /&gt;
* Name: Name use to serve this camera. The interface for this camera will have this name.&lt;br /&gt;
* ShortDescription: A short description of this camera taht may be used by the client to retrieve more information about the camera than only a name.&lt;br /&gt;
* Uri: String that define the video source.&lt;br /&gt;
* FramerateN: Frame rate numerator.&lt;br /&gt;
* FramerateD: Frame rate denominator.&lt;br /&gt;
* ImageWidth: Size of the served image.&lt;br /&gt;
* ImageHeight: Size of the served image.&lt;br /&gt;
* Format: A string defining the format of the served image. Cameraserver use libcolorspacesmm to manage the image formats. Currently accepted formats are RGB888 for RGB 24bits and YUY2.&lt;br /&gt;
&lt;br /&gt;
Cameraserver can serve several types of sources. Each of them are named using the parameter uri with a syntax like:&lt;br /&gt;
&lt;br /&gt;
''type-of-source://source-descriptor''&lt;br /&gt;
&lt;br /&gt;
where type of source can be one of this:&lt;br /&gt;
&lt;br /&gt;
* v4l or v4l2: For V4l and V4l2 cameras respectively. Source descriptor will name the device name, e.g. ''v4l2:///dev/video0''&lt;br /&gt;
* file: For video files. Source descriptor will name the file, e.g ''file:///home/user/file.avi''&lt;br /&gt;
* http or https: For files located in a web server. Source descriptor will name the remote resource, e.g ''http://webserver.com/file.avi''&lt;br /&gt;
* videotest: For a test video signal with pure colors and noise.  Source descriptor will name the video test pattern from 0 to 12 (may differ with gstreamer version), e.g ''videotest://0''&lt;br /&gt;
* others: Gstreamer support a big variety of urls to name resources as rtsp, cd, dvd, but not all of them have been fully tested yet.&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-06-06T08:09:13Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.6.2) '''Implementation of 2D map on Introrob canvas area'''&lt;br /&gt;
&lt;br /&gt;
At this moment, there is no yet a finished canvas area representing robot, laser and sonars, due to it's difficult to intregate gnome::Canvas component into introrob glade interface. This is due to currrent version of Glade, 3.7, doesn't support this and other gnome library component but only gkt ones. During two weeks, the author, has being investigating how this components can be used, from a c++ library called &amp;quot;libgnomecanvasmm&amp;quot; and trying to implement a grid representation. It has been also difficult to integrate gnome canvas with a ScrolledWindow, modelated in in Glade to achieve a final integrated representation.&lt;br /&gt;
&lt;br /&gt;
It has been implemented a derivated version of Gnome::Canvas::Canvas class, called &amp;quot;introrobcanvas&amp;quot;, in order to manage any robot ilustation on canvas area and to manage this elements from introrobgui class.&lt;br /&gt;
&lt;br /&gt;
At this moment, canvas component is integrated withing introrob interface but there are two main tasks to be completed:&lt;br /&gt;
&lt;br /&gt;
* Solve &amp;quot;Segmentation Fault&amp;quot; issue when a introrobcanvas methed is invoked from introrobgui object. I don't understand yet why I get a segmentation abort when trying to call a specific method for representing the robot or move it across the grid. This problem is under investigation.&lt;br /&gt;
* Implement the logic for representing laser, sonar and move focus of canvas area.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;400&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/introrob-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.18) '''Upload gazeboserver and introrob to SVN repository'''&lt;br /&gt;
&lt;br /&gt;
The components, new ICE interfaces and several changes on Makefile.am files and configure.in were sucessfully commited.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN)'''&lt;br /&gt;
&lt;br /&gt;
The target of this activity is verify, before uploading gazeboserver, introrob components and several new interfaces to SVN repository, that the las JDE 5.0 version doesn't impact on my current developments.&lt;br /&gt;
&lt;br /&gt;
However, just after synchronize my local repository and launch the compilation, I get the following error with gazeboserver component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gazeboserver.cpp: In member function ‘virtual void gazeboserver::Component::start()’:&lt;br /&gt;
gazeboserver.cpp:685: error: cannot allocate an object of abstract type ‘gazeboserver::CameraI’&lt;br /&gt;
gazeboserver.cpp:65: note:   because the following virtual functions are pure within ‘gazeboserver::CameraI’:&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:716: note: 	virtual std::string jderobot::Camera::startCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:719: note: 	virtual void jderobot::Camera::stopCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's due to one of the interfaces supported by gazeboserver is &amp;quot;camera&amp;quot;, also used by other JDE 5.0 components such us cameraserver or cameraview. It seems some changes where added to camera interface definition and &amp;quot;startCameraStreaming&amp;quot; and startCameraStreaming&amp;quot; operations are not implemented in my gazeboserver code.&lt;br /&gt;
&lt;br /&gt;
We added its definition with no logic but that's was enogh to solve the problem.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTEncodersData&lt;br /&gt;
  {&lt;br /&gt;
  	float panAngle;&lt;br /&gt;
	float tiltAngle;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent PTEncodersData getPTEncodersData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  class SonarsData&lt;br /&gt;
  {&lt;br /&gt;
    IntSeq us;&lt;br /&gt;
	int numSonars;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent SonarsData getSonarsData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the three interfaces to gazebo sensors were implemented on gazeboserver's logic.&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-06-06T07:54:31Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.6.2) '''Implementation of 2D map on Introrob canvas area'''&lt;br /&gt;
&lt;br /&gt;
At this moment, there is no yet a finished canvas area representing robot, laser and sonars, due to it's difficult to intregate gnome::Canvas component into introrob glade interface. This is due to currrent version of Glade, 3.7, doesn't support this and other gnome library component but only gkt ones. During two weeks, the author, has being investigating how this components can be used, from a c++ library called &amp;quot;libgnomecanvasmm&amp;quot; and trying to implement a grid representation. It has been also difficult to integrate gnome canvas with a ScrolledWindow, modelated in in Glade to achieve a final integrated representation.&lt;br /&gt;
&lt;br /&gt;
It has been implemented a derivated version of Gnome::Canvas::Canvas class, called &amp;quot;introrobcanvas&amp;quot;, in order to manage any robot ilustation on canvas area and to manage this elements from introrobgui class.&lt;br /&gt;
&lt;br /&gt;
At this moment, canvas component is integrated withing introrob interface but there are two main tasks to be completed:&lt;br /&gt;
&lt;br /&gt;
* Solve &amp;quot;Segmentation Fault&amp;quot; issue when a introrobcanvas methed is invoked from introrobgui object. I don't understand yet why I get a segmentation abort when trying to call a specific method for representing the robot or move it across the grid. This problem is under investigation.&lt;br /&gt;
* Implement the logic for representing laser, sonar and move focus of canvas area.&lt;br /&gt;
&lt;br /&gt;
(2010.5.18) '''Upload gazeboserver and introrob to SVN repository'''&lt;br /&gt;
&lt;br /&gt;
The components, new ICE interfaces and several changes on Makefile.am files and configure.in were sucessfully commited.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN)'''&lt;br /&gt;
&lt;br /&gt;
The target of this activity is verify, before uploading gazeboserver, introrob components and several new interfaces to SVN repository, that the las JDE 5.0 version doesn't impact on my current developments.&lt;br /&gt;
&lt;br /&gt;
However, just after synchronize my local repository and launch the compilation, I get the following error with gazeboserver component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gazeboserver.cpp: In member function ‘virtual void gazeboserver::Component::start()’:&lt;br /&gt;
gazeboserver.cpp:685: error: cannot allocate an object of abstract type ‘gazeboserver::CameraI’&lt;br /&gt;
gazeboserver.cpp:65: note:   because the following virtual functions are pure within ‘gazeboserver::CameraI’:&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:716: note: 	virtual std::string jderobot::Camera::startCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:719: note: 	virtual void jderobot::Camera::stopCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's due to one of the interfaces supported by gazeboserver is &amp;quot;camera&amp;quot;, also used by other JDE 5.0 components such us cameraserver or cameraview. It seems some changes where added to camera interface definition and &amp;quot;startCameraStreaming&amp;quot; and startCameraStreaming&amp;quot; operations are not implemented in my gazeboserver code.&lt;br /&gt;
&lt;br /&gt;
We added its definition with no logic but that's was enogh to solve the problem.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTEncodersData&lt;br /&gt;
  {&lt;br /&gt;
  	float panAngle;&lt;br /&gt;
	float tiltAngle;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent PTEncodersData getPTEncodersData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  class SonarsData&lt;br /&gt;
  {&lt;br /&gt;
    IntSeq us;&lt;br /&gt;
	int numSonars;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent SonarsData getSonarsData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the three interfaces to gazebo sensors were implemented on gazeboserver's logic.&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-20T17:09:22Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDERobot 5.0 component development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.18) '''Upload gazeboserver and introrob to SVN repository'''&lt;br /&gt;
&lt;br /&gt;
The components, new ICE interfaces and several changes on Makefile.am files and configure.in were sucessfully commited.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN)'''&lt;br /&gt;
&lt;br /&gt;
The target of this activity is verify, before uploading gazeboserver, introrob components and several new interfaces to SVN repository, that the las JDE 5.0 version doesn't impact on my current developments.&lt;br /&gt;
&lt;br /&gt;
However, just after synchronize my local repository and launch the compilation, I get the following error with gazeboserver component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gazeboserver.cpp: In member function ‘virtual void gazeboserver::Component::start()’:&lt;br /&gt;
gazeboserver.cpp:685: error: cannot allocate an object of abstract type ‘gazeboserver::CameraI’&lt;br /&gt;
gazeboserver.cpp:65: note:   because the following virtual functions are pure within ‘gazeboserver::CameraI’:&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:716: note: 	virtual std::string jderobot::Camera::startCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:719: note: 	virtual void jderobot::Camera::stopCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's due to one of the interfaces supported by gazeboserver is &amp;quot;camera&amp;quot;, also used by other JDE 5.0 components such us cameraserver or cameraview. It seems some changes where added to camera interface definition and &amp;quot;startCameraStreaming&amp;quot; and startCameraStreaming&amp;quot; operations are not implemented in my gazeboserver code.&lt;br /&gt;
&lt;br /&gt;
We added its definition with no logic but that's was enogh to solve the problem.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTEncodersData&lt;br /&gt;
  {&lt;br /&gt;
  	float panAngle;&lt;br /&gt;
	float tiltAngle;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent PTEncodersData getPTEncodersData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  class SonarsData&lt;br /&gt;
  {&lt;br /&gt;
    IntSeq us;&lt;br /&gt;
	int numSonars;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent SonarsData getSonarsData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the three interfaces to gazebo sensors were implemented on gazeboserver's logic.&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-20T17:09:06Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.18) '''Upload gazeboserver and introrob to SVN repository''&lt;br /&gt;
&lt;br /&gt;
The components, new ICE interfaces and several changes on Makefile.am files and configure.in were sucessfully commited.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN)'''&lt;br /&gt;
&lt;br /&gt;
The target of this activity is verify, before uploading gazeboserver, introrob components and several new interfaces to SVN repository, that the las JDE 5.0 version doesn't impact on my current developments.&lt;br /&gt;
&lt;br /&gt;
However, just after synchronize my local repository and launch the compilation, I get the following error with gazeboserver component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gazeboserver.cpp: In member function ‘virtual void gazeboserver::Component::start()’:&lt;br /&gt;
gazeboserver.cpp:685: error: cannot allocate an object of abstract type ‘gazeboserver::CameraI’&lt;br /&gt;
gazeboserver.cpp:65: note:   because the following virtual functions are pure within ‘gazeboserver::CameraI’:&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:716: note: 	virtual std::string jderobot::Camera::startCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:719: note: 	virtual void jderobot::Camera::stopCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's due to one of the interfaces supported by gazeboserver is &amp;quot;camera&amp;quot;, also used by other JDE 5.0 components such us cameraserver or cameraview. It seems some changes where added to camera interface definition and &amp;quot;startCameraStreaming&amp;quot; and startCameraStreaming&amp;quot; operations are not implemented in my gazeboserver code.&lt;br /&gt;
&lt;br /&gt;
We added its definition with no logic but that's was enogh to solve the problem.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTEncodersData&lt;br /&gt;
  {&lt;br /&gt;
  	float panAngle;&lt;br /&gt;
	float tiltAngle;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent PTEncodersData getPTEncodersData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  class SonarsData&lt;br /&gt;
  {&lt;br /&gt;
    IntSeq us;&lt;br /&gt;
	int numSonars;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent SonarsData getSonarsData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the three interfaces to gazebo sensors were implemented on gazeboserver's logic.&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-15T09:03:53Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Upload these components to SVN.&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN)'''&lt;br /&gt;
&lt;br /&gt;
The target of this activity is verify, before uploading gazeboserver, introrob components and several new interfaces to SVN repository, that the las JDE 5.0 version doesn't impact on my current developments.&lt;br /&gt;
&lt;br /&gt;
However, just after synchronize my local repository and launch the compilation, I get the following error with gazeboserver component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gazeboserver.cpp: In member function ‘virtual void gazeboserver::Component::start()’:&lt;br /&gt;
gazeboserver.cpp:685: error: cannot allocate an object of abstract type ‘gazeboserver::CameraI’&lt;br /&gt;
gazeboserver.cpp:65: note:   because the following virtual functions are pure within ‘gazeboserver::CameraI’:&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:716: note: 	virtual std::string jderobot::Camera::startCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
../../../src/interfaces/cpp/jderobot/camera.h:719: note: 	virtual void jderobot::Camera::stopCameraStreaming(const Ice::Current&amp;amp;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's due to one of the interfaces supported by gazeboserver is &amp;quot;camera&amp;quot;, also used by other JDE 5.0 components such us cameraserver or cameraview. It seems some changes where added to camera interface definition and &amp;quot;startCameraStreaming&amp;quot; and startCameraStreaming&amp;quot; operations are not implemented in my gazeboserver code.&lt;br /&gt;
&lt;br /&gt;
We added its definition with no logic but that's was enogh to solve the problem.&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTEncodersData&lt;br /&gt;
  {&lt;br /&gt;
  	float panAngle;&lt;br /&gt;
	float tiltAngle;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent PTEncodersData getPTEncodersData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  class SonarsData&lt;br /&gt;
  {&lt;br /&gt;
    IntSeq us;&lt;br /&gt;
	int numSonars;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent SonarsData getSonarsData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the three interfaces to gazebo sensors were implemented on gazeboserver's logic.&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-15T08:37:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN). Upload these components to SVN.&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTEncodersData&lt;br /&gt;
  {&lt;br /&gt;
  	float panAngle;&lt;br /&gt;
	float tiltAngle;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent PTEncodersData getPTEncodersData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  class SonarsData&lt;br /&gt;
  {&lt;br /&gt;
    IntSeq us;&lt;br /&gt;
	int numSonars;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent SonarsData getSonarsData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, the three interfaces to gazebo sensors were implemented on gazeboserver's logic.&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-15T08:36:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN). Upload these components to SVN.&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class PTEncodersData&lt;br /&gt;
  {&lt;br /&gt;
  	float panAngle;&lt;br /&gt;
	float tiltAngle;&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent PTEncodersData getPTEncodersData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
**Classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  class SonarsData&lt;br /&gt;
  {&lt;br /&gt;
    IntSeq us;&lt;br /&gt;
	int numSonars;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**Operations: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
idempotent SonarsData getSonarsData();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-15T08:34:06Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Initial migration collaboration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN). Upload these components to SVN.&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
**Operations: &lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-15T08:33:30Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN). Upload these components to SVN.&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
**Operations: &lt;br /&gt;
int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-15T08:32:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN). Upload these components to SVN.&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**Classes:&lt;br /&gt;
*** class PTMotorsData&lt;br /&gt;
  {&lt;br /&gt;
  	float latitude;&lt;br /&gt;
  	float longitude;&lt;br /&gt;
  };&lt;br /&gt;
**Operations: &lt;br /&gt;
***int setPTMotorsData(PTMotorsData data); &lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-15T08:31:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN). Upload these components to SVN.&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.15) '''Extend gazeboserver component with &amp;quot;ptencoders&amp;quot;, &amp;quot;ptmotors&amp;quot; and sonars interfaces'''&lt;br /&gt;
&lt;br /&gt;
These three interfaces have been defined with the following operations and data classes:&lt;br /&gt;
&lt;br /&gt;
* '''PTMotors'''&lt;br /&gt;
**setPTMotorsData &lt;br /&gt;
&lt;br /&gt;
* '''PTEncoders'''&lt;br /&gt;
&lt;br /&gt;
* '''Sonars'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-07T15:25:47Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Identified tasks for next weeks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Re-Integrate introrob and gazeboserver with last JDErobot 5.0 version (download SVN). Upload these components to SVN.&lt;br /&gt;
* Extend gazeboserver component with &amp;quot;ptencoders&amp;quot; and &amp;quot;ptmotors&amp;quot; interfaces.&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization.&lt;br /&gt;
* Documentation of these components in 5.0 Manual.&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Support 2 cameras in gazeboserver.&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-07T14:49:30Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-07T14:44:55Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check consist of validate yellow percentage at lateral segments and yellow value at central line pixel. With these three data, it was possible to decide small ajudsments, while the robot is running within the corridor and to detect when a front wall is close (robot's is in a corner) and decide the spin sense.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-8.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.ogv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-07T14:39:29Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.6)&lt;br /&gt;
&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.5.6) '''Develop &amp;quot;sigue pasillos&amp;quot; practise on JDErobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
In this development, introrobt and gazeboserver components are used. The navigation logic of pioneer robt only uses camera as sensor and motors as actuatos. It's a reactive algorithm based to measure some areas of the input image and decide what is the action to perform (translated to linear and radial speed orders).&lt;br /&gt;
&lt;br /&gt;
To be more specific, an horizontal line, located at 3/4 of the image was splited into 3 segments (left, central and right). The lateral segments has 1/4 width of the image width, while the cetntral segment was 1/2 width. Additionally, the central pixel of this line (belogn to central segment) was monitorized.&lt;br /&gt;
&lt;br /&gt;
The basic check al &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.ogv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-07T14:32:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25)&lt;br /&gt;
&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.5.4) '''Extend gazeboserver with rest of actuatos/sensors'''&lt;br /&gt;
&lt;br /&gt;
Encoders interface is also added in gazeboserver component. The EncodersData class is implemented in order to support encoders data providing across this interface's functions. In the fisrt version of this interface, the same data available in 4.3 gazebo driver is contained, that means: robotx, roboty, robottheta, robotcos and robotsin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.5.2) '''Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0'''&lt;br /&gt;
&lt;br /&gt;
Once gazeboserver supports gazebo laser, camera and motors interfaces, it was posible to migrate &amp;quot;gato y raton&amp;quot; practise, from 4.3 to 5.0, as I did with &amp;quot;sigue linea roja&amp;quot;. The only significat difficulty on this task was to identify my functions and variables, to support the navigation, and the interfaces with 4.3 camera, motors and laser. Then, perform the adaptation to C++ object design.&lt;br /&gt;
&lt;br /&gt;
This is a capture of the result (also integrated in introrobot):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-6.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.ogv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-07T14:23:26Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25)&lt;br /&gt;
&lt;br /&gt;
* Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0&lt;br /&gt;
* Extend gazeboserver with rest of actuatos/sensors&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;300&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.ogv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-07T14:19:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25)&lt;br /&gt;
&lt;br /&gt;
* Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0&lt;br /&gt;
* Improve gazeboserver code in order to support several robots instances at the same time (now, just support instance 1).&lt;br /&gt;
* Improve gazeboserver configuration file parameters.&lt;br /&gt;
* Extend gazeboserver with rest of actuatos/sensors&lt;br /&gt;
* Decide how to support Player/Stage (it's required for migrating previos practises: VFF and CHESTE). If it's required, to develop player component and its interfaces.&lt;br /&gt;
* Migrate VFF and CHESTE to JDERobotos 5.0&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;270&amp;quot; height=&amp;quot;570&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.ogv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.ogv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-05-07T14:17:56Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25)&lt;br /&gt;
&lt;br /&gt;
* Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0&lt;br /&gt;
* Improve gazeboserver code in order to support several robots instances at the same time (now, just support instance 1).&lt;br /&gt;
* Improve gazeboserver configuration file parameters.&lt;br /&gt;
* Extend gazeboserver with rest of actuatos/sensors&lt;br /&gt;
* Decide how to support Player/Stage (it's required for migrating previos practises: VFF and CHESTE). If it's required, to develop player component and its interfaces.&lt;br /&gt;
* Migrate VFF and CHESTE to JDERobotos 5.0&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
* Implement introrob canvas area with laser and encoders visualization&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.29) '''Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Laser&amp;quot; interface is implemented on gazeboserver component as well. It was developed in two attemps: during the first, a simple interface &amp;quot;Laser&amp;quot; was specified, with one operation &amp;quot;getLaser&amp;quot;, which just returned the distance, form the robot to the obstacle, in one angle. This solutions was poor in terms of performance due to for a 180º distances read (usually need by robot navigation algorithm on each iteration), required 180 remote method invocations. The fisrt tests, using an auxiliary client for that purpouse, were very bad.&lt;br /&gt;
&lt;br /&gt;
During the second attempt, a class &amp;quot;LaserData&amp;quot; was defined. One of the attributes inside was an integer sequence, representing the different distances from robot to obstacles for each angle. The previous function &amp;quot;getLaser&amp;quot; was improved to return an object of this class. In this case, one one method incocation was enogh to receive 180 distances mesures. The new performance tests were acceptable.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a screen capture of introrobot GUI an stdoutput on console, were distances at 0º, 90º and 179º are written. They are obtained by calling to this service.&lt;br /&gt;
&lt;br /&gt;
introrob component was also improved to instanciate an onject of Laser interface and have data available on each iteration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-5.ogv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-04-25T15:33:13Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25)&lt;br /&gt;
&lt;br /&gt;
* Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.&lt;br /&gt;
* Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0&lt;br /&gt;
* Improve gazeboserver code in order to support several robots instances at the same time (now, just support instance 1).&lt;br /&gt;
* Improve gazeboserver configuration file parameters.&lt;br /&gt;
* Extend gazeboserver with rest of actuatos/sensors&lt;br /&gt;
* Decide how to support Player/Stage (it's required for migrating previos practises: VFF and CHESTE). If it's required, to develop player component and its interfaces.&lt;br /&gt;
* Migrate VFF and CHESTE to JDERobotos 5.0&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-4.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazeboserver-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-04-25T09:44:38Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDERobot 5.0 component development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25)&lt;br /&gt;
&lt;br /&gt;
* Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.&lt;br /&gt;
* Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0&lt;br /&gt;
* Improve gazeboserver code in order to support several robots instances at the same time (now, just support instance 1).&lt;br /&gt;
* Improve gazeboserver configuration file parameters.&lt;br /&gt;
* Extend gazeboserver with rest of actuatos/sensors&lt;br /&gt;
* Decide how to support Player/Stage (it's required for migrating previos practises: VFF and CHESTE). If it's required, to develop player component and its interfaces.&lt;br /&gt;
* Migrate VFF and CHESTE to JDERobotos 5.0&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, we had enogh infrastructure to import &amp;quot;sigue linea&amp;quot; logic into the new introrob component. Therefore, the target of this activity, was to migrate this practise and validate it in the new platform.&lt;br /&gt;
&lt;br /&gt;
These are the results:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VIDEO CAPTURE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
VIDEO CAPTURE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
VIDEO CAPTURE&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
VIDEO CAPTURE 1&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-04-25T09:43:01Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDERobot 5.0 component development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25)&lt;br /&gt;
&lt;br /&gt;
* Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.&lt;br /&gt;
* Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0&lt;br /&gt;
* Improve gazeboserver code in order to support several robots instances at the same time (now, just support instance 1).&lt;br /&gt;
* Improve gazeboserver configuration file parameters.&lt;br /&gt;
* Extend gazeboserver with rest of actuatos/sensors&lt;br /&gt;
* Decide how to support Player/Stage (it's required for migrating previos practises: VFF and CHESTE). If it's required, to develop player component and its interfaces.&lt;br /&gt;
* Migrate VFF and CHESTE to JDERobotos 5.0&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this time, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point, it was very important to integrate camera view capability and motors actuatos interaction from a graphical interface. Moreover, the graphical interface could be design also to run robot navigation logic, which only depends of camera sensor and motors actuator. &lt;br /&gt;
&lt;br /&gt;
Taking into account that JDERbotos 4.3 had an schema with this target (introrob), it was decided to migrate some capabilities of introrob 4.3 to 5.0 platform.&lt;br /&gt;
&lt;br /&gt;
One of the changes, in term of GUI design, has been the graphical interface tecnology used. introrob 4.3 was implemented with FDesign, while, Glade and GTK libraries were selected in the new version.&lt;br /&gt;
&lt;br /&gt;
The initial version keeps most of the buttons  and panels but only implements the logic for camera visualization and Motors controlling. It's posponed, for a future release, the extension with player map visualization and scale and positions on the map.&lt;br /&gt;
&lt;br /&gt;
As introrob made in the 4.3 version, the new component can switch the manual motors controlling to a automated mode, called &amp;quot;your code&amp;quot;. When this option is pressed, introrob, launch some logic methods contained in &amp;quot;navigation&amp;quot; class, where the navigation and control logic is supposed to be.&lt;br /&gt;
&lt;br /&gt;
Below, you can see a video capture where introrob is used on &amp;quot;manual&amp;quot; mode.&lt;br /&gt;
&lt;br /&gt;
VIDEO CAPTURE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
VIDEO CAPTURE&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
VIDEO CAPTURE 1&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-04-25T09:32:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDERobot 5.0 component development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25)&lt;br /&gt;
&lt;br /&gt;
* Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.&lt;br /&gt;
* Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0&lt;br /&gt;
* Improve gazeboserver code in order to support several robots instances at the same time (now, just support instance 1).&lt;br /&gt;
* Improve gazeboserver configuration file parameters.&lt;br /&gt;
* Extend gazeboserver with rest of actuatos/sensors&lt;br /&gt;
* Decide how to support Player/Stage (it's required for migrating previos practises: VFF and CHESTE). If it's required, to develop player component and its interfaces.&lt;br /&gt;
* Migrate VFF and CHESTE to JDERobotos 5.0&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Capability for visualize camera interface and manual navigation buttons. Also Yourcode capability&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Capability for visualize camera interface and manual navigation buttons. Also Yourcode capability&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before developing a graphical interface to access Motors interface, I developed an easy component called &amp;quot;gazebomotorsclient&amp;quot;, which can be executed by commend line and it connects to gazeboserver, Motors interface, in order to retrievel V and W values of modified them.&lt;br /&gt;
&lt;br /&gt;
Command line execution is very simple, due to no arguments could be specified for getting current V and W values and 2 real values could be written as arguments one and two, in order to update the speeds.&lt;br /&gt;
&lt;br /&gt;
You can play the following video in order to see how it works and check the robots movement with cameraview component:&lt;br /&gt;
&lt;br /&gt;
VIDEO CAPTURE&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
One of the challengues of my next gazeboserver improvement was to extend it with a second interface for &amp;quot;motors&amp;quot; actuator of robot1. At this point, several ICE documentation articles were read in order to clarify how can be it done.&lt;br /&gt;
&lt;br /&gt;
During this milestone archievement, a new ICE interface, called &amp;quot;Motors&amp;quot; was defines. In the initial version, it support four operations:&lt;br /&gt;
* getV&lt;br /&gt;
* getW&lt;br /&gt;
* setV&lt;br /&gt;
* setW&lt;br /&gt;
&lt;br /&gt;
They will support the linear and radial speeds modification and status retrival.&lt;br /&gt;
&lt;br /&gt;
Several tests were perform after its integration in gazeboserver component to validate that camera already worked and Motors was serving at the same time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazeboserver component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A new component has been developed, called &amp;quot;gazeboserver&amp;quot;. The purpouse of this component is to server different gazebo platform interfaces for different robot's sensers and actuators. In the initial versión, gaseboserver focus on Pioneer robot and it sensor &amp;quot;camera&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In order to make this &amp;quot;camera&amp;quot; interface compatible with other JDERobot 5.0 components, such us, cameraview, the current &amp;quot;camera&amp;quot; interface used by &amp;quot;cameraserver&amp;quot; component was used in this case.&lt;br /&gt;
&lt;br /&gt;
The result is a server component able to server gazebo robot1 camera to any &amp;quot;cameraview&amp;quot; process, pointing to this service.&lt;br /&gt;
&lt;br /&gt;
Heareafte there is a video capture of gazeboserver and cameraview running:&lt;br /&gt;
&lt;br /&gt;
VIDEO CAPTURE 1&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-04-25T09:13:32Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''JDERobot 5.0 component development'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Identified tasks for next weeks'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25)&lt;br /&gt;
&lt;br /&gt;
* Implement &amp;quot;Laser&amp;quot; interface in gazeboserver component.&lt;br /&gt;
* Migrate &amp;quot;gato y raton&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0&lt;br /&gt;
* Improve gazeboserver code in order to support several robots instances at the same time (now, just support instance 1).&lt;br /&gt;
* Improve gazeboserver configuration file parameters.&lt;br /&gt;
* Extend gazeboserver with rest of actuatos/sensors&lt;br /&gt;
* Decide how to support Player/Stage (it's required for migrating previos practises: VFF and CHESTE). If it's required, to develop player component and its interfaces.&lt;br /&gt;
* Migrate VFF and CHESTE to JDERobotos 5.0&lt;br /&gt;
* Documentation for TFM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''JDERobot 5.0 component development'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.25) '''Migrate &amp;quot;siguelinearoja&amp;quot; practise from JDERobot 4.3 to JDERobot 5.0, using introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Capability for visualize camera interface and manual navigation buttons. Also Yourcode capability&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.20) '''Version 1 of introrob component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Capability for visualize camera interface and manual navigation buttons. Also Yourcode capability&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.13) '''Development of gazebomotorsclient component'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Development of new auxiliary component to interact with Motors interface at gazeboserver.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.10) '''Extend gazeboserver component with Motors interface'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Support motors of gazebo Pioneer robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.4.1) '''Finish version 1 of gazebo server'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Just support for camera sensor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-03-23T09:53:26Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''Full participation'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;''': There is a file &amp;quot;Makefile.am&amp;quot; with references to the list of subdirectories that have to be processed by make utility.&lt;br /&gt;
** Update the file '''&amp;quot;Makefile.am&amp;quot;''' with the reference to the new subfolder &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
*** '''&amp;quot;src/components/gazebocamera/&amp;quot;''' content organization: Apart of gazebocamera.cpp and gazebocamera.cfg files, a Makefile.am was created, in order to expecify the compilation rules and dependencies with dome libraries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;libgazebo.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl# Checks for gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_WITH([gazebo],&lt;br /&gt;
    [AS_HELP_STRING([--with-gazebo=&amp;lt;path&amp;gt;],[gazebo library prefix path. Default /usr])],&lt;br /&gt;
    [],&lt;br /&gt;
    [with_gazebo=&amp;quot;/usr&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$with_gazebo&amp;quot; != xno; then&lt;br /&gt;
    GAZEBO_PREFIX=$with_gstreamer&lt;br /&gt;
    GAZEBO_INCLUDE=&amp;quot;$GAZEBO_PREFIX/include&amp;quot;&lt;br /&gt;
    GAZEBO_CPPFLAGS=&amp;quot;-I$GAZEBO_INCLUDE&amp;quot;&lt;br /&gt;
    AC_SUBST([GAZEBO_PREFIX])&lt;br /&gt;
    AC_SUBST([GAZEBO_INCLUDE])&lt;br /&gt;
    AC_SUBST([GAZEBO_CPPFLAGS])&lt;br /&gt;
                       &lt;br /&gt;
    _SAVE_CPPFLAGS=$CPPFLAGS&lt;br /&gt;
    CFLAGS=&amp;quot;$CFLAGS $GAZEBO_CFLAGS&amp;quot;&lt;br /&gt;
    CPPFLAGS=&amp;quot;$CPPFLAGS $GAZEBO_CPPFLAGS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebo support:])&lt;br /&gt;
    PKG_CHECK_MODULES(&lt;br /&gt;
	[GAZEBO],[gazebo],&lt;br /&gt;
	[&lt;br /&gt;
	    GAZEBO_CPPFLAGS=$GAZEBO_CFLAGS&lt;br /&gt;
	],&lt;br /&gt;
	[&lt;br /&gt;
	    AC_MSG_NOTICE([Errors found checking gazebo support: $GAZEBO_PKG_ERRORS. Try setting --with-gazebo])&lt;br /&gt;
	    with_gazebo=&amp;quot;no&amp;quot;&lt;br /&gt;
	])&lt;br /&gt;
&lt;br /&gt;
    CPPFLAGS=$_SAVE_CPPFLAGS&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;component_gazebocamera.m4&amp;quot;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnl # Requirements for component gazebocamera&lt;br /&gt;
dnl # GStreamer, Gazebo&lt;br /&gt;
&lt;br /&gt;
AC_ARG_ENABLE([component-gazebocamera],&lt;br /&gt;
    [AS_HELP_STRING([--disable-component-gazebocamera],&lt;br /&gt;
	    [disable gazebocamera component compilation])],&lt;br /&gt;
    [],&lt;br /&gt;
    [enable_component_gazebocamera=yes])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;x$enable_component_gazebocamera&amp;quot; != xno; then&lt;br /&gt;
    AC_MSG_NOTICE([**** Checking gazebocamera component requirements:])&lt;br /&gt;
    if test &amp;quot;x$with_gstreamer&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gstreamer support not found. Try setting --with-gstreamer&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;x$with_gazebo&amp;quot; = xno; then&lt;br /&gt;
	ERRORS=&amp;quot;$ERRORS, gazebo support not found. Try setting --with-gazebo&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if test &amp;quot;$ERRORS&amp;quot;; then&lt;br /&gt;
        AC_MSG_NOTICE([Errors found checking gazebocamera requirements: $ERRORS. Component disabled])&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[false])&lt;br /&gt;
    else&lt;br /&gt;
	AC_MSG_NOTICE([Component enabled])&lt;br /&gt;
	ENABLED_COMPONENTS=&amp;quot;$ENABLED_COMPONENTS gazebocamera&amp;quot;&lt;br /&gt;
	AM_CONDITIONAL([ENABLE_COMPONENT_GAZEBOCAMERA],[true])&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content of '''&amp;quot;Makefile.am&amp;quot;''' (at gazebocamera folder):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ENABLE_COMPONENT_GAZEBOCAMERA&lt;br /&gt;
bin_PROGRAMS = gazebocamera&lt;br /&gt;
endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gazebocamera_SOURCES = gazebocamera.cpp&lt;br /&gt;
gazebocamera_CPPFLAGS = $(LIBJDEROBOTICE_CPPFLAGS) \&lt;br /&gt;
				-I$(top_srcdir)/src/libs -I$(top_srcdir)/src/interfaces/cpp&lt;br /&gt;
gazebocamera_LDFLAGS = $(GAZEBO_LIBS)&lt;br /&gt;
gazebocamera_LDADD = $(top_srcdir)/src/libs/jderobotice/libJderobotIce.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/jderobotutil/libJderobotUtil.la \&lt;br /&gt;
			$(top_srcdir)/src/libs/colorspaces/libcolorspacesmm.la \&lt;br /&gt;
			$(top_srcdir)/src/interfaces/cpp/jderobot/libJderobotInterfaces.la&lt;br /&gt;
&lt;br /&gt;
dist_conf_DATA = gazebocamera.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-03-23T09:46:09Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''Full participation'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to '''&amp;quot;m4&amp;quot;''' folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file '''&amp;quot;libgazebo.m4&amp;quot;''': Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create '''&amp;quot;component_gazebocamera.m4&amp;quot;''' with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to '''&amp;quot;/&amp;quot;''' folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** add line '''&amp;quot;m4_include([m4/libgazebo.m4])&amp;quot;''' to libraries check section.&lt;br /&gt;
** add '''&amp;quot;m4_include([m4/component_gazebocamera.m4])&amp;quot;''' to components check section. &lt;br /&gt;
** add '''&amp;quot;src/components/gazebocamera/Makefile \&amp;quot;''' to components Makefiles generation section.&lt;br /&gt;
* Additions to '''&amp;quot;src/components/&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
    * Actualizar el fichero &amp;quot;Makefile.am&amp;quot; con el subdirectorio &amp;quot;gazebocamera&amp;quot;&lt;br /&gt;
&lt;br /&gt;
En &amp;quot;src/components/gazebocamera/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    * Añadir fichero &amp;quot;gazebocamera.cpp&amp;quot; y &amp;quot;Makefile.am&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-03-23T09:43:12Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''Full participation'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to &amp;quot;m4&amp;quot; folder: This folder is used for auto tools configuration. The new component requirements have to be expresend at this locations by follows&lt;br /&gt;
** Create file &amp;quot;libgazebo.m4&amp;quot;: Due to gazebocamera calls some gazebo library functionalities, libgazebo becomes considered a required component in JDErobot 5.0. This file expreses what &amp;quot;configure&amp;quot; script has to ensure for this library. It enables the option &amp;quot;--with-gazebo&amp;quot; in the configuration process.&lt;br /&gt;
** Create &amp;quot;component_gazebocamera.m4&amp;quot; with requirements. In includes gstreamer and libgazebo libraries check. Both are needed during the compilation.&lt;br /&gt;
* Additions to &amp;quot;/&amp;quot; folder: At root folder, &amp;quot;configure.in&amp;quot; is keeping the global configuration for the version. Three references had to be added in this file:&lt;br /&gt;
** &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-03-23T09:34:59Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''Full participation'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.23) '''Incorporate gazebocamera to JDErobot 5.0 project'''&lt;br /&gt;
&lt;br /&gt;
One of the important activities has been to understand how JDErobot 5.0 is compiled by using autoconf tools and how to update its configuration in order to add additional componentes or options to the compilation process.&lt;br /&gt;
&lt;br /&gt;
As an example of the learn lesson, these are the list of tasks that were necessary to incorporate gazebocamera to the project:&lt;br /&gt;
&lt;br /&gt;
* Additions to &amp;quot;m4&amp;quot; folder:&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-03-22T17:19:59Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''Full participation'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gazebocamera_1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-03-22T17:18:11Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''Full participation'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking &amp;quot;cameraserver&amp;quot; component as a 5.0 reference, and &amp;quot;gazebo&amp;quot; jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot in gazebo infrastructure, our first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
* Implement a server interface to access first gazebo camera.&lt;br /&gt;
* Be compaint with jderobot 5.0 architecture design, where camera interface is used in the same way than cameraserver does.&lt;br /&gt;
* Be able to test gazebocamera component with cameraview one.&lt;br /&gt;
&lt;br /&gt;
During the design and implementation, the following considateration were taken into account:&lt;br /&gt;
&lt;br /&gt;
* Study design of cameraserver component in term of jderobot interfaces and common definitions usage (4 hours)&lt;br /&gt;
* Analyze how cameraserver code could be reused for gazebocamera adaptation: remove gst and pipeline references, where to initialize and retrive camera data from gazebo, etc. (8 hours)&lt;br /&gt;
* Study gazebo driver in jderobot 4.3 version and extract logic to access first camera (4 hours)&lt;br /&gt;
* Implement new component reusing previous code (8 hours)&lt;br /&gt;
* Clean up non-used cameraserver references to libraries, functions and objects such us pipeline. (2 hours)&lt;br /&gt;
* Compile and testing with cameraview (3 hours)&lt;br /&gt;
* Upload new code to SVN repository (jderobot 5.0 branch plus personal SVN repository) (2 hours)&lt;br /&gt;
* Brieflty documentation at this page (1 hour).&lt;br /&gt;
&lt;br /&gt;
Hereafter, there is a video of how gazebo, gazebocamera and cameraview can be launched at different terminals and communicate each other throw shared memory (gazebo - gazebocamera) and ICE (gazebocamera-cameraview).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/User:Jvazquez</id>
		<title>User:Jvazquez</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/User:Jvazquez"/>
				<updated>2010-03-22T17:05:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* JDErobot 5.0 Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Project card''' ==&lt;br /&gt;
* '''Project Name:'''  Collaboration in JDEROBOT 5.0 migration.&lt;br /&gt;
* '''Authors:''' Javier Vázquez (javiervazper [at] yahoo [dot] es) and Jose María Cañas Plaza (jmplaza [at] gsyc [dot] es)&lt;br /&gt;
&lt;br /&gt;
* '''Academic Year:''' 2009-2010&lt;br /&gt;
&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
&lt;br /&gt;
* '''Jde Version:''' [http://svn.jde.gsyc.es/jde/jdec/trunk/ jde-4.3]&lt;br /&gt;
&lt;br /&gt;
* '''SVN Repository:''' &lt;br /&gt;
&lt;br /&gt;
* '''Tags:''' VFF&lt;br /&gt;
&lt;br /&gt;
* '''Technology:''' C, C++, JdeRobot, OpenGL, OpenCV, GTK, ICE&lt;br /&gt;
&lt;br /&gt;
* '''State:''' Developing &lt;br /&gt;
&lt;br /&gt;
* '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3]&lt;br /&gt;
&lt;br /&gt;
* '''Schemas:'''&lt;br /&gt;
&lt;br /&gt;
== '''Jderobot collaboration grant'''  ==&lt;br /&gt;
&lt;br /&gt;
=== Improving FAQ ===&lt;br /&gt;
&lt;br /&gt;
2010.2.5. [http://jderobot.org/index.php/FAQ#How_do_I_upload_a_file.3F How do I upload files?]&lt;br /&gt;
&lt;br /&gt;
=== JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
2010.2.28 [http://jderobot.org/index.php/Manual-5#Installing_JDErobot_5.0_on_Linux_Ubuntu_9.04 Installing JDErobot 5.0 on Linux Ubuntu 9.04]&lt;br /&gt;
&lt;br /&gt;
2010.3.5  [http://jderobot.org/index.php/Manual-5#JDErobot_5.0_SVN JDErobot SVN folder organization]&lt;br /&gt;
&lt;br /&gt;
== '''JDErobot 5.0 Migration'''==&lt;br /&gt;
=== '''Introduction'''===&lt;br /&gt;
(2010.3.5) &lt;br /&gt;
The main target of TFM is to collaborate on jde-developers community for migrating the current version 4.3 to new 5.0. The aim of this change is to enable the execution of JDErobot on a distributed system architecture. ICE middleware is a key factor to achieve this target. It's make possible to implement previous drivers and schemans components as a individual software artefacts with communication interfaces across a TCP/IP computers network. ICE allows JDErobot components to easily set-up their server and client interfaces.&lt;br /&gt;
&lt;br /&gt;
An additional benefic for using ICE platform is the fact of components can be implemented in different programming languages supported by ICE-translator package. At this moment, C/C++, Java, Python and some others are on the scope.&lt;br /&gt;
&lt;br /&gt;
This collaboration activity will consist of incremental phases:&lt;br /&gt;
&lt;br /&gt;
* ''Engagement'': To understand JDErobot 5.0 architecture based on new ICE middleware. Get depper on several 4.3 driver and schemas implementation details (i.e: gazebo driver).&lt;br /&gt;
* ''Initial migration collaboration'': To migrate part of a 4.3 driver component on the new version &amp;amp; architecture. To be complaint with global architecture design decissions.&lt;br /&gt;
* ''Full participation'': To take part on entire driver components examples migration.&lt;br /&gt;
&lt;br /&gt;
=== '''Initial migration collaboration'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.21) '''gazebocamera development and testing'''&lt;br /&gt;
&lt;br /&gt;
Taking cameraserver component as a 5.0 reference, as gazebo jderobot 4.3 driver as logic implementation for accesing diferent sensors and actuators of pioneer robot simulated at gazebo infrastructure, the first step was to develop a simple &amp;quot;gazebocamera&amp;quot; component with the following requisites:&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Engagement'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(2010.3.5) '''cameraserver-cameraview components compilation and testing'''&lt;br /&gt;
&lt;br /&gt;
At the moment of this note, only cameraserver and cameraview components are developed and available at JDErobot 5.0 branch. As initial touchdown to 5.0, both elements are compiled and customized for testing. cameraserver code is also studied to understand how, 'Camera' interface is used. That's an important task due to the following activity will consist of creating gazeboserver component including just camera interface. Gazebo's Camera interface must be complaint with cameraserver one, that means, with Camera definition.&lt;br /&gt;
&lt;br /&gt;
First step to compile cameraserver-cameraview is to produce c++ code from camera ICE interface definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ echo $ICE_HOME&lt;br /&gt;
/home/jvazquez/workspace/jderobot_5.0/src/interfaces/slice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ slice2cpp -I$ICE_HOME camera.ice&lt;br /&gt;
jvazquez@ubuntu:~/workspace/jderobot_5.0/src/interfaces/slice/jderobot$ ls -ltr camera*&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot  1180 2010-02-25 16:22 camera.ice&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 23134 2010-03-05 11:35 camera.h&lt;br /&gt;
-rw-r--r-- 1 jvazquez jderobot 16113 2010-03-05 11:35 camera.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Second, &lt;br /&gt;
&lt;br /&gt;
(2010.3.1) '''ICE Platform understanding'''&lt;br /&gt;
&lt;br /&gt;
During several days, [http://www.zeroc.com/doc/Ice-3.4.0/manual/toc.html ICE online documentation] have been studied to obtain a general understaing of how this middleware works and try to foresee how 4.3 elements can be adapted on this.&lt;br /&gt;
&lt;br /&gt;
During this self-training activity, several guided exampled have been tested to consolidate the concepts. Some of these code examples were checked-in at my personal trunk folder.&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow the mouse''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.22)&lt;br /&gt;
&lt;br /&gt;
The purpose of this programming exercise is to implement a visual identification of a known object trying to identify it by its colors pattern and morphological appearance. Additionally, the target object be identified can be moving. On the other hand, once the object has been identified, the robot logic has to use its  motors actuators in order to follow the target and approximate to it (but not crashing with it)&lt;br /&gt;
&lt;br /&gt;
Basically, the problem has been segregated into several sequential steps:&lt;br /&gt;
&lt;br /&gt;
1. (warm-up) Investigate how to access imangenA display in introbot schema's gui. This allow us to paint some annotations over robot's camera display and, therefore, be able to trace the logic behavior afterwards. In this sense, it was basically set up some functions to access imangenA_buf variable from navegacion.c file. imangeA_buf was exported from introrob.c. These functions allow us to paint points, lines and squares, of different colors, over the display.&lt;br /&gt;
&lt;br /&gt;
2. Filter input video image to keep just target object's colors. This allows the following step to easily identify the target in the image. Due to the object we look for in this practice is another pioneer robot, we kept blue and red colors as original and switch the rest to gray scale.&lt;br /&gt;
&lt;br /&gt;
3. Identify pioneer robot by looking for some geometric patterns between blue and red spots (squares approximation). In this case, we made the assumtion, a pioneer robot is formed by a red base with bigger width that height and a blue square on top of the base with a short distance in between and smaller that the base.&lt;br /&gt;
&lt;br /&gt;
4. Calculate target angle and distance. Target angle is obtained from visual processing while, for distance, we use laser sensor. We use laser values in a restricted angle area when robot is aligned with the target. Thus, this data are used to fix linear (v) and angular (w) speeds.&lt;br /&gt;
&lt;br /&gt;
Hereafter, I attached several screen captures, ordered from final result to initial tests. As remark for these video, it's important to say that I'm using a emulated linux platform with VMWare. Although, physical PC has good computation capacity (T8300) and VMware was tuned for providing the maximum resource to its virtual instance, we observe it's not always enough to run gazebo. In any case, I ensure it's not due to a bad robots algorithm performance. :-)&lt;br /&gt;
&lt;br /&gt;
Final result video (1/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final result video (2/2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-3-2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Intermediate status video: Identify full spots on the image. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc-1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Initial video: After color filtering, identify small colored boxed. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;570&amp;quot; height=&amp;quot;270&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/gatoyraton_identifyobjects_poc.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Visual navigation: Follow red line''' ==&lt;br /&gt;
&lt;br /&gt;
(2010.2.11)&lt;br /&gt;
&lt;br /&gt;
Pioneer robot is able to go forward in one direction following a red line drawn in the floor. As previous practises, we use a simulated environment but, in this case, 2D platform (Player &amp;amp; Stage) and replaced by 3D (Gazebo). SonyVID30 Camera is use as unique input passive sensor. &lt;br /&gt;
&lt;br /&gt;
The main goal of this algorithm consisted of check if red line is in front of the camera and aligned to robot’s direction. Additionally, the logic must be able to recognize little deviations while running in a straight corridor and approximations to red line corners where robot has to perform a force direction change. Due to working with crude input video stream makes difficult to achieve previous tasks, a previous video signal processing has been implemented. This processing phase, is able to focus on the content of bottom-center rectangle (90X60 pixels) and subdivide it in 9 rectangles as a 3x3 matrix of 30x20 pixel dimension. One by one, image processing algorithm checks red colour percentage in this cells and store this information in a float matrix variable.&lt;br /&gt;
&lt;br /&gt;
Thus, linear and radial speeds are adjusted based of different status cases over matrix colour results. I.e. When upper-centre and center-center rectangle’s values are over 50%, “v” is ser to 500 and “w” set to “0”.&lt;br /&gt;
&lt;br /&gt;
The following video shows the result obtained.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;608&amp;quot; height=&amp;quot;280&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/siguelinea_demo1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Deliberative-Reactive navigation in a circuit (CHESTE)''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Adaptation of pure reactive schema'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.6)&lt;br /&gt;
 &lt;br /&gt;
Introbot schema has been adapted (in navigation.c file) to take into account a list of intermediate destinations. The new algorithm processes the list of destinations sequentially instead of change it dynamically when user picks a new point with the mouse.&lt;br /&gt;
As result, a deliberative-reactive navigation is implemented.&lt;br /&gt;
&lt;br /&gt;
The following demonstration video could be improve by increasing linear speed and selecting better intermediate points (some of them are very in the external corner of the curve).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;695&amp;quot; height=&amp;quot;320&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_chester_v1.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''VFF: Reactive navigation between obstacles''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Improvement on robot's navigation behaviour'''===&lt;br /&gt;
&lt;br /&gt;
(2010.2.1)&lt;br /&gt;
 &lt;br /&gt;
Several adaptations were included in the code in order to improve the navigation results:&lt;br /&gt;
*Pure VFF algorithm codification (previous attempt didn't calculate the rejection force correctly).&lt;br /&gt;
*Security window implementation. A virtual square has been defined at robot's front-end. When an obstacle appears inside the security box, linear and radial speed control logic updates the values in order to put away the object asap.&lt;br /&gt;
*Improvement of linear and radial control logic. The different cases have been reviewed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;688&amp;quot; height=&amp;quot;288&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v2.flv&amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Warming up with first version'''===&lt;br /&gt;
&lt;br /&gt;
(2010.1.22)&lt;br /&gt;
&lt;br /&gt;
First implementation of VFF algorithm for navigating a squared area with several obstacles. Some issues aren't solved yet, such as, collisions with obstacle's corners, direction balancing while running in a corridor, speed limitation, collision when the atraction and rejection forces are opposite.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;video width=&amp;quot;700&amp;quot; height=&amp;quot;520&amp;quot;&amp;gt;http://jderobot.org/users/jvazquez/videos/vff_obstacles_v1.flv&amp;lt;/video&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-03-07T16:44:23Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Running JDErobot 5.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running examples ==&lt;br /&gt;
&lt;br /&gt;
At the time of this note, both components available, cameraserver and cameraview, can be executed independly at different terminals/network connected systems.&lt;br /&gt;
&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Running cameraserver &amp;amp; cameraview components ===&lt;br /&gt;
&lt;br /&gt;
'''cameraserver''' is able to serve N camera devices than can be real (v4l2) or simulated.&lt;br /&gt;
&lt;br /&gt;
Example of cameraserver configuration file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#without registry&lt;br /&gt;
CameraSrv.Endpoints=default -h 127.0.0.1 -p 9999&lt;br /&gt;
#with registry&lt;br /&gt;
#CameraSrv.Endpoints=default&lt;br /&gt;
#CameraSrv.AdapterId=CameraSrv1&lt;br /&gt;
#Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 12000&lt;br /&gt;
&lt;br /&gt;
#cameras configuration&lt;br /&gt;
CameraSrv.NCameras=1&lt;br /&gt;
&lt;br /&gt;
#camera 0&lt;br /&gt;
CameraSrv.Camera.0.Name=cameraB&lt;br /&gt;
CameraSrv.Camera.0.ShortDescription=Camera simulated from a video&lt;br /&gt;
CameraSrv.Camera.0.Uri=http://www.facethewind.com/videos/may29_01.mpg&lt;br /&gt;
CameraSrv.Camera.0.FramerateN=15&lt;br /&gt;
CameraSrv.Camera.0.FramerateD=1&lt;br /&gt;
CameraSrv.Camera.0.ImageWidth=320&lt;br /&gt;
CameraSrv.Camera.0.ImageHeight=240&lt;br /&gt;
CameraSrv.Camera.0.Format=RGB888&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Execution line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:/jderobot5.0/bin$ ./cameraserver --Ice.Config=/tmp/cameraserver.cfg&lt;br /&gt;
libdc1394 error: Failed to initialize libdc1394&lt;br /&gt;
03/07/2010 08:44:06.730 ./cameraserver: warning: found unknown properties for object adapter `CameraSrv':&lt;br /&gt;
    CameraSrv.Camera.0.Format&lt;br /&gt;
    CameraSrv.Camera.0.FramerateD&lt;br /&gt;
    CameraSrv.Camera.0.FramerateN&lt;br /&gt;
    CameraSrv.Camera.0.ImageHeight&lt;br /&gt;
    CameraSrv.Camera.0.ImageWidth&lt;br /&gt;
    CameraSrv.Camera.0.Name&lt;br /&gt;
    CameraSrv.Camera.0.ShortDescription&lt;br /&gt;
    CameraSrv.Camera.0.Uri&lt;br /&gt;
    CameraSrv.NCameras&lt;br /&gt;
info: CameraSrv: Created object adapter.&lt;br /&gt;
info: Component infrastructure changed state to Initialising.&lt;br /&gt;
info: Component infrastructure changed state to Working.&lt;br /&gt;
CameraSrv: Component infrastructure thread created.&lt;br /&gt;
info: CameraSrv: Application initialized.&lt;br /&gt;
info: Creating camera cameraB&lt;br /&gt;
info: Creating pipeline with config: GSTVideoPipeline config: name= cameraB uri=http://www.facethewind.com/videos/may29_01.mpg width=320 height=240 bpp=0 framerate=15/1 format=0x9c17268&lt;br /&gt;
info: Pipeline caps: video/x-raw-rgb, bpp=(int)24, depth=(int)24, width=(int)320, height=(int)240, framerate=(fraction)15/1&lt;br /&gt;
Activating adapter...&lt;br /&gt;
Adapter activated&lt;br /&gt;
info: Component infrastructure: adapter activated.&lt;br /&gt;
info: Component infrastructure: nothing left to do, quitting&lt;br /&gt;
info: Starting pipeline&lt;br /&gt;
info: Starting thread for camera: cameraB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''cameraview''' is able to connect to one od the cameras served by '''cameraserver'''.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
==cameraserver==&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-03-07T16:33:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Running cameraserver &amp;amp; cameraview components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running examples ==&lt;br /&gt;
&lt;br /&gt;
=== Running cameraserver &amp;amp; cameraview components ===&lt;br /&gt;
&lt;br /&gt;
At the time of this note, both components available, cameraserver and cameraview, can be executed independly at different terminals/network connected systems.&lt;br /&gt;
&lt;br /&gt;
Each component requires an input configuration file with the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
myComponent.X.Y = Z&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This format is better defined in ICE middleware documentation. &lt;br /&gt;
&lt;br /&gt;
Thus, the component execution syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$&amp;gt; jdeComponent --Ice.Config=jdeComponent.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por el momento hay dos componentes mas o menos usables: cameraserver y cameraview&lt;br /&gt;
El primero sirve N cámaras, bien reales (v4l2) o simuladas desde un video y el segundo es capaz de conectarse a 1 de las cámaras servidas por cameraserver. Ambos tienen un fichero de configuración incluido en las fuentes para ejecutarlos en local.&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
==cameraserver==&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-03-07T15:58:37Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Running examples ==&lt;br /&gt;
&lt;br /&gt;
=== Running cameraserver &amp;amp; cameraview components ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
==cameraserver==&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-03-07T15:56:37Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Installing JDErobot 5.0 on Linux Ubuntu 9.04 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing JDErobot 5.0 ===&lt;br /&gt;
&lt;br /&gt;
After JDErobot 5.0 download, you must execute the following steps:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $JDEproject_dir&lt;br /&gt;
aclocal&lt;br /&gt;
autoconf&lt;br /&gt;
autoheader&lt;br /&gt;
automake -a&lt;br /&gt;
./configure --prefix=$JDErobot_install_dir --disable-component-recordingserver&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
==cameraserver==&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-03-07T15:36:16Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Installing GearBox development package */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&amp;quot; &amp;gt;&amp;gt; ${HOME}/.profile &amp;amp;&amp;amp; . ${HOME}/.profile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
==cameraserver==&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-03-07T15:33:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Installing GearBox development package */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
Include GearBox libraries path to LD_LIBRARY_PATH environment variable. It'll be required for later references during compilation. Type or include to $HOME/.profile, the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/gearbox/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
==cameraserver==&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-03-07T10:47:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Installing JDErobot 5.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing Libglade 2.4 ===&lt;br /&gt;
Libglade is a library which enables an application to build its graphical interface from an XML file (generated by Glade) at runtime. libglademm is the C++ wrapper for libglade.&lt;br /&gt;
&lt;br /&gt;
Install '''libglademm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libglademm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
==cameraserver==&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	<entry>
		<id>http://www.jderobot.org/index.php/Manual-5</id>
		<title>Manual-5</title>
		<link rel="alternate" type="text/html" href="http://www.jderobot.org/index.php/Manual-5"/>
				<updated>2010-03-07T10:43:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jvazquez: /* Installing JDErobot 5.0 on Linux Ubuntu 9.04 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the manual for jderobot-5. The most updated release of the documentation for this experimental release is this mediawiki.&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
== What is this Manual for? ==&lt;br /&gt;
This manual is intended to describe the JDErobot 5.0 software, its design and its components. It is oriented to JDErobot users and JDErobot developers. For developers it includes descriptions for each piece of software in this experimental distribution. &lt;br /&gt;
&lt;br /&gt;
This is the official most up to date documentation of JDErobot 5.0. It is written in the mediawiki tool because reading a mediawiki is more handy than reading a manual in paper and because videos can be included, enhancing the descriptions. &lt;br /&gt;
&lt;br /&gt;
== What is JDErobot 5.0? ==&lt;br /&gt;
&lt;br /&gt;
=Installing JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
== Installing JDErobot 5.0 on Linux Ubuntu 9.04 ==&lt;br /&gt;
&lt;br /&gt;
This chapter consolidates JDErobot 5.0 installation process on a Linux Ubuntu 9.04 operating system. The system used had already installed previous JDErobot version, 4.3.&lt;br /&gt;
&lt;br /&gt;
=== Installing ICE middleware ===&lt;br /&gt;
&lt;br /&gt;
The new version of JDErobot requieres this GNU component as a feature for  communicating different JDErobot components and make them work together in a distributed system environment.&lt;br /&gt;
&lt;br /&gt;
ICE, stands for the Internet Communications Engine, is a middleware for the practical programmer developed by ZeroC Inc. A high-performance Internet communications platform, Ice includes a wealth of layered services and plug-ins.&lt;br /&gt;
&lt;br /&gt;
Ice is built on concepts which will be familiar to CORBA programmers, and supports a wide variety of programming languages and runtime platforms. Slice is the interface description language used in Ice.&lt;br /&gt;
&lt;br /&gt;
First, '''ice33-slice''' component has to be installed (ice*-slice). This package installs the Slice language definitions of standard Ice services on /usr/share/slice.  You will find further information in the ZeroC home page (http://www.zeroc.com/ice.html) and in the non-free package zeroc-ice-manual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-slice&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-slice&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 181kB of archives.&lt;br /&gt;
After this operation, 2,966kB of additional disk space will be used.&lt;br /&gt;
Get:1 http://us.archive.ubuntu.com karmic/universe ice33-slice 3.3.1-6 [181kB]&lt;br /&gt;
Fetched 181kB in 1s (142kB/s)      &lt;br /&gt;
Selecting previously deselected package ice33-slice.&lt;br /&gt;
(Reading database ... 176692 files and directories currently installed.)&lt;br /&gt;
Unpacking ice33-slice (from .../ice33-slice_3.3.1-6_all.deb) ...&lt;br /&gt;
Setting up ice33-slice (3.3.1-6) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At [file:///usr/share/doc/ice33-slice/reference/index.html] directory, a reference guide is available after installation.&lt;br /&gt;
&lt;br /&gt;
It's also neccesary to install '''ICE translator''' module, '''ice33-translators''' (ice*-translators), by executing the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install ice33-translators&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libiceutil33 libmcpp0 libslice33&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  ice33-translators libiceutil33 libmcpp0 libslice33&lt;br /&gt;
0 upgraded, 4 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 1,440kB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a developing environment, it's also requiered the installation of '''libzeroc-ice33-dev''' package with any dependency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libzeroc-ice33-dev&lt;br /&gt;
[sudo] password for jvazquez: &lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following extra packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libdb4.6++ libfreeze33 libglacier2-33 libicebox33 libicegrid33 libicepatch2-33 libicessl33 libicestorm33 libicexml33 libzeroc-ice33 libzeroc-ice33-dbg&lt;br /&gt;
  libzeroc-ice33-dev&lt;br /&gt;
0 upgraded, 12 newly installed, 0 to remove and 193 not upgraded.&lt;br /&gt;
Need to get 36.7MB of archives.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Processing triggers for libc-bin ...&lt;br /&gt;
ldconfig deferred processing now taking place&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, if any ICE service, such us, icegrid or icestorm, is goning to be used, ice33-services (ice*-services) is requiered.&lt;br /&gt;
&lt;br /&gt;
=== Installing GStreamer development framework ===&lt;br /&gt;
&lt;br /&gt;
GStreamer is a streaming media framework, based on graphs of filters which operate on media data.  Applications using this library can do anything from real-time sound processing to playing videos, and just about anything else media-related.  Its plugin-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins.&lt;br /&gt;
&lt;br /&gt;
This framework is used for Camera component interface impletentations. JDErobot 5.0 Components, such us cameraserver requieres this libraries and development packages.&lt;br /&gt;
&lt;br /&gt;
First, install '''libgstreamer0.10-dev''' package for developing environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
Suggested packages:&lt;br /&gt;
  gstreamer0.10-doc&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/873kB of archives.&lt;br /&gt;
After this operation, 4,047kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer0.10-dev.&lt;br /&gt;
(Reading database ... 177838 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer0.10-dev (from .../libgstreamer0.10-dev_0.10.25-2_i386.deb) ...&lt;br /&gt;
Processing triggers for man-db ...&lt;br /&gt;
Setting up libgstreamer0.10-dev (0.10.25-2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, install '''libgstreamer-plugins-base0.10-dev''' as well&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jvazquez@ubuntu:~/PL/practica3/ejercicio1$ sudo apt-get install libgstreamer-plugins-base0.10-dev&lt;br /&gt;
Reading package lists... Done&lt;br /&gt;
Building dependency tree       &lt;br /&gt;
Reading state information... Done&lt;br /&gt;
The following packages were automatically installed and are no longer required:&lt;br /&gt;
  libsigc++-2.0-dev libxml++2.6-dev libgstreamermm-0.10-2 libglibmm-2.4-dev&lt;br /&gt;
Use 'apt-get autoremove' to remove them.&lt;br /&gt;
The following NEW packages will be installed:&lt;br /&gt;
  libgstreamer-plugins-base0.10-dev&lt;br /&gt;
0 upgraded, 1 newly installed, 0 to remove and 192 not upgraded.&lt;br /&gt;
Need to get 0B/138kB of archives.&lt;br /&gt;
After this operation, 1,450kB of additional disk space will be used.&lt;br /&gt;
Selecting previously deselected package libgstreamer-plugins-base0.10-dev.&lt;br /&gt;
(Reading database ... 177967 files and directories currently installed.)&lt;br /&gt;
Unpacking libgstreamer-plugins-base0.10-dev (from .../libgstreamer-plugins-base0.10-dev_0.10.25-2ubuntu1.2_i386.deb) ...&lt;br /&gt;
Setting up libgstreamer-plugins-base0.10-dev (0.10.25-2ubuntu1.2) ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installing GearBox development package ===&lt;br /&gt;
&lt;br /&gt;
'''GearBox''' has to be also installed. At the moment of this documentation, there isn't a Debian package yet. Installation instructions can be read at  [http://gearbox.sourceforge.net/gbx_doc_getting.html http://gearbox.sourceforge.net/gbx_doc_getting.html]&lt;br /&gt;
&lt;br /&gt;
* Download gearbox source files [http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download http://sourceforge.net/projects/gearbox/files/gearbox/9.11/gearbox-9.11.tar.gz/download]&lt;br /&gt;
* Install CMake software:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install cmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Follow the rest of configuration, compilation and installation steps for Debian/Ubuntu [http://gearbox.sourceforge.net/gbx_doc_installdebian.html]&lt;br /&gt;
&lt;br /&gt;
=== Installing OpenCV 2.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''OpenCV (Open Source Computer Vision)''' is a library of programming functions for real time computer vision. It is released under a BSD license, it is free for both academic and commercial use. The library has &amp;gt;500 optimized algorithms (see figure below). It is used around the world, has &amp;gt;2M downloads and &amp;gt;40K people in the user group. &lt;br /&gt;
&lt;br /&gt;
Refer to [http://opencv.willowgarage.com/wiki/InstallGuide http://opencv.willowgarage.com/wiki/InstallGuide] in order to download and install the component on Linux.&lt;br /&gt;
&lt;br /&gt;
=== Installing Gtkmm 2.4 ===&lt;br /&gt;
&lt;br /&gt;
'''Gtkmm''' is a C++ interface for the popular GUI library GTK+. Gtkmm provides a convenient interface for C++ programmers to create graphical user interfaces with GTK+'s flexible OO framework. Highlights include type safe callbacks, widgets extensible using inheritance and over 180 classes that can be freely combined to quickly create complex user interfaces.&lt;br /&gt;
&lt;br /&gt;
Install '''libgtkmm-2.4-dev''' Debian package:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgtkmm-2.4-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ICE Documentation ===&lt;br /&gt;
&lt;br /&gt;
You can find an extended on-line manual at [http://www.zeroc.com/doc/Ice-3.3.1/manual/toc.html]&lt;br /&gt;
&lt;br /&gt;
=Running JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Programming a component for JDErobot 5.0=&lt;br /&gt;
&lt;br /&gt;
=Components=&lt;br /&gt;
==cameraserver==&lt;br /&gt;
==cameraview==&lt;br /&gt;
==motiondetection==&lt;br /&gt;
&lt;br /&gt;
=Libs=&lt;br /&gt;
==Colorspacesmm==&lt;br /&gt;
&lt;br /&gt;
=JDErobot 5.0 SVN=&lt;br /&gt;
== Download and access to 5.0 development sources==&lt;br /&gt;
Version 5.0 is available in one development branch of JDErobot SVN repository. Once you download this repository by running the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.jderobot.org/jderobot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
version 5.0 is available at [http://svn.jderobot.org/jderobot/branches/5.0 &amp;quot;./jderobot/branches/5.0&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== JDErobot 5.0 SVN folder organization==&lt;br /&gt;
Under 5.0 repository, the following folders are available:&lt;br /&gt;
&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/doc/ doc/]: Access to documentation.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/m4/ m4/]: Autotools.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/scripts/ scripts/]: Scripts and utilities.&lt;br /&gt;
*  [http://svn.jderobot.org/jderobot/branches/5.0/src/ src/]: Source code.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/components/ components/]: code for standard components.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/interfaces/ interfaces/]: code for standard interfaces.&lt;br /&gt;
** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/ libs/]: libraries.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/colorspaces/ colorspaces/]: images and color spaces management.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotice/ jderobotice/]: JDErobot library for any topic related to ICE middleware.&lt;br /&gt;
*** [http://svn.jderobot.org/jderobot/branches/5.0/src/libs/jderobotutil/ jderobotutil/]: JDErobot library for utilities.&lt;/div&gt;</summary>
		<author><name>Jvazquez</name></author>	</entry>

	</feed>
