ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A

BennyBot build... an autonomous bot to deliver my garbage to the curb

Hi all,

I’m new to ROS and using a simple domestic “problem” as a platform to build a robot from the ground up while I learn ROS and robotics in general.

I have a formal background in electronics, plus 15+ years building business applications, and I also have a lot of mechanical and fabrication background… so, I thought robotics would be a fun way to put all these skills together… and presumably I will find some opportunities somewhere along the way to make this somewhat profitable.

BennyBot… which is just a play on my last name (Benson)… is (going to be) an autonomous platform that will find my garbage bin, load it up, transport it to the end of my driveway and drop it off at the curb on collection day, then go retrieve the empty bin after it’s been emptied. Every second week, it will do the same with the compost bin.

I’m still very early stages, but I have some of the mechanical, electronic, and ROS nodes operational… the mechanical and electronics are relatively easy for me… ROS is my learning curve, but it’s all making sense so far.

I am using one (or more) raspberryPi 3 SBCs, one Arduino, two Dimension Engineering 2x32 Sabertooth motor controllers with Kangaroo X2 PID controllers, 4 AndyMark PG71 gear motors, a single RPLidar A2 scanner, some sort of IMU (currently experimenting with an LSM9DS1 from SparkFun), and probably a 3d camera, and maybe a GPS for fun.

My platform is a bit unique in that the rear wheels are not fixed to the frame, they pivot on a swingarm. The idea is that this will allow the platform to “kneel” at one end in order to pull the garbage/compost bin on board, then raise up again once the bin is properly positioned. What makes this unique is that the wheels themselves are used to raise and lower the platform… there is a locking mechanism on the swingarm… when locked in the upgright position, the platform can travel around to transport the bin. When unlocked, if I drive the front and rear wheels in opposite directions, the frame will kneel down at one end as the swingarms swing upward. Driving the front and rear wheels towards each other will lift the platform, followed by locking the swingarms in place in preparation for travel. I know this is hard to envision… so here are some videos that might help:

This is the swingarm with a servo motor that locks/unlocks it to the robot frame. The servo is controlled by the Arduino using the RosSerial Arduino bridge… I can publish messages to lock and unlock the swingarm from a terminal window , this was my first real robot movement controlled by ROS… I’m calling that Benny’s birthday :slight_smile:

This is a side view of the frame, with both wheels being controlled by ROS using the kangaroo_x2_driver by smd-ros-devel.


I am interested in building a robot that can carry a larger weight. But I have no knowledges in electronics so I am confused on how Raspberry Pi will control the motor because, in comparison with Turtlebot, this robot will have a more powerfull motor. So which is the “OpenCV” you used? Or, how did you replace it?
Thank you

RaspberryPi, actually a couple of RaspberryPis’ are running ROS, but the actual “heavy lifting” of powering the motors is being handled by a pair of motor controllers from Dimension Engineering. I am using a pair of their 2x32 amp Sabretooth motor controllers, along with their KangarooX2 PID modules which allow for closed loop operation by monitoring the encoders on the motors.

With this combination, I am able to issue speed commands from ROS to the KangarooX2 module which takes care of maintaining a constant speed for me (it looks at the load on the motors and will vary the power to each motor to maintain the commanded speed).

I do not have the odometry feedback to ROS figured out yet, but I think others may have already accomplished this.

This is still a work in progress… I don’t have all the answers yet, but happy to pass on what I have learned so far.


I am struggling to make a general bill of material for the hardware required. But I don’t progress at all. So I would like to ask for some advice.
My plan is to have a robot that can carry a larger weight (>1,5TO). For this project I assume that I need two motors to about 0.8kw/each, 380Volt, DC. And now comes the questions:
-what kind of motor do you use?
-how many sabretooth do I need (not clear which type)? In fact why do you use a pair of sabertooth? Or can be replace with something else?
-how many kangaroox2 do I need? This question is link with the previous one. Because this large equipment need many Ampers I need big batteries (I was thinking at some car batteries to 12 or 24 Volt). But than I need a converter, do I? In fact two: one from battery to kangaroo and one from sabertooth to motor, no?
-how many raspberrypi? Why do you have 2 raspberry? Probably to have a better computation, but how do you connect them? One is master and one is slave?

Other questions (cables, encoders, etc) remain for later after clarifying those

Thank you

Hi Adrian,

It sounds like you might be in a bit over your head with this project, but everybody has to start somewhere… you may have a number of steep learning curves ahead of you.

The sabertooth controllers drive 2 channels (i.e. 2 motors) at 32 amps, up to 30volts per motor. I have 4 independent drive motors, which requires 2 sabertooth controllers. The Kangaroox2 is an add-on to the sabertooth which provides the closed loop PID control and there is one required for each sabertooth controller. Theoretically, the two sabertooth controllers could deliver a maximum of 128 amps to all 4 motors (32A x 4), this assumes that the motors are big enough to require that much current draw, it will be the motors themselves and their rated current at stall which determine the current draw from the sabertooth. I am using 4 x PG71 gearmotors, which have a stall current of 22 amps each, I haven’t pushed them to stall currents yet, but the sabertooth is rated to safely deliver up to the 22 amp max of these motors. The sabertooth is not very well supported in ROS… I’m not sure it’s the best choice, but it’s certainly not impossible to make it work.

I am using a single 12V car battery to power my robot. You mention 380 volts which is certainly a possibility, but you need to be careful with this type of configuration… 380 VDC is very dangerous! I use a single 12 V bus to power the 12 V equipment, and I have a downconverter that converts the 12VDC to 5VDC for my electronics… these are easily found on any robotic suppliers website.

I have 2 raspberry pi for now until I can determine how much processing power will be required… I am a beginner with ROS, so I won’t be surprised if this is not enough to perform full SLAM navigation. Once you learn ROS, it’s easy to understand how the processing is distributed across multiple devices… it’s the whole publish/subscribe scheme that makes this possible. The multiple processors will need to be networked… EtherCat seems to be the standard here, but it’s an area I haven’t tackled yet. I do have an Arduino that connects to the Pi by USB… the Arduino is controlling my stepper motors by ROS events published by the Raspberry Pi.

BOM is very much up to you… my high level components are:

2 - Sabertooth 2x32 motor controllers
2 - Kangaroo X2 PID controllers
4 - PG71 gearmotors
2 - Raspberry Pi 3
1 - Arduino Uno
2 - HS485 (I think) servo motors
1 - 12VDC to 5VDC converter
1 - Main contactor to isolate the battery
1 - Main circuit breaker for protection
1 - Fuse block to protect individual circuits
Various other components such as LiDAR, switches, cameras, etc.

Hey, Duane. How do you stay with your project? I would like to talk to you if you agree, but in a private way. I did something with my project and it would be useful to share.