Blog
State estimation, from first principles.
Factor graphs, Kalman filters, sensor fusion and GPS-denied navigation — the theory behind System 1, worked through in code.
Building a Factor Graph Engine From Scratch
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
ReadFrom Offline to Online SLAM
Batch Factor Graphs unlocked fabulous offline SLAM to produce highly accurate maps. You collect data on a long robot run, feed it to the...
ReadGaussians and the Information Form: The Secret Sauce of Factor Graphs
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
ReadLie Groups And On-Manifold Optimization
If you are a roboticist, you have certainly encountered issues when working with plain angles (e.g., θ in a 2D pose) and related rotations...
ReadNonlinear Least Squares — One Gauss-Newton Step Is a Filter; Many Are a Smoother
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
ReadA Kalman Update is a Two-Factor Factor Graph Solve
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
ReadMaking Your State Estimator ROS 2 Compliant (REP-105)
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
ReadFusing LiDAR Odometry for GPS-Denied Navigation
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
ReadAugmenting Dead Reckoning State Estimation with GPS for Better Odometry
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
Read3D Perception: a LiDAR-Camera Pipeline — Part 6: Projecting 3D Intelligence into a 2D Map as a Bird’s Eye View
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 —...
Read3D Perception: a LiDAR-Camera Pipeline — Part 5: Merging 2D Intelligence and 3D Depth with Frustum Fusion
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 —...
Read3D Perception: a LiDAR-Camera Pipeline — Part 4: 2D Camera Detections with YOLO
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 —...
Read3D Perception: a LiDAR-Camera Pipeline — Part 3: 3D Point Cloud Processing & Clustering
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 —...
Read3D Perception: a LiDAR-Camera Pipeline — Part 2: The ROS 2 Graph & Perception Data Flow
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 —...
Read3D Perception: a LiDAR-Camera Pipeline — Part 1: Setting Up Your Development Environment
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 —...
ReadRobot Vision: ROSifying a YOLO Pipeline
Build a full robot vision pipeline: turn your YOLO script into a real ROS 2 perception node.
Read