<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://olayasturias.github.io/feed.xml" rel="self" type="application/atom+xml"/><link href="https://olayasturias.github.io/" rel="alternate" type="text/html" hreflang="en"/><updated>2026-06-09T14:48:31+00:00</updated><id>https://olayasturias.github.io/feed.xml</id><title type="html">blank</title><subtitle>Postdoctoral researcher in Robotics, Computer Vision, and Deep Learning — focusing on Visual SLAM for underwater applications. </subtitle><entry><title type="html">My ROSCON 2024 digest - Days 2 and 3</title><link href="https://olayasturias.github.io/blog/2024/roscon-odense-2/" rel="alternate" type="text/html" title="My ROSCON 2024 digest - Days 2 and 3"/><published>2024-10-25T06:15:00+00:00</published><updated>2024-10-25T06:15:00+00:00</updated><id>https://olayasturias.github.io/blog/2024/roscon-odense-2</id><content type="html" xml:base="https://olayasturias.github.io/blog/2024/roscon-odense-2/"><![CDATA[<p>This year, our neighbor city Odense held the ROSCON conference, which I had the honour to attend :slightly_smiling_face: I collected some notes for my future self (and maybe the present you?), that I have collected in this post for days 2 and 3, and on a previous post for day 1 (which consisted of workshops and birds of feather sessions).</p> <p>If any of these notes raises your interest, you can watch the full talks <a href="https://roscon.ros.org/2024/#program">in this link</a>. Enjoy!</p> <ul> <li><a href="#simulation-and-ai-tools">Simulation and AI Tools</a> <ul> <li><a href="#robotecai-simulation-and-ai-tools">Robotec.ai: Simulation and AI tools</a></li> <li><a href="#usbl-simulator">USBL Simulator</a></li> <li><a href="#automated-testing-framework-with-awsim-and-openscenario">Automated testing framework with AWSIM and OpenScenario</a></li> </ul> </li> <li><a href="#data-management">Data Management</a> <ul> <li><a href="#segmentsai">Segments.ai</a></li> <li><a href="#robotoai">Roboto.ai</a></li> <li><a href="#foxglove">Foxglove</a></li> </ul> </li> <li><a href="#communication-protocols-and-middleware">Communication Protocols and Middleware</a> <ul> <li><a href="#zenoh">Zenoh</a></li> <li><a href="#eprosima">eProsima</a></li> <li><a href="#pixi-package-manager">Pixi package manager</a></li> </ul> </li> <li><a href="#diagnosis-and-performance-monitoring">Diagnosis and Performance Monitoring</a> <ul> <li><a href="#how-is-my-robot---on-the-state-of-ros-diagnostics">How is my robot? - On the state of ROS diagnostics</a></li> <li><a href="#scenic-a-probabilistic-language-for-world-modelling">Scenic: a probabilistic language for world modelling</a></li> <li><a href="#scenario-execution-for-robotics-a-generic-backend-agnostic-library-for-running-reproducible-robotics-experiments-and-tests">Scenario Execution for Robotics: A generic, backend-agnostic library for running reproducible robotics experiments and tests</a></li> </ul> </li> <li><a href="#localization-navigation-motion-planning-and-collision-avoidance">Localization, Navigation, Motion Planning and Collision Avoidance</a> <ul> <li><a href="#learn-probabilistic-robotics-with-ros-2">Learn Probabilistic Robotics with ROS 2</a></li> <li><a href="#beluga-amcl-a-modern-monte-carlo-localization-implementation-for-ros">Beluga AMCL: a modern Monte Carlo Localization implementation for ROS</a></li> <li><a href="#a-ros2-package-for-dynamic-collision-avoidance-based-on-on-board-proximity-sensors-for-human-robot-close-interaction">A ROS2 Package for Dynamic Collision Avoidance Based on On-Board Proximity Sensors for Human-Robot Close Interaction</a></li> <li><a href="#gsplines-generalized-splines-for-motion-optimization-and-smoot-collision-avoidance">GSplines: Generalized Splines for Motion Optimization and Smoot Collision Avoidance</a></li> <li><a href="#nav2-docking">Nav2 Docking</a></li> <li><a href="#radar-tracks-for-path-planning-in-the-presence-of-dynamic-obstacles">Radar Tracks for Path Planning in the presence of Dynamic Obstacles</a></li> <li><a href="#mesh-navigation">Mesh navigation</a></li> </ul> </li> <li><a href="#software-and-tool-integration">Software and Tool Integration</a> <ul> <li><a href="#main-street-autonomy">Main Street Autonomy</a></li> <li><a href="#cross-freecad-and-ros">CROSS: FreeCAD and ROS</a></li> </ul> </li> <li><a href="#robotics-education-and-community-resources">Robotics Education and Community Resources</a> <ul> <li><a href="#the-defenitive-guide-to-ros-mobile-robotics">The defenitive guide to ROS Mobile Robotics</a></li> <li><a href="#foss-books">Foss Books</a></li> <li><a href="#ieee-robotics-and-automation-practice-ra-p">IEEE Robotics and Automation Practice (RA-P)</a></li> <li><a href="#awesome-conferences-and-schools-list">Awesome conferences and schools list</a></li> </ul> </li> <li><a href="#other-interesting-tools">Other Interesting tools</a> <ul> <li><a href="#happypose">Happypose</a></li> </ul> </li> </ul> <h1 id="simulation-and-ai-tools">Simulation and AI Tools</h1> <h2 id="robotecai-simulation-and-ai-tools">Robotec.ai: Simulation and AI tools</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/robotec_ai.png?raw=true" alt="alt text"/></p> <p><a href="https://www.robotec.ai/">Robotec.ai</a> introduced us to their simulator. It integrates seamlessly with ROS (though it can function independently as well), utilizing NVIDIA’s <a href="https://github.com/NVIDIA-Omniverse/PhysX">Physx engine</a>, and the renderings from <a href="https://o3de.org/">Open 3D Engine</a>. Essentially, Robotec.ai has migrated the ROS stack from Gazebo to O3DE, enhancing both the visual and functional capabilities of simulations.</p> <p>The simulator is <strong>modular</strong>, allowing components like the physics engine to be swapped out based on specific project needs. While optimized for ROS, the simulator’s modular nature allows it to adapt to <strong>various robotic frameworks</strong>, offering flexibility for different use cases.</p> <p>Robotec.ai provides tailored services to set up simulators and simulation environments suited to the customer’s specific requirements.</p> <p>Later in the conference, a talk from Michal Pelka showed us how easy it is to set up O3DE for simulation: <img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/o3desetup.png?raw=true" alt="alt text"/></p> <h2 id="usbl-simulator">USBL Simulator</h2> <p><img src="https://github.com/rwth-irt/USBL-Simulator/raw/main/data/icon.svg" alt="USBL sim"/></p> <p>One of my quick notes includes <a href="https://github.com/rwth-irt/USBL-Simulator">this repo</a> to an USBL simulator. The simulator is written in C++, with a ROS 2 node acting as wrapper for it.</p> <p>The simulator promisis a high-fidelity simulation, with features including (but not limited to) Round-trip-time (RTT) and Time-Difference-of-Arrival (TDOA) noise and quantization simulation.</p> <p>The parameters are configured in a YAML file, and the repository includes an example config file for an <a href="https://www.evologics.com/usbl-oem">OEM USBL by Evologics</a>. <img src="https://www.evologics.com/web/image/15614/EvoLogics-USBL-OEM-2-600.jpg" alt=""/></p> <h2 id="automated-testing-framework-with-awsim-and-openscenario">Automated testing framework with AWSIM and OpenScenario</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/awsim.png?raw=true" alt="alt text"/> <a href="https://github.com/tier4/AWSIM">AWSIM</a> is an Open source simulator for self-driving vehicles based in Unity.</p> <h1 id="data-management">Data Management</h1> <h2 id="segmentsai">Segments.ai</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/segmentsai.png?raw=true" alt="alt text"/></p> <p><a href="https://segments.ai/">Segments.ai</a> is a company located in Belgium. They provide tools for data labelling in 2D and 3D, and an API to export it to whichever framework you use (e.g. Pytorch). They also provide data labelling service. Their labels seem to be focused on object detection and segmentation in 2D and 3D (as you might have guessed by the name). Currently, it doesn’t appear that they support localization directly, though I plan to explore this further through their demo offerings. Segments.ai offers <a href="https://segments.ai/conferenceinfo">free academic licenses and demo datasets</a>.</p> <h2 id="robotoai">Roboto.ai</h2> <p><a href="https://www.roboto.ai/">Roboto.ai</a> provides a platform for curating and analyze robotics data. <img src="https://docs.roboto.ai/_images/overview.png" alt="https://docs.roboto.ai/_images/overview.png"/></p> <p>With Roboto.ai, you can extract specific data from large datasets, making it especially useful for working with rosbags. Instead of handling one massive file, you can query only the data you need, optimizing memory usage. The platform also allows you to curate datasets based on events or anomalies detected within the data. Roboto’s API includes built-in functions for automatic anomaly detection, streamlining data analysis and cleanup. More info on the concepts and functionality can be found <a href="https://docs.roboto.ai/learn/concepts.html">here</a>, or in the <a href="https://github.com/roboto-ai/roboto-python-sdk">Github repo</a>.</p> <h2 id="foxglove">Foxglove</h2> <p><a href="https://foxglove.dev/">Foxglove</a> is a well-known tool for visuallizing and debugging data. The data can be streamed from the cloud, local files, or in real time from the robot. Foxglove also allows replaying the data, <a href="https://docs.foxglove.dev/docs/visualization/panels/publish/?_gl=1*7mf2yn*_gcl_au*MTI2MTYzNzUxNi4xNzI5ODQ3ODUz">(read here)</a> <a href="https://docs.foxglove.dev/api/#tag/Stream-data/paths/~1data~stream/post">(or here)</a>. One of Foxglove’s standout features is its ability to display multiple data sources simultaneously, offering flexible, customizable visualizations. For instance, it can look something like this:</p> <p><img src="https://cdn.prod.website-files.com/66a37d395dfadcdb65dcdf45/66d9c41c7fcb77d973f41888_autonomous_underwater_vehicle-animation.webp" alt=""/></p> <p>…but it doesn’t have to—Foxglove is fully customizable! By the way, the sample above showcases <a href="https://github.com/remaro-network/SubPipe-dataset">our SubPipe dataset</a>! :smiley: Foxglove has a free plan, and provides free access to students and academics.</p> <h1 id="communication-protocols-and-middleware">Communication Protocols and Middleware</h1> <h2 id="zenoh">Zenoh</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/zenoh.png?raw=true" alt="alt text"/></p> <p><a href="https://zenoh.io/">Zenoh</a> made a bold entrance at this year’s ROSCon with a strong marketing push to position itself as the next standard in robotics middleware, potentially overtaking DDS. While choosing between these options requires more than a quick discussion or blog post, if you’re undecisive, you might like to know that <a href="https://github.com/eclipse-zenoh/zenoh-plugin-ros2dds">Zenoh offers a bridge to ROS 2 DDS</a>. This bridge allows you to integrate Zenoh’s capabilities alongside DDS without needing to replace the existing setup, giving you the flexibility to leverage Zenoh’s features while maintaining DDS compatibility.</p> <h2 id="eprosima">eProsima</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/eProsima.png?raw=true" alt="alt text"/></p> <p><a href="https://www.eprosima.com/">eProsima</a> is well-known for providing the most adopted DDS solution as of today.Although their ROS 2 implementation of Fast DDS has faced criticism for some networking issues, it’s worth noting (as their CEO emphasized to us) that these issues have been addressed in recent updates.</p> <p>In addition to their popular open-source libraries, eProsima offers commercial solutions, including specialized plugins for low-bandwidth connections, catering to diverse and demanding network requirements.</p> <h2 id="pixi-package-manager">Pixi package manager</h2> <p><img src="https://github.com/prefix-dev/pixi/assets/4995967/e42739c4-4cd9-49bb-9d0a-45f8088494b5" alt=""/> Pixi is a package manager that works seamlessly with Ubuntu, MacOS, and Windows. There are examples on setting <a href="https://pixi.sh/latest/tutorials/python/#lets-get-started">Python</a> (as alternative to conda) and <a href="https://pixi.sh/latest/examples/cpp-sdl/">C++</a> packages. Here’s <a href="https://github.com/ruben-arts/turtlesim-pixi">an example package on how to use pixi for a ROS2 workspace</a>.</p> <h1 id="diagnosis-and-performance-monitoring">Diagnosis and Performance Monitoring</h1> <h2 id="how-is-my-robot---on-the-state-of-ros-diagnostics">How is my robot? - On the state of ROS diagnostics</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/diagnosis.jpeg?raw=true" alt="alt text"/></p> <p>Christian Henkel introduced to as a series of ROS packages for diagnosis from the <a href="https://github.com/ros/diagnostics">ROS diagnostics</a> stack. Aside from that, he presented us a series of good practices that his team at Bosch applies for diagnosis:</p> <ul> <li><strong>Diagnosis phylosophy</strong> <ul> <li>Main Purpose: Observe the <strong>current state</strong> of the robot.</li> <li>Think of it as a control panel where operators <strong>has all the information</strong> they need.</li> <li>Try to <strong>limit</strong> the metrics to &lt;10, ideally 2-3 per component.</li> <li><strong>Warnings</strong> are states that are unusual but allow continued operation.</li> <li><strong>Errors</strong> indicate states that do not allow the robot to operate further and shall be immediately addressed.</li> <li>Think about a logging and diagnostics concept in your team and <strong>document it</strong>.</li> </ul> </li> <li><strong>Comparison to other concepts</strong> <ul> <li>Diagnostics vs: <ul> <li>Logging: <ul> <li>Logging is (a lot) more verbose.</li> <li>Captures the inner state of a SW component.</li> <li>Are (usually) for later consumption and analysis.</li> </ul> </li> <li>Bagfiles: <ul> <li>Are useful to record diagnostics in bagfiles.</li> <li>Will also contain non-critical state info.</li> </ul> </li> <li>Testing: <ul> <li>Diagnostics help to find more quickly causes for failing tests, but don’t replace testing.</li> <li>Crucial diagnostics may be tested themselves.</li> </ul> </li> </ul> </li> </ul> </li> <li><strong>Antipatterns</strong> <ul> <li>In general, diagnosis are not meant to be used functionally: <ul> <li>The error handling that a robotic system does by itself should not depend on diagnosis.</li> <li>Diagnostics should help a human observer or technician to understand a problem that was not recovered from.</li> </ul> </li> <li>The “right” amount of red: <ul> <li>Diagnostics must be tuned in a way such that they really mean a problem.</li> <li>Otherwise, human observers get used to seeing error messages and don’t recognize critical ones.</li> <li>In a similar theme, warnings should not be too frequent to not become meaningless.</li> </ul> </li> <li>Diagnosis must be received: <ul> <li>Diagnostics are meant as a communication method from robot to human.</li> <li>So, in fully autonomous systems, they must be logged correctly and evaluated retroactively.</li> <li>It is also worth to difference between roles: <ul> <li>For example, if an end user will see and/or understand diagnostics content or</li> <li>if it must only be consumed by the trained technician.</li> </ul> </li> </ul> </li> </ul> </li> </ul> <p><img src="https://i0.wp.com/warandpeas.com/wp-content/uploads/2017/03/war-and-peas-insult-machine.jpg?resize=580%2C649&amp;ssl=1" alt=""/></p> <h2 id="scenic-a-probabilistic-language-for-world-modelling">Scenic: a probabilistic language for world modelling</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/scenic1.png?raw=true" alt="alt text"/></p> <p><a href="https://scenic-lang.org/">Scenic</a> is a stochastic scenario generator and a powerful language for defining spatio-temporal relationships in scenes. Whether you’re creating environments for CARLA, Gazebo, Unity, or Webots, Scenic can model scenarios as a combination of scene distributions and agent behaviors.</p> <p><img src="https://docs.scenic-lang.org/en/latest/_images/scenic-sim.png" alt="scenic"/> Why is it useful? Scenic helps test cyber-physical systems against rare edge cases, design environments for exploration, and generate synthetic data for robust machine learning models. While it’s not available for Unreal Engine yet, its versatility makes it a game-changer for simulation and testing.</p> <h2 id="scenario-execution-for-robotics-a-generic-backend-agnostic-library-for-running-reproducible-robotics-experiments-and-tests">Scenario Execution for Robotics: A generic, backend-agnostic library for running reproducible robotics experiments and tests</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/sceexe.png?raw=true" alt="alt text"/> <a href="https://github.com/IntelLabs/scenario_execution">Scenario execution for robotics</a> is a backend - and a middleware - agnostic library, that enables the robotics community to perform reproducible experiments at scale. Written in Python and built upon the generic scenario descrition language OpenScenario2 and pytrees, Scenario Execution reads a scenario definition from a file, translates it to a pytrees behavior tree, and then executes it. Although scenario execution can be used as a pure Python library, it is mainly targeted towards ROS 2. The backend-agnostic implementation allows Scenario Execution to be used with both simulated and physical robots, with minimal adaptations necessary in the scenario description file.</p> <p>This tool allows testing the robot in execution time. It allows testing of various actions in parallel, as well as error injection.</p> <p>With Scenario Execution, you create a logical scenario to reduce the amount of possible scenarios within your abstract scenario. This concrete scenario will have specific values to test: <img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/scenarioexecution.png?raw=true" alt="alt text"/></p> <h1 id="localization-navigation-motion-planning-and-collision-avoidance">Localization, Navigation, Motion Planning and Collision Avoidance</h1> <h2 id="learn-probabilistic-robotics-with-ros-2">Learn Probabilistic Robotics with ROS 2</h2> <div align="center"> <img src="https://github.com/user-attachments/assets/9884b471-ac75-4f76-b1a5-6aea9f8d5945" width="400"/> </div> <p>If you work in robotics, it is extremely likely that you’ve heard about the Probabilistic Robotics book. There are plenty of repositories in the literature implementing such algorithms, however, as a developer you might want to code your own implementation that is adapted to your needs.</p> <p>However, as addressed by Carlos Argueta, learning these algorithms is challenging, specially when it comes to translating theory into actual code (and making it work in the real world).</p> <p>Under <a href="https://github.com/carlos-argueta/rse_prob_robotics">this repo</a>, you can find a compilation of open-source implementations of the algorithms under the probabilistic robotics book, accompanied by <a href="https://soulhackerslabs.com/the-unreasonable-power-of-the-unscented-kalman-filter-with-ros-2-d4c97d4b4bb9">an article explaining them</a>.</p> <h2 id="beluga-amcl-a-modern-monte-carlo-localization-implementation-for-ros">Beluga AMCL: a modern Monte Carlo Localization implementation for ROS</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/beluga.png?raw=true" alt="alt text"/></p> <p>In this talk, Franco Cipollone first introduced <a href="https://ekumen-os.github.io/beluga/index.html">Beluga</a>, a toolkit for Monte Carlo Localization (MCL) which operates in 2D over laser scan measurements. He mentioned, however, how the ACML algorithms are aging:</p> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/beluga2.png?raw=true" alt="alt text"/></p> <p>Under that premise, he introduced a new library EKUMEN is working on: <a href="https://github.com/Ekumen-OS/lambkin">the Localization And Mapping BenchmarKINg Toolkit (LAMBKIN)</a></p> <p>Lambkin introduces a benchmarking application for localization and mapping systems, in which each component runs in a separate container. It relies on a series of open-source libraries and benchmarks, including <a href="https://michaelgrupp.github.io/evo/">evo-tools</a> and <a href="https://timemory.readthedocs.io/en/develop/features.html#command-line-tools">timem</a>.</p> <h2 id="a-ros2-package-for-dynamic-collision-avoidance-based-on-on-board-proximity-sensors-for-human-robot-close-interaction">A ROS2 Package for Dynamic Collision Avoidance Based on On-Board Proximity Sensors for Human-Robot Close Interaction</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/dynamic_collision_avoidance.png?raw=true" alt="alt text"/></p> <h2 id="gsplines-generalized-splines-for-motion-optimization-and-smoot-collision-avoidance">GSplines: Generalized Splines for Motion Optimization and Smoot Collision Avoidance</h2> <p><img src="https://github.com/rafaelrojasmiliani/gsplines_cpp/raw/master/img/logo.svg" alt="logo"/></p> <p>Rafael A. Rojas presented his open-source library to represent and formulate motion and trajectory planning problems with <em>generalized splines</em> and <em>piece-wise polynomials</em>. Considering that motion planners have waypoints as output, these points must be joined to form a trajectory. This work presents a library to obtain these trajectories with GSplines.</p> <blockquote> <p>“A <strong>generalized spline</strong> is a piece-wise defined curve such that in <strong>each interval</strong> it is the <strong>linear combination</strong> of certain linearly independent functions”.</p> </blockquote> <p>In contrast to ROS classes, the introducied GSplines class contains all the necessary elements to derive polynomial trajectories for a given set of waypoints. ROS classes define points and trajectories as nested structures. An example can be seen with the JointTrajectory and JointTrajectoryPoint classess (or messages):</p> <p><strong>JointTrajectory:</strong></p> <pre><code class="language-PYTHON"># The header is used to specify the coordinate frame and the reference time for
# the trajectory durations
std_msgs/Header header

