How I Made A Wheely Robot.

So far I’ve had a policy of only making updates when I’ve completed a project, but instead I’m going to post an update of a project that’s still in progress since it would take so long to finish. Introducing: the wheely robot.
20160515_220806
Note that I’m not exactly the best photographer yet, but at least you can figure out that it’s a robot.

So what does it do? Well so far I’ve been working on it as a sort of experiment on how to program robots.
A problem that I’ve run into before with earlier attempts at building robots was that I might tell the robot to move forward some distance (like for example: one meter), and it would move forward, but if something was in the way, or its wheels didn’t get as much traction as it thought it was getting then it would stop too soon, and not realize that it hadn’t actually reached the goal.

The problem at its core was that the earlier robots weren’t aware of the kinds of the fact that when they try to do something, that thing might not have actually gotten done because of some kind of obstacle. That’s where the fancier kinds of programming come into play.

The first fancy programming trick is what’s called a “PID controller”. The idea is pretty simple: the robot tells its wheels to move forward at speed x, and there are sensors at the wheels that tell the robot how fast its wheels are ACTUALLY moving, and then that data goes to the computer which uses an algorithm known as the “PID controller” that adjusts to any variations in speed.

More info here:
https://youtu.be/ZhYi7x0rMoE?list=PLkHsKoi6eZnx9zMNsvL9ni7–2Lvyb88d

This is a pretty simple way to adapt to problems, my robot uses wheel encoders to figure out where the wheels are, and they aren’t a very good way to get sensor feedback which is why I’m working on getting more sensors for it.

I’ve also added multiple computers onto it. One handles sensor data since there will be so many sensors on the robot in the future, and one controls everything. The two communicate via i2c. With fancier programming techniques I could someday get it to use behavior-based robotics to go around obstacles (more info here, and here).

I’m also keeping a github repo for it here which will hopefully have some useful info (note: I’ve made changes to it recently which I haven’t tested). I’ve also setup an amazon wish-list here that has (almost) all the parts I used (it as of this writing doesn’t contain the screws that I used to screw everything in).

I’m hoping to someday make this go throughout my apartment and pick up things off the floor for me before a vacuum robot goes through.