tag:blogger.com,1999:blog-78278011887508784032024-03-05T10:29:37.092+01:00Geduino FoundationThe Geduino Foundation blog, where you can find infos, news and progress about Geduino Foundation activities.alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.comBlogger15125tag:blogger.com,1999:blog-7827801188750878403.post-3792249561393517632016-06-03T09:27:00.001+02:002016-06-03T09:27:24.729+02:00We moved...Geduino Blog moved to its own web site.<br />
<br />
Continue follow Geduino at:<br />
<a href="https://www.blogger.com/goog_537640926"><br /></a>
<a href="http://www.geduino.org/">http://www.geduino.org</a>alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-6582578135612138192015-10-27T14:30:00.000+01:002015-10-27T14:42:23.944+01:00An album from Maker Faire Rome 2015<div style="text-align: justify;">
Thanks to all visitors that join Geduino at Maker Faire Rome 2015!</div>
<div style="text-align: justify;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMM-BOWnTnlr74VjOy34MXyYSZ5a3vtOjIerIEP9opmPwSDt168VWT-AnE3GKm2ieYaU7U4gWuTAl1MMr6KnY2KMgo_aHGycDLrmEQk20k-U5FOJO_QV3iElo-WkAhJNa_qa3Jgcuydi3v/s1600/DSC_3391.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMM-BOWnTnlr74VjOy34MXyYSZ5a3vtOjIerIEP9opmPwSDt168VWT-AnE3GKm2ieYaU7U4gWuTAl1MMr6KnY2KMgo_aHGycDLrmEQk20k-U5FOJO_QV3iElo-WkAhJNa_qa3Jgcuydi3v/s320/DSC_3391.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The Geduino Team at Maker Faire Roma</td></tr>
</tbody></table>
<div style="text-align: justify;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbP4M-stVYpGP-NUtaiGzU1Env-PZQdQeDDq5kNjUrsDWo-chqH3BrA4KHUidR7QgyeEzRfR61jKoqNopbJG2R0rQNiR7uRE39x8F3juSmIFM431oDCOkIcu85UzKuOUH305kYtfEm_xfb/s1600/IMG_20151018_155926.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbP4M-stVYpGP-NUtaiGzU1Env-PZQdQeDDq5kNjUrsDWo-chqH3BrA4KHUidR7QgyeEzRfR61jKoqNopbJG2R0rQNiR7uRE39x8F3juSmIFM431oDCOkIcu85UzKuOUH305kYtfEm_xfb/s320/IMG_20151018_155926.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">With Giovanni Burresi of UDOO Team (who produce the SBC used in Geduino)</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc9BwYaHqkVVnDX_jFdmfwWoRqT102yGlQwNsZ6Eej0kJ1W2SPxpJ7LLdIS5SxxWjRrcMi_idSFWTPGtut0N94SG64o7pRqxBvyEnhJvEsTOJrAaBnYmzvncjT2jDcgqY0ncu2fKxCBYep/s1600/DSC_3408.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc9BwYaHqkVVnDX_jFdmfwWoRqT102yGlQwNsZ6Eej0kJ1W2SPxpJ7LLdIS5SxxWjRrcMi_idSFWTPGtut0N94SG64o7pRqxBvyEnhJvEsTOJrAaBnYmzvncjT2jDcgqY0ncu2fKxCBYep/s320/DSC_3408.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Kids have fun playing with Geduino</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZpkZrZEcg3e5ER-Y6ZZ5gW4BS7XkPfIouiUh4rcgeflIWIyJRMFaxXD1pUqn82j499d5SzesxtkHzKtaiv2brbXqdsexvxdr51bjCWvkZ-6MbvOLm0OGprjKEHp1U9qIbOGVK-xJmwq8O/s1600/DSC_3406.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZpkZrZEcg3e5ER-Y6ZZ5gW4BS7XkPfIouiUh4rcgeflIWIyJRMFaxXD1pUqn82j499d5SzesxtkHzKtaiv2brbXqdsexvxdr51bjCWvkZ-6MbvOLm0OGprjKEHp1U9qIbOGVK-xJmwq8O/s320/DSC_3406.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">With Gaël Langevin and its 3D Printed humanoid robot</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcZB6LDWn_rkpKvN7LJkmJ6dl2-_DqFjFPkT_Xwq9hXMfH024iFcCGKLFr5l5ogUCbFOzcqz2dLydl9mypTsO-ha2AtP2oMAiyf5JyZ5ndLmLcljPgypXvbw_LanYnd35-xX63UYwR58kM/s1600/DSC_3368.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcZB6LDWn_rkpKvN7LJkmJ6dl2-_DqFjFPkT_Xwq9hXMfH024iFcCGKLFr5l5ogUCbFOzcqz2dLydl9mypTsO-ha2AtP2oMAiyf5JyZ5ndLmLcljPgypXvbw_LanYnd35-xX63UYwR58kM/s320/DSC_3368.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Geduino in the arena</td></tr>
</tbody></table>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/_ckOd3vxYFQ/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/_ckOd3vxYFQ?feature=player_embedded" width="320"></iframe></div>
<div style="text-align: justify;">
<br />
For everyone who miss the "Introduction to ROS and its Navigation Stack" talk at Maker Faire Rome 2015 the recorded video and slides (in Italian only) are now online!<br />
<br />
Download <a href="https://drive.google.com/open?id=0B8PHK17ji-PveEhwTkFFZXE1RmM">here</a> the slides as PDF (<a href="https://drive.google.com/open?id=0B8PHK17ji-PveG5rbzZMVlJ3b3M">here</a> the original Keynote file).<br />
<br />
On YouTube the <a href="https://youtu.be/tJKU9T2GD7M?list=PL3B9BCdaKdIM1oD8JTeoq7GfpGkgMZBC1">playlist</a> of the complete talk.<br />
<br />
I wish this can be helpful to you!</div>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-1108748615381453112015-10-26T17:35:00.002+01:002015-10-26T17:35:40.485+01:00New PowerBoard and GeduinoShield<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiekKzBUcpBQ93v912pOsp6Qg1nRUUdFXLQanTWDRhTZNEPyrP1hyphenhyphenjMaJzd6tX76U6En0Ty4MQTgqYA1gvHkcD9xmWB-p2WEFPI4wOMbh0FlP9dETSePygqc5N-4bPShf8sWsxWayZ89W4/s1600/IMG_20151019_185203.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiekKzBUcpBQ93v912pOsp6Qg1nRUUdFXLQanTWDRhTZNEPyrP1hyphenhyphenjMaJzd6tX76U6En0Ty4MQTgqYA1gvHkcD9xmWB-p2WEFPI4wOMbh0FlP9dETSePygqc5N-4bPShf8sWsxWayZ89W4/s400/IMG_20151019_185203.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Finally the PowerBoard and GeduinoShield PCB REV2 was arrived from Fritzing. You can download original files from:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
- <a href="https://drive.google.com/open?id=0B8PHK17ji-PvMWZBa1hhOFozdlE">PowerBoard REV2</a></div>
<div style="text-align: justify;">
- <a href="https://drive.google.com/open?id=0B8PHK17ji-PvV2NadUk1aEpLVHc">GeduinoShield REV2</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In order to open them you must use Fritzing software that can be freely downloaded from this <a href="http://fritzing.org/">link</a>. The PCBs shown in the picture was build by FritzingLab.</div>
<br />alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com4tag:blogger.com,1999:blog-7827801188750878403.post-1596865719667770162015-09-10T17:05:00.004+02:002015-09-10T17:21:35.062+02:00Join Geduino at MakerFaire Rome 2015<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.makerfairerome.eu/"><img border="0" height="425" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpBm008UB3rOG_P1WJytZNtf003s3unSc6xVX-8ULngknu3sOUlnnPS_bu2AKXUU0XbF0JRsItTtoNSKd3LutZ4zPwBNUfSZhc5kRpB1dtVxuBsth3fVFbV9Q_sEk3YRVSUwaFIIgxxPCs/s640/600x400.png" width="640" /></a></div>
<br />
<div style="text-align: justify;">
Geduino Foundation will be at MakerFaire Rome 2015. You will have chance to see Geduino demonstration and meet Geduino developers.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
You can attend <i>Introduction to ROS and its Navigation Stack</i> talk. We will start from ROS basis to arrive to its Navigation Stack exploring everything you always wanted to know but that you have found on the net.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<span style="font-size: large;"></span></div>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com3tag:blogger.com,1999:blog-7827801188750878403.post-85739883420880578082015-05-18T12:20:00.001+02:002015-05-18T18:44:19.016+02:00A roadmap to Social Autonomous Robot<div style="text-align: justify;">
<div style="background-color: #dddddd;">
<span style="font-family: Courier New, Courier, monospace; font-size: large;">Social robot</span><br />
<span style="font-family: Courier New, Courier, monospace;">From Wikipedia, the free encyclopedia</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">A social robot is an autonomous robot that interacts and communicates with humans or other autonomous physical agents by following social behaviors and rules attached to its role.</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
</div>
<span style="background-color: white; font-family: Times, Times New Roman, serif;"><br /></span>
The Navigation Stack is the basis of a mobile robot but a robot that is only able to move is not useful at all. What is missing is a <i>reason</i> for which a robot should move. This reason must be provided by the social attitude of Geduino: its role in society must define not only how to move but its overall behaviour!<br />
<br />
The following roadmap for Geduino development was written following this goal: bring Geduino to be an Autonomous Social Robot!</div>
<div style="text-align: justify;">
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpG2u4kEgyqdXb9HHmkEN1EYfhDUyQpbTs6BoJRS3SDfhH8wYej8Hx5gXRoOSXL73QaZrb42pFTl7I8KiXU-UKmlN3nbEY79N0VjZmXjv_6UF9BSWGgKUyUWc9hz0NQSQfl1Vnvf8lyxb0/s1600/road-map.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpG2u4kEgyqdXb9HHmkEN1EYfhDUyQpbTs6BoJRS3SDfhH8wYej8Hx5gXRoOSXL73QaZrb42pFTl7I8KiXU-UKmlN3nbEY79N0VjZmXjv_6UF9BSWGgKUyUWc9hz0NQSQfl1Vnvf8lyxb0/s320/road-map.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<span style="font-size: large;">Navigation</span><br />
<br />
Navigation is the basic of an autonomous robot: the ability to move autonomously. This step includes:<br />
<br />
<ul>
<li>build a map of unknown environment;</li>
<li>localization;</li>
<li>plan a path to reach the goal end execute it;</li>
<li>avoid fixed and mobile obstacles.</li>
</ul>
<br />
In this <a href="https://youtu.be/plZ3zy6Mawk">video</a> you can see a demonstration of the Geduino Navigation Stack.<br />
<br />
<span style="font-size: large;">Perception</span><br />
<br />
Perception is the ability to sense real world by sensors's measurements. Of course perception is already used in Navigation but, in order to interact with humans, it must be extended:<br />
<br />
<ul>
<li>using computer vision, to detect and recognise objects and humans;</li>
<li>using speech to text algorithm, to recognise voice.</li>
</ul>
<br />
<div>
This step is actually in progress: by now some tests with OpenCV and Geduino camera was performed.</div>
<br />
<span style="font-size: large;">Interaction</span><br />
<br />
Navigation is the fundamental interaction between Geduino and external world. Geduino's interaction capabilities must be extended based on the social role we will assign it. Hardware's extensions must be evaluated in this phase (arms, audio output etc…).<br />
<div>
<br /></div>
<br /></div>
<ul>
</ul>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-90776523433798410452015-05-18T11:16:00.001+02:002015-05-18T18:46:14.208+02:00Navigation Stack is ready!<div style="text-align: justify;">
I'm finally proud to announce the Geduino Navigation Stack is working properly. See this video to discover what Geduino can do.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/plZ3zy6Mawk" width="560"></iframe>
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
The video will show you capabilities of Geduino Navigation Stack:<br />
<br />
<br />
<ul>
<li>build a map of unknown environment;</li>
<li>localization;</li>
<li>plan a path to reach the goal end execute it;</li>
<li>avoid fixed and mobile obstacles.</li>
</ul>
<br />
<div>
<br /></div>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-81278199753102894182015-04-01T11:45:00.000+02:002015-04-03T12:38:24.833+02:00GMapping and RPLidar<div style="text-align: justify;">
Previous post ends with a question: why Hector Slam perform better than GMapping when in theory should be the opposite? The right question should be: why GMapping works bad with RPLidar? Since I'm not the only developer asking this question I hope will be helpful for everyone share my results.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
There are several reasons for which RPLidar and GMapping does not work well together:</div>
<div style="text-align: justify;">
<ul>
<li>the LaserScan message expected by GMapping;</li>
<li>the RPLidar reference frame;</li>
<li>the LaserScan message created by RPLidar node.</li>
</ul>
<div>
<br /></div>
<div>
The good new is that all issues can be easily fixed. On this post I will show you how I success to make RPLidar and GMapping work together.</div>
<div>
<br /></div>
<div>
<h3>
The LaserScan expected by GMapping</h3>
</div>
<div>
<br /></div>
<div>
First issue regards the LaserScan expected by GMapping. Unfortunately this is not documented anywhere and I found it only checking out source code: on latest commits (not yet released) a new check was added to make sure LaserScan message min angle and max angle are opposite:</div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">maxAngle = - minAngle</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;">This condition is not satisfied by RPLidar node but, since released version of GMapping does not include this check, is not easy to notice.</span></div>
<div>
<span style="font-family: Times, Times New Roman, serif;"><br /></span></div>
<h3>
The RPLidar reference frame</h3>
<div>
<br /></div>
<div>
Second issue came from RPLidar frame and RPLidar rotation direction. It assume positive angle in CW direction: in order to reflect this orientation Z-axis must be directed to the RPLidar's bottom side (this is not a bug but, since this is not pointed out in documentation, is quite common to make a mistake broadcasting laser scan frame).</div>
<div>
<br /></div>
<div>
Further more, in order to satisfy the GMapping required condition about angles shown on previous section, is better to use a frame rotated by 180° respect one shown in RPLidar documentation: using this frame the resulting min and max angle will be (approximately) equals to -3.14 and 3.14 according to GMapping condition.</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69UfJGTnqyPN1UJOlhsmzTFQHGeoiziQRiqYgLS6Dibv8WN7hLL5vp3ZibkjLso1PcmFrQC9REJ0JM-97MSyKOb0wWUxyjkV4Cll5P-wj66D1vZpr_Ct_XOZmbsoXPt6TzlH4vCohLHZM/s1600/rplidar-frame-robopeak.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj69UfJGTnqyPN1UJOlhsmzTFQHGeoiziQRiqYgLS6Dibv8WN7hLL5vp3ZibkjLso1PcmFrQC9REJ0JM-97MSyKOb0wWUxyjkV4Cll5P-wj66D1vZpr_Ct_XOZmbsoXPt6TzlH4vCohLHZM/s1600/rplidar-frame-robopeak.png" height="267" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The RPLidar frame from RoboPeak documentation</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMmeXFybsrjqxOgiPxrP1rgQTe5JMJqTp7vaeMl6liB44XVtITvMpVE1SoqV7hmVDMxD_7iAabcSQ5ox9mfurBO-wcsF8sqFw1yafjPmdbhl26VSZaVR1idBOtTBQ8XDL7VmZDhQerDTKc/s1600/rplidar-frame.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMmeXFybsrjqxOgiPxrP1rgQTe5JMJqTp7vaeMl6liB44XVtITvMpVE1SoqV7hmVDMxD_7iAabcSQ5ox9mfurBO-wcsF8sqFw1yafjPmdbhl26VSZaVR1idBOtTBQ8XDL7VmZDhQerDTKc/s1600/rplidar-frame.png" height="300" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The RPLidar frame must be used in ROS</td></tr>
</tbody></table>
<br />
<br />
<h3>
The LaserScan message created by RPLidar node</h3>
<div>
<br /></div>
<div>
The RPLidar node require some modification in order to reflect corrections shown before about min and max angle (they must take count of the frame rotated by 180°):</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">scan_msg.angle_min = M_PI - angle_min;</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">scan_msg.angle_max = M_PI - angle_max;</span></div>
</div>
<div>
<br /></div>
<div>
Applying this fix will result in negative value of published <span style="font-family: Courier New, Courier, monospace;">angle_increment</span> according to the fact that RPLidar rotate CW.</div>
<div>
<br /></div>
<h3>
GMapping configuration</h3>
<div>
<br /></div>
<div>
GMapping default settings are designed for high speed and large range lidars. RPLidar has really good value/price rate but it does not fit those requirements so modifications of GMapping parameters is needed in order to have best result.</div>
<div>
<br /></div>
<div>
Those are the GMapping parameters I used with best results:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: Courier New, Courier, monospace;">maxUrange: 5.5</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">maxRange: 5.5 </span><span style="background-color: yellow;"><span style="font-family: Verdana, sans-serif; font-size: x-small;">it was 6.0 but after better tuning 5.5 is suggested</span></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">minimumScore: 50</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">linearUpdate: 0.2</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">angularUpdate: 0.25</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">temporalUpdate: 5.0</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">delta: 0.025</span></div>
</div>
<h3>
Conclusion</h3>
<div>
<br /></div>
<div>
In conclusion RPLidar can works with GMapping with good performance after those issues are fixed:</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLzGThdSeVcyDJtP6z-zpTnhg0ytlRzwlJN8eo4AjXfgr48Trfq1aNvfdYfgp6hMFa0nBewZavm9Q70ramAfc7KRY9y6e-jUKL8B7T6YMHFIb5OQBeW0mb20iCcSDsiSbw8TWxegUaihPG/s1600/map.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLzGThdSeVcyDJtP6z-zpTnhg0ytlRzwlJN8eo4AjXfgr48Trfq1aNvfdYfgp6hMFa0nBewZavm9Q70ramAfc7KRY9y6e-jUKL8B7T6YMHFIb5OQBeW0mb20iCcSDsiSbw8TWxegUaihPG/s1600/map.png" height="400" width="305" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The GMapping built map before fixes</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0qQ_M3oL96WUGAyEpHvKr0eWGP1ompiTE5bBCc-wyaoECUho1Wy3tbr_9oIvRUOYZnEThZZ3iMdxSVH2QeZuwveORll3JUkUHOtkIKuF8EFmB8zKeU8uXme3qaOAK-JL_pv52gM4yP9D-/s1600/map-gmapping.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0qQ_M3oL96WUGAyEpHvKr0eWGP1ompiTE5bBCc-wyaoECUho1Wy3tbr_9oIvRUOYZnEThZZ3iMdxSVH2QeZuwveORll3JUkUHOtkIKuF8EFmB8zKeU8uXme3qaOAK-JL_pv52gM4yP9D-/s1600/map-gmapping.png" height="312" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The GMapping built map after fixes. Unfortunately was not possible to use the same bag file for this test since the LaserScan message was changed. Anyway the test was conducted on same environment with same conditions.</td></tr>
</tbody></table>
<div>
</div>
<div>
The RPLidar node with fixes it is available on <a href="https://github.com/afrancescon/rplidar_ros">GitHub repo</a>.</div>
</div>
<div style="text-align: justify;">
<br /></div>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-25306892804199254062015-04-01T10:30:00.003+02:002015-04-01T10:30:45.549+02:00Navigation stack test: GMapping vs Hector Slam<div style="text-align: justify;">
After first failed test of Geduino navigation stack using GMapping as SLAM algorithm I was curious to make tests with Hector Slam that, as shown by RoboPeak on its <a href="https://www.youtube.com/watch?v=pCF7P7u8pDk">youtube video</a>, works really well.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
I registered real sensor data (using rosbag) from Geduino and play it running GMapping and Hector Slam in order to compare their behaviour on same data. Those are the results:</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMvuFREPT3Z9oTg9Yige6_7Vz7onNpnSokU17nuHPej9YOJ122hpJd6aMb-Ze_pGL-onw9lV6Oy1L44wKByKngJWfwJPeOPQa9MTrIRJMKfBdvgDozJRZcWcYkakZkAGFKvXUP8Zko2mR-/s1600/map.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMvuFREPT3Z9oTg9Yige6_7Vz7onNpnSokU17nuHPej9YOJ122hpJd6aMb-Ze_pGL-onw9lV6Oy1L44wKByKngJWfwJPeOPQa9MTrIRJMKfBdvgDozJRZcWcYkakZkAGFKvXUP8Zko2mR-/s1600/map.png" height="400" width="305" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The map generated by GMapping</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmNTa5YxgxOS_O3gu0j_0yj807h4rhypU1cByUwp4w54s7VctNPDz2RGuZQB8xlL1cQbzQl_HYHvH-j7Rw-K7Gvejdm_BtusSZK7m6FsoGlFc2npAb0lH4YcCJ7giJbHR1_PIA4hJRlRmv/s1600/map-hector.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmNTa5YxgxOS_O3gu0j_0yj807h4rhypU1cByUwp4w54s7VctNPDz2RGuZQB8xlL1cQbzQl_HYHvH-j7Rw-K7Gvejdm_BtusSZK7m6FsoGlFc2npAb0lH4YcCJ7giJbHR1_PIA4hJRlRmv/s1600/map-hector.png" height="400" width="288" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The map generated by Hector Slam</td></tr>
</tbody></table>
<br />
<div style="text-align: justify;">
I was really surprised of this result: Hector Slam performs really better than GMapping!</div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
<div>
<div style="text-align: justify;">
Those two algorithms differ from the information sources used for localization and mapping: GMapping uses odometry and laser scan; Hector Slam, instead, uses the laser scan only. Theoretically GMapping should perform better then Hector Slam expecially on environments that cause laser scan estimated pose to be ambiguous (large space or long hallway without features): in those scenario GMapping can rely on odometry for robot localization. By other hand Hector Slam does not require odometry (so its a forced choice if robot does not provide it); another big advantage is that Hector Slam can work with laser mounted not planar to ground (as required by GMapping).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
You can find more info on this <a href="http://home.isr.uc.pt/~davidbsp/publications/SPR_SSRR2013_SLAM.pdf">benchmark of slam algorithm in ROS</a>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Since Hector Slam works fine we can assume laser scan data is ok, so I focused on odometry test: a good guide for this purpose can be found <a href="http://wiki.ros.org/navigation/Troubleshooting">here</a>.</div>
</div>
<div>
<div style="text-align: justify;">
<br />
This the result of this test:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkgYdZyxn0ZvG5H_Y6jAybYv0kZI83kANcYl3nwwOsH1IeYH_URZbPtmGC8tRz2y-FaqsRPObpyrXM0AzScX0IPphK9m8wm6paOybyudukFL6rzD_RjB92excm5ymBxQ7wICd2kyFV8ECr/s1600/odometry_test.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkgYdZyxn0ZvG5H_Y6jAybYv0kZI83kANcYl3nwwOsH1IeYH_URZbPtmGC8tRz2y-FaqsRPObpyrXM0AzScX0IPphK9m8wm6paOybyudukFL6rzD_RjB92excm5ymBxQ7wICd2kyFV8ECr/s1600/odometry_test.png" height="312" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">The RViz output of odometry test</td></tr>
</tbody></table>
<br />The robot starts from the position shown on the picture and travel to other side of the room and gone back. As shown on the picture laser scan impressions overlap quite well: this means that odometry data is consistent.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
In conclusion theory is not according with real world: GMapping should perform better than Hector Slam but tests demonstrate the opposite. I will spend some time in order to study this case and found a solution since Geduino is designed to use GMapping.</div>
</div>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-5903406780975448322015-03-26T12:39:00.000+01:002015-03-26T12:39:00.516+01:00First navigation stack test and improvementsAfter the Geduino navigation stack was ready I started tests on it. Generally speaking it is working but some problems occurs with GMapping (that provide SLAM algorithm) localisation (see <a href="https://www.youtube.com/watch?v=KEykgJtSwNY">this video</a>). It seems to be related to odometer performance and GMapping settings.<div>
<br /></div>
<div>
To solve this problem I'm working on two tasks:</div>
<div>
<ul>
<li>improve Geduino odometry update frequency;</li>
<li>improve Geduino odometry precision;</li>
<li>use ROS bag simulation to test and find the best GMapping configuration.</li>
</ul>
<div>
On this post I want to show what I've done about first task and how I success to double it.</div>
</div>
<div>
<br /></div>
<div>
Geduino is able to move thanks to its two EMG30 motor powered by MD25 controller. This controller is connected to SAMx8 that set motor speeds (according to subscribed cmd_vel topic) and publish odometry transformation and topic (based on EMG30 encoders values).</div>
<div>
<br /></div>
<div>
Previously all calculation was done by SAMx8 and published on ROS. This was the node chart and frames tree:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvhtkOtHICXqZjzMPGD1Ff1nyzm9N8_MUchkOFTAsJDEjaEYiYx5Tyt26D8Auj8E3vcxrtnylxXW-LKU7OIu5oLgOD8upfZO-VZmlrAcMcZJcBA1caj0Z0FbtsIh7nRJNOkrmleYO0pChr/s1600/rosgraph.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvhtkOtHICXqZjzMPGD1Ff1nyzm9N8_MUchkOFTAsJDEjaEYiYx5Tyt26D8Auj8E3vcxrtnylxXW-LKU7OIu5oLgOD8upfZO-VZmlrAcMcZJcBA1caj0Z0FbtsIh7nRJNOkrmleYO0pChr/s1600/rosgraph.png" height="225" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja-dan8odzN1dvImmjb6RvrfFbQOJtgo3JWuElKCLNqhXkHwQWHQJxwjt26hY1nkv-7VMfYMBX4WZwJd_txcQeklvjlBolhgWESc62vG7zm_iTUgjb0eQ_CaHhyphenhyphenl4ehqn2ntybD3imeFZb/s1600/frames.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja-dan8odzN1dvImmjb6RvrfFbQOJtgo3JWuElKCLNqhXkHwQWHQJxwjt26hY1nkv-7VMfYMBX4WZwJd_txcQeklvjlBolhgWESc62vG7zm_iTUgjb0eQ_CaHhyphenhyphenl4ehqn2ntybD3imeFZb/s1600/frames.png" height="148" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
The max update frequency of odometry was 10 Hz.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Since IMx6 has higher performance than SAMx8 the idea was to move all calculation to ROS node running on IMx6 and leave to SAMx8 only the hardware handling. After the modification the controller only publish raw encoders values and subscribe speeds command. All calculation in order to provide odometry and execute cmd_vel are done in odometry ROS node.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
With this new design approach I was able to reach an update frequency of 20 Hz.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaLTM_P3tNBXsSTqB4pl4LSSMe8-HzqT4WGj5XsawKoqXLU7B3PuUy3qUG2Moumtjg9CsMFzOmdTg40IUgdsUunpyThKt7BClwyePwTFGemDutkJeu1AWxilWYGlXSP9RlWqPuhznkHdK4/s1600/rosgraph-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaLTM_P3tNBXsSTqB4pl4LSSMe8-HzqT4WGj5XsawKoqXLU7B3PuUy3qUG2Moumtjg9CsMFzOmdTg40IUgdsUunpyThKt7BClwyePwTFGemDutkJeu1AWxilWYGlXSP9RlWqPuhznkHdK4/s1600/rosgraph-2.png" height="188" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrMtEtV5R0GF2uNB8HT2kRp7FSFUjRzfh-RZse-lSKOhgdkDecg7eNXIFtyi0RZpOzXupqqoKctbokuulB94Oykd8ZCjMyMvoqbKCY6thjvjydE3lI1pOkVnfQlgd5tlkMap-_y0Oh8tvh/s1600/frames-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrMtEtV5R0GF2uNB8HT2kRp7FSFUjRzfh-RZse-lSKOhgdkDecg7eNXIFtyi0RZpOzXupqqoKctbokuulB94Oykd8ZCjMyMvoqbKCY6thjvjydE3lI1pOkVnfQlgd5tlkMap-_y0Oh8tvh/s1600/frames-2.png" height="146" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Furthermore other topics are published:</div>
<div class="separator" style="clear: both; text-align: justify;">
</div>
<ul>
<li>motion9 (mpu9150_msgs/StampedMotion9): it contains raw motion 9 data from MPU9150. The goal is to integrate those informations (using Kalman Filter) in order to improve odometry precision;</li>
<li>md25/status (md25_msgs/StampedStatus): it provide information about MD25 board status (voltage and current). The goal is to use it for diagnostic purpose;</li>
<li>power (geduino_msgs/StampedPower): it provide information about Geduino power source (voltage and power source type). The goal is to use it for diagnostic purpose (especially when powered by Li-Po battery is important to monitor the voltage).</li>
</ul>
<div>
Next steps:</div>
<div>
<ul>
<li>testing odometry precision and apply corrections (UMBMark test);</li>
<li>improve odometry precision by Motion9 data (Kalman Filter);</li>
<li>test different GMapping configurations.</li>
</ul>
</div>
<div>
<br /></div>
<div>
On Geduino <a href="http://geduino.blogspot.it/p/github-repos.html">Git repositories</a> you can find all modified source code.</div>
<br />
<div>
<br /></div>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-55586585725299021982015-02-22T17:46:00.001+01:002015-02-22T17:55:08.713+01:00Geduino has now a logo!After long time Geduino finally has a logo! Thanks to everyone who responded to the survey for their contribution.<br />
<br />
The new blog look was an occasion to add new contents:<br />
<br />
<ul>
<li>on the right side of the page you find a link to GitHub repositories of Geduino code and other open source projects used developing Geduino. All source code are distributed under <a href="http://www.gnu.org/copyleft/gpl.html">GPL V3</a> license;</li>
<li>a new page contains a step by step guide to create Geduino SD card (from Kernel and modules to ROS packages).</li>
</ul>
<div>
Coming soon on the blog:<br />
<br />
<ul>
<li>I'm working on a <a href="https://github.com/afrancescon/geduino-ros.git">ROS library for Java</a> that is still an alfa version. I think it can be useful to other developer and I'll spend more posts about it:</li>
<li>I'll add DWG file of the Geduino hardware, including Eagle project of the power board and the shield.</li>
</ul>
<div>
<br /></div>
</div>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-62335464348477967302014-07-07T13:58:00.000+02:002014-07-08T14:38:34.092+02:00Testing MD25 and EMG30 On this post I want to publish result of some tests performed on MD25 board and EMG30 motors mounted on Geduino.<br />
<br />
The first test's goal is to find relationship between motors speed input (a number between 0 and 255 where 128 is the center) and final angular speed at the end shaft.<br />
<br />
In order to perform this test a simple program was uploaded on SAMx8. Exploring the speed range incrementing speed by 8 this program perform following steps:<br />
- reset MD25 encoders value;<br />
- set speed to given value;<br />
- wait 10 seconds;<br />
- measure the MD25 encoders;<br />
- set speed to 0 (i.e. 128).<br />
<br />
The same test was performed on both motor (1 and 2). The following chart show the results for motor 1 (green line) and motor 2 (blu line). On the x axis there are speed input to MD25, on the y axis the rotation speed at the end shaft.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZkEXggI-b6klmjKUj_unXuB3AJxQ30zEk-jsPIPqfsDv_M9mcgyePl4E5AG04r-HbqKb3HX051A6Flp7Uq73c5AYB0Dq20Y6oGgWBhk8SoPD2QV8ZqERitksIWdpZknfHEOeaktzH9DKQ/s1600/md25-speed-test.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZkEXggI-b6klmjKUj_unXuB3AJxQ30zEk-jsPIPqfsDv_M9mcgyePl4E5AG04r-HbqKb3HX051A6Flp7Uq73c5AYB0Dq20Y6oGgWBhk8SoPD2QV8ZqERitksIWdpZknfHEOeaktzH9DKQ/s1600/md25-speed-test.png" height="207" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
The behavior is really good: excluding the extremes of the range the response is linear and there are not significant errors between two motors. This is a result of the motor feedback handled by MD25 board.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Using this result we can calculate relationship between MD25 input and final speed of the robot. Motors rotation speed can be related to robot speed and robot angular speed using following formulas:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
1) v = (w1 + w2) * d / 4</div>
<div class="separator" style="clear: both; text-align: left;">
2) w = (w2 - w1) d / (2 *b)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
where:</div>
<div class="separator" style="clear: both; text-align: left;">
v - tangent speed</div>
<div class="separator" style="clear: both; text-align: left;">
w - angular speed</div>
<div class="separator" style="clear: both; text-align: left;">
w1, w2 - rotation speed of motor 1 and 2</div>
<div class="separator" style="clear: both; text-align: left;">
d - the wheel diameter</div>
<div class="separator" style="clear: both; text-align: left;">
b - the wheel base</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Calculation are done using Geduino dimensions.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPOyXkFqNhwCoznDTEfaqnT3HDRIOcMrQWPjnidihzfPqV4kbDFBRTiz8UNbCqxMDO_Lsw6xnCM9vxL1W1zxJRLmU1g4-zqIySrjCMPLIUx2h9nmWriwrfcC-9iymWZwnVHTh_g2dyeKyd/s1600/geduino-speed-vs-input.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPOyXkFqNhwCoznDTEfaqnT3HDRIOcMrQWPjnidihzfPqV4kbDFBRTiz8UNbCqxMDO_Lsw6xnCM9vxL1W1zxJRLmU1g4-zqIySrjCMPLIUx2h9nmWriwrfcC-9iymWZwnVHTh_g2dyeKyd/s1600/geduino-speed-vs-input.png" height="208" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3e2e8aWT691i1dUYOFY4w3Jlu_2Wf8bUast5gwaHnn7c7-KZdyp2sfbIKTtIMWkycOfx-Uj84fzLLFh_n3zVaKlXpehwcfIyKl8aLLrvbjkE1nvFPhiMStUlaLCM9Dktp5AlZdjDol5Ym/s1600/geduino-w-speed-vs-input.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3e2e8aWT691i1dUYOFY4w3Jlu_2Wf8bUast5gwaHnn7c7-KZdyp2sfbIKTtIMWkycOfx-Uj84fzLLFh_n3zVaKlXpehwcfIyKl8aLLrvbjkE1nvFPhiMStUlaLCM9Dktp5AlZdjDol5Ym/s1600/geduino-w-speed-vs-input.png" height="208" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Applying linear regression to this data we can found a linear relationship between the tangent and angular speed we want to drive to the robot and the right speeds value to set on MD25 to reach those speeds.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-22520621662714850632014-07-07T13:37:00.001+02:002015-02-21T13:08:02.700+01:00Geduino is ready!NOTE: this an old post and, due to latest improvement, Geduino is changed from this picture.<br />
<br />
I'm proud to announce that Geduino is ready!<br />
<br />
With the completation of the power board and the shield all subsystems are now connected. Also the Laser Range Fined mount is build and completed. On following picture you can see the fully assembled robot (ok, this is not true: the battery is still not there: until Geduino will work in a lab power it by external is cheapy!).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5q9MFnwmqwjFC9_hOaedoaEzDH6w184o0c-EjuIpLdMD2gPHKdGMuuFgrNvdQWYHSaEK7wzaQoHmug0I2nSHhC5bVtLgD9PWsfFnywlhrGs7Bj5DnVZlItPuL8RPX0nYDpwTgDeD2mWf_/s1600/IMG_0005.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5q9MFnwmqwjFC9_hOaedoaEzDH6w184o0c-EjuIpLdMD2gPHKdGMuuFgrNvdQWYHSaEK7wzaQoHmug0I2nSHhC5bVtLgD9PWsfFnywlhrGs7Bj5DnVZlItPuL8RPX0nYDpwTgDeD2mWf_/s1600/IMG_0005.jpg" height="400" width="298" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvclEQEdlp7JJmJXcn2d9IuNcNDtgdSqbn_-SYKWRQfRQbXeaFPmGzbb4aOvUtW4rXyX9PVYmk57j03hS1BuiKpwL8V-9WEnevcJ4r5-sQg-EW5PGCcI1uc4JxNvwuCMjmN40SQ3WVBZud/s1600/IMG_0006.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvclEQEdlp7JJmJXcn2d9IuNcNDtgdSqbn_-SYKWRQfRQbXeaFPmGzbb4aOvUtW4rXyX9PVYmk57j03hS1BuiKpwL8V-9WEnevcJ4r5-sQg-EW5PGCcI1uc4JxNvwuCMjmN40SQ3WVBZud/s1600/IMG_0006.jpg" height="326" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfxylrKASJWDrQbLtQUBLhicXqzlp3qncB1OITjouc_erxYnnO2vZri6JQSA-YyoK-13S7NAAR13FMy9yweEhPAoF8XLdPG2z7inoPxZMibg3fBTT-e4ZjXUFOSnbJXdCAJpdc79yelGuS/s1600/IMG_0008.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfxylrKASJWDrQbLtQUBLhicXqzlp3qncB1OITjouc_erxYnnO2vZri6JQSA-YyoK-13S7NAAR13FMy9yweEhPAoF8XLdPG2z7inoPxZMibg3fBTT-e4ZjXUFOSnbJXdCAJpdc79yelGuS/s1600/IMG_0008.jpg" height="366" width="400" /></a></div>
<span id="goog_1015005162"></span><span id="goog_1015005163"></span><br />alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-37635435788630290802014-06-30T11:28:00.001+02:002015-02-21T13:06:12.104+01:00System architecture<div style="text-align: justify;">
<span style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.1999998092651px; line-height: 18.4799995422363px; text-align: center;">NOTE: this post is a revision of an older one to reflect last changes on Geduino</span><br />
<br />
On this post the general architecture of Geduino will be explosed in order to show how each component works and communicate with other ones.</div>
<br />
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEJzWzA0_DLw4_j02WoX56sKOyxTcR3XGgW_kT-bwF2had70VdE8EbZaj0S3r3RlkAvj0N1VInnnH7ySt-l22uyvh94eOxRpmE1q5Lei5kO1kO2iNR5Hlzkndw1JOOujn5C5_P58FNRkYh/s1600/architecture.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEJzWzA0_DLw4_j02WoX56sKOyxTcR3XGgW_kT-bwF2had70VdE8EbZaj0S3r3RlkAvj0N1VInnnH7ySt-l22uyvh94eOxRpmE1q5Lei5kO1kO2iNR5Hlzkndw1JOOujn5C5_P58FNRkYh/s1600/architecture.png" height="414" width="640" /></a></div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div style="text-align: justify;">
Geduino is based on <a href="http://www.udoo.org/">UDOO</a> board, a mini PC with quad core processor (Freescale IMx6) and a micro controller (SAMx8). UDOO provide an <a href="http://arduino.cc/">Arduino</a> compatible pinout (the same as Arduino Due) that can be connected to SAMx8 (in this case it will works exactly as an Arduino Due) or to IMx6 CPU. SAMx8 and IMx6 will communicate between them using UART.</div>
</div>
<div>
<div style="text-align: justify;">
<br /></div>
<div>
<div style="text-align: justify;">
Other hardware component:</div>
</div>
<div>
<div style="text-align: justify;">
- PING))) sensors from <a href="http://www.parallax.com/">Parallax</a>. Ping sensors will be connected and controlled by the SAMx8 micro controller and their goal is to provide a secure and fast obstacle avoidance system;</div>
</div>
<div>
<div style="text-align: justify;">
- the RPLidar from <a href="http://www.robopeak.net/">RoboPeak</a>, connected using UART pins to the IMx6. The RPLidar will provide laser scan data and it is the core information source for the SLAM algorithm;</div>
</div>
<div>
<div style="text-align: justify;">
- the MD25 and EMG30 motor, connected using UART to SAMx8 micro controller. The motor will move Geduino and provide odometry information to SLAM algorithm;</div>
</div>
<div>
<div style="text-align: justify;">
- the MPU9150 from <a href="https://www.sparkfun.com/">Sparkfun</a>, connected using I2C to SAMx8 micro controller. This is a complete IMU that provide orientation information to SLAM algorithm in order to increase its accuracy.</div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Furthermore two other hardware board are used:</div>
<div style="text-align: justify;">
- the power board: attached to power source (LiPo battery or AC adapter) it provide stable power (5V or 12V) to all other components. In order to preserve the LiPo battery life the power board send to SAMx8 the current voltage of the battery;</div>
<div style="text-align: justify;">
- the shield board: this is a shield which pinout is Arduino Due compatible. Almost all hardware components will be connected to this shield. It include all systems (voltage level converter, configuration jumpers...) needed for hardware communication.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Last, but not the least, the 7" LCD touch screen, a standard UDOO optional that will provide a GUI to interact with Geduino.</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-18183742776947227412014-06-30T09:47:00.000+02:002015-02-21T13:04:38.548+01:00Construction: part two<div class="separator" style="clear: both; text-align: justify;">
<span style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.1999998092651px; line-height: 18.4799995422363px; text-align: center;">NOTE: this is a quite old post and in latest revision some construction details maybe changed</span></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
To build up the upper plate of the robot I use the same technics used for lower plate. The upper plate must have the supporting mount for LCD panel. This mount was cut from an aluminum sheet and it is composed by the rear mount and the from mask.</div>
<div class="separator" style="clear: both; text-align: justify;">
For aesthetics reason the front mask was decorated with a black glue paper.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-yHeHzuTOD0rz4ITkVkj_mjQeufxQB4ZedY7GtNsl_hS_Tj4qG0TxoMEjXv1xrUb2aYB8utAnSBtgTDzvGI5gUsyul94cmZQIIDcaorZ_yT2uOZdM5x4M8nFuVzfooKRTXtZzD1-BnwPy/s1600/IMG_0002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-yHeHzuTOD0rz4ITkVkj_mjQeufxQB4ZedY7GtNsl_hS_Tj4qG0TxoMEjXv1xrUb2aYB8utAnSBtgTDzvGI5gUsyul94cmZQIIDcaorZ_yT2uOZdM5x4M8nFuVzfooKRTXtZzD1-BnwPy/s1600/IMG_0002.jpg" height="298" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWqckSGOmerYtxrj_dXLVkiKCUFQyayuZIOYnlo6UF5QrIf6cNKXlZIgJDOVYJOqHQV3bELKVMKA_OftM9hA5D2adQTq-a2gOOcmdjS1xuR_1aWMaXQJbbA7rqPx7Y-K4sJQIjJhD4bfGT/s1600/IMG_0001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWqckSGOmerYtxrj_dXLVkiKCUFQyayuZIOYnlo6UF5QrIf6cNKXlZIgJDOVYJOqHQV3bELKVMKA_OftM9hA5D2adQTq-a2gOOcmdjS1xuR_1aWMaXQJbbA7rqPx7Y-K4sJQIjJhD4bfGT/s1600/IMG_0001.jpg" height="298" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbfoZMFHqRkKGivfdRNv2VqzgoOJVZA1m15-1FeVdjn016M-GyGP2kzsvNYbAauExlppmiG-z9edKYGpkQcuThUryBrm6vHfC8CYUCrg0AIVs1nVltG-xlyei6Pf8i1JvjhkTF6SKH284S/s1600/IMG_0003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbfoZMFHqRkKGivfdRNv2VqzgoOJVZA1m15-1FeVdjn016M-GyGP2kzsvNYbAauExlppmiG-z9edKYGpkQcuThUryBrm6vHfC8CYUCrg0AIVs1nVltG-xlyei6Pf8i1JvjhkTF6SKH284S/s1600/IMG_0003.jpg" height="298" width="400" /></a></div>
<br />
Finally the two plates mounted with the LCD and UDOO connected and powered.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy38QghT-bnJopNzpVLF1YzKFdvMquSz5AbRSW5UgaQGrYWhgiAQjrjpQqSHMUZ4X1WzZF84cVRNS3vzZ044cMVDBaRVbSTt329qVYuuhVJmiSCY9wlNGA6mQKOrP-dDEeIot3Ox3YwuyN/s1600/IMG_0004.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy38QghT-bnJopNzpVLF1YzKFdvMquSz5AbRSW5UgaQGrYWhgiAQjrjpQqSHMUZ4X1WzZF84cVRNS3vzZ044cMVDBaRVbSTt329qVYuuhVJmiSCY9wlNGA6mQKOrP-dDEeIot3Ox3YwuyN/s1600/IMG_0004.jpg" height="298" width="400" /></a></div>
<br />
<br />alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0tag:blogger.com,1999:blog-7827801188750878403.post-73414643531885530332014-06-18T17:47:00.002+02:002015-02-21T13:03:50.511+01:00Construction: part one<div class="separator" style="clear: both; text-align: center;">
NOTE: this is a quite old post and in latest revision some construction details maybe changed</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF6lTdSmNnjFxzHTyNohmtik1WgCf_JT6aJCF4mr6gaeYuJOFYelpAgMU56VqPOlj0w1MYYYwlZJ8d_89tF8uPV7fK-nV6wTbpWBoU63vlM7kSVQ4pzJDEYqm9UrfY4jEu_wkmoMg0PhZU/s1600/2014-05-24+17.10.27.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF6lTdSmNnjFxzHTyNohmtik1WgCf_JT6aJCF4mr6gaeYuJOFYelpAgMU56VqPOlj0w1MYYYwlZJ8d_89tF8uPV7fK-nV6wTbpWBoU63vlM7kSVQ4pzJDEYqm9UrfY4jEu_wkmoMg0PhZU/s1600/2014-05-24+17.10.27.jpg" height="298" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
It's time to build the bottom plate of Geduino.<br />
<br />
Before to start this task I print the bottom plate design, using CAD software, on A3 sheet with 1:1 scale factor. I glued this sheet on a 400x500 mm plate made of fiber glass is a sandwich between two sheets of carbon fiber.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWrg4Tutdp0u5dfgWfnjfBUcNWFuJiDhcblg2uR7V6TV9Up_jJoHphjOrPEf-PyW24EB0TkWRCJDoc4QjPBuh02pdQxfiL333Gi0cEABq8LCtzpXPVyDkZDZp1ZNICSBz1fW6MG8yqHsuf/s1600/2014-05-24+14.56.39.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWrg4Tutdp0u5dfgWfnjfBUcNWFuJiDhcblg2uR7V6TV9Up_jJoHphjOrPEf-PyW24EB0TkWRCJDoc4QjPBuh02pdQxfiL333Gi0cEABq8LCtzpXPVyDkZDZp1ZNICSBz1fW6MG8yqHsuf/s1600/2014-05-24+14.56.39.jpg" height="298" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
I start cutting the plate using a Proxxon small driller (http://www.proxxon.com/en/micromot/28472.php?list). Using this tool was quite easy to cut the plate: the only problematic parts was the slot for wheels (specially the rounded corner).</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-d6fq8Oohyry6QKMtAaotja5enpqVkt39ag9gMFTOncmHdsgU6WQCoLRMrm9XZEHh02Xm98SYy_28lJlfSj0T2aszpUA9BStH3yc22D6lr4esql86B0ACfJJcGsEE37V-UIsUuvHoSpkH/s1600/2014-05-24+16.21.42.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-d6fq8Oohyry6QKMtAaotja5enpqVkt39ag9gMFTOncmHdsgU6WQCoLRMrm9XZEHh02Xm98SYy_28lJlfSj0T2aszpUA9BStH3yc22D6lr4esql86B0ACfJJcGsEE37V-UIsUuvHoSpkH/s1600/2014-05-24+16.21.42.jpg" height="298" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
After cut the plate is time to drill it. This task must be done with high precision in order to match mounting for motors, boards and sensors.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF6lTdSmNnjFxzHTyNohmtik1WgCf_JT6aJCF4mr6gaeYuJOFYelpAgMU56VqPOlj0w1MYYYwlZJ8d_89tF8uPV7fK-nV6wTbpWBoU63vlM7kSVQ4pzJDEYqm9UrfY4jEu_wkmoMg0PhZU/s1600/2014-05-24+17.10.27.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF6lTdSmNnjFxzHTyNohmtik1WgCf_JT6aJCF4mr6gaeYuJOFYelpAgMU56VqPOlj0w1MYYYwlZJ8d_89tF8uPV7fK-nV6wTbpWBoU63vlM7kSVQ4pzJDEYqm9UrfY4jEu_wkmoMg0PhZU/s1600/2014-05-24+17.10.27.jpg" height="298" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Using the same Proxxon tool with a grinder I finish the border of the cut plate to make it smother. After this task the glued paper and the protection film from the plate can be removed.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif_WrA62qC-WD-C_ICeNes9ZOyngFjfvTaO3YO2qwBXxlYZbmQkRepDnlio7Gi7FS5GxXX0-D0cLT8yOBZ_qcL-46aIfWjB26AQ4YpXK-cE1RgVeHtMbC_0trrA6PP0dh3qndookjr46gY/s1600/2014-05-24+17.28.45.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif_WrA62qC-WD-C_ICeNes9ZOyngFjfvTaO3YO2qwBXxlYZbmQkRepDnlio7Gi7FS5GxXX0-D0cLT8yOBZ_qcL-46aIfWjB26AQ4YpXK-cE1RgVeHtMbC_0trrA6PP0dh3qndookjr46gY/s1600/2014-05-24+17.28.45.jpg" height="298" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Here the final result with motors, wheel and board mounted.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH3oZBsGTz_CA2FhtZ6623KFZk8J0LwQost4RZiJ93BekvuojLpcNEuIE3OFyV6aFFGN_09-VZ2GZjs8-8reAlEPenxIGSfVxdJQIrYtqKsjna7Jf9I3ug4UU5cuGe6ZEzJm31P6no6fMi/s1600/2014-05-24+18.34.52.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH3oZBsGTz_CA2FhtZ6623KFZk8J0LwQost4RZiJ93BekvuojLpcNEuIE3OFyV6aFFGN_09-VZ2GZjs8-8reAlEPenxIGSfVxdJQIrYtqKsjna7Jf9I3ug4UU5cuGe6ZEzJm31P6no6fMi/s1600/2014-05-24+18.34.52.jpg" height="298" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
alesihttp://www.blogger.com/profile/03970282156499663615noreply@blogger.com0