# The names of the active joints in each trajectory point. 
string[] joint_names

# Array of trajectory points.
JointTrajectoryPoint[] points
</code></pre> <p><strong>JointTrajectoryPoint:</strong></p> <pre><code class="language-PYTHON">
# Single DOF joint positions for each joint relative to their "0" position.
float64[] positions

# The rate of change in position of each joint. 
float64[] velocities

# Rate of change in velocity of each joint.
float64[] accelerations

# The torque or the force to be applied at each joint.
float64[] effort

# Desired time from the trajectory start to arrive at this trajectory point.
builtin_interfaces/Duration time_from_start
</code></pre> <p>This array leads to inefficient memory layout and complicates the translation into the flat vector format that optimizers require. <strong>There is no clear interface for evaluation at arbitrary time instances, computation of derivatives, or time scaling.</strong></p> <p>To efficiently derive the trajectories for the given waypoints, the GSplines class represents:</p> <ul> <li><strong>Solutions</strong> of the minimum-X trajectory passing through the given waypoints.</li> <li><strong>Representing Transformations:</strong> <ul> <li>Derivatives</li> <li>Linear operations</li> <li>Linear scaling</li> </ul> </li> </ul> <p>That is, the class itself includes the derivative linear operations and linear scaling. The class’goal is to achieve the <a href="https://en.wikipedia.org/wiki/Monoid">monoid property</a> on the derivative, scaling and addition/scalar multiplication operations. These operations will become a monoid under the composition. The monoid gives nice properties to program. By implementing the polynomial basis solution of the trajectory, the GSpline class allows implementing optimal control.</p> <p>For more info visit <a href="https://github.com/rafaelrojasmiliani/gsplines_cpp?tab=readme-ov-file">the repositorie’s Github,</a> which includes the code, theoretical explanations, and link to the associated publications.</p> <h2 id="nav2-docking">Nav2 Docking</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/nav2.png?raw=true" alt="alt text"/></p> <p>Nav2 Docking Server is part of the <a href="https://github.com/ros-navigation/navigation2">Nav2 library</a>, and it has its own <a href="https://github.com/open-navigation/opennav_docking">dedicated repo</a>. The Nav2 Docking Server can be used with arbitrary robots and docks for auto-docking. The plugins <em>ChargingDock</em> and <em>NonChargingDock</em> allows to implement parameters specific to your docking station on how to detect if the docking was succesful. The docking procedure seemed to be wrapped around a behavior tree. It can be set up to work within your own behavior tree. The docking steps are:</p> <ol> <li>Retrieve dock pose.</li> <li>Navigate to dock (if not within range).</li> <li>Use the docking pluging to detect the dock.</li> <li>Enter a vision-control loop to reach the docking pose.</li> <li>Exit the vision-control loop once the contact has been detected.</li> <li>Wait until chargin starts (if applicable) and return success.</li> </ol> <p>The dock database is an external yaml in server config or in action request. The controller is <a href="https://docs.nav2.org/configuration/packages/configuring-graceful-motion-controller.html">nav2_graceful_controller</a>. Further details on the docking API and dock configurations can be found on the <a href="https://docs.nav2.org/tutorials/docs/using_docking.html">server’s documentation</a>.</p> <h2 id="radar-tracks-for-path-planning-in-the-presence-of-dynamic-obstacles">Radar Tracks for Path Planning in the presence of Dynamic Obstacles</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/radarobstacle.png?raw=true" alt="radar"/></p> <p>Obstacles in ROS 2 are typically represented by a stationary point in an occupancy grid, usually inflated by a user-defined radius and cost scaling factor. These points are updated frame-to-frame via ray tracing. A limitation on this approach is the difficulty on using obstacle dynamics.</p> <h2 id="mesh-navigation">Mesh navigation</h2> <p><img src="https://github.com/naturerobots/mesh_navigation/raw/humble/docs/images/demo.gif?raw=true" alt="meshnav"/></p> <p>The <a href="https://github.com/naturerobots/mesh_navigation">Mesh Navigation</a> software bundle allows efficient robot navigation on 2D manifolds, which are represented in 3D as triangle meshes. It enables safe navigation in various complex outdoor environments by using a modularly extensible layered mesh map. Layers can be loaded as plugins representing specific geometric or semantic metrics of the terrain. This allows the incorporation of obstacles in these complex outdoor environments into path and motion motion planning.</p> <h1 id="software-and-tool-integration">Software and Tool Integration</h1> <h2 id="main-street-autonomy">Main Street Autonomy</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/mainstreetautonomy.png?raw=true" alt="alt text"/></p> <p>The main product advertised by <a href="https://mainstreetautonomy.com/">Main Street Autonomy</a> was their sensor calibration <em>“Calibration Anywhere”</em>. This tool calibrates all lidar, radar, camera, IMU, and GPS/GNSS sensors in a single pass, providing both intrinsic and extrinsic parameters, along with time offsets between sensors—all without the need for checkerboards or targets. It is, definitely, a very interesting product. What impressed me most, however, was their vSLAM solution, which demonstrated impressively stable features even in challenging scenarios with highly uniform textures, as shown in the photo here.</p> <h2 id="cross-freecad-and-ros">CROSS: FreeCAD and ROS</h2> <p><a href="https://github.com/galou/freecad.cross">CROSS</a> is a FreeCAD workbench to generate robot description packages (xacro or URDF) for ROS.</p> <h1 id="robotics-education-and-community-resources">Robotics Education and Community Resources</h1> <h2 id="the-defenitive-guide-to-ros-mobile-robotics">The defenitive guide to ROS Mobile Robotics</h2> <p>Steve Macenski introduced to us <a href="https://www.sciencedirect.com/science/article/abs/pii/S092188902300132X">one of his last papers</a>, a survey that answers to the following questions:</p> <ul> <li>What are his algorithm choices</li> <li>How do they work</li> <li>When should I use what and why</li> <li>What features exist?</li> <li>How do they compare computationally?</li> </ul> <h2 id="foss-books">Foss Books</h2> <p>VM (Vicky) Brasseur presented to us her books:</p> <ul> <li><a href="https://pragprog.com/titles/vbopens/forge-your-future-with-open-source/">Forge Your Future with Open Source</a></li> <li><a href="https://pragprog.com/titles/vbfoss/business-success-with-open-source/">Business Success with Open Source</a>. Some of the sections from this books are available, such as: <ul> <li><a href="https://media.pragprog.com/titles/vbfoss/risks.pdf?_gl=1*1jiysm4*_ga*MTk5MTQ0NjE0OS4xNzMwNTcxNjM4*_ga_MJ4659LJZC*MTczMDU3MTYzOC4xLjEuMTczMDU3MTg2Mi4wLjAuMA..">Avoid Common FOSS Business Risks</a></li> <li><a href="https://media.pragprog.com/titles/vbfoss/strategy.pdf?_gl=1*ru2jaq*_ga*MTk5MTQ0NjE0OS4xNzMwNTcxNjM4*_ga_MJ4659LJZC*MTczMDU3MTYzOC4xLjEuMTczMDU3MTg2Mi4wLjAuMA..">Role of Inbound FOSS in Digital Transformation</a></li> <li><a href="https://media.pragprog.com/titles/vbfoss/compliance.pdf?_gl=1*4765k*_ga*MTk5MTQ0NjE0OS4xNzMwNTcxNjM4*_ga_MJ4659LJZC*MTczMDU3MTYzOC4xLjEuMTczMDU3MTg2Mi4wLjAuMA..">Basic License Compliance</a></li> </ul> </li> </ul> <h2 id="ieee-robotics-and-automation-practice-ra-p">IEEE Robotics and Automation Practice (RA-P)</h2> <p><img src="https://www.ieee-ras.org/images/publications/RA-P/24-TA-2-001-FP_IEEE_RAP_web_image_996x479_no_button.jpg" alt="ieee"/></p> <p>A new IEEE journal with less focus on theoretical contributions and more on applied research. Link to the journal <a href="http://www.ieee-ras.org/publications/ra-p">here</a></p> <h2 id="awesome-conferences-and-schools-list">Awesome conferences and schools list</h2> <p>A very much needed repository with links to interesting robotics conferences and schools, with a list going as far as 2028! Follow the link <a href="https://torydebra.github.io/AwesomeRoboticsConferencesAndSchoolsList/">here</a>.</p> <h1 id="other-interesting-tools">Other Interesting tools</h1> <h2 id="happypose">Happypose</h2> <p><img src="https://agimus-project.github.io/happypose/cosypose/images/example_predictions.png" alt="happypose"/></p> <p>Krzysztof Wojciechowski presented <a href="https://github.com/agimus-project/happypose_ros">happypose_ros</a>, a ROS 2 wrapper of <a href="https://agimus-project.github.io/happypose/">Happypose</a> for 6D object pose estimation. Given an RGB image and a 2D bounding box of an object with known 3D model, the 6D pose estimator predicts the full 6D pose of the object with respect to the camera. As a sum up, Happypose introduces a library for:</p> <ul> <li>Single camera pose estimation.</li> <li>Multi camera pose estimation.</li> <li>6D pose estimation of objects in the scene (for the pretrained objects). Easy Fine-tuning with different objects is currently a future work.</li> <li>ROS API. The slides on how the method works can be found <a href="https://docs.google.com/presentation/d/1jZDu4mw-uNcwzr5jMFlqEddZsb7SjQozXVG3dT6-1M0/edit#slide=id.g9145acbbc5_0_0">here</a></li> </ul> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/wir.png?raw=true" alt="Pssst, ey, look, we are women in robotics, wooo!"/> Pssst, ey, look, we are women in robotics, wooo!</p>]]></content><author><name></name></author><category term="ROS"/><category term="conference"/><category term="roscon"/><summary type="html"><![CDATA[My roscon digest on the second and third day]]></summary></entry><entry><title type="html">My ROSCON 2024 digest - Day 1</title><link href="https://olayasturias.github.io/blog/2024/roscon-odense-1/" rel="alternate" type="text/html" title="My ROSCON 2024 digest - Day 1"/><published>2024-10-21T06:15:00+00:00</published><updated>2024-10-21T06:15:00+00:00</updated><id>https://olayasturias.github.io/blog/2024/roscon-odense-1</id><content type="html" xml:base="https://olayasturias.github.io/blog/2024/roscon-odense-1/"><![CDATA[<p>This year, our neighbor city Odense held the ROSCON conference, which I had the honour to attend :slightly_smiling_face: I collected some notes for my future self (and maybe the present you?), that I have collected in this post for day 1, and on my next post for days 2 and 3.</p> <p>If any of these notes raises your interest, you can watch the full talks <a href="https://roscon.ros.org/2024/#program">in this link</a>. Enjoy!</p> <h1 id="workshop-3-open-source-open-hardware-hand-held-mobile-mapping-system-for-large-scale-surveys">Workshop 3: Open source, open hardware hand-held mobile mapping system for large scale surveys</h1> <p>This workshop consisted of deploying an open-hardware hand-held device to record large-scale datasets and perform mapping tasks on them. The device comprises a low-cost Lidar sensor with a GPS unit and an IMU sensor. A Raspberry Pi 4 board collects the data. Data processing is performed offline after the collected data is transferred to our PCs.</p> <h2 id="the-open-hardware">The open hardware</h2> <p>The bill of materials for the device can be found <a href="https://github.com/JanuszBedkowski/mandeye_controller">under the Mandeye repository.</a> The bill of materials comprises:</p> <ul> <li>A Raspberry 4 (or 5).</li> <li>The Lidar sensor Livox Mid-360. It is a low-cost lidar intended for low-speed robotics. It provides a field of view of 360*59 degrees, with a minimum range of 0.1m and a 40-line point cloud density.</li> <li>3D printed cases for the Lidar and the Raspberry Pi.</li> <li>A Ulanzi tripod with a built-in battery is used to power up the unit (and hand-hold the device).</li> <li>… among other materials you can check out <a href="https://github.com/JanuszBedkowski/mandeye_controller/blob/main/doc/BIM.md">here</a>.</li> </ul> <p>The main selection criteria for the provided materials is to keep the device (relatively) low cost, in this case less than 1000 euros.</p> <h2 id="the-open-software">The open software</h2> <p>The open softwareware is all collected under the <a href="https://github.com/MapsHD/HDMapping">HDMapping project</a>. Some (quick) interesting notes about this project:</p> <ul> <li>In Windows, the deployment is quite off-the-shell. You just need to download and execute the binaries without any installation process.</li> <li>It has been developed with the pure objective of collecting ground-truth datasets. To that aim, it allows manual drift correction and algorithmic-based loop closing for data optimization.</li> </ul> <h1 id="bof-accelerating-robot-learning-at-scale-in-simulation-hatched_chick">BoF: Accelerating robot learning at scale in simulation :hatched_chick:</h1> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/bof_nvidia.png?raw=true" alt="alt text"/></p> <p>Aside from the workshops, day 1 also featured a series of “Bird of Feather” sessions. Birds of a Feather (BoF) sessions are informal gatherings at a pre-arranged time and place by individuals with a common interest in a topic. Markus Wuensch, head of the Robotics Ecosystem at NVIDIA, hosted this session and proposed the following bullet points:</p> <ul> <li>Intro</li> <li>State of your development</li> <li>Products/use cases</li> <li>ROS in robot learning</li> <li>Tools</li> <li>Challenges</li> <li>Wishlist</li> <li>Future</li> </ul> <p>All things said, this was oriented to get ideas and feedback from the attendants about using NVIDIA hardware for simulators in general, and NVIDIA’s simulator Isaac Sim in particular.</p> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/roscon/bof_nvidia_1.png?raw=true" alt="alt text"/></p> <p>The BoF session was joined by people with very different backgrounds (manipulation, planning, navigation…) with a vast majority of us applying computer vision to these problems. Therefore, most use simulators with realistic renderings: Unreal Engine, Unity, or Open3D (more on this one later), were the most mentioned. Gazebo is the primary ROS simulator, which, despite its outstanding capabilities for robot simulation, falls short when it comes to visual renderings. Surprisingly, very few people in the room were using Isaac Sim. People commented on the high computational requirements and the difficulty of deploying it. People in underwater robotics commented on the need for underwater simulation :wink:</p> <p>Most people utilize simulators for training models that will be deployed in real robots later. Markus concurred on this and mentioned that NVIDIA aims for what they call the “three body computation”, divided into train, simulation, and run. Their aimed solution consists of training in simulation and deploying the trained models at runtime, which is the aim for most of the attendees.</p> <p>We discussed <strong>limitations in simulators</strong>. Beyond the limitations that I mentions earlier, when it comes to computer vision, <strong>the repetition of texture patterns</strong> can be troublesome. If, for example, you’re using those texture renderings in a visual localization algorithms, the detection of those repeated patterns can mislead the localization estimate. One of the attendees mentioned the use of <strong>procedural generation of textures</strong> to address this problem.</p> <p>My main take-home message from this discussion is a confirmation of the lack of consensus regarding simulation. Most of us take whichever simulation in the literature looks more convenient and adapt it to our specific needs. For this purpose, the preferred simulators are open-source and have a relatively simple API (which is not the case for Isaac Sim).</p> <p>This raises a few questions: does having a simulator that fulfills everyone’s needs make sense? If so, how could that be possible? Is there any billionaire in the room willing to fund such an open-source initiative?</p>]]></content><author><name></name></author><category term="cpp"/><category term="lidar"/><category term="ROS"/><category term="conference"/><category term="roscon"/><summary type="html"><![CDATA[My roscon digest on the first day]]></summary></entry><entry><title type="html">Setting a Jetson AGX Orin for robotics development (III) - event-based SLAM</title><link href="https://olayasturias.github.io/blog/2024/the-cpp-diaries-3/" rel="alternate" type="text/html" title="Setting a Jetson AGX Orin for robotics development (III) - event-based SLAM"/><published>2024-01-04T06:15:00+00:00</published><updated>2024-01-04T06:15:00+00:00</updated><id>https://olayasturias.github.io/blog/2024/the-cpp-diaries-3</id><content type="html" xml:base="https://olayasturias.github.io/blog/2024/the-cpp-diaries-3/"><![CDATA[<p>Welcome to the third post on setting up a Jetson AGX Orin for robotics development! Today, we will focus on setting up a set of state-of-the-art methods for event-based localization. The structure of the post goes as follows:</p> <ul> <li><a href="#1-esvo-extension">1. ESVO-Extension</a> <ul> <li><a href="#11-prerequisites">1.1 Prerequisites</a></li> <li><a href="#12-installation">1.2 Installation</a></li> </ul> </li> <li><a href="#2-eventemin">2. EventEMin</a> <ul> <li><a href="#21-dependencies">2.1 Dependencies</a></li> <li><a href="#22-installation">2.2 Installation</a></li> </ul> </li> </ul> <blockquote> <p><strong>Reminder:</strong> For this project I will be using the <strong>JETSON AGX ORIN DEVELOPER KIT</strong>. Some things to take into account about this board:</p> <ul> <li>It is an ARM64 architecture.</li> <li>It has Ubuntu 20.04 installed</li> <li>It comes with the Nvidia Jetpack 5.1.2</li> <li>It has ROS Noetic</li> </ul> </blockquote> <h1 id="1-esvo-extension">1. ESVO-Extension</h1> <p>This installation has been successfully tested in Ubuntu 20.04 with ROS Noetic, OpenCV 4.5.4 and Eigen 3.4.</p> <h2 id="11-prerequisites">1.1 Prerequisites</h2> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install libqhull-dev python3-pycryptodome
pip3 install python-gnupg
</code></pre></div></div> <ul> <li><strong>FLANN library</strong> == 1.7.0. Clone and compile it in your favourite folder: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/flann-lib/flann.git
  cd flann
  mkdir build &amp;&amp; cd build
  cmake ..
  make -j$(nproc)
  sudo make install
