Q.U.A.I.L: Quick Unmanned Autonomous Inspector of Lines

Keywords: #ros2 #quail

The What:

QUAIL will be a line following robot. That is as much as I want it to do. Sounds simple enough, but there is a little more going on than that.

The Why:

Over the last few months, I’ve been working on a completely different project. I don’t want to spoil what the project was just yet, as it’s still ongoing. it was an attempt to push my own boundaries in terms of what I know and understand about robotics. Unfortunately, it seems I bit off more than I could chew, and got myself bogged down. I attempted to dive into the unknown on too many fronts, and as I could only work on the project during odd hours in my spare time, I was finding myself spending most of my time going through my notes, trying to figure out where I was last time I worked on it.

The moment I knew I was out of my depth was when I was going through one of the nodes I created, and began working on implementing a joint trajectory interface. After some reading and coding, I stumbled on a comment from a few months ago that literally said “Note: The purpose of this node is to handle only the joint states. This node doesn’t handle joint trajectories, stop trying to put a joint trajectory controller here!”. I didn’t remember writing the comment, and I couldn’t figure out why I wasn’t supposed to put the trajectory interface in that node.

So, after some thinking, I decided I’d need to take a few steps back. Then I laid out what I think some of the key problems I was facing:

  1. I didn’t really understand what I was trying to do with ROS2:

    I work with ROS1 professionally, I believe I know it pretty well. I figured I’d be able to use some of the hard real-time concepts I found here Real time Performance in ROS 2 AND learn the ins and outs of ROS2 as I went. That may have been a little too ambitious, due to both time constraints and problem 2.

  2. ROS2 is new, and as such, it can be difficult to find solutions to problems

    This one is relatively self explanatory. There are not many working examples if you’re looking for code to reference. PLENTY of the available examples are for setting up a workspace, or getting a gazebo plugin working, but in terms of fully fledged platforms, I tended to have trouble finding exactly what I was looking for.

With these two issues in mind, it occurred to me that heading back to basics would allow me to learn ROS2 from the ground up. Compounding this, forcing myself to document my project in long form, with solutions to any small issues I run into, will both ensure that I understand what I’m doing, and hopefully help to reduce encounters with issue 2 for anyone else.

I am hoping to design my projects as platforms with I can play around and experiment with. My interest with robots leans very heavily into the control theory side, and I hope to use these robots to experiment with new methods I haven’t had a chance to investigate yet. I’m not especially happy with this as a first post, nor as an introduction, but I know I’ll never get it done if I try to iron it out.

And with that, onto the investigation and research!