<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://sasakuruppuarachchi.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://sasakuruppuarachchi.github.io/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-11-08T09:42:17+00:00</updated><id>https://sasakuruppuarachchi.github.io/feed.xml</id><title type="html">Sasanka Kuruppu Arachchige</title><subtitle>Doctoral researcher in agile aerial robotics, robust state estimation and learned inertial odometry. MSCA fellow at Tampere University, Finland.</subtitle><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><entry><title type="html">AGIptive-LIOM: Failure-Aware LiDAR-Inertial Odometry for Quadrotors (Tentative)</title><link href="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2026/11/06/agiptive-liom-failure-aware-lidar-inertial-odometry.html" rel="alternate" type="text/html" title="AGIptive-LIOM: Failure-Aware LiDAR-Inertial Odometry for Quadrotors (Tentative)" /><published>2026-11-06T12:00:00+00:00</published><updated>2026-11-06T12:00:00+00:00</updated><id>https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2026/11/06/agiptive-liom-failure-aware-lidar-inertial-odometry</id><content type="html" xml:base="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2026/11/06/agiptive-liom-failure-aware-lidar-inertial-odometry.html"><![CDATA[<!-- Cover image (optional) -->
<!-- <div class="wp-block-image"><figure><img src="/assets/media/YYYY/MM/cover.jpg" alt="" data-cover class="wp-image-xxx" /></figure></div> -->

<div class="text-width">
  <video autoplay muted loop playsinline controls preload="metadata" poster="/assets/media/2026/11/agiptive_liom_forest_poster.jpg" style="width:100%; height:auto;"
         aria-label="Point-cloud map of a forest growing as our quadrotor flies through it and returns to its take-off point, then an overview of the whole loop.">
    <source src="/assets/media/2026/11/agiptive_liom_forest.mp4" type="video/mp4">
  </video>
  <p class="small" style="margin-top:0.4em; opacity:0.85;">A real forest flight of our quadrotor, mapped by AGIptive-LIOM: from take-off through the forest and back to the take-off point, then the whole loop from above (offline replay, 10&times; speed, points coloured by height).</p>
</div>

<p>
A quadrotor that flies on LiDAR-inertial odometry closes its control loop on the estimate, so a divergence that nobody notices can cost the vehicle. Many of the failures we met came from the sensors rather than the scene: clock steps, a blocked view, starting while moving, an IMU that clips at impacts.
AGIptive-LIOM is a flight-safe, failure-aware LiDAR-inertial odometry for quadrotors: it guards against these faults, knows when its estimate is degraded, and tells the flight controller.
</p>

<h2>Highlights</h2>
<ul>
  <li><strong>Guards against real sensor faults.</strong> A timing layer tells a clock step from a data dropout using the other sensor's timestamps and repairs the step; further guards handle a blocked view, a moving start and merged scans.</li>
  <li><strong>Knows when it is degraded.</strong> An onboard health monitor that needs no ground truth reports OK, DEGRADED or FAILED with every scan, including a drift indicator for directions the LiDAR cannot see.</li>
  <li><strong>Tells the flight controller.</strong> The monitor sets the quality of the vision message to PX4, so PX4's own filter stops fusing a failed estimate. In simulated closed-loop flights this kept PX4's filter on the truth while the odometry failed.</li>
  <li><strong>Judged by how it fails.</strong> Eight methods on identical public recordings, fault injection and closed-loop simulated flights, with failures counted by cause. It is not the most accurate method, and real flights in the loop are still to come.</li>
</ul>

<div class="text-width">
  <img src="/assets/media/2026/11/agiptive_liom_hopper.png" style="width:100%; height:auto;" loading="lazy"
       alt="Position error over 70 seconds on a log scale, on a hopping robot whose IMU clips at every landing. FAST-LIO2 diverges to thousands of metres, Point-LIO drifts to metres, AGIptive-LIOM and RESPLE2 stay at centimetres." />
  <p class="small" style="margin-top:0.4em; opacity:0.85;">A hopping robot whose internal IMU clips at every landing (public HOPPER data, one run per method). FAST-LIO2 diverges and Point-LIO drifts; AGIptive-LIOM and RESPLE2 stay at a few centimetres.</p>
</div>

<p>Code will be released once the paper is submitted.</p>]]></content><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><category term="Projects: Robotic" /><category term="RAICAM" /><category term="Aerial Robotics" /><category term="LiDAR Inertial Odometry" /><category term="State Estimation" /><category term="Robot Safety" /><category term="Drone" /><category term="PX4" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">EDGE-IO: Calibrated Learned Inertial Odometry Across Quadrotor Platforms</title><link href="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2026/11/06/edge-io-calibrated-learned-inertial-odometry-across-quadrotor-platforms.html" rel="alternate" type="text/html" title="EDGE-IO: Calibrated Learned Inertial Odometry Across Quadrotor Platforms" /><published>2026-11-06T12:00:00+00:00</published><updated>2026-11-06T12:00:00+00:00</updated><id>https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2026/11/06/edge-io-calibrated-learned-inertial-odometry-across-quadrotor-platforms</id><content type="html" xml:base="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2026/11/06/edge-io-calibrated-learned-inertial-odometry-across-quadrotor-platforms.html"><![CDATA[<!-- Cover image (optional) -->
<!-- <div class="wp-block-image"><figure><img src="/assets/media/YYYY/MM/cover.jpg" alt="" data-cover class="wp-image-xxx" /></figure></div> -->
<div class="text-width">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="/assets/media/2026/11/edge-io/edgeio_overview_dark.png">
    <img src="/assets/media/2026/11/edge-io/edgeio_overview_light.png" style="width:100%; height:auto;" loading="lazy"
         alt="EDGE-IO pipeline. Accelerometer and gyroscope (100 Hz) and four rotor actuation signals enter over a 1 s window. The actuation passes through a per-platform thrust map into m/s squared per rotor. Three Conv1d layers (accelerometer, gyroscope, rotor) feed a 2-layer Transformer; together they form the shared encoder of 69.8k parameters. A per-platform VeloBins bin decoder (512 bins per axis, 6.8k parameters) outputs a velocity distribution with mean and covariance, which updates an EKF at 10–20 Hz while the raw IMU drives its propagation at 100 Hz." />
  </picture>
  <p class="small" style="margin-top:0.4em; opacity:0.85;">EDGE-IO in its cross-platform configuration (in progress). Blue parts are shared by every drone, orange parts are fitted per drone. The benchmark results below train one model per dataset.</p>
</div>

<h2>Status</h2>
<p>
  Ongoing work. A paper is in preparation (target venue tentative); there is no preprint or public code yet.
  Authors: Sasanka Kuruppu Arachchige and Joni-Kristian Kämäräinen.
  This page summarises the method and the results so far, and will be updated as the cross-platform experiments finish.
</p>

<h2>Publication</h2>
<p>
  Sasanka Kuruppu Arachchige and Joni-Kristian Kämäräinen, <em>EDGE-IO: Calibrated Learned Inertial Odometry Across Quadrotor Platforms</em>, in preparation (venue tentative).
</p>
<pre><code>@unpublished{KuruppuArachchige2026EDGEIO,
  author = {Kuruppu Arachchige, Sasanka and Kämäräinen, Joni-Kristian},
  title  = {{EDGE-IO}: Calibrated Learned Inertial Odometry Across Quadrotor Platforms},
  note   = {In preparation},
  year   = {2026}
}</code></pre>

<h2>Introduction</h2>
<p>
  A drone's IMU works in the dark, in fog and through motion blur, but integrating it directly drifts within seconds.
  Learned inertial odometry fixes much of this: a network looks at a short window of IMU data, plus the rotor
  signals on a quadrotor, and predicts the vehicle's velocity, which an Extended Kalman Filter (EKF) then fuses with the IMU.
  For that fusion to work, the network also has to say <em>how sure it is</em>. An over-confident prediction pulls the filter off course;
  an under-confident one is wasted.