</code></pre></div> </div> </li> <li><strong>Bullet library</strong> . Clone and compile it in your favourite folder: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/bulletphysics/bullet3.git
  cd bullet3
  mkdir build &amp;&amp; cd build
  cmake ..
  make -j$(nproc)
  sudo make install
</code></pre></div> </div> </li> <li><strong>PCL library</strong> v. 1.10. Follow the installation instructions <a href="https://pcl.readthedocs.io/projects/tutorials/en/latest/compiling_pcl_posix.html">here</a>. When building, ensure that it is compiled with QHull as follows: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  cmake -DWITH_QHULL=TRUE ..
</code></pre></div> </div> </li> <li><strong>ROS Noetic dependencies</strong>. I will install this in my <code class="language-plaintext highlighter-rouge">ros_noetic_ws</code>, therefore, all the comands for each package below are preceded by a <code class="language-plaintext highlighter-rouge">cd ros_noetic_ws/src</code>. <ul> <li><strong>vision_opencv</strong> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/ros-perception/vision_opencv.git
  cd vision_opencv &amp;&amp; git checkout noetic
  cd ../..
</code></pre></div> </div> </li> <li><strong>pcl_msgs</strong> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/ros-perception/pcl_msgs.git
  cd pcl_msgs &amp;&amp; git checkout noetic-devel
</code></pre></div> </div> </li> <li><strong>geometry2</strong> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/ros/geometry2.git
  cd geometry2 &amp;&amp; git checkout noetic-devel
</code></pre></div> </div> </li> <li><strong>perception_pcl</strong> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/ros-perception/perception_pcl.git 
  cd perception_pcl &amp;&amp; git checkout melodic-devel
</code></pre></div> </div> </li> </ul> </li> <li><strong>Other ROS dependencies</strong>. These are the dependencies that I will install in my <code class="language-plaintext highlighter-rouge">catkin_ws</code>. Similarly, all the comands for each package below are preceded by a <code class="language-plaintext highlighter-rouge">cd catkin_ws/src</code>. <ul> <li><strong>cnpy_catkin</strong> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/uzh-rpg/cnpy_catkin.git
</code></pre></div> </div> </li> </ul> </li> </ul> <h2 id="12-installation">1.2 Installation</h2> <p><code class="language-plaintext highlighter-rouge">ESVO_extension</code> is a ROS package that I will intall in my <code class="language-plaintext highlighter-rouge">catkin_ws</code> workspace.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd catkin_ws/src
git clone https://github.com/olayasturias/ESVO_extension.git
cd ..
catkin build esvo_time_surface esvo_core
</code></pre></div></div> <p>For installing it and other dependencies, follow the installation instructions <a href="https://github.com/olayasturias/ESVO_extension">in the repo</a>.</p> <h1 id="2-eventemin">2. EventEMin</h1> <h2 id="21-dependencies">2.1 Dependencies</h2> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt install libomp-dev
sudo apt-get install libgsl-dev
</code></pre></div></div> <h2 id="22-installation">2.2 Installation</h2> <p>This worked straight away. The repo claims that it needs an Eigen3 version lower (but not including) 3.4. However, I haven’t had any trouble with Eigen 3.4 so far!</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd ~/catkin_ws/src
git clone --recurse-submodules https://github.com/ImperialCollegeLondon/event_emin_ros.git
cd ..
catkin build event_emin_ros

</code></pre></div></div> <h1 id="3-evo">3. EVO</h1> <h1 id="31-dependencies">3.1 Dependencies</h1> <p>The command ./rpg_dvs_evo_open/install.sh install the dependencies. However, some need to be installed manually (only applicable for ARM architectures though):</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install libfftw3-dev

cd ~/catkin_ws/src
git clone https://github.com/uzh-rpg/fast_neon.git
git checkout test/aarch64-compilation 
cd ../..
catkin build fast
</code></pre></div></div> <h1 id="32-installation">3.2 Installation</h1> <p>cd src/ &amp;&amp; https://github.com/uzh-rpg/rpg_dvs_evo_open.git</p>]]></content><author><name></name></author><category term="phdstuff"/><category term="cpp"/><summary type="html"><![CDATA[notebook for cpp project III.]]></summary></entry><entry><title type="html">Setting a Jetson AGX Orin for robotics development (II) - Inivation’s event camera</title><link href="https://olayasturias.github.io/blog/2024/the-cpp-diaries-2/" rel="alternate" type="text/html" title="Setting a Jetson AGX Orin for robotics development (II) - Inivation’s event camera"/><published>2024-01-02T06:15:00+00:00</published><updated>2024-01-02T06:15:00+00:00</updated><id>https://olayasturias.github.io/blog/2024/the-cpp-diaries-2</id><content type="html" xml:base="https://olayasturias.github.io/blog/2024/the-cpp-diaries-2/"><![CDATA[<p>Welcome to the second post on setting up a Jetson AGX Orin for robotics development! Today, we will focus on setting up all the required drivers and dependencies for Inivation’s event camera, including the ROS installation and ROS packages. The structure for this post goes as follows:</p> <ul> <li><a href="#1-prerequisites">1. Prerequisites</a></li> <li><a href="#2-setting-up-the-camera-driver">2. Setting up the camera driver</a></li> <li><a href="#3-setting-up-ros-noetic">3. Setting up ROS Noetic</a> <ul> <li><a href="#31-installing-bootstrap-dependencies">3.1 Installing bootstrap dependencies</a></li> <li><a href="#32-initializing-rosdep">3.2 Initializing rosdep</a></li> <li><a href="#33-installation">3.3 Installation</a> <ul> <li><a href="#331-create-a-catkin-workspace">3.3.1 Create a catkin workspace</a></li> <li><a href="#332-resolve-dependencies">3.3.2 Resolve dependencies</a></li> <li><a href="#333-building-the-catkin-workspace">3.3.3 Building the catkin workspace</a></li> </ul> </li> </ul> </li> <li><a href="#4-setting-up-the-ros-camera-driver">4. Setting up the ROS camera driver</a> <ul> <li><a href="#41-some-extra-dependencies">4.1 Some extra dependencies</a></li> <li><a href="#42-setting-up-the-workspace">4.2 Setting up the workspace</a></li> <li><a href="#43-cloning-and-building-dv-ros">4.3 Cloning and building dv-ros</a></li> </ul> </li> </ul> <p>Once you’ve gone through all these steps, you will be ready to run the iniVation’s event camera on your board.</p> <blockquote> <p><strong>Reminder:</strong> For this project I will be using the <strong>JETSON AGX ORIN DEVELOPER KIT</strong>. Some things to take into account about this board:</p> <ul> <li>It is an ARM64 architecture.</li> <li>It has Ubuntu 20.04 installed</li> <li>It comes with the Nvidia Jetpack 5.1.2</li> </ul> </blockquote> <h1 id="1-prerequisites">1. Prerequisites</h1> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt install liblz4-dev libzstd-dev libgoogle-perftools-dev ninja-build python3-pip
</code></pre></div></div> <ul> <li><strong>Compilers</strong> <ul> <li><strong>GCC and G++ compiler</strong> should be version 10.0 as required by the inivation driver. Check which version you have set up by default as: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  gcc -v
  g++ -v
</code></pre></div> </div> <p>For me it is:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
  g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
</code></pre></div> </div> <p>Therefore, we first need to install gcc and g++ 10.0:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt install gcc-10 g++-10
</code></pre></div> </div> <p>And then set it as the default compiler:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10
  sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
</code></pre></div> </div> </li> </ul> </li> <li><strong>Boost library</strong> &gt;= 1.76. Check which version you have installed as: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  apt list --installed | grep libboost
</code></pre></div> </div> <p>If your version is less than 1.76, you can install a newer version as follows:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo add-apt-repository ppa:mhier/libboost-latest
  sudo apt update
</code></pre></div> </div> <p>And then (e.g. for version 1.83):</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt install libboost1.83-all-dev
</code></pre></div> </div> <p>However, before deciding which version to install, I recommend you to read section <a href="#3-setting-up-ros-noetic">3. Setting up ROS Noetic</a> in this post.</p> </li> <li><strong>OpenSSL</strong> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt install libssl-dev
</code></pre></div> </div> </li> <li> <p><strong>Eigen3</strong>. In Ubuntu 20.4, the eigen3 version installed by the apt is 3.3.4. To install the required version 3.4, follow the instructions depicted <a href="https://olayasturias.github.io/ros/slam/survey/2022/03/01/slam-surveying-install.html">here</a>.</p> </li> <li><strong>fmt</strong>. Similarly, the apt manager installs an older version of the fmt library. To install the latest release: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  wget https://github.com/fmtlib/fmt/releases/download/10.1.0/fmt-10.1.0.zip
  unzip fmt-10.1.0.zip
  cd fmt-10.1.0
  mkdir build &amp;&amp; cd build
  cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON ..
  make
  sudo make install
</code></pre></div> </div> </li> <li> <p><strong>OpenCV additional modules</strong>. The default installation is missing some OpenCV modules. You can follow the instructions from <a href="https://olayasturias.github.io/phdstuff/cpp/2023/06/05/the-cpp-diaries.html">my previous post</a> to install all required modules.</p> </li> <li><strong>(Optional) SDL</strong>, with installation instructions <a href="https://wiki.libsdl.org/SDL2/Installation">here</a>.</li> <li><strong>(Optional) Aravis</strong>, with installation instructions <a href="https://aravisproject.github.io/aravis/building.html">here</a>. <ul> <li>In Ubuntu 20.04, the meson version installed by the apt is too old for this build. Therefore, you need to install it manually: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/mesonbuild/meson
  cd meson
  python3 -m pip install -I meson
  python3 -m pip install ninja
</code></pre></div> </div> </li> <li>When running <code class="language-plaintext highlighter-rouge">ninja install</code> for installing Aravis, you might get the error <code class="language-plaintext highlighter-rouge">ModuleNotFoundError: no module named 'mesonbuild'</code>. This is due to the installation path for the meson library. You can fix it by adding it to the <code class="language-plaintext highlighter-rouge">PYTHONPATH</code>: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  export PYTHONPATH=$(python3 -m site --user-site)
</code></pre></div> </div> <p>and then, running the ninja install command as:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo -E ninja install
</code></pre></div> </div> </li> </ul> </li> </ul> <h1 id="2-setting-up-the-camera-driver">2. Setting up the camera driver</h1> <p>Inivation provides instructions for the Ubuntu packages (for Ubuntu 20.04 in my case) <a href="https://inivation.gitlab.io/dv/dv-docs/docs/getting-started.html">on their official website</a>. However, the apt installation did not work: The Orin comes with CuDNN 8.0, which requires OpenCV &gt;= 4.4, and the apt dv-runtime-dev installation is looking for OpenCV 4.2. Therefore, we’ve installed the libraries from source. For that, we must download the DV repos in our favorite folder (for me, <code class="language-plaintext highlighter-rouge">$HOME/dev</code>). Let’s go one by one:</p> <ul> <li><a href="https://gitlab.com/inivation/dv/libcaer">libcaer</a>: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://gitlab.com/inivation/dv/libcaer
  cd libcaer
  cmake -DCMAKE_INSTALL_PREFIX=/usr .
  make
  sudo make install
</code></pre></div> </div> </li> <li><a href="https://gitlab.com/inivation/dv/dv-processing">dv-processing</a>: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://gitlab.com/inivation/dv/dv-processing
  cd dv-processing
  cmake -DCMAKE_INSTALL_PREFIX=/usr .
  make
  sudo make install
</code></pre></div> </div> </li> <li><a href="https://gitlab.com/inivation/dv/dv-runtime">dv-runtime</a>: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://gitlab.com/inivation/dv/dv-runtime
  cd dv-runtime
  cmake -DCMAKE_INSTALL_PREFIX=/usr DVR_ENABLE_PROFILER=ON .
  make
  sudo make install
</code></pre></div> </div> </li> </ul> <h1 id="3-setting-up-ros-noetic">3. Setting up ROS Noetic</h1> <p>Fighting demons or being the demon? Yes, we’re setting up ROS1 here. It is still the primary OS for event cameras. This section needs a bit of storytelling: <em>This is not my first iteration of installing all these libraries in the Orin.</em> In a previous iteration, I installed all the libraries (OpenCV, ROS, etc.), and the installation of the iniVation drivers would fail. I blamed OpenCV for these issues (don’t look at me like that, OpenCV; we’ve been through this before). But I think now that the problems actually came from ROS and its dependencies!</p> <p>It turns out that ROS Noetic uses a version of Boost older than the one that the inivation driver needs. Because I installed the iniVation driver first, the compilation went down smoothly. However, now I can’t install ROS Noetic with <code class="language-plaintext highlighter-rouge">apt</code>. We will need to install it from source. Damm! Seems like we’re being the demons <em>and</em> fighting demons after all.</p> <blockquote> <p>Note for future self: <strong>maybe</strong> if instead of Boost 1.83 I would have installed the minimum required version by inivation, that is, Boost 1.76, then <strong>maybe</strong> <code class="language-plaintext highlighter-rouge">sudo apt install ros-noetic-desktop-full</code> would have worked? It does not seem likely because I tried running that command with <code class="language-plaintext highlighter-rouge">aptitude</code>, and the only option it gave for Boost was 1.71. But this could be something worth a try.</p> </blockquote> <p>Now, I will put here the instructions for installing ROS Noetic from source. They’re slightly modified with respect to <a href="http://wiki.ros.org/noetic/Installation/Source">the original instructions</a>. For convenience, I will follow the same structure.</p> <h2 id="31-installing-bootstrap-dependencies">3.1 Installing bootstrap dependencies</h2> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt-get install python3-rosdep python3-rosinstall-generator python3-vcstools python3-vcstool build-essential
</code></pre></div></div> <h2 id="32-initializing-rosdep">3.2 Initializing rosdep</h2> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo rosdep init
rosdep update
</code></pre></div></div> <h2 id="33-installation">3.3 Installation</h2> <h3 id="331-create-a-catkin-workspace">3.3.1 Create a catkin workspace</h3> <p>I will call my workspace <code class="language-plaintext highlighter-rouge">ros_noetic_ws</code>. You can give it whichever name you want.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir ~/ros_noetic_ws
cd ~/ros_noetic_ws
</code></pre></div></div> <p>Download <em>all</em> the ROS packages into the source:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rosinstall_generator desktop --rosdistro noetic --deps --tar &gt; noetic-desktop.rosinstall
mkdir ./src
vcs import --input noetic-desktop.rosinstall ./src
</code></pre></div></div> <h3 id="332-resolve-dependencies">3.3.2 Resolve dependencies</h3> <p>I’m putting this command here, but it gave me an error. It gave me the same error as for the <code class="language-plaintext highlighter-rouge">sudo apt install ros-noetic-desktop-full</code>: unresolved dependencies. Basically, I had to manually install all the dependencies myself. A bit annoying but not too bad.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> rosdep install --from-paths ./src --ignore-packages-from-source --rosdistro noetic -y
</code></pre></div></div> <p>The dependencies I had to install are:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt install -y libassimp-dev liburdfdom-dev liblog4cxx-dev libgpgme-dev libbz2-dev libgtest-dev sip-dev pyqt5-dev python-sip-dev pyqt5-dev-tools python3-pyqt5 libtinyxml2-dev libtinyxml-dev libpoco-dev  libconsole-bridge-dev python3-empy
</code></pre></div></div> <p>Another dependency available in <code class="language-plaintext highlighter-rouge">apt</code> but that needs to be installed manually due to the unresolved dependencies with Boost is <code class="language-plaintext highlighter-rouge">libogre</code>, with building instructions indicated <a href="https://ogrecave.github.io/ogre/api/13/building-ogre.html">here</a>.</p> <ul> <li><strong>pugixml</strong> (required by Ogre): <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/zeux/pugixml.git
  cd pugixml
  mkdir build &amp;&amp; cd build
  cmake -DCMAKE_INSTALL_PREFIX=/usr DVR_ENABLE_PROFILER=ON ..
  make &amp;&amp; sudo make install
