Skip to content

Blog

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.

The first time, I learned ROS and the specifics of robot programming as I went. Like most roboticists, I lacked some key software engineering skills. The software quickly became a mess, and I had to start over. However, each iteration helped me better understand bottlenecks and find solutions. Fortunately, most of the issues I faced were software engineering-related, and with so many people working on this globally, excellent open-source solutions exist—if you know where to look. This was an evolutionary process: with each iteration, I removed components that were hindering progress or lacked the quality required for industrial applications and replaced them with those that met the necessary standards.  

All those iterations led to an architecture built on high-quality open-source tools—one that is scalable, maintainable, and elegant. And yes, I’m quite proud of it. This is the architecture I use in ROX Automation projects, enabling me to stay in control as complexity increases. 

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

ROX System architecture

Note: This is all free, but it takes a lot of time and effort. I'd love to know if it's valuable to you. Follow me if you're interested in full-stack robotics. There’s a lot to cover—embedded systems, Docker, DevOps, async programming, middleware, digital twins, front-end development, and much more...

Please don't hesitate to reach out at jev@roxautomation.com so I can better focus my future posts on what matters most.

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 crucial for a reliable CI/CD workflow, but it can be challenging when you need live data visualization, especially for things like tuning motion control.

The good news? There's a simple solution. Just send your data to Plotjuggler using a UDP socket. I've included a code example below to show you how it's done. It's straightforward yet still packs in all the features you need.

Need to analyze data quickly? Just use the UDP_Client from the example. With just a few lines of code, you're all set.

Happy coding!

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.