</p>
<p>
  EDGE-IO is my framework for building, testing and eventually deploying such estimators on small flight computers. It has three goals:
</p>
<ul>
  <li><strong>Calibrated velocity.</strong> Predict a velocity <em>distribution</em>, not just a value, and check that the filter stays statistically consistent.</li>
  <li><strong>A benchmark that can tell real gains from noise.</strong> Four public quadrotor datasets, cleaned, with 8 training seeds per model and significance tests.</li>
  <li><strong>One model for many drones.</strong> Every dataset logs rotor activity differently (rpm, rad/s, PWM, thrust command), so today each drone gets its own network. EDGE-IO is moving towards one shared encoder that adapts to a new drone from a few minutes of flight.</li>
</ul>

<h2>Built on AI-IO and VeloBins</h2>
<p>EDGE-IO builds on two published methods by other groups:</p>
<ul>
  <li><strong>AI-IO</strong> (Cui et al., <a href="https://arxiv.org/abs/2603.00597" target="_blank" rel="noopener">arXiv 2603.00597</a>, <a href="https://github.com/SJTU-ViSYS-team/AI-IO" target="_blank" rel="noopener">code</a>): a Transformer that regresses body velocity from IMU and rotor speeds, fused in an EKF. EDGE-IO starts from its open-source code and encoder.</li>
  <li><strong>VeloBins</strong> (Azhari et al., <a href="https://arxiv.org/abs/2608.29720" target="_blank" rel="noopener">arXiv 2608.29720</a>): replaces the regression head with a decoder that predicts a probability over 512 velocity bins per axis, trained on error-conditioned Gaussian labels. The mean and variance of that distribution become the filter's measurement and its covariance.</li>
</ul>
<p>
  I re-implemented VeloBins on top of the AI-IO encoder in one PyTorch package, matching the paper's parameter counts exactly
  (69.8k encoder + 6.8k decoder), and fixed several upstream issues on the way, for example an input normaliser that kept updating its statistics during testing and filtering.
</p>

<h2>Method</h2>
<ul>
  <li><strong>Encoder (shared).</strong> A 1 s window at 100 Hz. Separate 1-D convolutions for the accelerometer, the gyroscope and the four rotor signals, followed by a 2-layer, 8-head Transformer.</li>
  <li><strong>Decoder (per platform).</strong> The VeloBins bin decoder gives a full velocity distribution per axis. Its mean and variance go to the filter as they are, with no hand-set scaling.</li>
  <li><strong>Filter.</strong> The EKF propagates with the raw IMU at 100 Hz and takes a velocity update at 10–20 Hz. Its noise settings are tuned per dataset on validation flights only, and its consistency is measured with the normalised estimation error squared (NEES).</li>
  <li><strong>Thrust map (per platform, in progress).</strong> A fitted per-rotor model turns each drone's actuation signal into the same physical unit, mass-normalised thrust in m/s² per rotor, so a shared encoder sees inputs that mean the same thing on every drone.</li>
  <li><strong>Small by design.</strong> The full network has 76.7k parameters. A JAX and ROS 2 port for on-board deployment is the next engineering step.</li>
</ul>

<h2>A benchmark that can tell the difference</h2>
<ul>
  <li><strong>Four public datasets:</strong> AI-IO, NanoBench, TII-RATM and NeuroBEM, from four different quadrotors and four actuation signals.</li>
  <li><strong>Cleaned data.</strong> The cleaning only removes data, and every decision is logged: 20 duplicate NanoBench flights, AI-IO files whose ground truth is 18–51% interpolated, extrapolated tails and ground-truth gaps.</li>
  <li><strong>8 seeds per model.</strong> On the AI-IO data, seed-to-seed spread alone was 6% in velocity error and 22% in trajectory error, the same size as the improvements reported for VeloBins on that dataset. Every comparison below is a mean over 8 seeds with a significance test.</li>
  <li><strong>Fair filtering.</strong> The filter for each dataset is chosen on validation data, then frozen for the test flights.</li>
</ul>
<p>
  Because the datasets are cleaned, the numbers on this page are not directly comparable with numbers published on the original files.
  As a check, AI-IO's released model on the cleaned AI-IO data matches the published EKF velocity error to within 0.01 m/s on average, on the test groups the cleaning left intact.
</p>

<h2>Results so far</h2>

<h3>The network: VeloBins is better calibrated everywhere</h3>
<div class="text-width">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="/assets/media/2026/11/edge-io/edgeio_network_dark.png">
    <img src="/assets/media/2026/11/edge-io/edgeio_network_light.png" style="width:100%; height:auto;" loading="lazy"
         alt="Network velocity RMSE, AI-IO vs VeloBins: TII-RATM 0.530 vs 0.486, NanoBench 0.161 vs 0.167, NeuroBEM 0.694 vs 0.798 m/s. Negative log-likelihood, AI-IO vs VeloBins: TII-RATM -0.75 vs -1.15, NanoBench -0.12 vs -1.34, NeuroBEM +0.48 vs +0.37." />
  </picture>
  <p class="small" style="margin-top:0.4em; opacity:0.85;">Network alone on the test flights, best-validation checkpoint, mean of 8 seeds per model. NLL scores the predicted distribution against the true velocity; lower means more accurate and better-calibrated uncertainty.</p>
</div>
<ul>
  <li><strong>Uncertainty:</strong> VeloBins' predicted distributions fit the true velocity better on all three datasets (NLL lower by 0.40, 1.22 and 0.10; p &lt; 0.001).</li>
  <li><strong>Accuracy depends on the dataset:</strong> VeloBins is 8% better in RMSE on TII-RATM, 4% worse on NanoBench, and 15% worse on NeuroBEM at its best-validation checkpoint (2% at its final one).</li>
  <li>On the AI-IO dataset, the same picture holds at 8 seeds: the calibration gain is clear (p &lt; 0.001), while the accuracy difference is within seed-to-seed noise on our cleaned copy.</li>
</ul>

<h3>The filter: tuning matters more than the network</h3>
<div class="text-width">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="/assets/media/2026/11/edge-io/edgeio_filter_dark.png">
    <img src="/assets/media/2026/11/edge-io/edgeio_filter_light.png" style="width:100%; height:auto;" loading="lazy"
         alt="Velocity RMSE for network alone, default EKF and tuned EKF, AI-IO vs VeloBins. TII-RATM: 0.530/0.486, 1.002/1.048, 0.589/0.517. NanoBench: 0.161/0.167, 0.265/0.347, 0.176/0.175. NeuroBEM: 0.694/0.798, 1.585/2.182, 0.700/0.632 m/s." />
  </picture>
  <p class="small" style="margin-top:0.4em; opacity:0.85;">Velocity RMSE of the network alone, with AI-IO's default EKF, and with the EKF tuned per dataset on validation flights. Mean ± std of 8 seeds. Each panel has its own scale.</p>
</div>
<ul>
  <li><strong>The default filter fails on all three datasets.</strong> It is strongly over-confident (median NEES 53–150, against 2.37 for a consistent filter) and doubles or triples the network's error.</li>
  <li><strong>Tuning on validation cuts the filter's error by 34–71%.</strong> With it, VeloBins + EKF is as good as AI-IO + EKF or better everywhere: 0.517 vs 0.589 m/s on TII-RATM, 0.175 vs 0.176 on NanoBench, 0.632 vs 0.700 on NeuroBEM.</li>
  <li><strong>Check the grid edges.</strong> On NeuroBEM the first tuning grid picked its smallest measurement-noise scale. Widening the grid found a better setting between two old grid points, which cut VeloBins' fused error by a further 8% (0.685 → 0.632 m/s) and brought its NEES median from 4.7 to 2.9.</li>
  <li><strong>The filter does not yet beat the network on TII-RATM and NanoBench</strong> (5–10% worse). On TII-RATM the accelerometer itself is the limit: integrated with the true attitude, it drifts 0.7 m/s within one second.</li>