</code></pre></div> </div> </li> <li><strong>Ogre v1.12.2</strong>, as it is the latest version supported by ROS Noetic. First, install the dependencies: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt install libcppunit-dev
</code></pre></div> </div> <p>Then proceed to the installation itself:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/OGRECave/ogre.git
  cd ogre
  git checkout v1.12.2  # Replace with the version you need
</code></pre></div> </div> <blockquote> <p><strong>NOTE:</strong> If you get compilation issues with Ogre, you can proceed without installing the ROS packages that depend on it. Those are <code class="language-plaintext highlighter-rouge">rviz</code> and all the packages depending on <code class="language-plaintext highlighter-rouge">rviz</code>. This means that you will have to run the catkin_make_isolated command with the flag: <code class="language-plaintext highlighter-rouge">--ignore-pkg rviz rviz_plugin_tutorials rviz_python_tutorial librviz_tutorial rqt_rviz</code></p> </blockquote> </li> <li><strong>image_common ROS stack</strong>: for some reason, the image_common stack downloaded by the previous steps does not include all the packages that we will need. You can manually download it into the workspace as: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  cd ~/ros_noetic_ws/src
  git rm -rf image_common &amp;&amp; git clone https://github.com/ros-perception/image_common.git
  cd image_common &amp;&amp; git checkout noetic-devel
</code></pre></div> </div> </li> </ul> <h3 id="333-building-the-catkin-workspace">3.3.3 Building the catkin workspace</h3> <p>This command is slightly different from the original instructions. The difference lies in the flag <code class="language-plaintext highlighter-rouge">-DCMAKE_CXX_FLAGS=-DBOOST_TIMER_ENABLE_DEPRECATED.</code> Without it, the compilation gives an error due to a deprecated header:</p> <blockquote> <p>/usr/include/boost/progress.hpp:23:3: error: #error This header is deprecated and will be removed. (You can define BOOST_TIMER_ENABLE_DEPRECATED to suppress this error.)</p> </blockquote> <p>What the flag does is ignore the error and resume the compilation:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_CXX_FLAGS=-DBOOST_TIMER_ENABLE_DEPRECATED
</code></pre></div></div> <p>Now, you should have successfully compiled all the ROS Noetic packages! You can source the workspace by adding the following line to the end of the <code class="language-plaintext highlighter-rouge">~/.bashrc</code>:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>source ~/ros_catkin_ws/install_isolated/setup.bash
</code></pre></div></div> <h1 id="4-setting-up-the-ros-camera-driver">4. Setting up the ROS camera driver</h1> <p>We finally have all the external libraries ready to run the ROS driver for the iniVation camera. Let’s install it!</p> <h2 id="41-some-extra-dependencies">4.1 Some extra dependencies</h2> <p>After following the previous instructions, you might still miss the following dependencies:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip3 install defusedxml netifaces
</code></pre></div></div> <h2 id="42-setting-up-the-workspace">4.2 Setting up the workspace</h2> <p>Let’s set up a separate workspace for ROS development. Doing so is as simple as creating a folder containing a source workspace and building it with catkin:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir -p catkin_ws/src 
cd catkin_ws
catkin build
</code></pre></div></div> <h2 id="43-cloning-and-building-dv-ros">4.3 Cloning and building dv-ros</h2> <p>The ROS package that contains the code to run the iniVation camera is dv-ros. The original code is in <a href="https://gitlab.com/inivation/dv/dv-ros">this repo</a>. However, we will use <a href="https://github.com/olayasturias/dv-ros">this fork</a> of the repo. This is because, as of today (Jan 24), the original code is not compatible with <code class="language-plaintext highlighter-rouge">fmt10</code> (although that’s not the case for the camera drivers).</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd catkin_ws/src 
git clone https://github.com/olayasturias/dv-ros
cd ..
catkin build --cmake-args -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10
</code></pre></div></div> <p>If the compilation is successful, test that the driver is working:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>source devel/setup.bash
roslaunch dv_ros_visualization event_visualization.launch
</code></pre></div></div>]]></content><author><name></name></author><category term="phdstuff"/><category term="cpp"/><summary type="html"><![CDATA[notebook for cpp project I.]]></summary></entry><entry><title type="html">My ICRA 2023 digest</title><link href="https://olayasturias.github.io/blog/2023/my-icra-digest/" rel="alternate" type="text/html" title="My ICRA 2023 digest"/><published>2023-06-05T06:15:00+00:00</published><updated>2023-06-05T06:15:00+00:00</updated><id>https://olayasturias.github.io/blog/2023/my-icra-digest</id><content type="html" xml:base="https://olayasturias.github.io/blog/2023/my-icra-digest/"><![CDATA[<h1 id="mucho-texto-table-of-contents">Mucho texto: Table of contents</h1> <ul> <li><a href="#day-1-workshops-and-tutorials">Day 1. Workshops and Tutorials</a> <ul> <li><a href="#w1-distributed-graphs-workshop">W.1. Distributed graphs workshop</a></li> <li><a href="#w2-icra-2023-workshop-on-unconventional-spatial-representations-opportunities-for-robotics">W.2. ICRA 2023 Workshop on Unconventional spatial representations: Opportunities for robotics</a></li> </ul> </li> <li><a href="#day-3-orals-and-posters">Day 3. Orals and Posters</a></li> </ul> <h1 id="day-1-workshops-and-tutorials">Day 1. Workshops and Tutorials</h1> <h2 id="w1-distributed-graphs-workshop">W.1. Distributed graphs workshop</h2> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/icra23/wsgraph.PNG?raw=true" alt=""/></p> <p>The chair for this workshop was <a href="https://www.doc.ic.ac.uk/~ajd/">Andrew Davison</a>, who did a very short but interesting presentation as introduction to the workshop. He definitely left me with the wish of listening more from him, but two things he mentioned particularly catched my interest:</p> <ol> <li>The importance of graphs (well, yes, of course, is a workshop about graphs), and how now that the software aiming for graph structures is raising, we need <strong>hardware</strong> that is particularly designed for graphs: the Graphcore Intelligence Processing Unit (IPU). When he talked about it, it sounded a lot like something I used during my bachelors: the FPGAs. Basically, a computer specifically designed for parallel computing. I did a quick read online, and it seems like both are optimized for parallel computing, with the Graphcore being specially designed for (surprise surprise) graph structures, and the FPGA being more flexible for any kind of parallelized computing that you need. <a href="https://jonathan-hui.medium.com/ai-chips-technology-trends-landscape-gpu-tpu-fpga-startups-4798bfad78a2">This post in Medium</a> does quite a throughout analysis.</li> <li>FutureMapping: factorized computation for spatial AI. A framework that parallelizes computing between the nodes in a graph. Then, those nodes randomly communicate with each other in order to optimize computational resources. Here is <a href="https://arxiv.org/abs/1910.14139">a link to the paper</a> and <a href="https://gaussianbp.github.io/">a link to an online tutorial</a>.</li> </ol> <h3 id="w1a-a-new-factor-graph-lens-on-clustered-belief-propagation">W.1.A. A new factor-graph lens on (Clustered) Belief Propagation</h3> <h4 id="by-frank-dellaert">by Frank Dellaert</h4> <p><a href="https://cseweb.ucsd.edu/~viscomp/projects/LF/papers/ECCV20/nerf/website_renders/depth_reflower.mp4" title="NeRFs"><img src="https://dellaert.github.io/images/NeRF/NeRF-setup.png" width="50%"/></a></p> <p>Before getting into factor graphs, he quickly mentioned his recent work in NeRFs. See a post about it <a href="https://dellaert.github.io/NeRF/">here</a>. He also advertised a free book with jupyter notebooks with different aspects about robotics available <a href="http://www.roboticsbook.org/intro.html">here</a>. Definitely worth looking into!</p> <h4 id="brief-review-of-factor-graphs"><strong>Brief review of factor graphs</strong></h4> <p>Frank Dellaert’s work on factor graphs is very well known and available on a <a href="https://www.cs.cmu.edu/~kaess/pub/Dellaert17fnt.pdf">free book</a>. At the begginning of the talk, he did a quick review on the theory within that book.</p> <p>My quick notes:</p> <blockquote> <p>The use of factor graphs allows Sparse matrix factorization. Then we can apply QR factorization on Factor Graphs. The Bayes tree is a powerful graphical model that enables incremental Smoothing and Mapping (iSAM). An example on iSAM is available <a href="https://gtsam.org/tutorials/intro.html">here</a> at section 7 and <a href="https://gtbook.github.io/gtsam-examples/RangeISAMExample_plaza2.html">here</a>.</p> </blockquote> <h4 id="gibbs-sampling-via-elimination"><strong>Gibbs sampling via elimination</strong></h4> <p>This procedure was explained with code examples available <a href="https://gtbook.github.io/gtsam-examples/PlanarSLAMExample_sampling.html">here</a>.</p> <blockquote> <p>Take a nonlinear factor graph, for example, one in which the measurements come from a bearing sensor. When obtaining joint Marginals of graph variables results are “wrong” because the problem is nonlinear, and the result is a Laplace approximation. We can get better results by Gibbs sampling. First pick Markov blanket. Keep sucesion of samples given the current state of the other variables (elimination). Instead of Laplace approximation, use it as Metropolis proposal.</p> </blockquote> <h4 id="a-different-take-on-loopy-bp"><strong>A different take on loopy BP</strong></h4> <p>Similarly, code examples available <a href="https://gtbook.github.io/gtsam-examples/PlanarSLAMExample_lbp.html">here</a>.</p> <blockquote> <p>Belief propagation: variation approximation. Approximate true posterior with simpler density. Pretend true posterior is multiplication of factors. Converges to true mean but covariances are overconfident. Loopy SAM (2007): Gauss-Seidel propagation. Opposite to Gibbs Sampling: eliminate separator last.</p> </blockquote> <h4 id="clustered-belief-propagation"><strong>Clustered belief propagation</strong></h4> <p>More <a href="https://gtbook.github.io/gtsam-examples/GaussianMRFExample_cbp.html">code examples</a>.</p> <blockquote> <p>Identify clusters and for a variational approximation at the cluster level – rather than individual belief factors, have Bayes nets/trees as variational components. Basically cluster the graph. Uses all sparsity available in the system. Converges much faster because explores inherent structure of the domain.</p> </blockquote> <h3 id="w2-icra-2023-workshop-on-unconventional-spatial-representations-opportunities-for-robotics">W.2. ICRA 2023 Workshop on Unconventional spatial representations: Opportunities for robotics</h3> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/icra23/usr.PNG?raw=true" alt=""/></p> <p>I only attended one talk in this workshop. It seemed to be about using unconventional sensors for perception tasks in general, for what I could see on the posters. Unfortunately, the posters are not available online and I didn’t take photos of them.</p> <h4 id="w2a-understanding-and-representing-the-sea-environment-for-autonomous-ship-navigation">W.2.A. Understanding and Representing the Sea environment for Autonomous Ship Navigation</h4> <h5 id="by-hyun-taek-choi">by Hyun-Taek Choi</h5> <p>As a professor in the Korea Research Institute of Ships and Ocean Engineering, he presented quite some interesting field words in that context. I noted down this one, available as a paper <a href="https://doi.org/10.1109/JSEN.2023.3259471">here</a>:</p> <blockquote> <p>“Marine Object Segmentation and Tracking by Learning Marine Radar Images for Autonomous Surface Vehicles”. The title is self-explanatory. Some capabilities they claim for they network are</p> <ul> <li>Noise reduction (because radar is extremely noisy)</li> <li>Detecting Small object and fast moving objects.</li> </ul> </blockquote> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/icra23/dpsenet.jpg?raw=true" alt=""/></p> <h3 id="w3-workshop-on-effective-representations-abstractions-and-priors-for-robot-learning-rap4robots">W.3. Workshop on effective Representations, Abstractions, and Priors for Robot Learning (RAP4Robots)</h3> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/icra23/rap4robots.PNG?raw=true" alt=""/> When I joined this workshop there was a Pannel session taking part, with professors discussing around the question: <em>“Do better representation lead to better generalization?”</em>. E.g., about the possibility of using an alternative to Euclidean maps and object poses, and about applying representation learning. There was no clear conclusion on the question, which I think is a good sign for this being an open research question.</p> <h4 id="w3a-a-trilogy-of-priors-the-vision-the-design-and-the-data">W.3.A. A trilogy of priors: the vision the design and the data</h4> <h5 id="by-edward-johns">by Edward Johns</h5> <p>Edward introduced to us a series of very works within his field of research, which is robot manipulation. <a href="https://www.robot-learning.uk/dall-e-bot">This one</a> called my attention, since they use generative models (more concretely, DALL-E) to generate different arrangements for the objects in the image.</p> <h3 id="w4-pretraining-for-robotics-pt4r">W.4. Pretraining for Robotics (PT4R)</h3> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/icra23/pt4r.PNG?raw=true" alt=""/></p> <h4 id="w4a-where-are-we-in-the-search-for-an-artificial-visual-cortex-for-embodied-intelligence">W.4.A. Where are we in the search for an Artificial Visual Cortex for Embodied Intelligence?</h4> <h5 id="by-franziska-meier">by Franziska Meier</h5> <p>From the paper under the same title which can be found <a href="https://openreview.net/pdf?id=MhTRXNv7Pc">here</a></p> <h1 id="day-3-orals-and-posters">Day 3. Orals and Posters</h1> <h2 id="o1-award-finalists">O.1. Award Finalists</h2> <h3 id="o11-graph-neural-networks-for-multi-robot-active-information-acquisition">O.1.1. Graph Neural Networks for Multi-Robot Active Information Acquisition</h3> <h5 id="by-mariliza-tzes">by Mariliza Tzes</h5> <object data="assets/images/icra23/gnn-award1.pdf" width="600" height="600" type="application/pdf"></object> <blockquote> <ul> <li>Active information acquisition</li> <li>Team of drones – no dinamics – they have sensors. The dynamics are the hidden state.</li> <li>Planning horizon – informative path</li> <li>They try to reach scalability, computational efficiency and optimality with I-GBNet.</li> <li>Robots exchange info with neighbors, forming a communications graph. Network graph contains info about robot state – fed into I-GBNet to be updated. For each node, predict control input for robot.</li> <li>Message passing layer: <ul> <li>Robot grid map.</li> <li>Message passing aggregates robots position.</li> <li>Each robot has its own estimate about hidden state that is propagated through graph.</li> <li>Bayes filter to fuse measurements.</li> <li>Obtain occupancy grid of environment.</li> <li>ResNet blocks to encode the paths within the grid representation.</li> <li>Then predict control input.</li> </ul> </li> </ul> </blockquote> <h2 id="o2-localization-i">O.2. Localization I</h2> <h3 id="o21-robust-visual-localization-of-a-uav-over-a-pipe-rack-based-on-the-lie-group-se3">O.2.1. Robust Visual Localization of a UAV Over a Pipe-Rack Based on the Lie Group SE(3)</h3> <h4 id="by-jonathan-cacace">by Jonathan Cacace</h4> <blockquote> <p>They fed the CAD model of the pipe rack to estimate the scale. Feature points are projected onto the CAD.</p> </blockquote> <p>The code (MATLAB, simulated) for this work is available <a href="https://github.com/prisma-lab/vs-pipe-rack">here</a></p> <h3 id="o22-homography-based-loss-function-for-camera-pose-regression">O.2.2. Homography-Based Loss Function for Camera Pose Regression</h3> <h4 id="by-clémentin-boittiaux">by Clémentin Boittiaux</h4> <p><img src="https://github.com/clementinboittiaux/homography-loss-function/raw/main/assets/animation.gif" alt="Convergence of the proposed Homography loss"/> Image: Convergence of the proposed Homography loss. From the original repo available <a href="https://github.com/clementinboittiaux/homography-loss-function">here</a>.</p> <blockquote> <ul> <li>SOA: Inertial measuruement based catenary […] underwater vehicles.</li> <li>Same metric as structure from motion</li> <li>Projected to infinity function no differentiable</li> <li>Reprojection loss doesn’t have these problems.</li> </ul> </blockquote> <h2 id="o3-deep-learning-for-visual-perception">O.3. Deep Learning for Visual Perception</h2> <h3 id="o31-object-aware-monocular-depth-prediction-with-instance-convolutions">O.3.1. Object-Aware Monocular Depth Prediction with Instance Convolutions</h3> <h4 id="by-enis-simsar-and-evin-pinar">by Enis Simsar and Evin Pinar</h4> <object data="assets/images/icra23/convdepth.pdf" width="600" height="600" type="application/pdf"></object> <blockquote> <ul> <li>InstanceConv takes segmentation mask into account.</li> <li>Aggregates features coming from same segment. They use superpixels segmentation mask as input.</li> <li>Superpixels can oversegment depending on light intensity, but they can used in “any” scence as opposed to trained methods. MaskCNN etc don’t have guarantee over occlusion boundaries. Superpixels are off-the-shelf, don’t require training.</li> </ul> </blockquote> <p>The code is available <a href="https://github.com/enisimsar/instance-conv">here</a></p> <h3 id="o32-uncertainty-guided-policy-for-active-robotic-3d-reconstruction-using-neural-radiance-fields">O.3.2. Uncertainty guided policy for active robotic 3D reconstruction using Neural Radiance Fields</h3> <h4 id="by-soomin-lee">by Soomin Lee</h4> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/icra23/nerf-uncertainty.PNG?raw=true" alt=""/></p> <blockquote> <ul> <li>Instead of voxels n stuff, using NERFs.</li> <li>They suggest new paradigm: Ray-based volumentric uncertainty. Uncertainty in ray space. <ul> <li>Weighted combination of colors, weight distribution of colors to measure how certain – a color has to have a clear peak?</li> <li>Entropy metric – low entropy clear distribution peak</li> </ul> </li> </ul> </blockquote> <p>This work’s website (not code though) is <a href="https://www.vis.xyz/pub/robotic-3d-scan-with-nerf/">here</a>.</p> <h3 id="o33-detaching-and-boosting-dual-engine-for-scale-invariant-self-supervised-monocular-depth-estimation">O.3.3 Detaching and Boosting: Dual Engine for Scale-Invariant Self-Supervised Monocular Depth Estimation</h3> <h4 id="by-peizhe-jiang">by Peizhe Jiang</h4> <p><img src="https://github.com/olayasturias/olayasturias.github.io/blob/master/assets/images/icra23/scale-invariant-monodepth.PNG?raw=true" alt=""/></p> <blockquote> <ul> <li>Zooming and moving similar effects – they use zooming for data augmentation (extrinsics need to be adapted). Predict same depth for zoomed and unzoomed images (if they are the same).</li> <li>Cross attention to get relationship between objects.</li> </ul> </blockquote> <h1 id="this-post-is-a-work-in-progress">This post is a work in progress…</h1>]]></content><author><name></name></author><category term="phdstuff"/><category term="conference"/><category term="icra"/><summary type="html"><![CDATA[a digest of all things I saw in the conference.]]></summary></entry><entry><title type="html">Setting a Jetson AGX Orin for robotics development (I) - building the basis</title><link href="https://olayasturias.github.io/blog/2023/the-cpp-diaries/" rel="alternate" type="text/html" title="Setting a Jetson AGX Orin for robotics development (I) - building the basis"/><published>2023-06-05T06:15:00+00:00</published><updated>2023-06-05T06:15:00+00:00</updated><id>https://olayasturias.github.io/blog/2023/the-cpp-diaries</id><content type="html" xml:base="https://olayasturias.github.io/blog/2023/the-cpp-diaries/"><![CDATA[ <p>For this project I will be using the <strong>JETSON AGX ORIN DEVELOPER KIT</strong>. Some things to take into account about this board:</p> <ul> <li>It is an ARM64 architecture.</li> </ul> <h1 id="1-setting-up-ubuntu">1. Setting up Ubuntu</h1> <p>Setting up Ubuntu in the Jetson is quite straightforward - or at least, similar to what you do in a normal PC. Here are some of the steps that showed up in the process:</p> <h3 id="app-partition-size">APP Partition size</h3> <p>Just leave the default, which is the maximum accepted size: 59342 MB</p> <h3 id="select-nvpmodel-mode">Select Nvpmodel Mode</h3> <p>What amount of power you want to use MAXN - (Default) which corresponds to maximum</p> <h3 id="install-chromium-browser">Install Chromium Browser</h3> <p>I selected yes but it gave the error “Cannot install chromium snap”, so let’s skip it for now.</p> <p>Another thing we will want to do is to ssh into our board. Good news: it’s already set up and enabled in the board!</p> <h1 id="2-libraries">2. Libraries</h1> <p>Let’s start by checking which library version the board has by default:</p> <ul> <li><strong>Compilers</strong> <ul> <li><strong>GCC compiler</strong>: GCC is the GNU compiler. It includes a compilation of compilers, including…</li> <li><strong>G++ compiler</strong>, which is specifically designed for compiling C++ source code. It is not installed by default, can be installed as: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt update
  sudo apt install g++
