<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>S1S2 blog</title><description>S1S2 (System 1, System 2) blends classical robotics — the fast System 1 that drives the robot — with foundation models — the slow, deliberate System 2 that plans.</description><link>https://s1s2.ai/</link><item><title>Building a Factor Graph Engine From Scratch</title><link>https://s1s2.ai/2026/07/17/building-a-factor-graph-engine-from-scratch/</link><guid isPermaLink="true">https://s1s2.ai/2026/07/17/building-a-factor-graph-engine-from-scratch/</guid><description>Continuing my journey through the implementation of factor graph-based state estimation, we first explored how a classic Extended Kalman Filter (EKF) update is not a black-box matrix equation, but fundamentally a two-factor graph solve via Non-linear Least Squares (NLS). When we look under the hood </description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate></item><item><title>From Offline to Online SLAM</title><link>https://s1s2.ai/2026/07/17/from-offline-to-online-slam/</link><guid isPermaLink="true">https://s1s2.ai/2026/07/17/from-offline-to-online-slam/</guid><description>Batch Factor Graphs unlocked fabulous offline SLAM to produce highly accurate maps. You collect data on a long robot run, feed it to the...</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Gaussians and the Information Form: The Secret Sauce of Factor Graphs</title><link>https://s1s2.ai/2026/07/17/gaussians-and-the-information-form-the-secret-sauce-of-factor-graphs/</link><guid isPermaLink="true">https://s1s2.ai/2026/07/17/gaussians-and-the-information-form-the-secret-sauce-of-factor-graphs/</guid><description>When you first dive into State Estimation and Kalman Filters (whether Extended or Unscented), you learn that they belong to a broader family of Gaussian Filters. But soon enough, a close cousin is introduced: the Information Filter. This alternative view makes you realize that a Gaussian distributio</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Lie Groups And On-Manifold Optimization</title><link>https://s1s2.ai/2026/07/13/lie-groups-and-on-manifold-optimization/</link><guid isPermaLink="true">https://s1s2.ai/2026/07/13/lie-groups-and-on-manifold-optimization/</guid><description>If you are a roboticist, you have certainly encountered issues when working with plain angles (e.g., θ in a 2D pose) and related rotations...</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Nonlinear Least Squares — One Gauss-Newton Step Is a Filter; Many Are a Smoother</title><link>https://s1s2.ai/2026/07/08/nonlinear-least-squares-one-gauss-newton-step-is-a-filter-many-are-a-smoother/</link><guid isPermaLink="true">https://s1s2.ai/2026/07/08/nonlinear-least-squares-one-gauss-newton-step-is-a-filter-many-are-a-smoother/</guid><description>In a previous breakdown, we explored how the classic Extended Kalman Filter (EKF) can be viewed as an optimized, local version of a factor graph, where an EKF update is essentially a single, two-factor graph solve. As we push deeper into Factor Graphs for State Estimation, SLAM, and auto-calibration</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate></item><item><title>A Kalman Update is a Two-Factor Factor Graph Solve</title><link>https://s1s2.ai/2026/07/05/a-kalman-update-is-a-two-factor-factor-graph-solve/</link><guid isPermaLink="true">https://s1s2.ai/2026/07/05/a-kalman-update-is-a-two-factor-factor-graph-solve/</guid><description>The classical Kalman Filter was an engineering shortcut designed for an era when compute was severely limited and maintaining a history of past sensor measurements was too costly. It leveraged Bayes’ rule and the Markov property to exploit the fact that the present state only depends on the immediat</description><pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Making Your State Estimator ROS 2 Compliant (REP-105)</title><link>https://s1s2.ai/2026/06/30/making-your-state-estimator-ros-2-compliant-rep-105/</link><guid isPermaLink="true">https://s1s2.ai/2026/06/30/making-your-state-estimator-ros-2-compliant-rep-105/</guid><description>I have been having so much fun building and testing my custom state estimator. Although I am designing it to be framework-agnostic, I am building a dedicated ROS 2 layer. ROS 2 is the obvious choice for prototyping the System 1 / System 2 (Physical AI, Embodied AI, or whatever trendy term you prefer</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Fusing LiDAR Odometry for GPS-Denied Navigation</title><link>https://s1s2.ai/2026/06/25/fusing-lidar-odometry-for-gps-denied-navigation/</link><guid isPermaLink="true">https://s1s2.ai/2026/06/25/fusing-lidar-odometry-for-gps-denied-navigation/</guid><description>In a previous article, I described how GPS can be fused with pure dead reckoning to achieve more accurate outdoor robot pose estimation using an Extended Kalman Filter (EKF). But what if you are navigating indoors, or outdoors with a poor GPS signal? What if you are in a war zone where GPS is jammed</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Augmenting Dead Reckoning State Estimation with GPS for Better Odometry</title><link>https://s1s2.ai/2026/06/24/augmenting-dead-reckoning-state-estimation-with-gps-for-better-odometry/</link><guid isPermaLink="true">https://s1s2.ai/2026/06/24/augmenting-dead-reckoning-state-estimation-with-gps-for-better-odometry/</guid><description>Relative sensor fusion can only take a mobile robot so far. To build truly robust autonomous systems, you have to bound dead reckoning drift with absolute global references. As part of my ongoing development of System 1 and System 2 robot autonomy infrastructure, I’ve expanded my Python Extended Kal</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate></item><item><title>3D Perception: a LiDAR-Camera Pipeline — Part 6: Projecting 3D Intelligence into a 2D Map as a Bird’s Eye View</title><link>https://s1s2.ai/2026/05/21/3d-perception-a-lidar-camera-pipeline-part-6-projecting-3d-intelligence-into-a-2d-map-as-a-birds-eye-view/</link><guid isPermaLink="true">https://s1s2.ai/2026/05/21/3d-perception-a-lidar-camera-pipeline-part-6-projecting-3d-intelligence-into-a-2d-map-as-a-birds-eye-view/</guid><description>This article is part of a hands-on series building a 3D Perception Pipeline with ROS 2 Jazzy. In modern robotics, seeing isn’t enough —...</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate></item><item><title>3D Perception: a LiDAR-Camera Pipeline — Part 5: Merging 2D Intelligence and 3D Depth with Frustum Fusion</title><link>https://s1s2.ai/2026/05/20/3d-perception-a-lidar-camera-pipeline-part-5-merging-2d-intelligence-and-3d-depth-with-frustum-fusion/</link><guid isPermaLink="true">https://s1s2.ai/2026/05/20/3d-perception-a-lidar-camera-pipeline-part-5-merging-2d-intelligence-and-3d-depth-with-frustum-fusion/</guid><description>This article is part of a hands-on series building a 3D Perception Pipeline with ROS 2 Jazzy. In modern robotics, seeing isn’t enough —...</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>3D Perception: a LiDAR-Camera Pipeline — Part 4: 2D Camera Detections with YOLO</title><link>https://s1s2.ai/2026/04/22/3d-perception-a-lidar-camera-pipeline-part-4-2d-camera-detections-with-yolo/</link><guid isPermaLink="true">https://s1s2.ai/2026/04/22/3d-perception-a-lidar-camera-pipeline-part-4-2d-camera-detections-with-yolo/</guid><description>This article is part of a hands-on series building a 3D Perception Pipeline with ROS 2 Jazzy. In modern robotics, seeing isn’t enough —...</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate></item><item><title>3D Perception: a LiDAR-Camera Pipeline — Part 3: 3D Point Cloud Processing &amp; Clustering</title><link>https://s1s2.ai/2026/04/08/3d-perception-a-lidar-camera-pipeline-part-3-3d-point-cloud-processing-clustering/</link><guid isPermaLink="true">https://s1s2.ai/2026/04/08/3d-perception-a-lidar-camera-pipeline-part-3-3d-point-cloud-processing-clustering/</guid><description>This article is part of a hands-on series building a 3D Perception Pipeline with ROS 2 Jazzy. In modern robotics, seeing isn’t enough —...</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate></item><item><title>3D Perception: a LiDAR-Camera Pipeline — Part 2: The ROS 2 Graph &amp; Perception Data Flow</title><link>https://s1s2.ai/2026/03/31/3d-perception-a-lidar-camera-pipeline-part-2-the-ros-2-graph-perception-data-flow/</link><guid isPermaLink="true">https://s1s2.ai/2026/03/31/3d-perception-a-lidar-camera-pipeline-part-2-the-ros-2-graph-perception-data-flow/</guid><description>This article is part of a hands-on series building a 3D Perception Pipeline with ROS 2 Jazzy. In modern robotics, seeing isn’t enough —...</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate></item><item><title>3D Perception: a LiDAR-Camera Pipeline — Part 1: Setting Up Your Development Environment</title><link>https://s1s2.ai/2026/03/26/3d-perception-a-lidar-camera-pipeline-part-1-setting-up-your-development-environment/</link><guid isPermaLink="true">https://s1s2.ai/2026/03/26/3d-perception-a-lidar-camera-pipeline-part-1-setting-up-your-development-environment/</guid><description>This article is part of a hands-on series building a 3D Perception Pipeline with ROS 2 Jazzy. In modern robotics, seeing isn’t enough —...</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Robot Vision: ROSifying a YOLO Pipeline</title><link>https://s1s2.ai/2026/01/21/robot-vision-rosifying-a-yolo-pipeline/</link><guid isPermaLink="true">https://s1s2.ai/2026/01/21/robot-vision-rosifying-a-yolo-pipeline/</guid><description>Build a full robot vision pipeline: turn your YOLO script into a real ROS 2 perception node.</description><pubDate>Wed, 21 Jan 2026 00:00:00 GMT</pubDate></item></channel></rss>