</ul>

<h3>Finding: NeuroBEM's gyroscope reads 2.5% high</h3>
<div class="text-width">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="/assets/media/2026/11/edge-io/edgeio_neurobem_gyro_dark.png">
    <img src="/assets/media/2026/11/edge-io/edgeio_neurobem_gyro_light.png" style="width:100%; height:auto;" loading="lazy"
         alt="Per test segment of NeuroBEM, VeloBins with the tuned EKF before and after the gyro scale correction. The worst segment drops from about 5.1 to 2.0 m/s, two others from about 1.8 and 1.6 to 0.7 and 0.4 m/s. The mean drops from 1.165 to 0.685 m/s." />
  </picture>
  <p class="small" style="margin-top:0.4em; opacity:0.85;">NeuroBEM test segments, VeloBins with the tuned EKF, mean of 8 seeds. Scale factors are fitted on the training flights only.</p>
</div>
<p>
  Even with a tuned filter, three NeuroBEM test segments diverged. The cause was not the network: on those segments the heading drifted by 20–59° during
  highly tilted manoeuvres with 6–9 full turns. Regressing the ground-truth heading change on each gyro axis over the training flights shows the x-axis gyro reading
  2.5% high (scale 1.0249, 95% CI 1.0238–1.0265). Correcting only the filter's gyro input, with the network unchanged, lowers the filter's test error by 41%,
  from 1.165 to 0.685 m/s (at the first tuned filter setting), and the three diverging segments drop from 1.5–5.1 to 0.4–2.0 m/s.
</p>

<h3>A spectral-norm bound fixes late over-confidence on NanoBench</h3>
<div class="text-width">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="/assets/media/2026/11/edge-io/edgeio_specnorm_dark.png">
    <img src="/assets/media/2026/11/edge-io/edgeio_specnorm_light.png" style="width:100%; height:auto;" loading="lazy"
         alt="NanoBench, AI-IO vs VeloBins vs VeloBins with a spectral-norm bound. Network RMSE at the final checkpoint: 0.162, 0.167, 0.150 m/s. Network NLL at the final checkpoint: +0.01, -0.63, -1.46. Filter NEES median with the tuned EKF: 5.93, 4.76, 2.45, against an ideal of 2.37." />
  </picture>
  <p class="small" style="margin-top:0.4em; opacity:0.85;">NanoBench test flights, 8 seeds per model. Left and middle: network alone at both checkpoints. Right: tuned EKF with the final checkpoints.</p>
</div>
<p>
  Without regularisation, VeloBins becomes over-confident on NanoBench by the end of training (NLL rises from −1.34 to −0.63).
  Keeping every encoder weight matrix at spectral norm ≤ 2, as Neural-Fly does, prevents this and makes the model more accurate:
</p>
<ul>
  <li><strong>Network:</strong> 10.5% lower RMSE than VeloBins at the final checkpoint (0.150 vs 0.167 m/s, p &lt; 10⁻⁴) and 7.5% lower than AI-IO.</li>
  <li><strong>Filter:</strong> 9–11% lower fused velocity error than either baseline, and a NEES median of 2.45, close to the 2.37 of a consistent filter.</li>
  <li><strong>But it is dataset-dependent:</strong> in a 3-seed screen the same bound made TII-RATM and NeuroBEM up to about 10% worse. A looser bound of 3 is roughly neutral there and is the candidate setting for the cross-platform work.</li>
</ul>

<h3>What did not work</h3>
<ul>
  <li><strong>Battery voltage as an input.</strong> Motivated by command-based platforms, where the same command gives less thrust as the battery drains. All effects stayed within ±4% with no consistent direction; the accelerometer likely already tells the network how much thrust a command produces.</li>
  <li><strong>A rotor-drag physics loss.</strong> At low weight it changed nothing; at higher weight it pulled predictions towards the drag model, whose velocity is 1.3–1.9 m/s off, and the error doubled or worse.</li>
  <li><strong>Physics as a second velocity sensor.</strong> Inverting a hybrid aerodynamic model gives velocity 2.5–5× less accurate than the networks, and fusing the two gained nothing measurable.</li>
</ul>

<h2>Ongoing: one encoder for every drone</h2>
<p>
  The four datasets come from four different drones, each trained separately so far. The current experiments train one shared encoder on all of them,
  with a separate actuation normaliser and bin decoder per drone, and then test transfer to a drone left out of training using only 0.5, 2 or 8 minutes of its flight data.
  The aim is a pretrained encoder that a new platform can adopt with minutes of flight logs instead of hours.
</p>
<p>
  To make the rotor input mean the same thing on every drone, I fit a per-rotor thrust map, f = a·u² + b·u, from each drone's actuation signal to mass-normalised thrust.
  It is fitted on the training flights against the thrust implied by the ground-truth motion, and checked on validation flights:
</p>
<ul>
  <li>R² of 0.84 (AI-IO, rpm), 0.90 (TII-RATM, thrust command) and 0.95 (NeuroBEM, rad/s).</li>
  <li>An independent check against the accelerometer, which the fit never sees, agrees in scale to within 2%.</li>
  <li>NanoBench is the exception (R² 0.15): its flights hold nearly constant thrust, so there is little variation to explain.</li>
</ul>
<p>
  There are no cross-platform results yet; they will be added here. After that comes the JAX and ROS 2 port, to run EDGE-IO on board.
</p>]]></content><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><category term="Projects: Robotic" /><category term="RAICAM" /><category term="Inertial Odometry" /><category term="Drone" /><category term="Uncertainty Estimation" /><category term="State Estimation" /><category term="Machine Learning" /><category term="Robotics" /><summary type="html"><![CDATA[EDGE-IO in its cross-platform configuration (in progress). Blue parts are shared by every drone, orange parts are fitted per drone. The benchmark results below train one model per dataset.]]></summary></entry><entry><title type="html">Earth Rover Challenge IROS 2026: First Place</title><link href="https://sasakuruppuarachchi.github.io/events/projects:%20robotic/2026/09/30/earth-rover-challenge-iros-2026-champions.html" rel="alternate" type="text/html" title="Earth Rover Challenge IROS 2026: First Place" /><published>2026-09-30T16:00:00+00:00</published><updated>2026-09-30T16:00:00+00:00</updated><id>https://sasakuruppuarachchi.github.io/events/projects:%20robotic/2026/09/30/earth-rover-challenge-iros-2026-champions</id><content type="html" xml:base="https://sasakuruppuarachchi.github.io/events/projects:%20robotic/2026/09/30/earth-rover-challenge-iros-2026-champions.html"><![CDATA[<figure>
  <video controls playsinline preload="none" poster="/assets/media/2026/09/erc/erc_champions_poster.jpg">
    <source src="/assets/media/2026/09/erc/erc_iros2026_champions.mp4" type="video/mp4">
  </video>
  <figcaption>Our one-minute recap of the challenge: one fleet, four tracks, first place.</figcaption>
</figure>

<p>
  Team <strong>ManseRobot</strong> from the Computer Vision Group at Tampere University won the
  <a href="https://earth-rover-challenge.github.io/" target="_blank" rel="noopener">Earth Rover Challenge</a>
  at <strong>IROS 2026</strong> in Pittsburgh (28–30 September 2026), finishing first overall out of 12 teams from around the world.
  The challenge asks a simple question: <em>can an AI policy drive a sidewalk rover the way a human can?</em> Our answer
  was a single learned navigation stack that drove robots in cities across the Americas and Africa, through indoor hallways
  using nothing but a camera, and on the 50-mile marathon from UC Berkeley to Stanford.