</code></pre></div> </div> <p>The version installed should be the same as for gcc:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  gcc -v
  g++ -v
</code></pre></div> </div> <p>Which for me is:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
  g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
</code></pre></div> </div> </li> </ul> </li> <li><strong>C++ version</strong>. The compilers are compatible with several C++ versions, which are usually pointed during compilation using the flag <code class="language-plaintext highlighter-rouge">-std=c++14</code>, <code class="language-plaintext highlighter-rouge">-std=c++17</code>, or <code class="language-plaintext highlighter-rouge">-std=c++20</code>. The c++ version used will be conditioned by the ROS version is compatible with NVidia’s setup.</li> <li><strong>Debugger</strong>: to install the gdb debugger run: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt install build-essential gdb
</code></pre></div> </div> </li> <li><strong>Visual Studio Code</strong>: I will install whichever last version they have (not so important), but taking into account that the binary should be for a arm64 architecture. I followed the setup instructions <a href="https://code.visualstudio.com/docs/cpp/config-linux#_prerequisites">here</a>.</li> <li><strong>Follow NVIDIA’s quickstart</strong> under <a href="https://developer.nvidia.com/embedded/learn/get-started-jetson-agx-orin-devkit">this link</a>.</li> <li><strong>ROS version</strong>: it is not installed, but it is important to note that only ROS Foxy is supported, which is compatible with C++14. You can follow the official installation instructions <a href="https://docs.ros.org/en/foxy/Installation.html">here</a>.</li> <li><strong>CUDA</strong>. The latest CUDA version compatible with the Jetson Orin must be 11.4, as pointed out in <a href="https://forums.developer.nvidia.com/t/cuda-is-not-installed-on-jetson-orin/220661">this forum</a>. If you installed the nvidia-jetpack it should be as simple as: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt update
  sudo apt install cuda-toolkit-11-4
</code></pre></div> </div> <p>And then open your .bashrc file and add the CUDA installation directory to your path as:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  export PATH=/usr/local/cuda-11.4/bin${PATH:+:${PATH}}
  export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64{LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
</code></pre></div> </div> </li> <li><strong>OpenCV (GPU accelerated)</strong>. Actually, the nvidia-jetpack already installs openCV, although not with CUDA. You can check so with the following command: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  dpkg -l | grep libopencv
</code></pre></div> </div> <p>I followed the instructions introduced in <a href="https://www.youtube.com/watch?v=art0-99fFa8">this video</a> pointing to <a href="https://github.com/mdegans/nano_build_opencv/blob/master/build_opencv.sh">this installation file</a>. Some things to note:</p> <ul> <li><code class="language-plaintext highlighter-rouge">-D CUDA_ARCH_BIN=8.7</code> for Orin.</li> <li><code class="language-plaintext highlighter-rouge">-D CUDNN_VERSION='8.0'</code> for the CUDA version used here. Funnily enough, OpenCV would not find my CuDNN, which should have been automatically installed with the nvidia-jetpack. I ran again <code class="language-plaintext highlighter-rouge">sudo apt install nvidia-jetpack</code>, and now it installed some remaining packages (including CuDNN).</li> <li><code class="language-plaintext highlighter-rouge">-D BUILD_opencv_python2=OFF</code> because I’m not interested in using python 2.</li> </ul> <p>Once you’ve set up everything you can install OpenCV automatically as <code class="language-plaintext highlighter-rouge">./build_opencv.sh 4.5.4</code>.</p> </li> </ul> <p><strong>Next:</strong> setting up the driver for the event-camera DVXplorer Mini!</p>]]></content><author><name></name></author><category term="phdstuff"/><category term="cpp"/><summary type="html"><![CDATA[notebook for cpp project I.]]></summary></entry><entry><title type="html">Surveying SLAM algorithms with ROS (I) - Installation</title><link href="https://olayasturias.github.io/blog/2022/slam-surveying-install/" rel="alternate" type="text/html" title="Surveying SLAM algorithms with ROS (I) - Installation"/><published>2022-03-01T06:15:00+00:00</published><updated>2022-03-01T06:15:00+00:00</updated><id>https://olayasturias.github.io/blog/2022/slam-surveying-install</id><content type="html" xml:base="https://olayasturias.github.io/blog/2022/slam-surveying-install/"><![CDATA[<p>In this post we will install different state-of-art SLAM algorithms and test that they work in our computer.</p> <h1 id="1-orb-slam3">1. ORB-SLAM3</h1> <p>ORB-SLAM3 is the first real-time SLAM library able to perform <strong>Visual, Visual-Inertial and Multi-Map SLAM</strong> with <strong>monocular, stereo and RGB-D</strong> cameras, using <strong>pin-hole and fisheye</strong> lens models. In all sensor configurations, ORB-SLAM3 is as robust as the best systems available in the literature, and significantly more accurate.</p> <h2 id="11-installation">1.1 Installation</h2> <p>Install from <a href="https://github.com/olayasturias/ORB_SLAM3">this fork</a> on ORB-SLAM3’s repository.</p> <ul> <li>Some notes in the dependencies: <ul> <li>If OpenCV gives you a version error, modify the CMakeLists to look for the opencv version that you have installed. For example, if you are using ROS Melodic you will have OpenCV 3.2: <code class="language-plaintext highlighter-rouge">find_package(OpenCV 3.2)</code></li> <li>ROS packages for ORB-SLAM3 need rospkg: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt install python-rospkg
</code></pre></div> </div> </li> <li>Install Eigen3 (I am using 3.4.0) <ul> <li>Some dependencies for eigen (optional): <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt install qt5-default libsparsehash-dev libadolc2 libmpfr-dev fftw-dev
</code></pre></div> </div> </li> <li><a href="https://gitlab.com/libeigen/eigen/-/releases/3.4.0">Download</a> the source code in your preferred folder: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz
</code></pre></div> </div> </li> <li>unzip the file: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  tar -zxvf eigen-3.4.0.tar.gz
</code></pre></div> </div> </li> <li>prepare the directory for building <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  cd eigen-3.4.0
  mkdir build
  cd build
</code></pre></div> </div> </li> <li>Build it <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  cmake ..
  make
  sudo make install
</code></pre></div> </div> </li> <li>check which eigen version you have installed with: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  pkg-config --modversion eigen3
</code></pre></div> </div> </li> </ul> </li> <li>Install Pangolin <ul> <li>Install pangolin dependencies <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt-get install -y  libglew-dev libboost-dev libboost-thread-dev  
  libboost-filesystem-dev ffmpeg libavutil-dev libpng-dev &amp;&amp; \
</code></pre></div> </div> <p>Install Pangolin last version in your preferred directory</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/stevenlovegrove/Pangolin.git Pangolin &amp;&amp; cd Pangolin
  mkdir build
  cd build/
  cmake -D CMAKE_BUILD_TYPE=RELEASE \
  -DCPP11_NO_BOOST=1 \
  ../ &amp;&amp; \
  make -j4 &amp;&amp; \
  sudo make install
</code></pre></div> </div> <p>if you experience errors installing Pangolin (may happen in lasts Ubuntu’s distros) try installing it with <a href="https://vcpkg.io/en/getting-started.html">vcpkg</a>.In that case:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/stevenlovegrove/Pangolin.git Pangolin &amp;&amp; cd Pangolin
  mkdir build
  cd build/
  cmake -S . -DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake \
  ../ &amp;&amp; \
  make -j4 &amp;&amp; \
  sudo make install
</code></pre></div> </div> </li> </ul> <p>If ORB-SLAM is giving you trouble with Pangolin, try installing Pangolin v.06.</p> </li> <li> <p>Install OpenCV</p> <ul> <li> <p>Install OpenCV dependencies</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt-get install -y libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev software-properties-common
</code></pre></div> </div> </li> <li> <p>Clone and install opencv</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/Itseez/opencv.git opencv &amp;&amp; \
  git clone https://github.com/Itseez/opencv_contrib.git opencv_contrib

  cd opencv
  mkdir build &amp;&amp; \
  cd build/ &amp;&amp; \
  cmake -D CMAKE_BUILD_TYPE=RELEASE \
  -D BUILD_TIFF=ON \
  -D WITH_CUDA=OFF \
  -D ENABLE_AVX=OFF \
  -D WITH_OPENGL=OFF \
  -D WITH_OPENCL=OFF \
  -D WITH_IPP=OFF \
  -D WITH_TBB=ON \
  -D BUILD_TBB=ON \
  -D WITH_EIGEN=ON \
  -D WITH_V4L=OFF \
  -D WITH_VTK=OFF \
  -D BUILD_TESTS=OFF \
  -D BUILD_PERF_TESTS=OFF \
  -D OPENCV_GENERATE_PKGCONFIG=ON \
  -D OPENCV_EXTRA_MODULES_PATH=&lt;your-path&gt;/opencv_contrib/modules \
  /&lt;your-path&gt;/opencv/ &amp;&amp; \
  make -j4 &amp;&amp; \
  sudo make install 
</code></pre></div> </div> </li> </ul> </li> <li> <p>Install ORB-SLAM third-party modules</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3

  cd /&lt;your-dir&gt;/ORB_SLAM3/ &amp;&amp; \
  chmod +x build.sh &amp;&amp; \
  ./build.sh
</code></pre></div> </div> </li> </ul> <p>Some recent distros for Ubuntu (20 and 22) give compilation errors. Try using C++14 instead of 11 for the compilation by replacing it on the CMakeLists as follows: <code class="language-plaintext highlighter-rouge"> sed -i 's/++11/++14/g' CMakeLists.txt </code></p> <ul> <li> <p>Build for ROS usage</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  cd /&lt;your-dir&gt;/ORB_SLAM3 &amp;&amp; \
  chmod +x build_ros.sh &amp;&amp; \
  ./build_ros.sh
</code></pre></div> </div> </li> </ul> </li> </ul> <h2 id="12-testing">1.2 Testing</h2> <p>We will test that the ORB-SLAM scripts work for us with our webcam.</p> <ul> <li>Install the required package to publish the webcam image as ROS messages: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt install ros-melodic-usb-cam
</code></pre></div> </div> </li> <li>Start a roscore session: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  roscore
</code></pre></div> </div> </li> <li>Run the webcam publisher. Note that we need to remap the default topic from usb_cam because ORB-SLAM3 reads from <code class="language-plaintext highlighter-rouge">/camera/image_raw</code>, but usb_cam is publishing in <code class="language-plaintext highlighter-rouge">/usb_cam/image_raw</code>. <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  rosrun usb_cam usb_cam_node /usb_cam/image_raw:=/camera/image_raw _pixel_format:="yuyv"
</code></pre></div> </div> </li> <li>Run the monocular version of ORB-SLAM3 as: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  rosrun ORB_SLAM3 Mono ORB_SLAM3_PATH/Vocabulary/ORBvoc.txt ORB_SLAM3_PATH/Examples/Monocular/EuRoC.yaml
</code></pre></div> </div> </li> </ul> <p>If everything is working correctly, you should be seeing something like this:</p> <p><img src="https://raw.githubusercontent.com/olayasturias/olayasturias.github.io/master/assets/images/survey-slam-install/orbrun.png" alt=""/></p> <h1 id="2-dso">2. DSO</h1> <h2 id="21-installation">2.1 Installation</h2> <p>DSO has a ROS wrapper, but it first requires that you install DSO:</p> <ul> <li>Install DSO. Follow the instructions from <a href="https://github.com/JakobEngel/dso">the readme in DSO’s repository</a>. <ul> <li>If you get an OpenCV error, modify the CMakeLists to point to your version (mine is 3.2) <code class="language-plaintext highlighter-rouge">find_package(OpenCV 3 QUIET)</code></li> <li>This will compile a library libdso.a, which can be linked from external projects. It will also build a binary dso_dataset, to run DSO on datasets. It is stored in /build/lib.</li> </ul> </li> <li>Install ROS wrapper. Download <a href="https://github.com/olayasturias/dso_ros">the source code</a>. <ul> <li>It will look for your lib file in ${DSO_PATH}/build/lib. We need to specify our DSO_PATH, which is the path to your dso repository folder: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>      export DSO_PATH=YOUR_PATH/dso
</code></pre></div> </div> <p>you chan check if it was correctly set with</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>      echo $DSO_PATH
</code></pre></div> </div> </li> <li>build it with: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>      catkin build dso_ros
</code></pre></div> </div> </li> </ul> </li> </ul> <h2 id="22-testing">2.2 Testing</h2> <p>We will test that the dso_live scripts work for us with our webcam.</p> <ul> <li>If you didn’t do it before, install the required package to publish the webcam image as ROS messages: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  sudo apt install ros-melodic-usb-cam
</code></pre></div> </div> </li> <li>Start a roscore session: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  roscore
</code></pre></div> </div> </li> <li>Run the webcam publisher. Note that usb_cam is publishing in <code class="language-plaintext highlighter-rouge">/usb_cam/image_raw</code>. <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  rosrun usb_cam usb_cam_node /usb_cam/image_raw:=/camera/image_raw _pixel_format:="yuyv"
</code></pre></div> </div> </li> <li>Run dso: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  rosrun dso_ros dso_live image:=/usb_cam/image_raw \
      calib=XXXXX/camera.txt \
      gamma=XXXXX/pcalib.txt \
      vignette=XXXXX/vignette.png \

</code></pre></div> </div> <ul> <li> <p>Note that you need to provide <strong>at least</strong> a camera.txt file. It has the format:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  fx fy cx cy k1 k2 r1 r2
  in_width in_height
  "crop"/"full"/"fx fy cx cy 0"
  out_width out_height
</code></pre></div> </div> </li> <li> <p>An example of a camera.txt could be like this:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  Pinhole 458.654 457.296 367.215 248.375 0
  640 480
  crop
  640 480
  0.110074
</code></pre></div> </div> </li> </ul> </li> </ul> <p>Now if everything works as it should, you should be seeing something like this:</p> <p><img src="https://raw.githubusercontent.com/olayasturias/olayasturias.github.io/master/assets/images/survey-slam-install/dso_ros.png" alt=""/></p> <h1 id="3-rds-slam">3. RDS-SLAM</h1> <h2 id="31-installation">3.1 Installation</h2> <ul> <li>You will need to install some requirements: <ul> <li> <p>Caffe. Follow the instructions <a href="https://atinesh.medium.com/caffe-installation-on-ubuntu-18-04-lts-python-2-7-8e8c388ce51f">here</a></p> <ul> <li>If you get errors with hdf5 <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  cd /usr/lib/x86_64-linux-gnu
  sudo ln -s libhdf5_serial.so.100.0.1 libhdf5.so # or whichever version you have
  sudo ln -s libhdf5_serial_hl.so.100.0.0 libhdf5_hl.so # same applies here
</code></pre></div> </div> </li> <li>If you get errors with Opencv</li> </ul> </li> </ul> </li> <li>Clone the RDS-SLAM repository in your <code class="language-plaintext highlighter-rouge">/catkin_ws/src</code> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git clone https://github.com/yubaoliu/RDS-SLAM

</code></pre></div> </div> </li> <li>cd into the SLAM folder and build with the following script: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  cd SLAM/
  ./build_thridparty.sh
</code></pre></div> </div> </li> <li>go back to your <code class="language-plaintext highlighter-rouge">/catkin_ws/src</code> and build rds_slam: <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  cd ~/catkin_ws
  catkin build rds_slam
