PX4 Autopilot: A Practitioner's Guide

PX4 Autopilot: A Practitioner's Guide to Troubleshooting, Debugging, Building, and Testing

Everything I learned contributing 6 PRs to PX4-Autopilot in a single session — from Docker-based builds and sanitizer workflows, through uXRCE-DDS session debugging and MAVLink signing analysis, to SITL integration testing. Real bugs, real fixes, real build output.

March 22, 2026 · 14 min · Pavel Guzenfeld
Debugging Doxygen: How .inc Files Break C++ Docs

Debugging Doxygen: How .inc Files Silently Break C++ Documentation

Eigen’s .inc plugin headers were read by Doxygen but never preprocessed as C++ — meaning macros like EIGEN_PARSED_BY_DOXYGEN were silently ignored. Here’s how I verified it in Docker and what the one-line fix looks like.

March 21, 2026 · 8 min · Pavel Guzenfeld
Modified Gram-Schmidt vs Householder QR

Modified Gram-Schmidt vs Householder QR: A Performance Showdown in Eigen

I submitted a Modified Gram-Schmidt QR decomposition to Eigen and a maintainer asked: why? Here’s the benchmark data that answered the question.

March 21, 2026 · 7 min · Pavel Guzenfeld
Fixing an Infinite Loop in Eigen's 128-bit Division

Fixing an Infinite Loop in Eigen's 128-bit Integer Division

How a missing overflow check in Eigen’s TensorUInt128 division operator caused an infinite loop for any dividend above 2^127 — and the one-line fix that stopped it.

March 20, 2026 · 4 min · Pavel Guzenfeld
How GCC's fill_n Regressed Eigen's AutoDiffScalar

How GCC's std::fill_n Silently Regressed Eigen's AutoDiffScalar Performance

A performance optimization in Eigen’s fill path assumed all scalar types are equal. GCC’s libstdc++ disagreed — and AutoDiffScalar paid the price.

March 20, 2026 · 4 min · Pavel Guzenfeld
Migrating PX4 ROS Tests from Gazebo Classic to SIH

Migrating PX4's ROS Integration Tests from Gazebo Classic to SIH

PX4’s MAVSDK tests were migrated to SIH but the ROS integration tests were left behind on Gazebo Classic. This post documents the complete migration — the config changes, the CI pipeline surgery, the parameter name pitfall that silently broke GlobalPositionInterfaceTest, and how to reproduce the full 14-test suite locally in Docker.

March 20, 2026 · 9 min · Pavel Guzenfeld
Fixing GCC False-Positive Warnings in Eigen

Fixing GCC False-Positive Warnings in Eigen: A Deep Dive into -Warray-bounds at -O3

How a GCC 13 false-positive -Warray-bounds warning in Eigen’s TensorContraction led to a lesson about if constexpr, C++14 portability, and the right way to suppress compiler warnings in a large codebase.

March 18, 2026 · 4 min · Pavel Guzenfeld