<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Projects | Miguel Castillón</title><link>https://miguelcastillon.github.io/project/</link><atom:link href="https://miguelcastillon.github.io/project/index.xml" rel="self" type="application/rss+xml"/><description>Projects</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Tue, 10 May 2022 22:04:16 +0000</lastBuildDate><image><url>https://miguelcastillon.github.io/media/icon_hu70656ade52f19caf8aa077693a1a762b_689_512x512_fill_lanczos_center_3.png</url><title>Projects</title><link>https://miguelcastillon.github.io/project/</link></image><item><title>Non-rigid point cloud registration</title><link>https://miguelcastillon.github.io/project/non-rigid-point-cloud-registration/</link><pubDate>Tue, 10 May 2022 22:04:16 +0000</pubDate><guid>https://miguelcastillon.github.io/project/non-rigid-point-cloud-registration/</guid><description>&lt;p>As final contribution of my PhD thesis, I developed a non-rigid point cloud registration method that was successfully used to remove the motion distortion of 3D scans acquired with our &lt;a href="https://miguelcastillon.github.io/project/underwater-3d-scanner/">underwater laser scanner&lt;/a>.&lt;/p>
&lt;p>I presented this work at IROS22:&lt;/p>
&lt;div align="center">
&lt;iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/tp0ob9yHagQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe>
&lt;/div></description></item><item><title>Underwater 3D scanner</title><link>https://miguelcastillon.github.io/project/underwater-3d-scanner/</link><pubDate>Tue, 10 May 2022 14:30:03 +0000</pubDate><guid>https://miguelcastillon.github.io/project/underwater-3d-scanner/</guid><description>&lt;h2 id="context-underwater-imaging">Context: underwater imaging&lt;/h2>
&lt;p>Visual perception in underwater scenarios is &lt;strong>hard&lt;/strong>.
In order to understand how and why, let&amp;rsquo;s have a look at this 360º video recorded by some of my colleagues:&lt;/p>
&lt;div align="center">
&lt;iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/ptkhwTPFvjk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;p>Even though the visibility conditions on this video were &lt;em>almost optimal&lt;/em>, we can already identify two main challenges:&lt;/p>
&lt;ol>
&lt;li>The &lt;em>floating particles&lt;/em> in the water blur the image and make it lose the sharpness of its texture, reducing the number of distinctive features.&lt;/li>
&lt;li>The &lt;em>high attenuation rate&lt;/em> of water means that light loses most of its power at distances in the order of meters or tens of meters, depending on its wavelength:
&lt;figure id="figure-electromagnetic-absorption-by-water-sourcehttpsenwikipediaorgwikielectromagnetic_absorption_by_watermediafileabsorption_spectrum_of_liquid_waterpng">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Electromagnetic absorption by water ([source](https://en.wikipedia.org/wiki/Electromagnetic_absorption_by_water#/media/File:Absorption_spectrum_of_liquid_water.png))." srcset="
/media/water_light_absorption_hu452f159b977cbec1ec1b45d600f2a254_87244_b01b89d55a31b740acf741286cefd212.webp 400w,
/media/water_light_absorption_hu452f159b977cbec1ec1b45d600f2a254_87244_2a24fd35a8256fd83a644daf0b20d8fb.webp 760w,
/media/water_light_absorption_hu452f159b977cbec1ec1b45d600f2a254_87244_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://miguelcastillon.github.io/media/water_light_absorption_hu452f159b977cbec1ec1b45d600f2a254_87244_b01b89d55a31b740acf741286cefd212.webp"
width="500"
height="497"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Electromagnetic absorption by water (&lt;a href="https://en.wikipedia.org/wiki/Electromagnetic_absorption_by_water#/media/File:Absorption_spectrum_of_liquid_water.png" target="_blank" rel="noopener">source&lt;/a>).
&lt;/figcaption>&lt;/figure>&lt;/li>
&lt;/ol>
&lt;p>A robust solution against these factors is using &lt;a href="https://en.wikipedia.org/wiki/Sonar" target="_blank" rel="noopener">sonar&lt;/a>.
Sonars are range sensors that use ultrasonic waves to acquire geometrical information about their surroundings.
Ultrasonic waves are mechanical waves and can therefore propagate further and are not affected by &lt;a href="https://en.wikipedia.org/wiki/Turbidity" target="_blank" rel="noopener">water turbidity&lt;/a> and varying lighting conditions.
However, they typically produce much noisier results and their resolution is in the order of tens of centimeters.&lt;/p>
&lt;figure id="figure-bike-measured-using-a-sonar-sourcehttpwwwjwfisherscommultimediahtml">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Bike measured using a sonar ([source](http://www.jwfishers.com/multimedia.html))." srcset="
/media/sonar_bike_hue9134efc3d702161a087cd0e302a669f_385478_4384fed405fabfd8a032b74f5fe2c52c.webp 400w,
/media/sonar_bike_hue9134efc3d702161a087cd0e302a669f_385478_b47627f0eff97d4580be7529eeff175e.webp 760w,
/media/sonar_bike_hue9134efc3d702161a087cd0e302a669f_385478_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://miguelcastillon.github.io/media/sonar_bike_hue9134efc3d702161a087cd0e302a669f_385478_4384fed405fabfd8a032b74f5fe2c52c.webp"
width="500"
height="632"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Bike measured using a sonar (&lt;a href="http://www.jwfishers.com/multimedia.html" target="_blank" rel="noopener">source&lt;/a>).
&lt;/figcaption>&lt;/figure>
&lt;h2 id="underwater-3d-laser-scanners">Underwater 3D laser scanners&lt;/h2>
&lt;p>The low resolution and accuracy of sonars make them unsuitable for many tasks performed by autonomous underwater vehicles (AUVs), such as manipulation and high-resolution inspection.
As an alternative, 3D laser scanners (or &lt;a href="https://en.wikipedia.org/wiki/Lidar" target="_blank" rel="noopener">lidars&lt;/a>) are used instead, which can achieve a typical accuracy in the order of millimeters.
If we now revisit the two challenging factors mentioned above, we see that laser scanners:&lt;/p>
&lt;ol>
&lt;li>can provide dense point clouds even in featureless environments, since they actively project light onto the scene, and&lt;/li>
&lt;li>especially for manipulation tasks, a maximum scanning range of a few meters is not a major problem, since it is longer than the maximum reach of a typical robotic arm.&lt;/li>
&lt;/ol>
&lt;p>3D laser scanners typically steer a laser plane &lt;em>using a mirror&lt;/em> across a field of view (FoV) of around 40ºx40º.
This characteristic makes them particularly useful for manipulation tasks, since they can view a relatively broad FoV without the need of moving the robot.
However, the projected laser line is deformed into a curve at the edges of the FoV due to &lt;a href="https://en.wikipedia.org/wiki/Refraction" target="_blank" rel="noopener">refraction&lt;/a>:
&lt;figure id="figure-the-straight-laser-line-projected-by-the-scanner-transforms-into-a-curve-when-entering-water-due-to-refraction-sourcehttpslinkspringercomchapter101007978-3-319-55372-6_4">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="The straight laser line projected by the scanner transforms into a curve when entering water due to refraction ([source](https://link.springer.com/chapter/10.1007/978-3-319-55372-6_4))." srcset="
/media/palomer_laser_curve_hu83996392e5a379be558619ca943b8fc2_293140_af906ad059fe4e1553140a85f7bfe80d.webp 400w,
/media/palomer_laser_curve_hu83996392e5a379be558619ca943b8fc2_293140_48a21dd33fe194e31fe4446ad61cb517.webp 760w,
/media/palomer_laser_curve_hu83996392e5a379be558619ca943b8fc2_293140_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://miguelcastillon.github.io/media/palomer_laser_curve_hu83996392e5a379be558619ca943b8fc2_293140_af906ad059fe4e1553140a85f7bfe80d.webp"
width="500"
height="426"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
The straight laser line projected by the scanner transforms into a curve when entering water due to refraction (&lt;a href="https://link.springer.com/chapter/10.1007/978-3-319-55372-6_4" target="_blank" rel="noopener">source&lt;/a>).
&lt;/figcaption>&lt;/figure>&lt;/p>
&lt;h2 id="our-prototype">Our prototype&lt;/h2>
&lt;p>Laser scanners seem suitable for manipulation tasks at short ranges.
However, the effect of refraction mentioned above may decrease their accuracy or complicate their calibration.
At this point, we asked ourselves:
is there any way we could project straight lines into the water?
Which scanning pattern could achieve that?
And how could we realize it?
After much thought, we came up with &lt;a href="https://miguelcastillon.github.io/publication/underwater-3d-scanner-model-using-a-biaxial-mems-mirror/">this model&lt;/a>:&lt;/p>
&lt;figure id="figure-scheme-of-our-underwater-3d-scanner">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Scheme of our underwater 3D scanner." srcset="
/media/scanning_scheme_hu1f521e827611021cbe941696ec2c1d57_56882_b46316ebc11ebd8742c6e1999c3fad48.webp 400w,
/media/scanning_scheme_hu1f521e827611021cbe941696ec2c1d57_56882_1890a1a2d864edbdfc81cfa582b65f45.webp 760w,
/media/scanning_scheme_hu1f521e827611021cbe941696ec2c1d57_56882_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://miguelcastillon.github.io/media/scanning_scheme_hu1f521e827611021cbe941696ec2c1d57_56882_b46316ebc11ebd8742c6e1999c3fad48.webp"
width="500"
height="716"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Scheme of our underwater 3D scanner.
&lt;/figcaption>&lt;/figure>
&lt;p>This is a ray-tracing model able to generate a pattern of optimally-curved points based on the values of different parameters, such as the refraction index of water.
In order to be able to steer the laser both vertically and horizontally, we used a 2-axis mirror.
The practical realization of the model was published in &lt;a href="https://miguelcastillon.github.io/publication/underwater-3d-scanner-to-counteract-refraction-calibration-and-experimental-results/">this paper&lt;/a>.&lt;/p>
&lt;figure id="figure-prototype-of-our-underwater-3d-scanner">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Prototype of our underwater 3D scanner." srcset="
/media/scanner_hu1cef8465dae908e6be2fc3294cd589b2_4580301_479b41ef63919fb258a9b84580ce429a.webp 400w,
/media/scanner_hu1cef8465dae908e6be2fc3294cd589b2_4580301_5df77bb6269e3c643bece27f3e6afc47.webp 760w,
/media/scanner_hu1cef8465dae908e6be2fc3294cd589b2_4580301_1200x1200_fit_q75_h2_lanczos.webp 1200w"
src="https://miguelcastillon.github.io/media/scanner_hu1cef8465dae908e6be2fc3294cd589b2_4580301_479b41ef63919fb258a9b84580ce429a.webp"
width="500"
height="734"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Prototype of our underwater 3D scanner.
&lt;/figcaption>&lt;/figure>
&lt;p>The main conclusions of this work were:&lt;/p>
&lt;ul>
&lt;li>Our prototype can achieve millimeter accuracy, in the order of other state-of-the-art underwater laser scanners.&lt;/li>
&lt;li>Our approach allows for higher flexibility in the scanning pattern, potentially opening future lines of research.&lt;/li>
&lt;li>Its calibration routine based on simple polynomial fitting is much simpler than other scanners.&lt;/li>
&lt;li>It can currently match state-of-the-art scanning speed (between 50 and 100 scanned lines per second).
However, this speed could be noticeably increased by implementing a more efficient controller that dealt better with the highly-resonant dynamic behaviour of the mirror.&lt;/li>
&lt;/ul>
&lt;h3 id="integration-into-the-auv">Integration into the AUV&lt;/h3>
&lt;p>Together with Roger Pi, we integrated the scanner into the Girona1000 and calibrated its extrinsic parameters with respect to the robot, enabling dynamic scanning:&lt;/p>
&lt;div align="center">
&lt;iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/OytUI9x3cWw?start=124" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;h3 id="sea-experiments">Sea experiments&lt;/h3>
&lt;p>Once the scanner was properly integrated into the AUV, we made a mapping inspection of the rocky seafloor:&lt;/p>
&lt;figure id="figure-sea-experiment-with-the-laser-scanner-mounted-on-auv-girona1000-at-the-harbour-of-st-feliu-de-guíxols-spain">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="Sea experiment with the laser scanner mounted on AUV Girona1000 at the harbour of St. Feliu de Guíxols (Spain)." srcset="
/media/sea_experiment_hu2c6d0685d5a3599f5a88e0ee910d18df_328806_4aa3e02f63fe68e9943fea1d82ec4d8d.webp 400w,
/media/sea_experiment_hu2c6d0685d5a3599f5a88e0ee910d18df_328806_c6040cd9ab73f3b1ac6714837f5ba00b.webp 760w,
/media/sea_experiment_hu2c6d0685d5a3599f5a88e0ee910d18df_328806_1200x1200_fit_q75_h2_lanczos.webp 1200w"
src="https://miguelcastillon.github.io/media/sea_experiment_hu2c6d0685d5a3599f5a88e0ee910d18df_328806_4aa3e02f63fe68e9943fea1d82ec4d8d.webp"
width="400"
height="760"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
Sea experiment with the laser scanner mounted on AUV Girona1000 at the harbour of St. Feliu de Guíxols (Spain).
&lt;/figcaption>&lt;/figure>
&lt;div align="center">
&lt;iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d1780.1655212533174!2d3.033497705752718!3d41.77796118748749!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x884f239f39f0734b!2zNDHCsDQ2JzQwLjciTiAzwrAwMicwMi45IkU!5e1!3m2!1ses!2ses!4v1652434542865!5m2!1ses!2ses" width="400" height="450" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade">&lt;/iframe>
&lt;/div>
&lt;p>An example of the acquired 3D point clouds can be watched in this video:&lt;/p>
&lt;div align="center">
&lt;iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/Zc_appJUckI?start=50" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>&lt;/iframe>
&lt;/div>
&lt;h2 id="acknowledgments">Acknowledgments&lt;/h2>
&lt;p>Many big thanks to Lluís Magí for the integration of the electronic components of the scanner, to Roger Pi for the great common work for AUV integration and calibration, and to Pere Ridao, Josep Forest and Albert Palomer for their guidance.
Special thanks to Lluís, Roger and Pere for their huge help in the logistics of the sea scanning missions.&lt;/p></description></item></channel></rss>