</code></pre></div> </div> </li> </ul> <h2 id="32-testing">3.2 Testing</h2> <p>If everything is working correctly, you should be seeing something like this:</p> <p>[under construction]</p>]]></content><author><name></name></author><category term="ROS"/><category term="SLAM"/><category term="survey"/><summary type="html"><![CDATA[installing slam packages.]]></summary></entry><entry><title type="html">creating ROS metapackages</title><link href="https://olayasturias.github.io/blog/2022/ros-metapackages/" rel="alternate" type="text/html" title="creating ROS metapackages"/><published>2022-02-28T06:15:00+00:00</published><updated>2022-02-28T06:15:00+00:00</updated><id>https://olayasturias.github.io/blog/2022/ros-metapackages</id><content type="html" xml:base="https://olayasturias.github.io/blog/2022/ros-metapackages/"><![CDATA[<p>This post will make sense to you if you have already familiarized yourself with ROS packages.</p> <p>As you may know, one of the main strengths of ROS is the possibility of making modular software. By creating specialized packages, you can easily reuse them for other projects. However, as your project gets bigger, so will get your source folder, making it messy. What’s more, if you have a set of packages you are currently working on, compiling them separately might get painful.</p> <p><img src="https://media.giphy.com/media/uWzDsAsRm2X9qULHLs/giphy.gif" alt=""/></p> <p>ROS has a solution for both problems: <strong>metapackages</strong> (referred to as <strong>stacks</strong> in older versions of ROS). A metapackage is a special kind of package meant to gather a subset of packages in it. It allows you to organize your packages within a single folder and compile all packages inside at the same time.</p> <p>Creating metapackages is straightforward, but I haven’t found much documentation, so here is a simple tutorial on creating your own metapackages!</p> <p>First of all, you need to know what the structure of a stack of metapackages looks like:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>metapackage
│
└───package1
│   │   CMakeLists.txt
│   │   package.xml
│   └─── ...
│       │   ...
│   
└───package2
│   │   CMakeLists.txt
│   │   package.xml
│   └─── ...
│       │   ...
│ 
└───metapackage
    │   CMakeLists.txt
    │   package.xml
</code></pre></div></div> <p>That is, you will have a folder with the same name as your metapackage, containing the metapackage itself and the other packages that you want to gather in it. In this example, you will create a folder called metapackage in your source folder, and then move inside your packages.</p> <p>First, create the folder that will contain your metapackage and <code class="language-plaintext highlighter-rouge">cd</code> into it:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir metapackage &amp;&amp; cd metapackage
</code></pre></div></div> <p>Next, create a package like this:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>catkin_create_pkg metapackage --meta
</code></pre></div></div> <p>The <code class="language-plaintext highlighter-rouge">--meta</code> flag indicates to catkin that you are creating a metapackage, and thus it creates a CMakeLists.txt and a package.xml accordingly. Let’s take a look to what’s inside those files:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cmake_minimum_required(VERSION 2.8.3)
project(metapackage)
find_package(catkin REQUIRED)
catkin_metapackage()
</code></pre></div></div> <p>The <em>CMakeLists</em> of a metapackage is quite empty; we only have the <em>catkin_metapackage()</em> directive. We won’t need to modify it. On the other hand, we will need to modify the <em>package.xml</em> to indicate which packages are included within the metapackage. We can do so by writing:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    &lt;exec_depend&gt;package1&lt;/exec_depend&gt;
    &lt;exec_depend&gt;package2&lt;/exec_depend&gt;
</code></pre></div></div> <p>Just with that, your metapackage is ready to run. You can build it, and it will build all the packages within it at the same time:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>catkin build metapackage
</code></pre></div></div> <p>And that’s it! Now you can have your workspace perfectly organized :smile:</p> <p><img src="https://media.giphy.com/media/mBCTckh8N3YKfrNDqm/giphy.gif" alt=""/></p>]]></content><author><name></name></author><category term="ROS"/><summary type="html"><![CDATA[concepts and creation of ROS metapackages.]]></summary></entry><entry><title type="html">LateX table tricks for no more table flips (╯°□°)╯︵ ┻━┻</title><link href="https://olayasturias.github.io/blog/2022/latex-tables/" rel="alternate" type="text/html" title="LateX table tricks for no more table flips (╯°□°)╯︵ ┻━┻"/><published>2022-01-30T06:15:00+00:00</published><updated>2022-01-30T06:15:00+00:00</updated><id>https://olayasturias.github.io/blog/2022/latex-tables</id><content type="html" xml:base="https://olayasturias.github.io/blog/2022/latex-tables/"><![CDATA[<p>Do you know when you have an idea for something that can be done quickly, but then you start to have more ideas, one on top of the other and suddenly the small task has become a big task? Well, that’s what happened in this post!</p> <p>Here, I’ve gathered together a small set of helpful latex commands that I always use, but still, I have to constantly google them because they don’t want to stick into my mind. This set of commands produces the featured image you can see on top of this text. Those are:</p> <ul> <li>An amazing placeholder for images containing ducks, from the package duckuments (loving the package and its name).</li> <li>An image that consists of a grid of images by using the tabularx package</li> <li>Merging multiple columns with centred alignment.</li> <li>Merging multiple rows. Interestingly enough, the vertical alignment has to be manually set (the [3em] you see in the latex text below).</li> <li> <p>Merging multiple columns and rows simultaneously.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>\documentclass[12pt,a4paper]{article}
\usepackage{graphicx}

\usepackage{duckuments}
\usepackage{tabularx}
\usepackage{adjustbox}
\usepackage{multicol}
\usepackage{multirow}
\begin{document}

\begin{figure}[b!]
\centering
\resizebox{\textwidth}{!}{\begin{tabular}{ccccc}

%%%%%%%%%%%%%%%%%%%%%%5
\includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}\\\relax
%%%%%%%%%%%%%%%%%%%%%%%%
\includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \multicolumn{2}{c}{\multirow{2}{*}[3em]{\includegraphics[width=.4\linewidth]{example-image-duck}}}
&amp; \multicolumn{2}{c}{\includegraphics[width=.2\linewidth]{example-image-duck}}\\
%%%%%%%%%%%%%%%%%%%%%%5
\includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \multicolumn{2}{c}{}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}\\\relax
%%%%%%%%%%%%%%%%%%%%%%%%
\includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}\\
%%%%%%%%%%%%%%%%%%%%%%%%
\includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \multicolumn{2}{c}{\multirow{2}{*}[3em]{\includegraphics[width=.4\linewidth]{example-image-duck}}}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \multirow{2}{*}[1em]{\includegraphics[width=.2\linewidth]{example-image-duck}}\\
%%%%%%%%%%%%%%%%%%%%%%5
\includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \multicolumn{2}{c}{}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp;  \\\relax
%%%%%%%%%%%%%%%%%%%%%%%%
\includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}
&amp; \includegraphics[width=.2\linewidth]{example-image-duck}


\end{tabular}}
%The more favourable lighting conditions in SeaFloor yield better results than SandPipe's dark environment
\label{fig:segmentation}
\end{figure}


\end{document}
</code></pre></div> </div> </li> </ul>]]></content><author><name></name></author><category term="latex"/><summary type="html"><![CDATA[cool latex table tricks.]]></summary></entry><entry><title type="html">A notebook on the Extended Kalman Filter</title><link href="https://olayasturias.github.io/blog/2021/ekf/" rel="alternate" type="text/html" title="A notebook on the Extended Kalman Filter"/><published>2021-05-13T06:15:00+00:00</published><updated>2021-05-13T06:15:00+00:00</updated><id>https://olayasturias.github.io/blog/2021/ekf</id><content type="html" xml:base="https://olayasturias.github.io/blog/2021/ekf/"><![CDATA[<h1 id="what-to-consider-before-diving-into-this-post">What to consider before diving into this post</h1> <p>If you have reached this post after googling how to start studying the SLAM problem and the Kalman Filter, up to this moment you might have found two kinds of sources of information:</p> <ol> <li>Very basic explanations but purely theoretical. You might be asking yourself: Ok, I got the basis, but what do I do know? I don’t know where to start!</li> <li>Not purely theoretical approaches, but too advanced for your current level.</li> </ol> <p>When I found myself in this situation, I found a missing 1.2 point that helped me going from 1. to 2. So if you are in this situation, here is my recommendation:</p> <p><strong>First, the theory</strong></p> <p>First, <a href="https://www.youtube.com/watch?v=0I30M6yTklo">go watch the Cyrill Stachniss course on youtube</a>. He has a very popular course from 2013 in his channel, and all the videos are really good, but recently he has uploaded new versions of those videos that I find even better. He gives simple examples, closely related to the code, that make it much more clear to understand.</p> <p>However, if you still find this course too advanced, <a href="https://www.youtube.com/watch?v=B2qzYCeT9oQ&amp;list=PLpUPoM7Rgzi_7YWn14Va2FODh7LzADBSm">the course from Claus Brenner</a>, also on Youtube, could be a better start for you. But if you already know some concepts on Bayesian probability, the Cyrill course shoul be easy for you to get.</p> <p><strong>Now, start coding</strong></p> <p>Probability is the permanently underestimated and forgotten field in mathematics, or at least that’s my experience from studying engineering. Kalman filters are based in Bayesian filters, and I recommend you to do a quick review on all them, from the mathematics point of view, before getting into robotics. I found a gem for that in the internet, which is <a href="https://nbviewer.jupyter.org/github/rlabbe/Kalman-and-Bayesian-Filters-in-Python/blob/master/table_of_contents.ipynb">this notebook</a> by Roger Labbe. It is really amazing. It meets a perfect balance between theory and examples, and you can execute the code in your notebook and play with it!</p> <p>After that, the next step is applying the actual Kalman filter to a more “robotic” example. Here, we get back to Cyrill course. It has some <a href="http://ais.informatik.uni-freiburg.de/teaching/ws12/mapping/">code resources</a> for the theoretical course. However, they are programmed in Octave, some sort of open-source matlab. Personally, I’m not very much into Octave… and that’s where this post arised! I have adapted the Octave functions from Cyrill’s course to Python, and I have executed them in a Jupyter notebook for the sake of clarity.</p> <p>Here, you will find a combination of theory and code. But, as the title states, it is just a <strong>notebook</strong>. It is meant for someone that is somewhat familiar with Kalman filters, and is more a review notebook to refresh concepts than a studying notebook. It doesn’t contain all the code, neither all the theory. <a href="https://github.com/olayasturias/SLAM-course/blob/main/EFK_SLAM.ipynb">The Jupyter notebook is submitted on my github</a> for you to execute. And if you need to clarify better the theory concepts, I recommend you to go to any of the previous sources I mentioned. In this post, only the most important functions and concepts are included.</p> <p>First, I will briefly mention the Kalman filter, which is the most basic algorithm and that nowadays is not deployed into any real robot, but still very convenient to study as a basis to the subsequent algorithms. And then, we will get hands-on into the Extended Kalman Filter, one of the most (if not the most) popular versions of the Kalman filter.</p> <h1 id="the-kalman-filter">The Kalman Filter</h1> <p>This filter is the optimal estimator for linear functions and Gaussian distributions. The Kalman filter can be used as a solution to the online SLAM problem, defined as follows:</p> <p><strong>Given:</strong></p> <ul> <li>The robot’s controls <img src="https://latex.codecogs.com/svg.latex?u_{1:T}&space;=&space;\{u_1,u_2,u_3...,u_T\}" alt="u_{1:T} = {u_1,u_2,u_3...,u_T}"/></li> <li>Observations <img src="https://latex.codecogs.com/svg.latex?\inline&space;z_{1:T}&space;=&space;\{z_1,z_2,z_3...,z_T\}" alt="$z_{1:T} = {z_1,z_2,z_3...,z_T}$"/></li> </ul> <p><strong>Wanted:</strong></p> <ul> <li>Map of the environment <img src="img src=&quot;https://latex.codecogs.com/svg.latex?\inline&space;m&quot; title=&quot;m&quot; /" alt="m"/></li> <li>Path of the robot <img src="https://latex.codecogs.com/svg.latex?\inline&space;x_{0:T}&space;=&space;\{x_0,x_1,x_2...,x_T\}" alt="$x_{0:T} = {x_0,x_1,x_2...,x_T}$"/></li> </ul> <p>We will make a probabilistic estimation of the robot’s path and the map according to the motion and observation models.</p> <p><strong>Motion Model</strong></p> <p>The motion model describes the relative motion of the robot. Some examples of motion model are the Odometry-based model (wheeled robots) or the velocity-based model (flying robots).</p> <p>The motion model is represented by matrices and thus is a linear function.</p> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?x_t&space;=&space;A_tx_{t-1}&space;&plus;&space;B_tu_t&space;&plus;&space;\epsilon_t"/> </p> <ul> <li><img src="https://latex.codecogs.com/svg.latex?A_t&space;(n\times&space;n)" alt="$A_t (n\times n)$"/> maps the state at $t$, given the previous state at $t-1$.</li> <li><img src="https://latex.codecogs.com/svg.latex?B_t&space;(n\times&space;l)" alt="$B_t (n\times l)$"/> describes state change from <img src="https://latex.codecogs.com/svg.latex?t-1" alt="$t-1$"/> to <img src="https://latex.codecogs.com/svg.latex?t" alt="$t$"/>, given control command.</li> </ul> <p><strong>Observation Model</strong></p> <p>The observation or sensor model relates measurements with the robot’s pose: what I am going to observe given that I know the pose or the map. The Beam-Endpoint model is characterized by a gaussian blur around the obstables. The Ray-cast model experiments an exponential decay and covers dynamic obstacles.</p> <p>The linear mapping between the state and the observation space:</p> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?z_t&space;=&space;C_tx_{t}&space;&plus;&space;\delta_t"/> </p> <ul> <li><img src="https://latex.codecogs.com/svg.latex?\inline&space;C_t&space;(k\times&space;n)" alt="$C_t (k\times n)$"/> maps state <img src="https://latex.codecogs.com/svg.latex?x_t" alt="$x_t$"/> to an observation <img src="https://latex.codecogs.com/svg.latex?z_t" alt="$z_t$"/>.</li> </ul> <p>The Kalman filter is a recursive algorithm and it is computed as follows:</p> <p><img src="https://raw.githubusercontent.com/olayasturias/olayasturias.github.io/master/assets/images/ekf/kalman.png" alt=""/></p> <p>Where <img src="https://latex.codecogs.com/svg.latex?Q_t" alt="$Q_t$"/> and <img src="https://latex.codecogs.com/svg.latex?R_t" alt="$R_t$"/> describe measurement and motion noise, <img src="https://latex.codecogs.com/svg.latex?\mathbf{\mu}{t}" alt="\mathbf{\mu}_{t}"/> is the mean, <img src="https://latex.codecogs.com/svg.latex?\textstyle\sum_t" alt="$\textstyle\sum_t$"/> is the covariance (uncertainty), <img src="https://latex.codecogs.com/svg.latex?K_t" alt="$K_t$"/> is the Kalman gain. The Kalman gain computes how certain I am about the prediction with respect to the motion.</p> <p>We introduce to the algorithm our current estimate of where we have been in tearms of mean estimate and covariance matrix, as well as the new control command and the observations. We want to update the mean and the covariance matrix so we transit from t-1 to t. We are computing a weighted sum with the Kalman gain weighting the prediction and the correction.</p> <h1 id="the-extended-kalman-filter">The Extended Kalman Filter</h1> <p>However, in most real scenarios we do not have linear functions to describe the movements or the sensor model. Non-linear functions lead to non-Gaussian distributions and we cannot use the Kalman filter anymore. This is resolved by the Extended Kalman Filter by local linearization. However, we’re still assuming Gaussian noise and Gaussian uncertainties.</p> <p>The algorithm for the Extended Kalman Filter is:</p> <p><img src="https://raw.githubusercontent.com/olayasturias/olayasturias.github.io/master/assets/images/ekf/ekalman.png" alt=""/></p> <p>The terms highlighted in blue are those in which the EKF perform the local linearization. Hereafter, I will introduce how these terms are computed.</p> <h2 id="using-the-ekf-to-solve-the-slam-problem">Using the EKF to solve the SLAM problem</h2> <p>First we need to define our state vector, and the assumptions for the example that we are using in this notebook:</p> <ul> <li>Assumption: known correspondences. That is, when I get an observation, I know which landmark it is in my map.</li> <li>State space (for 2D plane) contains the robot pose (3 dimensions) and the landmark locations (2 dimensions each), and it’s defined as:</li> </ul> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?x_t&space;=&space;(&space;\underbrace{x,y,\theta}_{\text{robot's&space;pose}},\underbrace{m_{1,x},m_{1,y}}_{\text{landmark&space;1}},...,\underbrace{m_{n,x},m_{n,y}}_{\text{landmark&space;n}})^T"/> </p> <ul> <li>State representation (very compactly, with <img src="https://latex.codecogs.com/svg.latex?x_R\rightarrow&space;x" alt="$x_R\rightarrow x)$"/> ):</li> </ul> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?\underbrace{\begin{pmatrix}x\\m\end{pmatrix}}_{\mu}\underbrace{\begin{pmatrix}\textstyle\sum_{xx}&space;\textstyle\sum_{xm}\\\textstyle\sum_{mx}&space;\textstyle\sum_{mm}\end{pmatrix}}_{\textstyle\sum}"/> </p> <p>With <img src="https://latex.codecogs.com/svg.latex?\sum_{xx}" alt="$\sum_{xx}$"/> representing the uncertainty around the pose, <img src="https://latex.codecogs.com/svg.latex?\sum_{mm}" alt="$\sum_{mm}$"/> the uncertainty about the landmark location, and <img src="https://latex.codecogs.com/svg.latex?\sum_{xm}" alt="$\sum_{xm}$"/> the link between the landmark locations and the position of the robot within the platform.</p> <h2 id="prediction-step-defining-g">Prediction step: defining g</h2> <p>In this step we only update the pose of the robot <img src="https://latex.codecogs.com/svg.latex?x,y,\theta" alt=" $x,y,\theta$"/> and its covariance <img src="https://latex.codecogs.com/svg.latex?\sum_{xx}" alt="$\sum_{xx}$"/> according to the motion model <img src="https://latex.codecogs.com/svg.latex?g" alt="$g$"/>. Note that since we are just considering the robot’s movement, without taking into account the sensor’s measurements yet, the landmarks locations are not updated in this step.</p> <h3 id="the-motion-model">The motion model</h3> <p>Here the motion model considered is the Odometry Model:</p> <ul> <li>The robot moves from <img src="https://latex.codecogs.com/svg.latex?[\overline{x},\overline{y},\overline{\theta}]" alt="xytheta"/> to <img src="https://latex.codecogs.com/svg.latex?[\overline{x}',\overline{y}',\overline{\theta}']" alt="xythetaprima"/></li> <li>We have odometry information <img src="https://latex.codecogs.com/svg.latex?u&space;=&space;[\delta_{rot1},\delta_{rot2},\delta_{trans}]" alt="u"/></li> </ul> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?\delta_{trans}&space;=&space;\sqrt{(\overline{x}'-\overline{x})^2&plus;(\overline{y}'-\overline{y})^2}"/> </p> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?\delta_{rot1}&space;=&space;atan2(\overline{y}'-\overline{y},\overline{x}'-\overline{x})-\overline{\theta}"/> </p> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?\delta_{rot2}&space;=&space;\overline{\theta}'-\overline{\theta}-\delta_{rot1}"/> </p> <p><img src="https://raw.githubusercontent.com/olayasturias/olayasturias.github.io/master/assets/images/ekf/motion.png" alt=""/></p> <p>Thus, our odometry motion model (without the noise model) that we will use to update the robot pose in the state vector <img src="https://latex.codecogs.com/svg.latex?\mu" alt="$\mu$"/> is:</p> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?x'&space;=&space;x&space;&plus;&space;\delta_{trans}\cos{(\theta&plus;\delta_{rot1})}"/> </p> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?y'&space;=&space;y&space;&plus;&space;\delta_{trans}\sin{(\theta&plus;\delta_{rot1})}"/> </p> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?\theta'&space;=&space;\theta&space;&plus;&space;\delta_{rot1}&space;&plus;&space;\delta_{rot2}"/> </p> <p>Next, we update the elements in the covariance matrix associated to the robot pose by performing a local linearization of the function. This is achieved with the partial derivatives of the previous functions, that is, with the Jacobian matrix <img src="https://latex.codecogs.com/svg.latex?G" alt="$G$"/>.</p> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?G_t^x&space;=&space;\frac{\delta&space;g(u_t,\mu')}{\delta&space;(x,y,\theta)}"/> </p> <p>Remember that we’re only updating the robot values in the state space. That is, our Jacobian will have the structure:</p> <p align="center"> <img src="https://latex.codecogs.com/svg.latex?G_t&space;=&space;\begin{bmatrix}&space;\frac{\delta&space;g(u_t,\mu')}{\delta&space;(x,y,\theta)}&space;&amp;&space;\textbf{0}\\&space;\textbf{0}&space;&amp;&space;\textbf{I}&space;\end{bmatrix}"/> </p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">prediction_step</span><span class="p">(</span> <span class="n">mu</span><span class="p">,</span> <span class="n">sigma</span><span class="p">,</span> <span class="n">u</span><span class="p">):</span>
    <span class="sh">'''</span><span class="s"> Updates the belief concerning the robot pose according to the motion model,
    args:
    - mu :: 2N+3 x 1 vector representing the state mean.
    - sigma :: 2N+3 x 2N+3 covariance matrix.
    - u: odometry reading (r1, t, r2).    

    </span><span class="sh">'''</span>
    <span class="n">m</span><span class="p">,</span><span class="n">n</span> <span class="o">=</span> <span class="n">sigma</span><span class="p">.</span><span class="n">shape</span>

    <span class="c1"># Compute new mu based on the noise-free (odometry-based) motion model
