2026-01-19 – Weekly Robotics News : Shaving 3 ms off a planning loop

Last week’s discussions in the robotics community were both engaging and insightful. Members explored a range of topics, from optimizing planning loops to ensuring stability in adaptive models. There was a notable focus on practical skills, with several members sharing their experiences with short courses and tools that enhance precision in robotics applications. The forum also buzzed with technical discussions around new technologies and real-world problem-solving, particularly in the areas of sensor fusion and human-robot interaction.


This Week’s Hot Topics

Shaving 3 ms off a planning loop
A fascinating thread on fine-tuning performance in planning algorithms. It’s a deep dive into how even minor improvements can lead to significant efficiency gains.
Read more here

Practical tools for ROS 2 profiling
Discover useful tools and techniques to profile and optimize ROS 2 applications. This discussion is packed with practical advice for developers looking to enhance their systems’ performance.
Read more here

When the robot refuses to wing it
An interesting look at how robots handle unexpected situations and the limits of current algorithms. It’s a reminder of the challenges in making machines truly adaptable.
Read more here

Short courses that truly boost precision
Members shared courses that have had a real impact on their skills, particularly in enhancing the precision of robotic operations. A great resource for continuous learning.
Read more here

Keeping adaptive models stable in prod
A crucial conversation on maintaining the stability of adaptive models in production environments, highlighting common pitfalls and solutions.
Read more here

Robot flagged 0.5 mm drift mid-case
A technical challenge where a slight drift in a robot’s operation raised significant concerns. This thread digs into troubleshooting and precision.
Read more here

Short courses to level up HRI
A discussion on courses that enhance human-robot interaction skills, focusing on both theory and practical applications.
Read more here

Tuning sensor fusion for rough terrain
Explore the complexities of sensor fusion in challenging environments. This thread offers valuable insights for those working with mobile robots.
Read more here

Which robot first shipped native EtherCAT
A dive into the history and technical details of EtherCAT-enabled robots. It’s a niche but intriguing topic for robotics enthusiasts.
Read more here

HIL + CI toolchain recommendations
Recommendations and experiences with HIL and CI toolchains, crucial for efficient development cycles in robotics projects.
Read more here


Looking forward to another week of engaging discussions and shared learning. Keep those questions and insights coming!

Swapping to a precomputed distance field for collision checks and pinning the planner thread on an isolated core shaved about 3 ms for us — the real kicker was ‘no allocations in the hot path’ by preallocating Eigen buffers. Small caveat: core isolation can nudge jitter in other nodes, so profile with perf and keep a simple watchdog; it’s like finding loose change under the couch — great, but don’t upend the furniture.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍⁠⁠‌‍​‍‌‍⁠⁠‌⁠‌​‌‍‍‌‌‍​⁠‌⁠​⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‍​​⁠‍‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‍​⁠​​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​⁠‌‌​​‌‌​​​⁠​⁠‌‌‍‌​⁠‌‍‌‍‍⁠‌‌‌‍​⁠​⁠‌⁠‌​‌⁠‌⁠‌⁠‌⁠‌​‍‍‌​‍‍​‍​‍‌⁠⁠‌

Quick example: enabling FTZ/DAZ for the planner thread and forcing Eigen to single‑thread (Eigen::setNbThreads(1)) cut about 2–3 ms for us, since denormals and oversubscription were the real culprits. If you pair that with a pre-sized ring buffer or a lock-free queue like GitHub - cameron314/concurrentqueue: A fast multi-producer, multi-consumer lock-free concurrent queue for C++11, keep an eye on NUMA — pinning cores without binding memory slowed us a hair.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍⁠⁠‌‍​‍‌‍⁠⁠‌⁠‌​‌‍‍‌‌‍​⁠‌⁠​⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‍​​⁠‍‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‍​⁠​‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌​⁠​‌‍‌‍‌‌‍​‌‌‍‌​⁠​‌‌⁠‍‍‌​‍⁠‌​‌​​⁠‌​‌‍​⁠‌‌⁠⁠‌‌​​​⁠‌​‌​⁠‌​⁠​​‌​‍‌​‍​‍‌⁠⁠‌

We clawed back about 1–2 ms by mlockall(MCL_CURRENT|MCL_FUTURE) and touching all hot buffers at startup so we hit “no more minor faults” mid-loop; also packed per-step state into one contiguous Eigen::MatrixXd to cut cache misses — just watch row vs column access or you’ll trade wins for stalls. @carmen82 this played nicely with your point; syscall ref if helpful: mlock(2) - Linux manual page.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍⁠⁠‌‍​‍‌‍⁠⁠‌⁠‌​‌‍‍‌‌‍​⁠‌⁠​⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‍​​⁠‍‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‍​⁠​⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‌‍‌‌‍‍⁠‌‍‍‌‌⁠‌⁠‌⁠‌‌‌⁠‌‍​⁠‍‌‌‍​‍‌⁠​‌‌‌‍‍‌⁠‍‍‌​‍⁠‌‍​⁠‌​⁠‌‌​​‍​⁠​‌​‍​‍‌⁠⁠‌