</p>
<p>
  The team was <strong>Sasanka Kuruppu Arachchige</strong>, <strong>Lauri Suomela</strong> and <strong>Abhimanyu Bhowmik</strong>,
  supervised by Prof. <strong>Joni-Kristian Kämäräinen</strong>. This builds directly on our runner-up finish at
  <a href="/projects:%20robotic/2025/05/22/the-earthrover-challenge-icar-25-runners-up.html">the ICRA 2025 edition</a>.
</p>

<ul class="facts">
  <li class="fact"><p class="fact__k">Overall</p><p class="fact__v">1st · 12.50</p><p class="fact__s">NYU 9.00 · Anna University 7.00</p></li>
  <li class="fact"><p class="fact__k">Indoor</p><p class="fact__v">5 / 5</p><p class="fact__s">Checkpoints, zero interventions</p></li>
  <li class="fact"><p class="fact__k">Marathon</p><p class="fact__v">Best score</p><p class="fact__s">UC Berkeley → Stanford</p></li>
</ul>

<h2>The challenge</h2>
<p>
  Every team drives the same standardised Earth Rover sidewalk robots, which are deployed in different cities and controlled
  remotely over 4G. All computation runs off-board: camera, GPS and IMU data arrive at around 20&nbsp;Hz with roughly half
  a second of latency, and velocity commands go back the same way. Missions are scored by difficulty, so the total rewards
  both reach and consistency. The IROS 2026 edition had four tracks over three days:
</p>
<ul>
  <li><strong>Urban:</strong> follow GPS checkpoints along sidewalks and street crossings in cities including Colón (Panama), La Plata (Argentina) and Selebi-Phikwe (Botswana), plus an unseen-environment mission.</li>
  <li><strong>Off-road:</strong> reach image goals on trails, slopes and gravel, without GPS.</li>
  <li><strong>Indoor:</strong> reach image goals through hallways, atriums and labs, again with camera only.</li>
  <li><strong>Marathon:</strong> new this year. A cross-domain endurance run from UC Berkeley to Stanford, about 50 miles in seven legs, driven by a single policy.</li>
</ul>

<h2>Results</h2>
<div class="table-wrap">
  <table>
    <thead><tr><th>#</th><th>Team</th><th>Urban</th><th>Off-road</th><th>Indoor</th><th>Marathon</th><th>Overall</th></tr></thead>
    <tbody>
      <tr class="is-us"><td>1</td><td>ManseRobot (Tampere University)</td><td>5.50</td><td>0.00</td><td>5.00</td><td>2.00</td><td>12.50</td></tr>
      <tr><td>2</td><td>NYU Self Drive (NYU)</td><td>3.50</td><td>0.00</td><td>5.00</td><td>0.50</td><td>9.00</td></tr>
      <tr><td>3</td><td>ReviewIsit (Anna University)</td><td>6.50</td><td>0.00</td><td>0.50</td><td>0.00</td><td>7.00</td></tr>
    </tbody>
  </table>
</div>
<p>
  As the organisers put it, ManseRobot finished in the top two in the Urban, Indoor and Marathon tracks, and that
  consistency is what won the overall title. Highlights include a complete 8/8-checkpoint urban run in Colón, Panama,
  with no interventions, a perfect 5/5 indoor run, and the best marathon score of the event.
</p>
<figure>
  <img src="/assets/media/2026/09/erc/erc_leaderboard.jpg" alt="Final Earth Rover Challenge IROS 2026 leaderboard, teams 1 to 11 of 12. Team ManseRobot (Tampere University) is first with 12.50 points overall, Team NYU Self Drive second with 9.00 and Team ReviewIsit (Anna University) third with 7.00." width="1919" height="878">
  <figcaption>Official final leaderboard (teams 1–11 of 12 shown). Tap to zoom.</figcaption>
</figure>

<h2>How it works</h2>
<p>
  The whole system comes from two of our recent papers. Instead of hand-tuning a pipeline for each track, we used the same
  learned policies everywhere and added a thin safety layer around them.
</p>
<ul>
  <li>
    <strong>A navigation policy trained on real data at scale.</strong> The driving policy comes from our study
    <a href="https://lasuomela.github.io/navigation_scaling/" target="_blank" rel="noopener">Data Scaling for Navigation in Unknown Environments</a>
    (RA-L 2026), trained on thousands of hours of crowd-sourced FrodoBots driving data. For this edition we retrained
    it to take RGB images together with traversability maps, and to output actions through a diffusion head, using the LUMI supercomputer.
  </li>
  <li>
    <strong>Traversability as a safety layer.</strong> SAM-TP, the pixel-wise traversability model from
    <a href="https://arxiv.org/abs/2506.17960" target="_blank" rel="noopener">GeNIE</a>, is projected into a bird's-eye-view map
    around the robot. A repulsive field pushes the commanded motion away from untraversable space, and a recovery
    state gets the robot unstuck when it stalls.
  </li>
  <li>
    <strong>GPS goals in the city.</strong> In the urban track the policy follows sub-goals derived from the GPS checkpoints,
    with explicit heading control so the robot points at the next checkpoint before committing to a direction.
  </li>
  <li>
    <strong>Image goals without GPS.</strong> Indoors we run
    <a href="https://lasuomela.github.io/faint/" target="_blank" rel="noopener">FAINT</a> (ICRA 2026), our image-goal navigation
    transformer trained largely in simulation, on a topological map: a sequence of images recorded along the route.
    The robot localises itself in that map with EigenPlaces place-recognition features, and a cone detector and tracker
    confirms each checkpoint.
  </li>
</ul>

<h2>Urban: Colón, Panama</h2>
<figure>
  <video data-lazy data-autoplay muted loop playsinline preload="none" poster="/assets/media/2026/09/erc/erc_panama_poster.jpg">
    <source data-src="/assets/media/2026/09/erc/erc_panama_urban_timelapse.mp4" type="video/mp4">
  </video>
  <figcaption>
    Our operator view of the Colón run at 30× speed. Top: the front camera with upcoming GPS checkpoints (green).
    Left: the map, the SAM-TP traversability mask and the control signals. Right: the bird's-eye-view planner, with
    the route in green and the policy's predicted path.
  </figcaption>
</figure>

<h2>Indoor: one-shot image-goal navigation</h2>
<p>
  The indoor track has no GPS and no prior map: the only information about the building is a short sequence of
  images along the route. We built and tested the indoor pipeline on corridors in our own lab in Tampere, then deployed
  it single-shot on the competition building at NYU, completing all five checkpoints with zero interventions.
</p>
<div class="media-pair">
  <figure>
    <video data-lazy data-autoplay muted loop playsinline preload="none" poster="/assets/media/2026/09/erc/erc_lab_corridor_poster.jpg">
      <source data-src="/assets/media/2026/09/erc/erc_lab_corridor.mp4" type="video/mp4">
    </video>
    <figcaption>Testing in our lab: the 67-image topological map of a Tampere University corridor.</figcaption>
  </figure>
  <figure>
    <video data-lazy data-autoplay muted loop playsinline preload="none" poster="/assets/media/2026/09/erc/erc_nyu_indoor_poster.jpg">
      <source data-src="/assets/media/2026/09/erc/erc_nyu_indoor.mp4" type="video/mp4">
    </video>
    <figcaption>Competition: the 242-image topological map used for the single-shot run at NYU.</figcaption>
  </figure>
</div>

<h2>What's next</h2>
<p>
  We are turning the system and the lessons from the competition into a paper,
  <em>ManseRover: Cross-Domain Navigation from Scaled Real Data and Simulation</em> (tentative title), targeting <strong>IROS 2027</strong>.
  It brings together our work on
  <a href="https://lasuomela.github.io/navigation_scaling/" target="_blank" rel="noopener">data scaling for navigation</a> and
  <a href="https://lasuomela.github.io/faint/" target="_blank" rel="noopener">FAINT</a>: large real-world datasets give a policy
  that generalises across cities, and simulation-trained image-goal navigation handles the places GPS cannot reach.
  This page will link to the paper when it is out.