</span>    <span class="n">mu</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">mu</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">t</span><span class="sh">'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">cos</span><span class="p">(</span><span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">r1</span><span class="sh">'</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="c1"># x
</span>    <span class="n">mu</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">mu</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">t</span><span class="sh">'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">sin</span><span class="p">(</span><span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">r1</span><span class="sh">'</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="c1"># y
</span>    <span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">r1</span><span class="sh">'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">r2</span><span class="sh">'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># y
</span>    <span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nf">normalize_angle</span><span class="p">(</span><span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">])</span>

    <span class="c1"># Compute the 3x3 Jacobian Gx of the motion model
</span>    <span class="n">Gx</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">identity</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
    <span class="n">Gx</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span> <span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">t</span><span class="sh">'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">sin</span><span class="p">(</span><span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">r1</span><span class="sh">'</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
    <span class="n">Gx</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span>   <span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">t</span><span class="sh">'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">cos</span><span class="p">(</span><span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">r1</span><span class="sh">'</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>

    <span class="c1"># Construct the full Jacobian G
</span>    <span class="n">G</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">concatenate</span><span class="p">((</span><span class="n">Gx</span><span class="p">,</span><span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span><span class="n">n</span><span class="o">-</span><span class="mi">3</span><span class="p">))),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
    <span class="n">aux</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">concatenate</span><span class="p">((</span><span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">((</span><span class="n">n</span><span class="o">-</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">)),</span> <span class="n">np</span><span class="p">.</span><span class="nf">identity</span><span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">3</span><span class="p">)),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
    <span class="n">G</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">concatenate</span><span class="p">((</span><span class="n">G</span><span class="p">,</span><span class="n">aux</span><span class="p">),</span> <span class="n">axis</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>

    <span class="c1"># Motion noise R
</span>    <span class="n">motionNoise</span> <span class="o">=</span> <span class="mf">0.1</span>
    <span class="n">R3</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">identity</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="o">*</span><span class="n">motionNoise</span>
    <span class="n">R3</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">motionNoise</span><span class="o">/</span><span class="mi">10</span>

    <span class="n">R</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">((</span><span class="n">sigma</span><span class="p">.</span><span class="n">shape</span><span class="p">))</span>

    <span class="n">R</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">R3</span>

    <span class="c1"># Compute predicted sigma
</span>    <span class="n">sigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">matmul</span><span class="p">(</span><span class="n">G</span><span class="p">,</span><span class="n">np</span><span class="p">.</span><span class="nf">matmul</span><span class="p">(</span><span class="n">sigma</span><span class="p">,</span><span class="n">G</span><span class="p">.</span><span class="n">T</span><span class="p">))</span> <span class="o">+</span><span class="n">R</span> <span class="c1"># i.e.  sigma = G*sigma*G.T + R
</span>

    <span class="k">return</span> <span class="n">mu</span><span class="p">,</span><span class="n">sigma</span>

</code></pre></div></div> <h1 id="correction-step">Correction step</h1> <p>Once the pose has been update, it’s time for the correction.</p> <ul> <li>Predicted measurement <img src="https://latex.codecogs.com/svg.latex?h(x)" alt="$h(x)$"/> : we need to predict what the robot sees. For that, we take the current position of the robot, and the position of the landmarks in the map, and with that we compute our predicted measurement.</li> <li>Obtained measurement <img src="https://latex.codecogs.com/svg.latex?z" alt="$z$"/>: we take the real observations of the landmarks according to the sensor.</li> <li>Data association: we compute the discrepancy between <img src="https://latex.codecogs.com/svg.latex?h(x)" alt="$h(x)$"/> and <img src="https://latex.codecogs.com/svg.latex?z" alt="$z$"/>.</li> <li>Update step: finally, all the elements in <img src="https://latex.codecogs.com/svg.latex?\mu" alt="$\mu$"/> and <img src="https://latex.codecogs.com/svg.latex?\sum" alt="$\sum$"/> are updated</li> </ul> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">correction_step</span><span class="p">(</span><span class="n">mu</span><span class="p">,</span><span class="n">sigma</span><span class="p">,</span><span class="n">z</span><span class="p">,</span><span class="n">observedLandmarks</span><span class="p">):</span>
    <span class="sh">'''</span><span class="s"> Updates the belief, i. e., mu and sigma after observing landmarks, according to the sensor model.
        The employed sensor model measures the range and bearing of a landmark.
        mu: 2N+3 x 1 vector representing the state mean.
        The first 3 components of mu correspond to the current estimate of the robot pose [x; y; theta]
        The current pose estimate of the landmark with id = j is: [mu(2*j+2); mu(2*j+3)]
        sigma: 2N+3 x 2N+3 is the covariance matrix
        z: struct array containing the landmark observations.
        Each observation z(i) has an id z(i).id, a range z(i).range, and a bearing z(i).bearing
        The vector observedLandmarks indicates which landmarks have been observed at some point by the robot.
        observedLandmarks(j) is false if the landmark with id = j has never been observed before.
    </span><span class="sh">'''</span>
    <span class="c1"># Number of measurements in this time step
</span>    <span class="n">m</span> <span class="o">=</span> <span class="n">z</span><span class="p">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
    <span class="c1"># Number of dimensions to mu
</span>    <span class="n">dim</span> <span class="o">=</span> <span class="n">mu</span><span class="p">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
    <span class="c1"># Z: vectorized form of all measurements made in this time step: [range_1; bearing_1; range_2; bearing_2; ...; range_m; bearing_m]
</span>    <span class="c1"># ExpectedZ: vectorized form of all expected measurements in the same form.
</span>    <span class="c1"># They are initialized here and should be filled out in the for loop below
</span>    <span class="n">Z</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">([</span><span class="n">m</span><span class="o">*</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span><span class="nb">float</span><span class="p">)</span>
    <span class="n">expectedZ</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">([</span><span class="n">m</span><span class="o">*</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span><span class="nb">float</span><span class="p">)</span>

    <span class="c1"># Iterate over the measurements and compute the H matrix
</span>    <span class="c1"># (stacked Jacobian blocks of the measurement function)
</span>    <span class="c1"># H will be 2m x 2N+3
</span>    <span class="n">H</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">row</span> <span class="ow">in</span> <span class="n">z</span><span class="p">.</span><span class="nf">iterrows</span><span class="p">():</span>
        <span class="c1"># Get the id of the landmark corresponding to the i-th observation
</span>        <span class="n">landmarkId</span> <span class="o">=</span> <span class="nf">int</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="sh">'</span><span class="s">r1</span><span class="sh">'</span><span class="p">])</span> <span class="c1"># r1 == ID here
</span>        <span class="c1">#landmarkId = landmarkId -1 # adapt the 1-9 range to 0-8 range of the array
</span>
        <span class="c1"># If the landmark is obeserved for the first time:
</span>        <span class="nf">if </span><span class="p">(</span><span class="n">observedLandmarks</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">landmarkId</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">):</span>
            <span class="c1"># Initialize its pose in mu based on the measurement and the current robot pose:
</span>            <span class="n">a</span> <span class="o">=</span> <span class="nf">float</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="sh">'</span><span class="s">t</span><span class="sh">'</span><span class="p">]</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="nf">cos</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="sh">'</span><span class="s">r2</span><span class="sh">'</span><span class="p">]</span><span class="o">+</span><span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
            <span class="n">b</span> <span class="o">=</span> <span class="nf">float</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="sh">'</span><span class="s">t</span><span class="sh">'</span><span class="p">]</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="nf">sin</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="sh">'</span><span class="s">r2</span><span class="sh">'</span><span class="p">]</span><span class="o">+</span><span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span>
            <span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">landmarkId</span><span class="o">+</span><span class="mi">1</span> <span class="p">:</span> <span class="mi">2</span><span class="o">*</span><span class="n">landmarkId</span><span class="o">+</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">mu</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([[</span><span class="n">a</span><span class="p">],</span> <span class="p">[</span><span class="n">b</span><span class="p">]])</span>

            <span class="c1"># Indicate in the observedLandmarks vector that this landmark has been observed
</span>            <span class="n">observedLandmarks</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">landmarkId</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>  

        <span class="c1"># Add the landmark measurement to the Z vector   
</span>        <span class="n">Z</span><span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="sh">'</span><span class="s">t</span><span class="sh">'</span><span class="p">]</span>
        <span class="n">Z</span><span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="sh">'</span><span class="s">r2</span><span class="sh">'</span><span class="p">]</span>

        <span class="c1"># Use the current estimate of the landmark pose
</span>        <span class="c1"># to compute the corresponding expected measurement in expectedZ:
</span>        <span class="n">delta</span> <span class="o">=</span> <span class="n">mu</span><span class="p">[</span><span class="mi">2</span> <span class="o">*</span> <span class="n">landmarkId</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">landmarkId</span> <span class="o">+</span> <span class="mi">2</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">mu</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
        <span class="n">q</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">matmul</span><span class="p">(</span><span class="n">delta</span><span class="p">.</span><span class="n">T</span><span class="p">,</span><span class="n">delta</span><span class="p">)</span>

        <span class="n">expectedZ</span><span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="nf">sqrt</span><span class="p">(</span><span class="n">q</span><span class="p">)</span>
        <span class="n">expectedZ</span><span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">j</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nf">normalize_angle</span><span class="p">(</span><span class="n">np</span><span class="p">.</span><span class="nf">arctan2</span><span class="p">(</span><span class="n">delta</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">delta</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="n">mu</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>      

        <span class="n">delta0</span> <span class="o">=</span> <span class="nf">float</span><span class="p">(</span><span class="n">delta</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
        <span class="n">delta1</span> <span class="o">=</span> <span class="nf">float</span><span class="p">(</span><span class="n">delta</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>

        <span class="c1"># Compute the Jacobian Hi of the measurement function h for this observation
</span>        <span class="n">Hi</span> <span class="o">=</span> <span class="mi">1</span><span class="o">/</span><span class="n">q</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">array</span><span class="p">([[</span><span class="nf">float</span><span class="p">(</span><span class="o">-</span><span class="n">math</span><span class="p">.</span><span class="nf">sqrt</span><span class="p">(</span><span class="n">q</span><span class="p">)</span><span class="o">*</span><span class="n">delta0</span><span class="p">),</span><span class="o">-</span><span class="n">math</span><span class="p">.</span><span class="nf">sqrt</span><span class="p">(</span><span class="n">q</span><span class="p">)</span><span class="o">*</span><span class="n">delta1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">math</span><span class="p">.</span><span class="nf">sqrt</span><span class="p">(</span><span class="n">q</span><span class="p">)</span><span class="o">*</span><span class="n">delta0</span><span class="p">,</span> <span class="n">math</span><span class="p">.</span><span class="nf">sqrt</span><span class="p">(</span><span class="n">q</span><span class="p">)</span><span class="o">*</span><span class="n">delta1</span><span class="p">],</span> <span class="p">[</span> <span class="n">delta1</span><span class="p">,</span> <span class="o">-</span><span class="n">delta0</span><span class="p">,</span> <span class="nf">float</span><span class="p">(</span><span class="o">-</span><span class="n">q</span><span class="p">),</span> <span class="o">-</span><span class="n">delta1</span><span class="p">,</span> <span class="n">delta0</span><span class="p">]</span> <span class="p">])</span>

        <span class="c1"># Map Jacobian Hi to high dimensional space by a mapping matrix Fxj
</span>        <span class="n">Fxj</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">([</span><span class="mi">5</span><span class="p">,</span><span class="n">dim</span><span class="p">])</span>
        <span class="n">Fxj</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">identity</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
        <span class="n">Fxj</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">landmarkId</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
        <span class="n">Fxj</span><span class="p">[</span><span class="mi">4</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">landmarkId</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>

        <span class="n">Hi</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">matmul</span><span class="p">(</span><span class="n">Hi</span><span class="p">,</span> <span class="n">Fxj</span><span class="p">)</span>


        <span class="c1"># Augment H with the new Hi     
</span>
        <span class="n">H</span><span class="p">.</span><span class="nf">append</span><span class="p">(</span><span class="n">Hi</span><span class="p">)</span>

        <span class="n">j</span><span class="o">+=</span><span class="mi">1</span>



    <span class="c1"># Construct the sensor noise matrix Q
</span>    <span class="n">Q</span> <span class="o">=</span> <span class="mf">0.01</span><span class="o">*</span><span class="n">np</span><span class="p">.</span><span class="nf">identity</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">m</span><span class="p">)</span>

    <span class="c1"># Compute the Kalman gain
</span>    <span class="c1"># K = sigma * H.T * inv(H * sigma * H.T + Q)
</span>    <span class="n">Hnp</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">asarray</span><span class="p">(</span><span class="n">H</span><span class="p">).</span><span class="nf">reshape</span><span class="p">((</span><span class="mi">2</span><span class="o">*</span><span class="n">m</span><span class="p">,</span><span class="n">dim</span><span class="p">))</span>
    <span class="n">sigmaxHt</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">matmul</span><span class="p">(</span><span class="n">sigma</span><span class="p">,</span><span class="n">Hnp</span><span class="p">.</span><span class="n">T</span><span class="p">)</span>
    <span class="n">inverse</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="n">linalg</span><span class="p">.</span><span class="nf">inv</span><span class="p">(</span><span class="n">np</span><span class="p">.</span><span class="nf">matmul</span><span class="p">(</span><span class="n">Hnp</span><span class="p">,</span><span class="n">sigmaxHt</span><span class="p">)</span><span class="o">+</span><span class="n">Q</span><span class="p">)</span>    
    <span class="n">K</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">matmul</span><span class="p">(</span><span class="n">sigmaxHt</span><span class="p">,</span><span class="n">inverse</span><span class="p">)</span>

    <span class="c1"># Compute the difference between the expected and recorded measurements.
</span>    <span class="c1"># Remember to normalize the bearings after subtracting!
</span>
    <span class="n">diffZ</span> <span class="o">=</span> <span class="nf">normalize_all_bearings</span><span class="p">(</span><span class="n">Z</span><span class="o">-</span><span class="n">expectedZ</span><span class="p">)</span>

    <span class="c1"># Finish the correction step by computing the new mu and sigma.
</span>    <span class="c1"># Normalize theta in the robot pose.
</span>    <span class="n">mu</span> <span class="o">=</span> <span class="n">mu</span> <span class="o">+</span> <span class="n">np</span><span class="p">.</span><span class="nf">matmul</span><span class="p">(</span><span class="n">K</span><span class="p">,</span> <span class="n">diffZ</span><span class="p">)</span>
    <span class="c1"># sigma = (eye(dim) - K * H) * sigma
</span>    <span class="n">sigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">matmul</span><span class="p">((</span><span class="n">np</span><span class="p">.</span><span class="nf">identity</span><span class="p">(</span><span class="n">dim</span><span class="p">)</span> <span class="o">-</span> <span class="n">np</span><span class="p">.</span><span class="nf">matmul</span><span class="p">(</span><span class="n">K</span><span class="p">,</span> <span class="n">Hnp</span><span class="p">)),</span> <span class="n">sigma</span><span class="p">)</span>

    <span class="k">return</span> <span class="n">mu</span><span class="p">,</span> <span class="n">sigma</span><span class="p">,</span> <span class="n">observedLandmarks</span>
</code></pre></div></div> <h3 id="initializing-the-belief">Initializing the belief</h3> <p>Given that we know the number of landmarks in our map, we can define the shape of the mean and the covariance matrix:</p> <ul> <li> <p>mu: 2N+3x1 vector representing the mean of the normal distribution. The first 3 components of mu correspond to the pose of the robot, and the landmark poses (xi, yi) are stacked in ascending id order.</p> </li> <li> <p>sigma: (2N+3)x(2N+3) covariance matrix of the normal distribution.</p> </li> </ul> <p>Everything is completely unknown in the beginnig, so we define the starting point as our coordinate system. That is,<img src="https://latex.codecogs.com/svg.latex?\mu&space;=&space;\textbf{0}" alt=" $\mu = \textbf{0}$"/>. Since we are completely certain about that (because we’ve defined it), the corresponding values in sigma are also zero <img src="https://latex.codecogs.com/svg.latex?\sum_{xx}&space;=&space;\textbf{0}" alt="$\sum_{xx} = \textbf{0}$"/>. However, we don’t know anything about the landmarks, because we haven’t seen anything yet, so they have an infinite uncertainty.</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Initialize mu
</span><span class="n">mu</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">((</span><span class="mi">2</span><span class="o">*</span><span class="n">N</span><span class="o">+</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="n">dtype</span> <span class="o">=</span> <span class="sh">'</span><span class="s">float</span><span class="sh">'</span><span class="p">)</span>
<span class="c1"># Initialize sigma
</span><span class="n">robSigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">))</span>
<span class="n">robMapSigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">N</span><span class="p">))</span>
<span class="n">mapSigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">identity</span><span class="p">((</span><span class="mi">2</span><span class="o">*</span><span class="n">N</span><span class="p">))</span><span class="o">*</span><span class="mi">1000</span> <span class="c1"># 1000 as a "infinite" or just "high" value
</span>
<span class="n">aux1</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">concatenate</span><span class="p">((</span><span class="n">robSigma</span><span class="p">,</span><span class="n">robMapSigma</span><span class="p">),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">aux2</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">concatenate</span><span class="p">((</span><span class="n">robMapSigma</span><span class="p">.</span><span class="n">T</span><span class="p">,</span><span class="n">mapSigma</span><span class="p">),</span> <span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>

<span class="n">sigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">concatenate</span><span class="p">((</span><span class="n">aux1</span><span class="p">,</span><span class="n">aux2</span><span class="p">),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
</code></pre></div></div> <p>The sigma values corresponding to the robot pose, as mentioned, have 0. value (no uncertainty)</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">sigma</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]</span>
</code></pre></div></div> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
</code></pre></div></div> <p>However, the covariance associated to the landmark pose has infinite value(here 1000, just a high value), for instance, for the first landmark:</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">sigma</span><span class="p">[</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">]</span>
</code></pre></div></div> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1000.0
</code></pre></div></div> <h1 id="the-ekf-loop">The EKF loop</h1> <p>Up to this point we have everything ready to execute the Extended Kalman Filter loop in our 2D environment and see what happens. Each element in the map is displayed altogether with the uncertainty of the measurement, plotted as an ellipse. You can see in the video, that the more a landmark is seen by the robot, the smaller the ellipse gets (and thus, the uncertainty).</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">ekf_loop</span><span class="p">(</span><span class="n">mu</span><span class="p">,</span><span class="n">sigma</span><span class="p">,</span><span class="n">observedLandmarks</span><span class="p">,</span><span class="n">fig</span><span class="p">,</span><span class="n">ax</span><span class="p">,</span><span class="n">camera</span><span class="p">):</span>

    <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nf">range </span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">timestepindex</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]):</span>
        <span class="c1"># Perform the prediction step of the EKF
