Rico's Nerd Cluster

「离开世界之前 一切都是过程」

Robotics - [3D SLAM - 6] KISS ICP Review

KISS-ICP: Simple Odometry, Done Carefully The paper’s core claim is simple: you do not need a complicated frontend, feature extraction, normals, surfels, IMU fusion, or learned components to get s...

Robotics - [3D SLAM - 4] GICP

Generalized ICP, BFGS Optimization

1. Intuition In GICP (Segal et al, 2009), each matched pair is not just two points $p_s$ and $p_t$. Each point also carries a local covariance estimated from its neighbors (for example, 20 nearest...

Robotics - [3D SLAM - 3] Lidar Odometry

Direct Lidar Odometry, NDT, Incremental NDT, Indirect Lidar Odometry, LOAM

Direct Lidar Odometry When given two scans, a direct NDT method means no features are extracted. The two scans would directly go through NDT for finding their relative poses. The workflow is as fo...

Robotics - [3D SLAM - 2] Scan Matching Hands-On Notes

Preact-Mojave, Lidar-Only Front-End

Preact-Mojave Build & Workflow The ROS2 driver for Preact-Mojave can be found here. When testing it, I ran into below questions: Why make provision & make ros2? make provisi...

Robotics - [3D SLAM - 1] Scan Matching

3D Point-Point ICP, 3D Point-Plane ICP, NDT

The Scan Matching Problem When we run scan matching, we usually have two point clouds: a source scan $S_1 = {\mathbf{p}_1, \ldots, \mathbf{p}_n}$ (the new measurement), and a target scan $S_...

Robotics - [Bugs - 2] SLAM Related Small Bugs

Passing Ptr By Value

⚠️ Beware of Passing Smart Pointers by Value Passing a smart pointer (e.g. std::shared_ptr or boost::shared_ptr) by value is fine when you’re only modifying the object it points to. But if you int...

Robotics - [Bugs - 1] SLAM Related "Epic Bugs"

G2O Optimization Vertex Updates, Compiler-Specific Bugs, Yaml-cpp

Below is a list of bugs that took me multiple hours, if not days, to troubleshoot and analyze. These are the “epic bugs” that are worth remembering for my career. Epic Bug 1: G2O Optimization Didn...

ROS2 - Time Synchronizer

ApproximateTimeSynchronizer The ApproximateTimeSynchronizer is useful when multiple ROS topics need to be processed together, but their timestamps do not match exactly. In this example, color imag...

ROS2 - QoS

Reliability Reliability controls what happens while publisher and subscriber are already matched and communicating. Reliability Meaning Behavior Typical use ...

ROS2 - Packages

Pure Python Packages

ROSPy for a pure ROS 2 Python package, you usually do not need a CMakeLists.txt. There are two valid ROS 2 Python package styles:  ament_python style, No CMakeLists.txt. 1 2 3 4 5 package.xm...