General design

A project log for R.Hasika - a precise and compact robot base (rpi)

A precise and upgradable robot base built around a raspberry pi

Audrey RobinelAudrey Robinel 01/23/2015 at 05:170 Comments

For this robot, i am using the general design choices made for R.Cerda, a differential drive robot (link on

This obviously implies a differential drive robot, meaning that we will use two or for motors, on the left and right. For those motors, rather than just using the plastic gearmotors from pololu that i previously used, i decided to use higher quality motors, the Pololu 75:1 Micro Metal Gearmotor HP with Extended Motor Shaft, each one equipped with Pololu Magnetic Encoder Pair Kit for Micro Metal Gearmotors, 12 CPR, 2.7-18V in order to measure motors rotation. I am hoping that those sensors will enable the robot to drive straight, and accurately measure the movement. We will come back at this in another post.

With those motors, i will be using Pololu 30T Track Set. Those measures approximately 10cm. I chose tracks in order to have a good traction, the capacity to go over obstacles, and the cool factor of tracks. However, i plan to design the robot in a way that enables the user to switch from tracks to wheels in a simple way.

So, wheels and tracks. The chassis will be home made, we'll come back on this point in another post. In order to drive the motors, i will be using a DRV8835, capable of 1.2A continuous and up to 1.5A peak. It has a thermal protection, and can drive each motor with only two pins. One pin is PWM to specify speed, and the other one sets the direction. The chip is capable of handling 2 motors. The problem is that this is a really small component, not in a DIP format, and i won't be able to solder it. Thankfully, i found the Pololu DRV8835 Dual Motor Driver Carrier (otherwise, i would have used another chip). Another advantage of those chips over L293D or SN754410NE is that for this one, we can have a vMotor as low as 2V, compared to 4.5-5V for the other chips. This leads us to the next point : power.

I chose to use Lipo battery rather than NiMH AA batteries because of the superior energy density, and the vast amount of charge circuits available for LiPo. Furthermore, many of those circuits are able to charge the device while it functions, removing the need to power down the robot for charging. It is probably possible to do something similar with NiMH, but i don't know where to source such circuits, or how to design those. Furthermore, the increased battery capacity won't hurt here. The drawback is the lower tension (3-4V with one lipo cell), since i want to restrict the choice to 1S lipo batteries to keep things simple. I selected a 6000mAh 3.7V Lipo battery from "i don't remember where i bought it", but Adafruit sells an even larger one , a 6600mAh lipo pack.

For charging purposes, they also sell an USB LiIon/LiPoly charger- v1.2 which i'll be using. It can charge up to 1A, and can charge the battery while providing power to the circuit. It accepts USB as a power input, but also a jack, and has pins for other types of inputs. It has pins that can be read by a ┬ÁC to check if charging is done. I hope to be able to have the robot charging itself when in low power.

I will use an efficient (~80-90%) step-up step-down switching regulator from pololu to generate the 5V for the Raspberry Pi (and for early prototypes, the Arduino).

As for sensors, beside the ones on the motors, there probably will be at least a rangefinder, be it infrared ot ultrasonic (i tend to prefer ultrasonic ones).

In order to control the motors and sensors, i'll use an ATmega, probably at 3.3V so that i won't have to translate logic levels from 5V to 3.3V. In early builds, i'll use a Arduino R3, because , eh, i have one laying around, and it has built in USB. Future builds will use the Atmega at 8Mhz using internal resonator (so that i have less parts). I may probably make a circuit including the regulators, the motor driver(s), the atmega, along with plugs for sensors, power, etc.

I will also be using a Raspberry pi for higher level algorithms. Indeed, the Atmega will be in charge of real time stuffs, PWM, etc, and be controlled over serial. The Raspberry pi will then send commands such as "move forward for Xcm", or "turn by Y degrees". It will also be able to fetch the values of the sensors. On top of this, i plan to run more complex algorithms, such as mapping of the room, path finding, etc. I will also use the camera module along with OpenCV.

See you next!