</span>        <span class="n">mu</span><span class="p">,</span><span class="n">sigma</span> <span class="o">=</span> <span class="nf">prediction_step</span><span class="p">(</span><span class="n">mu</span><span class="p">,</span> <span class="n">sigma</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">loc</span><span class="p">[(</span><span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">timestep</span><span class="sh">'</span><span class="p">]</span> <span class="o">==</span> <span class="n">t</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">sensor</span><span class="sh">'</span><span class="p">]</span> <span class="o">==</span> <span class="sh">'</span><span class="s">ODOMETRY</span><span class="sh">'</span><span class="p">)])</span>


        <span class="c1">#Perform the correction step of the EKF
</span>        <span class="n">mu</span><span class="p">,</span> <span class="n">sigma</span><span class="p">,</span> <span class="n">observedLandmarks</span> <span class="o">=</span> <span class="nf">correction_step</span><span class="p">(</span><span class="n">mu</span><span class="p">,</span><span class="n">sigma</span><span class="p">,</span><span class="n">data</span><span class="p">.</span><span class="n">loc</span><span class="p">[(</span><span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">timestep</span><span class="sh">'</span><span class="p">]</span> <span class="o">==</span> <span class="n">t</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">sensor</span><span class="sh">'</span><span class="p">]</span> <span class="o">==</span> <span class="sh">'</span><span class="s">SENSOR</span><span class="sh">'</span><span class="p">)],</span><span class="n">observedLandmarks</span><span class="p">)</span>
        <span class="c1"># Generate visualization plots
</span>        <span class="n">fig</span> <span class="o">=</span> <span class="nf">plot_state</span><span class="p">(</span><span class="n">mu</span><span class="p">,</span><span class="n">sigma</span><span class="p">,</span><span class="n">world_ldmrks</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">observedLandmarks</span><span class="p">,</span><span class="n">data</span><span class="p">.</span><span class="n">loc</span><span class="p">[(</span><span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">timestep</span><span class="sh">'</span><span class="p">]</span> <span class="o">==</span> <span class="n">t</span><span class="p">)</span> <span class="o">&amp;</span> <span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="sh">'</span><span class="s">sensor</span><span class="sh">'</span><span class="p">]</span> <span class="o">==</span> <span class="sh">'</span><span class="s">SENSOR</span><span class="sh">'</span><span class="p">)],</span><span class="n">fig</span><span class="p">,</span><span class="n">ax</span><span class="p">)</span>
        <span class="n">camera</span><span class="p">.</span><span class="nf">snap</span><span class="p">()</span>
    <span class="k">return</span> <span class="n">camera</span><span class="p">,</span> <span class="n">mu</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">],</span><span class="n">sigma</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]</span>

</code></pre></div></div> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">observedLandmarks</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="n">N</span><span class="p">))</span>
<span class="n">robSigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">))</span>
<span class="n">robMapSigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="o">*</span><span class="n">N</span><span class="p">))</span>
<span class="n">mapSigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">identity</span><span class="p">((</span><span class="mi">2</span><span class="o">*</span><span class="n">N</span><span class="p">))</span><span class="o">*</span><span class="mi">1000</span> <span class="c1"># 1000 as a "infinite" or just "high" value
</span><span class="n">aux1</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">concatenate</span><span class="p">((</span><span class="n">robSigma</span><span class="p">,</span><span class="n">robMapSigma</span><span class="p">),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">aux2</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">concatenate</span><span class="p">((</span><span class="n">robMapSigma</span><span class="p">.</span><span class="n">T</span><span class="p">,</span><span class="n">mapSigma</span><span class="p">),</span> <span class="n">axis</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">sigma</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">concatenate</span><span class="p">((</span><span class="n">aux1</span><span class="p">,</span><span class="n">aux2</span><span class="p">),</span><span class="n">axis</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">mu</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">((</span><span class="mi">2</span><span class="o">*</span><span class="mi">9</span><span class="o">+</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="n">dtype</span> <span class="o">=</span> <span class="sh">'</span><span class="s">float</span><span class="sh">'</span><span class="p">)</span>

<span class="n">fig</span><span class="p">,</span><span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="p">.</span><span class="nf">subplots</span><span class="p">()</span>
<span class="n">camera</span> <span class="o">=</span> <span class="nc">Camera</span><span class="p">(</span><span class="n">fig</span><span class="p">)</span>

<span class="n">camera</span> <span class="o">=</span> <span class="nf">ekf_loop</span><span class="p">(</span><span class="n">mu</span><span class="p">,</span><span class="n">sigma</span><span class="p">,</span><span class="n">observedLandmarks</span><span class="p">,</span><span class="n">fig</span><span class="p">,</span><span class="n">ax</span><span class="p">,</span><span class="n">camera</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>

<span class="n">animation</span> <span class="o">=</span> <span class="n">camera</span><span class="p">.</span><span class="nf">animate</span><span class="p">()</span>
<span class="nc">HTML</span><span class="p">(</span><span class="n">animation</span><span class="p">.</span><span class="nf">to_html5_video</span><span class="p">())</span>       

</code></pre></div></div> <video width="432" height="288" controls="" autoplay="" loop=""> <source type="video/mp4" src="data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAF4AW1kYXQAAAKtBgX//6ncRem9 5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTUyIHIyODU0IGU5YTU5MDMgLSBILjI2NC9NUEVHLTQg QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE3IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9 MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6 b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9OSBsb29r YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49NSBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNo PTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFw bWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAADitliIQA E//+97GPgU3IAA2XOop6H+EVsfSQUXqx2aBk6gAAAwAAiYGOFkC1uVpxUAAA47z/w3k6XABRw4vt abEgReW+cjkPffi4URb+EjMrGRa6anb519ZZfSOggHWLEcZePYKw72YsTRXe3vw52FQ4bf6SHlyS 5b/Fa8q0VIwWPfHiXtpwUVoIZNoSrY2o8AtVHR8TAPAa/NO8MPh1cs+RP5LqkFeq2GLyMBnV6GPa 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 ZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAED9zdGJsAAAAs3N0c2QAAAAAAAAAAQAAAKNhdmMxAAAA AAAAAAEAAAAAAAAAAAAAAAAAAAAAAbABIABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAGP//AAAAMWF2Y0MBZAAV/+EAGGdkABWs2UGwloQAAAMABAAAAwAoPFi2 WAEABmjr48siwAAAABx1dWlka2hA8l8kT8W6OaUbzwMj8wAAAAAAAAAYc3R0cwAAAAAAAAABAAAB SgAACAAAAAAYc3RzcwAAAAAAAAACAAAAAQAAAPsAAAnoY3R0cwAAAAAAAAE7AAAAAQAAEAAAAAAB AAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAABgAAAAAAQAACAAAAAABAAAoAAAAAAEA ABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAA KAAAAAABAAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAQAAAAAAEAACgAAAAAAQAAEAAAAAABAAAA AAAAAAEAAAgAAAAAAQAAKAAAAAABAAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAoAAAAAAEAABAA AAAAAQAAAAAAAAABAAAIAAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAAKAAA AAABAAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAYAAAAAAEAAAgAAAAAAQAAKAAAAAABAAAQAAAA AAEAAAAAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAACAAAAAA AgAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAACgAAAAAAQAAEAAAAAAB AAAAAAAAAAEAAAgAAAAAAQAAKAAAAAABAAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAoAAAAAAEA ABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAA KAAAAAABAAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAI AAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAAKAAAAAABAAAQAAAAAAEAAAAA AAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAACgAAAAAAQAAEAAA AAABAAAAAAAAAAEAAAgAAAAAAQAAGAAAAAABAAAIAAAAAAEAACAAAAAAAgAACAAAAAABAAAgAAAA AAIAAAgAAAAAAQAAGAAAAAABAAAIAAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAA AQAAGAAAAAABAAAIAAAAAAEAACAAAAAAAgAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAAB AAAIAAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAAKAAAAAABAAAQAAAAAAEA AAAAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAABAAAAAAAQAA KAAAAAABAAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAI AAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAAIAAAAAACAAAIAAAAAAEAABgA AAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAABgAAAAAAQAACAAA AAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAABgAAAAAAQAACAAAAAABAAAYAAAA AAEAAAgAAAAAAQAAGAAAAAABAAAIAAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAA AQAAGAAAAAABAAAIAAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAAKAAAAAAB AAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEA ABgAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAACAAAAAAAgAA CAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAACAAAAAAAgAACAAAAAABAAAg AAAAAAIAAAgAAAAAAQAAGAAAAAABAAAIAAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgA AAAAAQAAKAAAAAABAAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAA AAABAAAIAAAAAAEAACAAAAAAAgAACAAAAAABAAAYAAAAAAEAAAgAAAAAAQAAEAAAAAABAAAYAAAA AAEAAAgAAAAAAQAAGAAAAAABAAAIAAAAAAEAABgAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAA AQAAAAAAAAABAAAIAAAAAAEAACAAAAAAAgAACAAAAAABAAAYAAAAAAEAAAgAAAAAAQAAKAAAAAAB AAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEA ACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAAEAAAAAABAAAYAAAAAAEAAAgAAAAAAQAA KAAAAAABAAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAI AAAAAAEAACAAAAAAAgAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAACgA AAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAAKAAAAAABAAAQAAAAAAEAAAAAAAAAAQAACAAA AAABAAAgAAAAAAIAAAgAAAAAAQAAKAAAAAABAAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAoAAAA AAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAA AQAAIAAAAAACAAAIAAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAAGAAAAAAB AAAIAAAAAAEAABgAAAAAAQAACAAAAAABAAAoAAAAAAEAABAAAAAAAQAAAAAAAAABAAAIAAAAAAEA ABgAAAAAAQAACAAAAAABAAAgAAAAAAIAAAgAAAAAAQAAGAAAAAABAAAIAAAAAAEAACgAAAAAAQAA EAAAAAABAAAAAAAAAAEAAAgAAAAAAQAAKAAAAAABAAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAQ AAAAAAEAACgAAAAAAQAAEAAAAAABAAAAAAAAAAEAAAgAAAAAAQAAIAAAAAACAAAIAAAAAAEAABAA AAAAHHN0c2MAAAAAAAAAAQAAAAEAAAFKAAAAAQAABTxzdHN6AAAAAAAAAAAAAAFKAAAQ4AAAAaMA AACMAAAAbQAAAD0AAAE3AAAAZAAAAbIAAADTAAAATwAAAH8AAAHZAAAAqQAAAKAAAADHAAABUAAA ALAAAABsAAAAjAAAARMAAAHPAAAAlgAAAG8AAAAwAAADMwAAAQkAAABSAAABJgAAAuUAAAD1AAAB IgAAALAAAAJHAAAA2gAAAGoAAAB+AAABjgAAAIcAAABTAAAAbQAAAasAAACPAAAB9QAAAHoAAABt AAAAWQAAAYAAAACAAAAAUAAAAE4AAAH7AAAATAAAAGUAAAF7AAAAQQAAAJ8AAABMAAABQgAAAGkA AABvAAAAgQAAAtMAAACGAAAAWQAAADUAAAKBAAAA4QAAALsAAAEFAAAB+AAAAJUAAACzAAAAlAAA Ax8AAADVAAAA2wAAAHwAAAGnAAAA4AAAAF0AAABYAAABawAAAPwAAAB6AAAAWQAAAckAAACgAAAA TwAAAF8AAAFmAAAAdwAAAE0AAAA3AAACJgAAAEUAAABcAAAANQAAAbcAAABJAAAA3AAAAIQAAABU AAABawAAAHgAAABTAAAA4AAAADMAAAKxAAAAZAAAAFUAAABoAAAA9AAAAFkAAAG/AAAAeAAAAF4A AAGbAAAAbQAAAGQAAAAzAAACbwAAAFEAAABhAAAAsQAAA0IAAADQAAAArgAAAJ0AAAF4AAAAvgAA AKIAAACcAAAChQAAAyIAAADcAAAAmAAAAH4AAAQvAAAAfQAAAIMAAABIAAAAZwAAAGYAAABKAAAA YwAAAj4AAABmAAAAagAAAS8AAABaAAABJwAAAGgAAAB1AAAAQwAAAakAAABfAAAD5QAAAG8AAABE AAAA5wAAAfMAAAB2AAABSAAAAcUAAAJxAAAA8gAABB4AAAFgAAAAxQAAAQ0AAAOKAAAAyAAAA3cA AAEJAAAAxQAAAKQAAAI0AAAB1QAAAQIAAADLAAACygAAAaQAAAEbAAAA+wAAAsIAAACfAAADMwAA ALkAAACFAAAAXgAABPEAAACMAAABZQAABKUAAADYAAABhwAAAUQAAAGDAAABJQAAAL4AAAM3AAAA owAAARYAAAJvAAAAjQAAAnMAAADAAAAA6QAAAIoAAAIuAAABBQAAAJ4AAAEtAAACPAAAAZIAAACQ AAAAwAAAATAAAAC5AAAAfwAAAZMAAACdAAAC2QAAAWcAAAB6AAACFgAAAEcAAAF9AAAAaAAAAOoA AACAAAAALQAAAFIAAADbAAAAOAAAADwAAAEgAAAAOwAAAIYAAABlAAAAOQAAADwAAAD2AAAAVQAA ACsAAABLAAAA1QAAAEMAAABcAAAAQgAAFVgAAAGpAAAAfwAAAQsAAACuAAAAcQAAAGIAAAGTAAAA bAAAAJIAAABbAAABkwAAADMAAAA1AAACMAAAAF0AAAA8AAAAYQAAAiYAAACfAAAAVgAAAEcAAAGT AAAAUgAAAIwAAAA6AAAB+wAAADkAAABFAAAC9gAAAIoAAAB3AAAApQAAAjMAAADJAAAAlgAAALgA AAH2AAAAbQAAAMkAAADgAAABQQAAADQAAABTAAACzwAAAMAAAACNAAAAdAAAANQAAABZAAAAjQAA AGQAAAMKAAAAsQAAAFAAAACjAAABtgAAAPoAAAE+AAABCAAAAPQAAAHuAAABXAAAA8cAAAHLAAAA uQAAAUkAAAD5AAABagAAAOEAAABvAAAAwgAAAyEAAAGpAAABWgAAAOUAAAHcAAAAtgAAAZAAAAHi AAAAFHN0Y28AAAAAAAAAAQAAACwAAABidWR0YQAAAFptZXRhAAAAAAAAACFoZGxyAAAAAAAAAABt ZGlyYXBwbAAAAAAAAAAAAAAAAC1pbHN0AAAAJal0b28AAAAdZGF0YQAAAAEAAAAATGF2ZjU3Ljgz LjEwMA== "/> Your browser does not support the video tag. </video> <p><img src="post_files/post_51_1.png" alt="png"/></p>]]></content><author><name></name></author><category term="ekf"/><category term="slam"/><category term="bayesian"/><category term="filter"/><summary type="html"><![CDATA[ekf]]></summary></entry></feed>