K.I.W.I, aka ‘Kinetic Inverted Wheeled Invention’ is the next project on our journey forwards. You may have noticed a trend in naming: I really like bacronyms, no matter how forced. This project will be a little more involved than QUAIL, as an inverted pendulum is inherently unstable, requiring us to do some analysis before getting into the design. This is one of my favorite parts of working on robots, there is something really satisfying about being able to do a bit of math to predict how the robot will behave.
QUAIL is completed! Well, it took WAY longer than expected. Life got very busy for me over the last few months, and I struggled to find the time and motivation to get this thing over the line. The last requirement for the project was to ‘close the loop’, and figure out a nice way to feedback the state of the sensor bar. Thankfully, it was all pretty simple once I got going again.
Failure to encode Tragically, we have hit a speed-bump with the project, the phototransistor on one of the encoders is dead. Obviously this calls for a moment of silence.
The rest of the circuit appears to be working fine, however. While I did want to implement the code to utilise the encoders, it was never actually needed in order to get the robot to follow a line. I could probably replace the part and get it working again, but I do not feel it is worth the effort given the scope of the project.
I wanted to write this to act as a quick lookup for anyone who needs it (Mostly me). Almost all of the guides I found mention inserting a launch-prefix into a launch file to launch gdb with the node, but I don’t like doing that. I don’t want to have start gdb from scratch and manually insert the break-points each time I want to debug. That’s goofy. Also, I’d like to use my editor’s built-in debugging tools.
The Motor Driver Node Getting an output from the PI If we’re going to drive the motors, we’re going to need some method of interfacing with the GPIO output pins on the Pi. After doing some reading and researching, I think that pigpio (Probably pronounced pi-gpio, and not pig-pio like my mind keeps reading it as) perfectly fits the bill for what we are looking for.
There is a small potential caveat about using pigpio, which is that under normal operation, it requires sudo access.
The chassis This is an Arexx RP6 robot platform. I have spent a lot of time messing with this thing over the years, and I have learned a lot from it. The website for it can be found here: RP6 Robot system (I highly recommend doing some browsing around their website, it’s a reminder of a time when websites had character). A run down of the specs lists an 8-bit ATMEGA32, a pair of optical encoders, motors, light sensors, touch sensors, the whole shebang.
Great, yet another “How to install $x$ on $y$” blog post. Exactly what the internet was missing. Just be grateful I’m not serving ads on this website.
I wanted to do my best to ensure this build log was as close to self-contained as reasonable, which means that sometimes we’re going to get low hanging fruit. I found two different sources already covering this, one Youtube Video by Ubuntu-robotics, and a Blog post on Medium.
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.