</p>

<h2>Links</h2>
<ul>
  <li><a href="https://earth-rover-challenge.github.io/" target="_blank" rel="noopener">Earth Rover Challenge</a>: rules, tracks and past editions</li>
  <li><a href="https://x.com/BitRobotNetwork/status/2108497969150578901" target="_blank" rel="noopener">Official podium announcement</a> by BitRobot, the challenge sponsor</li>
  <li><a href="https://lasuomela.github.io/navigation_scaling/" target="_blank" rel="noopener">Data Scaling for Navigation in Unknown Environments</a> (RA-L 2026)</li>
  <li><a href="https://lasuomela.github.io/faint/" target="_blank" rel="noopener">Synthetic vs. Real Training Data for Visual Navigation</a> (FAINT, ICRA 2026)</li>
</ul>]]></content><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><category term="Events" /><category term="Projects: Robotic" /><category term="Earth Rover Challenge" /><category term="IROS 2026" /><category term="Visual Navigation" /><category term="Field Robotics" /><category term="Image-Goal Navigation" /><category term="Traversability" /><category term="Sim-to-Real" /></entry><entry><title type="html">Agipix: An Open Source Aerial Agile Autonomy from Sim-to-Real</title><link href="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2025/10/01/agipix-an-open-source-aerial-agile-autonomy-from-sim-to-real.html" rel="alternate" type="text/html" title="Agipix: An Open Source Aerial Agile Autonomy from Sim-to-Real" /><published>2025-10-01T12:00:00+00:00</published><updated>2025-10-01T12:00:00+00:00</updated><id>https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2025/10/01/agipix-an-open-source-aerial-agile-autonomy-from-sim-to-real</id><content type="html" xml:base="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2025/10/01/agipix-an-open-source-aerial-agile-autonomy-from-sim-to-real.html"><![CDATA[<!-- Cover image (optional) -->
<!-- <div class="wp-block-image"><figure><img src="/assets/media/YYYY/MM/cover.jpg" alt="" data-cover class="wp-image-xxx" /></figure></div> -->

<p>If you are not redirected automatically, <a href="https://sasakuruppuarachchi.github.io/agipix/">click here</a>.</p>]]></content><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><category term="Projects: Robotic" /><category term="RAICAM" /><category term="Aerial Robotics" /><category term="Drone" /><category term="Autonomous Systems" /><category term="Sim-to-Real" /><category term="Robotics" /><category term="Agile Autonomy" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Extended Model-Based Learned Inertial Odometry</title><link href="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2025/09/15/extended-model-based-learned-inertial-odometry.html" rel="alternate" type="text/html" title="Extended Model-Based Learned Inertial Odometry" /><published>2025-09-15T12:00:00+00:00</published><updated>2025-09-15T12:00:00+00:00</updated><id>https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2025/09/15/extended-model-based-learned-inertial-odometry</id><content type="html" xml:base="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2025/09/15/extended-model-based-learned-inertial-odometry.html"><![CDATA[<!-- Cover image (optional) -->
<!-- <div class="wp-block-image"><figure><img src="/assets/media/YYYY/MM/cover.jpg" alt="" data-cover class="wp-image-xxx" /></figure></div> -->
 <div class="video-container text-width">
	<iframe
		src="https://www.youtube.com/embed/IsjZ-TeqXPM"
		title="YouTube video player"
		frameborder="0"
		allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
		allowfullscreen
	></iframe>
	<p class="small" style="margin-top:0.4em; opacity:0.85;">Extended Model-Based Learned Inertial Odometry - ICUAS 2026</p>
	<!-- To change the video, replace IsjZ-TeqXPM with the new YouTube ID. -->
	<!-- If you prefer privacy-enhanced mode, use: https://www.youtube-nocookie.com/embed/VIDEO_ID -->
</div>

<h2>Code and pretrained models</h2>
<p>
  The code, the data pipeline and the trained weights are open source:
  <a href="https://github.com/SasaKuruppuarachchi/Ex-IMO" target="_blank" rel="noopener"><strong>github.com/SasaKuruppuarachchi/Ex-IMO</strong></a>.
  The repository reproduces every result below from the public datasets, step by step, and the
  <a href="https://github.com/SasaKuruppuarachchi/Ex-IMO/releases/tag/v1.0" target="_blank" rel="noopener">v1.0 release</a>
  holds 12 pretrained models (base IMO and EX-IMO on four UAV datasets) with their tuned filter settings.
</p>

<h2>Publication</h2>
<p>
  Sasanka Kuruppu Arachchige and Joni-Kristian Kämäräinen, <em>Extended Model-Based Learned Inertial Odometry</em>, International Conference on Unmanned Aircraft Systems (ICUAS), 2026, pp. 207–212. <a href="https://doi.org/10.1109/ICUAS69441.2026.11598619" target="_blank" rel="noopener">doi:10.1109/ICUAS69441.2026.11598619</a>
</p>
<pre><code>@inproceedings{KuruppuArachchige2026EXIMO,
  author    = {Kuruppu Arachchige, Sasanka and Kämäräinen, Joni-Kristian},
  title     = {Extended Model-Based Learned Inertial Odometry},
  booktitle = {International Conference on Unmanned Aircraft Systems (ICUAS)},
  pages     = {207--212},
  year      = {2026},
  doi       = {10.1109/ICUAS69441.2026.11598619}
}</code></pre>

<h2>Introduction</h2>
<p>Accurate state estimation is at the heart of agile drone flight. While cameras are commonly used for localization, they fail in low light, high-speed motion, or textureless environments. Inertial odometry — using only IMU (Inertial Measurement Unit) data — offers a lightweight and robust alternative, but it often suffers from drift over time due to sensor noise and bias.
</p>
<p>
In this project, I explored how far we can push IMU-only odometry by extending a recent learning-based inertial odometry (IMO) framework for autonomous drone racing. The core idea was to make the learned model “aware” of the drone’s underlying physics — not just what it feels through accelerations and rotations, but also the forces and torques acting on its body.
</p>

<h2>Method</h2>
<p>
IMO feeds a Temporal Convolutional Network (TCN) with IMU and thrust data; the network predicts the drone's displacement over the next 0.5 s, and an Extended Kalman Filter (EKF) fuses these predictions with the IMU for continuous pose estimation. EX-IMO changes three things:
</p>
<ul>
  <li><strong>Body frame.</strong> The network predicts the displacement in the drone's own frame instead of the world frame, so it cannot learn the absolute headings of the training tracks.</li>
  <li><strong>Torque input.</strong> The body-frame torques from the full quadrotor dynamics are added as an input, so the network sees how the vehicle is being driven, not only how it moves.</li>
  <li><strong>Thrust from the rotors.</strong> The collective thrust comes from a per-platform fit of the rotor signals, which is available in flight.</li>
</ul>

<h2>Results</h2>
<p>
In the paper, we validated the approach on the Blackbird and DIDO drone flight datasets and deployed it on a real racing quadrotor. The results show up to 61% improvement in relative error compared to the original IMO on unseen trajectories — demonstrating that embedding physical insight into learning models enhances robustness and transferability.
</p>

<h3>Open reproduction on four public UAV datasets</h3>
<p>
With the code release, we re-ran the comparison from scratch on four more public datasets (AI-IO, NanoBench, TII-RATM and NeuroBEM): 3 seeds per model, the filter tuned on validation data only, and whole groups of trajectory shapes held out of training. On trajectories never seen in training, EX-IMO lowers velocity error in all 8 held-out sets, by up to 72%, and position error in 5 of 8, by up to 80%.
</p>
<div class="text-width">
  <a href="https://github.com/SasaKuruppuarachchi/Ex-IMO#results-in-brief" target="_blank" rel="noopener">
    <picture>
      <source media="(prefers-color-scheme: dark)" srcset="/assets/media/2025/09/eximo_heldout_dark.png">
      <img src="/assets/media/2025/09/eximo_heldout_light.png" style="width:100%; height:auto;" loading="lazy"
           alt="Change in velocity RMSE and ATE of EX-IMO vs base IMO on eight held-out trajectory sets: velocity error is lower in all eight, by 6 to 72 percent; position error is lower in five, by 6 to 80 percent, and higher in three (TII ellipse +70 percent, NanoBench round +23 percent, TII race track +18 percent)." />
    </picture>
  </a>
  <p class="small" style="margin-top:0.4em; opacity:0.85;">EX-IMO vs base IMO on held-out trajectories, mean of 3 seeds. Faded bars are not significant (paired t-test p ≥ 0.05). Full tables in the repository.</p>
</div>
<p>What the reproduction shows:</p>
<ul>
  <li><strong>Torque from the rotors carries velocity information.</strong> On its own it explains up to 94% of the variance of the body-frame displacement, likely because the rotors trim against aerodynamic moments that grow with airspeed. Torque computed from the gyro adds nothing the network does not already see.</li>
  <li><strong>The world-frame baseline memorises track headings.</strong> Rotating the TII-RATM flights by 90° in yaw raises base IMO's validation error from 0.34 to 5.8 m/s; the body-frame models do not change.</li>
  <li><strong>Position error is mixed on small datasets.</strong> On TII-RATM, with only 6 training flights per fold, neither model generalises well across tracks, and EX-IMO's position error is higher on the ellipse.</li>
</ul>
<p>
These numbers come from cleaned copies of the datasets that the repository builds, so they are not directly comparable with numbers published on the original files.
</p>
<p>
This work contributes to the ongoing effort to make autonomous drones faster, smaller, and more resilient — capable of navigating even when vision fails.
</p>]]></content><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><category term="Projects: Robotic" /><category term="RAICAM" /><category term="Inertial Odometry" /><category term="Drone" /><category term="Autonomous Systems" /><category term="Machine Learning" /><category term="Robotics" /><summary type="html"><![CDATA[Extended Model-Based Learned Inertial Odometry - ICUAS 2026]]></summary></entry><entry><title type="html">Synthetic vs. Real Training Data for Visual Navigation - ICRA 2026</title><link href="https://sasakuruppuarachchi.github.io/projects:%20robotic/2025/08/30/synthetic-vs-real-training-data-for-visual-navigation-corl-2025.html" rel="alternate" type="text/html" title="Synthetic vs. Real Training Data for Visual Navigation - ICRA 2026" /><published>2025-08-30T12:00:00+00:00</published><updated>2025-08-30T12:00:00+00:00</updated><id>https://sasakuruppuarachchi.github.io/projects:%20robotic/2025/08/30/synthetic-vs-real-training-data-for-visual-navigation-corl-2025</id><content type="html" xml:base="https://sasakuruppuarachchi.github.io/projects:%20robotic/2025/08/30/synthetic-vs-real-training-data-for-visual-navigation-corl-2025.html"><![CDATA[<!-- Cover image (optional) -->
<!-- <div class="wp-block-image"><figure><img src="/assets/media/YYYY/MM/cover.jpg" alt="" data-cover class="wp-image-xxx" /></figure></div> -->
<p>If you are not redirected automatically, <a href="https://lasuomela.github.io/faint/">click here</a>.</p>]]></content><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><category term="Projects: Robotic" /><category term="Aerial Robotics" /><category term="Visual Navigation" /><category term="Sim-to-Real" /><category term="Reinforcement Learning" /><category term="Computer Vision" /><category term="ICRA 2026" /><summary type="html"><![CDATA[If you are not redirected automatically, click here.]]></summary></entry><entry><title type="html">SAVIOR: When Does Semantic Masking Help Visual-Inertial Odometry?</title><link href="https://sasakuruppuarachchi.github.io/projects:%20robotic/2025/08/20/savior-ral-2026.html" rel="alternate" type="text/html" title="SAVIOR: When Does Semantic Masking Help Visual-Inertial Odometry?" /><published>2025-08-20T12:00:00+00:00</published><updated>2025-08-20T12:00:00+00:00</updated><id>https://sasakuruppuarachchi.github.io/projects:%20robotic/2025/08/20/savior-ral-2026</id><content type="html" xml:base="https://sasakuruppuarachchi.github.io/projects:%20robotic/2025/08/20/savior-ral-2026.html"><![CDATA[<!-- Cover image (optional) -->
<!-- <div class="wp-block-image"><figure><img src="/assets/media/YYYY/MM/cover.jpg" alt="" data-cover class="wp-image-xxx" /></figure></div> -->
<p>If you are not redirected automatically, <a href="https://sasakuruppuarachchi.github.io/SAVIOR/">click here</a>.</p>]]></content><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><category term="Projects: Robotic" /><category term="Aerial Robotics" /><category term="Visual Navigation" /><category term="Semantic Segmentation" /><category term="Visual Inertial Odometry" /><summary type="html"><![CDATA[If you are not redirected automatically, click here.]]></summary></entry><entry><title type="html">The European Robotics Hackathon: ENRICH 2025</title><link href="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2025/07/04/the-european-robotics-hackathon-enrich-2025.html" rel="alternate" type="text/html" title="The European Robotics Hackathon: ENRICH 2025" /><published>2025-07-04T12:00:00+00:00</published><updated>2025-07-04T12:00:00+00:00</updated><id>https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2025/07/04/the-european-robotics-hackathon-enrich-2025</id><content type="html" xml:base="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2025/07/04/the-european-robotics-hackathon-enrich-2025.html"><![CDATA[<!-- Cover image (optional) -->
<!-- <div class="wp-block-image"><figure><img src="/assets/media/YYYY/MM/cover.jpg" alt="" data-cover class="wp-image-xxx" /></figure></div> -->

<h2>Building a Low-Cost Air-Ground Robotic System for Nuclear Plant Inspection</h2>

<figure class="wp-block-image aligncenter size-small half-width"><img src="/assets/media/2025/07/enrich-cover.jpg?w=1024" alt="" class="wp-image-443" /></figure>

<p>In June 2025, our team participated in the EnRicH 2025 Robotics Hackathon held at the decommissioned Zwentendorf Nuclear Power Plant in Austria — one of the most unique and challenging testbeds for field robotics. The goal: to design a robotic system capable of mapping, radiation detection, and inspection inside an environment where GPS is unavailable, communication is unreliable, and radiation levels can be hazardous for humans.
</p>
<h2>From Idea to Field-Ready Robot in 3 Weeks</h2>

 <div class="video-container text-width">
	<iframe
		src="https://www.youtube.com/embed/2tGLv7bt3f8"
		title="YouTube video player"
		frameborder="0"
		allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
		allowfullscreen
	></iframe>
	<p class="small" style="margin-top:0.4em; opacity:0.85;">Nuclear Power Plant Test Zone ☢️ - Multi-Domain System in Endurance Test | EnRich 2025#Hackathon</p>
	<!-- To change the video, replace EMFauA1CU8M with the new YouTube ID. -->
	<!-- If you prefer privacy-enhanced mode, use: https://www.youtube-nocookie.com/embed/VIDEO_ID -->
</div>

<p>We had just three weeks to design, build, and deploy a heterogeneous robotic system combining a drone and a ground vehicle. Using off-the-shelf parts, 3D-printed components, and open-source frameworks like ROS2 and PX4, we created:

 - A quadrotor equipped with LiDAR, IMU, and a Geiger counter for aerial radiation mapping.

 - An Ackermann-steering ground robot (UGV) for 3D mapping and navigation in tight corridors.

</p>
<p>Both platforms shared the same onboard computer — an NVIDIA Orin NX — running ROS2 for perception, SLAM, and navigation. This unified design allowed faster integration, debugging, and modular scalability.
</p>
<h2>Navigating Inside a Nuclear Plant</h2>

<figure class="wp-block-image aligncenter size-small half-width"><img src="/assets/media/2025/07/drones.jpg?w=1024" alt="" class="wp-image-443" /></figure>
<figure class="wp-block-image aligncenter size-small"><img src="/assets/media/2025/07/env.png?w=1024" alt="" class="wp-image-443" /></figure>
<figure class="wp-block-image aligncenter size-small"><img src="/assets/media/2025/07/map.png?w=1024" alt="" class="wp-image-443" /></figure>

<p>Operating inside thick concrete walls meant no GPS and poor communication. We tackled this by deploying a mesh Wi-Fi network with repeaters and dynamic reconnection routines. Our robots relied on LiDAR-inertial odometry (DLIO) and LIO-SAM for robust mapping, even in visually and magnetically challenging conditions.
</p>
<p>The UGV performed autonomous exploration using frontier-based mapping, while the UAV executed trajectory-based flight planning with RRT* and minimum-snap trajectory generation — ensuring smooth, collision-free navigation even with limited range and time.
</p>
<h2>Field Trials and Lessons Learned</h2>

During live trials, both robots successfully completed mapping and radiation detection tasks inside the NPP. However, we encountered real-world surprises — including sudden network interference when another team powered up a large communication station, which temporarily froze our drone mid-task. These experiences reinforced critical lessons in redundant communication, autonomy fallback, and energy-aware planning for time-critical missions.
</p>
<h2>Open Science and Future Work</h2>

<p>All our mechanical designs, schematics, and ROS2 packages are open-sourced, supporting other researchers and practitioners who want to build adaptable robotic solutions for nuclear or hazardous environments.
This project demonstrated that high-impact field robotics doesn’t require high budgets — just the right mix of collaboration, open-source tools, and creativity under pressure.

</p>

<h2>Publication</h2>
  <p>
    Published at the IEEE International Symposium on Safety, Security, and Rescue Robotics (SSRR 2025). Paper: <a href="https://doi.org/10.1109/SSRR68451.2025.11391258" target="_blank" rel="noopener">Low-Cost Rapid-Development Air-Ground Robotic Solution for Nuclear Power Plant Inspection</a> (<a href="https://doi.org/10.5281/zenodo.17602465" target="_blank" rel="noopener">open-access copy</a>).<!-- Paper: <a href="https://doi.org/10.5302/j.icros.2024.24.0087" target="_blank" rel="noopener">Search operations with geolocation estimation of missing persons based on real-time drone images</a> -->
  </p>
 <!--  <h3>Citation</h3>
  <pre><code>@article{lee2024search,
  title={Search operations with geolocation estimation of missing persons based on real-time drone images},
  author={Lee, Joo-hyuk and Lee, Ho-jun and Kuruppu Arachchige, Sasanka and Kim, Nam-young and Heo, Hyeon-jeong and Lee, Kyuman},
  journal={Journal of Institute of Control, Robotics and Systems},
  volume={30},
  number={8},
  pages={890--896},
  year={2024},
  publisher={Institute of Control, Robotics and Systems}
}</code></pre> -->]]></content><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><category term="Projects: Robotic" /><category term="RAICAM" /><category term="Aerial Robotics" /><category term="Ground Robotics" /><category term="Autonomous Systems" /><category term="Industrial Inspection" /><category term="Multi-Robot Systems" /><category term="ROS 2" /><category term="SLAM" /><category term="Computer Vision" /><category term="Nuclear Inspection" /><category term="EnRicH" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">The EarthRover Challenge - ICRA 25 - Runners-up</title><link href="https://sasakuruppuarachchi.github.io/projects:%20robotic/2025/05/22/the-earthrover-challenge-icar-25-runners-up.html" rel="alternate" type="text/html" title="The EarthRover Challenge - ICRA 25 - Runners-up" /><published>2025-05-22T12:00:00+00:00</published><updated>2025-05-22T12:00:00+00:00</updated><id>https://sasakuruppuarachchi.github.io/projects:%20robotic/2025/05/22/the-earthrover-challenge-icar-25-runners-up</id><content type="html" xml:base="https://sasakuruppuarachchi.github.io/projects:%20robotic/2025/05/22/the-earthrover-challenge-icar-25-runners-up.html"><![CDATA[<!-- Cover image (optional) -->
<!-- <div class="wp-block-image"><figure><img src="/assets/media/YYYY/MM/cover.jpg" alt="" data-cover class="wp-image-xxx" /></figure></div> -->

