A year or so ago (2019 was soooo long ago!) I read an interesting book titled “Ultralearning” by Scott H. Young that made me rethink how things are best learned. Or, more specifically, how I can make more of what I’m trying to learn stick to my brain. When learning a new subject, we each have to find our own system that works best for us. I’m finding that I learn best by setting a goal (what I want to accomplish with the new knowledge) and finding the resources to get there, as opposed to a strict following of a single predefined curriculum (the typical classroom path). That means building my own curriculum based on my goal.
I’ve started a new learning project in robotics. The current goal is to build a couple of ground rovers, one designed for indoors and the other for outdoors. I am documenting my learning journey on this site. Why am I doing this? To help clarify my thinking about what I’ve learned so it’s more likely to stay in my head, and also to possibly help anyone else wanting to learn robotics.
Why learn robotics? Simply because learning robotics is fun and building a robot of any type can involve so many areas, and one can choose to focus on specific areas or learn a broad and overarching perspective. Building a robot can involve (but is not limited to) computers, microcontrollers, motor control, communication protocols, circuit building, mechanical engineering, kinematics/physics, artificial intelligence, programming and software engineering, Skynet…the list goes on.
You can find many websites all over the web about building robots and I don’t believe there will be any concepts introduced here that haven’t already been covered by others elsewhere. I may even reference other sites from time to time that I find helpful in one way or another. I’m just writing about my personal journey of learning robotics.
Background
I’ve worked with robotics a small amount in college (Parallax Boe Bot) and at home (6 wheel rover driven by R/C controller), but nothing very deep or extensive. I do have extensive computer experience (PC and server) and have worked with the Arduino, the Raspberry Pi, and the BeagleBone. I’m comfortable building electronic circuits from schematics, but have little experience designing my own circuits.
I have some programming experience, mostly using C to program AVR microcontrollers. I have written scripts in Linux using Bash and Python, usually by finding what I need on the web and modifying it to suit my purposes. I have taken classes in Java and C++ but it’s been a while and I have not used them outside the classroom. I enjoy programming but fall somewhere between a beginner and an intermediate.
I list my background in these areas so you can get an idea of where I’m starting from so, just in case you’re learning any of these things yourself, you have an idea of what level of expertise (or lack thereof) I will be writing from. This project is primarily to help me clarify what I’m learning so I will try to simplify ideas where I can. I will attempt using the Feynman Technique (link) to help break down information for myself. The biggest factor enabling any type of learning is curiosity.
The Initial Idea
My initial plan is to start with a chassis that includes the wheels and motors, and add a motor controller board, a Raspberry Pi 4 for the brain, and an Arduino-based board to handle the hardware control functions. The Pi will be running ROS (Robot Operating System) within Ubuntu Linux. Once I get the motor control functions working within this system, I will start adding sensors to increase the capabilities of the rover.
The main goal I’m working towards is a self-controlled mapping vehicle…just turn it on, and it roams around within a predefined area and maps obstacles. I want to also add things along the way such as voice,speech and face recognition. If at some point the Raspberry Pi 4 is being pushed beyond its limits I will upgrade to a more powerful computer, such as an Intel mini-computer or a HAL 9000.
Starting Points
I already have some of the hardware I need to get started. I have this Rover 5 (picture) to use indoors and this 6 wheeler (picture) to use outside. Over time if I find more suitable chassis at decent prices I might upgrade. The 6 wheel chassis is great for driving around on grass, but I will have to implement some way to protect the electronics from dirt and moisture.
I also have a Raspberry Pi 4, an Artemis Redboard from SparkFun, and a few assorted proximity sensors and IMUs, but will have to buy new parts as I move along through the project. I will keep a tally of the parts cost of each rover.
My Plan For Learning What I Need To Know
In the beginning my learning will consist mostly of ROS and Python. I want a robot system that I can keep expanding, and the Robot Operating System appears to be the best way to structure the code and make it the most manageable. Also, many drivers and other free code snippets are available to interact with some of the common robot hardware that is available. Nodes used within ROS can be written in either Python or C++, and ROS handles the communication between nodes, so nodes written in C++ and nodes written in Python can communicate with each other.
Python is easier to learn and thus faster to implement, but C++ is more efficient and thus runs faster. You only need one or the other to use ROS and I will start out using Python. As I get deeper into robotics and using ROS, I could decide to relearn C++ to use in ROS.
While going through the initial learning of ROS and Python, the robot code will be implemented in a simulator that works with ROS. This is used to prototype before committing to physical hardware. The simulator uses a 3D model of the robot, so I may be learning and using 3D modeling software (most likely Blender) to create a software version of the robot.
As I eventually start implementing sensing, location and communication devices on the robot I will be learning how each of these work (to the degree that I find useful). I will also be learning some robot theory from a series of classes on Coursera and a few books on the subject.
This is a part-time project, currently a hobby, mixed in with all the other projects I have to work on, so I do not currently know how fast I will progress. As I get past the initial learning phase, I may set time goals for how fast I move through the material. The most important thing is to enjoy it and have fun learning.