Skip to content

Blog

ROX-gamma: RTK-GPS navigation made easy.

It is finally ready for an official release! ROX-Gamma is an implementation of our System Architecture on a real robot.

The toolbox contains everything required to quickly build an autonomous robot with RTK-GPS. Think mowers, weeding robots, data-gathering machines, and more.

Watch ROX-gamma in action on a real robot!

This is not just "another nav stack." After years of work, countless iterations, and relentless refactoring, I'm genuinely proud of the result. It's not perfect (yet), but it’s more than good enough for release. In fact, I dare to say this is the most accessible and flexible base for AGV development out there.

What Makes ROX-gamma Unique

What sets this framework apart is its 100% implementation in Python. From the hardware interface over CAN bus to the web user interface, everything is handled in one language. Here’s what it offers:

  • Autonomous driving with waypoint following (Pure Pursuit algorithm).
  • Manual joystick operation.
  • Hardware simulation for testing.
  • Lightweight implementation with under 2,000 lines of code.

The project uses concepts of "Nodes" and "topics" used in ROS, but with a much simpler implementation on top of python asyncio framework This simplicity makes the project easy to navigate, maintain, and extend.

Check out the Repository

The full code and documentation for the project are available in the GitLab repository.

It does not get much easier than this, but...

While this navigation stack is designed to be as simple and accessible as possible, robotics remains inherently complex, involving real hardware challenges, multiple technologies, and asynchronous behavior. Unfortunately, I can’t make it much simpler than this without sacrificing its purpose: enabling the quick development of production-grade robots.

Need Help with Your Project?

We offer commercial support and training to help you integrate this software into your system quickly and effectively. Contact us for assistance with hardware or software development.

Note

This project has been done in close cooperation with Fontys GreenTechLab, who designed and built the robot hardware.

Can bus diagnostics

Over the weekend I've built a pair of CAN nodes to assist with dianosis and benchmarking of CAN bus systems. The setup is essentially a ping-pong test between two nodes (Alice and Bob) attached at two ends of a CAN bus.

  • Alice sends incremental counter and waits for reply from Bob.
  • Bob checks for missing messages and returns messages with diagnostic data appended.

Full-stack robotics architecture

Full-stack robotics is incredibly broad and complex, spanning everything from web development to physics, electronics, and algorithm development. Over the past five years, I've programmed several autonomous machines for commercial applications—each one going through multiple software iterations. In total, I've done this around ten times.

To avoid getting lost in the details, let’s start with the big picture: the architecture.

ROX System architecture

Effortlessly Add a Heartbeat and Power Button to Your Raspberry Pi

Want to make your Raspberry Pi experience even better with a visible heartbeat and easy shutdown? It's simpler than you think and doesn't even require any software!.

Just connect an LED to GPIO 4 and a momentary push button between GPIO 3 and a ground pin.

Next, tweak your config.txt by adding these two lines:

dtoverlay=gpio-led,gpio=4,label=heartbeat-led,trigger=heartbeat
dtoverlay=gpio-shutdown,gpio_pin=3,active_low=1,gpio_pull=up

This setup will give you a pulsating heartbeat indicator and a convenient power button.

Reboot your Pi, and voilà! Your Raspberry Pi now has a handy power button and a cool heartbeat indicator, making it more user-friendly, especially for headless operations.

Enjoy the simplicity and functionality of your upgraded Raspberry Pi! 🚀🖥️🎉

Why asyncio is Ideal for Robotics Development

As a professional in robotics software development, I've extensively used ROS. In fact, ROS2 is the current standard in this field. However, I've recently transitioned to using asyncio, a leaner solution that allows for the creation of more efficient and manageable codebases in a shorter time. In this post, I'll share my experiences with ROS and explain why I believe asyncio is a superior choice.

Solid Software Design Principles for Robotics Developers

My journey as a robotics developer began during my Physics studies. There was a significant shift from initially writing complex and chaotic code to my current effective use of various software design patterns and practices. This change has been crucial for building scalable and reliable software for autonomous machines. Like many robotics enthusiasts, my journey didn't start with a Computer Science degree; I learned programming through hands-on experience in the field.

In this post, I aim to share the key design principles that guide me every day. These principles have enabled me to independently create advanced robotics software, making the entire development process more manageable and efficient.

Plotting live data with Plotjuggler

Containerization is essential for a reliable CI/CD workflow but can be tricky when live data visualization is needed, such as for motion control tuning.

A simple solution is to send data to Plotjuggler over a UDP socket. The example code below shows how to set this up.

For quick data analysis, use the provided UdpClient class. An example of sending test data is incuded as demo().

Plotjuggler

Speed up your ROS2 development with a Docker stack

In this post, I'm going to share with you my solution for quickly setting up development and runtime environments around ROS2. If you've ever struggled with incompatible package versions, conflicting OS requirements, or reproducing the exact same setup across multiple machines, then this post is for you. By utilizing a Docker stack, you can bring up a clean development environment in mere minutes, allowing you to focus on developing your robotics applications instead of system management.