<blockquote><strong>Update:</strong> one year later, we went one better: <a href="/events/projects:%20robotic/2026/09/30/earth-rover-challenge-iros-2026-champions.html">first place at the Earth Rover Challenge, IROS 2026</a>.</blockquote>

<figure class="wp-block-image aligncenter size-small"><img src="/assets/media/2025/05/Earth_rover_cover.gif?w=1024" alt="" class="wp-image-443" /></figure>

<h2>Navigating the Wild: Remote Robot Control in the EarthRover Challenge</h2>

<p>While robotics labs are full of polished systems relying on clean data and controlled environments, real world “in the wild” navigation is messier—sensor data is noisy, delayed, inconsistent, and environments unpredictable. At the EarthRover Challenge, we tested exactly this kind of problem—and our team from Tampere University came away 2nd place by building a system that can handle it.</p>

<h2>What Was the Challenge?</h2>

<p>EarthRover is a remote urban navigation competition: robots located in cities across the world are given GPS checkpoints. Teams must control them remotely, often using delayed and unreliable streams of camera, IMU, GPS, and other sensors. Environments vary, mission difficulty varies (crowds, roads, sidewalks, obstacles). The goal is to be robust, safe, and generalize across seen and unseen conditions. 
[earth-rover-challenge.github.io](https://earth-rover-challenge.github.io)
</p>

<h2>Our Approach</h2>

<p>We took a two-pronged strategy:</p>

<h3>Heading Reference System (Filter-based)</h3>
<p>To cope with inconsistent orientation and heading data, we built a filter (e.g., combining IMU and when available magnetometer/GPS) to produce a more stable and reliable heading reference. This acts as our “compass,” so the system knows which way is forward/turning.</p>

<h3>Data-Driven Steering Model</h3>
<p>Relying only on the heading reference isn’t enough in complex or delayed visual situations. We trained a steering policy (neural network or other regression/learning approach) that takes input from the available sensor streams (e.g., camera, delayed GPS, IMU) and outputs control commands such as turn left/right and go forward/back. The model is robust to noise, delays, and inconsistent data.</p>

<p>By combining the filter-based heading with the learned steering, the system adapts: when sensor data is bad, we depend more on the heading system; when visual cues or other data are good, the steering model takes more control.</p>

<h2>Gallery</h2>
      <div class="masonry-gallery text-width">
        <a href="/assets/media/2025/05/mission.jpg" target="_blank" rel="noopener">
          <img src="/assets/media/2025/05/mission.jpg" alt="Mission overview" loading="lazy" />
        </a>
        <a href="/assets/media/2025/05/mission2.jpg" target="_blank" rel="noopener">
          <img src="/assets/media/2025/05/mission2.jpg" alt="Mission overview" loading="lazy" />
        </a>
        <a href="/assets/media/2025/05/robot.jpg" target="_blank" rel="noopener">
          <img src="/assets/media/2025/05/robot.jpg" alt="Robot overview" loading="lazy" />
        </a>
        <a href="/assets/media/2025/05/results.jpg" target="_blank" rel="noopener">
          <img src="/assets/media/2025/05/results.jpg" alt="Results overview" loading="lazy" />
        </a>
        
      </div>

<h2>Results &amp; What We Learned</h2>

<p>Our system successfully navigated in several “in-the-wild” urban locations under varying lighting, traffic, pedestrian density, weather, and sensor conditions. We placed 2nd overall in EarthRover among competing AI teams.</p>

<h3>Key lessons</h3>
<ul>
	<li>Robustness to sensor noise and delay is non-negotiable in real deployments.</li>
	<li>Hybrid systems (filter + learned model) outperform pure learning or pure classical methods when conditions degrade.</li>
	<li>Generalization to unseen environments is harder than it looks; overfitting to “nice” scenes hurts performance in the wild.</li>
	</ul>

<h2>Why It Matters</h2>

<p>Robot navigation under messy, delayed, and partial data is closer to how deployed systems in cities, disaster zones, or remote sites must work. Winning 2nd place shows that you can build systems that generalize across “unseen” environments, not just labs. For applications like delivery robots, autonomous inspection, and remote monitoring, this kind of robustness is essential.</p>]]></content><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><category term="Projects: Robotic" /><category term="Autonomous Systems" /><category term="Rover" /><category term="Robotics" /><category term="ICRA" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">RAICAM Doctoral Network Research Sprints, ENSTA, Paris</title><link href="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2024/11/21/raicam-doctoralnetwork-research-sprints-ensta-paris.html" rel="alternate" type="text/html" title="RAICAM Doctoral Network Research Sprints, ENSTA, Paris" /><published>2024-11-21T12:00:00+00:00</published><updated>2024-11-21T12:00:00+00:00</updated><id>https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2024/11/21/raicam-doctoralnetwork-research-sprints-ensta-paris</id><content type="html" xml:base="https://sasakuruppuarachchi.github.io/projects:%20robotic/raicam/2024/11/21/raicam-doctoralnetwork-research-sprints-ensta-paris.html"><![CDATA[<h2>Real-Time Air–Ground Collaboration for Industrial Robotics</h2>

<div class="video-container text-width">
	<iframe
		src="https://www.youtube.com/embed/clg4_2iWDi0"
		title="YouTube video player"
		frameborder="0"
		allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
		allowfullscreen
	></iframe>
	<p class="small" style="margin-top:0.4em; opacity:0.85;">RAICAM - ENSTA, Paris Demonstration</p>
	<!-- To change the video, replace EMFauA1CU8M with the new YouTube ID. -->
	<!-- If you prefer privacy-enhanced mode, use: https://www.youtube-nocookie.com/embed/VIDEO_ID -->
</div>
<!-- Cover image (optional) -->
<!-- <div class="wp-block-image"><figure><img src="/assets/media/YYYY/MM/cover.jpg" alt="" data-cover class="wp-image-xxx" /></figure></div> -->

<p>In industrial environments like factories, warehouses, or power plants, inspection and maintenance are still largely human‑operated—time‑consuming, repetitive, and often risky. Our project, <strong><a href="https://raicam.eu/" target="_blank" rel="noopener">RAICAM</a></strong> (Robotics and Artificial Intelligence for Critical Asset Monitoring), aims to change that by creating a framework that lets aerial and ground robots work together autonomously to perform inspection and mapping tasks.</p>

<p>This work was carried out at ENSTA, Paris and presented at <strong>TAROS 2025</strong> (Towards Autonomous Robotic Systems), where we demonstrated the full system in a realistic facility‑management scenario.</p>

<h2>Gallery</h2>
      <div class="masonry-gallery text-width">
        <a href="/assets/media/2024/11/paris_demo2.jpg" target="_blank" rel="noopener">
          <img src="/assets/media/2024/11/paris_demo2.jpg" alt="Mission overview" loading="lazy" />
        </a>
        <a href="/assets/media/2024/11/raicam.jpg" target="_blank" rel="noopener">
          <img src="/assets/media/2024/11/raicam.jpg" alt="Mission overview" loading="lazy" />
        </a>
        <a href="/assets/media/2024/11/raicam2.jpg" target="_blank" rel="noopener">
          <img src="/assets/media/2024/11/raicam2.jpg" alt="Robot overview" loading="lazy" />
        </a>
        <a href="/assets/media/2024/11/raicam3.jpg" target="_blank" rel="noopener">
          <img src="/assets/media/2024/11/raicam3.jpg" alt="Results overview" loading="lazy" />
        </a>
        
      </div>

<h2>The Idea: Robots That Complement Each Other</h2>

<p>Drones are agile and can quickly scan large areas or hard‑to‑reach places, but they have limited endurance and payload capacity. Ground robots, on the other hand, can carry heavier sensors and operate longer but are constrained by terrain. <strong>RAICAM bridges these strengths</strong> by enabling tight coordination between the two.</p>

<p>We designed a <strong>ROS 2‑based architecture</strong> that allows both robots to share real‑time state, semantic information, and task goals. The drone performs aerial visual inspection and mapping, while the UGV handles close‑up exploration, data collection, and relay networking. The system dynamically assigns tasks depending on robot capability, energy level, and visibility.</p>

<h2>Method</h2>

<ul>
	<li><strong>Shared Semantic Map:</strong> A unified map that merges LiDAR, visual, and inertial data from both robots for joint situational awareness.</li>
	<li><strong>Collaborative Planning:</strong> Decentralized trajectory generation ensures both robots plan around each other, avoiding collisions and maximizing coverage.</li>
	<li><strong>Human‑in‑the‑Loop Supervision:</strong> A web‑based control interface allows an operator to oversee missions, trigger reassignments, or pause tasks when needed—<em>all in real time</em>.</li>
	</ul>

<p>This hybrid autonomy approach balances robot independence with human oversight—crucial for deploying robots safely in operational facilities.</p>

<h2>Field Deployment</h2>

<p>We validated the method in an indoor mock industrial environment equipped with stairs, corridors, and elevated pipelines. The air–ground pair collaboratively performed inspection and mapping while maintaining a shared localization frame. The demo showed robust communication, real‑time visualization, and reliable mission continuity even when the aerial link briefly dropped.</p>

<h2>Looking Ahead</h2>

<p>RAICAM paves the way for scalable robotic teams that can handle routine maintenance, environmental monitoring, and asset inspection in large industrial sites. By combining the complementary strengths of aerial and ground robots, the project moves us a step closer to fully autonomous, cooperative robotic ecosystems.</p>


    <h2>Publication</h2>
  <p>
    Paper: <a href="https://doi.org/10.1007/978-3-032-01486-3_40" target="_blank" rel="noopener">Lessons Learned from the RAICAM Doctoral Network Research Sprints</a>
  </p>
  <h3>Citation</h3>
  <pre><code>@inproceedings{kenan2025lessons,
  title={Lessons Learned from the RAICAM Doctoral Network Research Sprints},
  author={Kenan, Alperen and Kordkheili, Sahar Sadeghi and Cardenas, Juan Jose Garcia and Melone, Alessandro and Tian, Changda and Li, Haichuan and Raei, Hamidreza and Kuruppu Arachchige, Sasanka and Tang, Yifeng and Tapus, Adriana and others},
  booktitle={Annual Conference Towards Autonomous Robotic Systems},
  pages={526--539},
  year={2025},
  organization={Springer}
}</code></pre>]]></content><author><name>Sasanka Kuruppu Arachchige</name><email>sasa.kuruppuarachchi@gmail.com</email></author><category term="Projects: Robotic" /><category term="RAICAM" /><category term="Aerial Robotics" /><category term="Ground Robotics" /><category term="Autonomous Systems" /><category term="Industrial Inspection" /><category term="Multi-Robot Systems" /><category term="ROS 2" /><category term="SLAM" /><category term="Computer Vision" /><category term="RAICAM" /><summary type="html"><![CDATA[Real-Time Air–Ground Collaboration for Industrial Robotics]]></summary></entry></feed>