The idea for this project came from living in a dusty environment at college dormitory in Prague. Because of its unfortunate proximity to busy highway, rooms are filled with dusty particles exceptionally fast - fast enough to warrant building an autonomous robot for cleaning them.
To sum up our project goals, we want to:
- create robot that cleans dust in a room,
- should be autonomous,
- use available, not expensive components,
- should be modular (adding or removing part of the robot does not mean rebuilding all of it),
- could be easily replicated.
Parts of Robot
- 3D printed parts
- Raspberry case
- Camera case
- actuators: motors with wheels
- ultrasound [Not used]
- lidar [Not used]
- bodily: odometry
- tactile: switches
- Logic chips
- wires & resistors
- battery pack
- rechargable batteries for powering motors
We strived for easy design that could be easily modified and adapted. We designed chassis of Dustbot in an easy-to-learn online app Tinkercad.
Here can see bottom part of the Dustbot. It provides support for the whole robot. Notice that motel is rotated by 180 degrees, that is because this is the way it is 3D printed, but actually it is used upside down.
Because we added components on the fly, we used iterated design. As you can see on this picture, you can see progress of design of bottom part of Dustbot. With 3D printer you can see which parts really holds up in real world or not, and improve them if necessary.
I also wanted to utilize already created parts, which is raspberry holder and camera holder, and incorporate them into the robot easily.
Since creating whole chassis at once would be hard to design, hard to 3D print, we split chassis into several parts. These are:
- bottom part
- side parts
- breadboard holder + breadboard
- rear part with kitchen cloth for collecting dust
- battery holder
- raspberry pi case (downloaded from thingiverse)
- camera holder (downloaded from thingiverse)
This is the base component, it is holding motors, and all other parts are connected to it. Motors are attached by four M3x20? screws. Side parts are attached by four M3x10 bolts
They are attached to base components, forming sides of robot. Onto them are attached other parts:
- battery holder
- raspberry pi case
- breadboard holder
Left and right are symmetrical.
Breadboard is attached to the breadboard holder by sticky tape. Breadboard holder itself is attached to side parts by four M3x8 nuts.
This part is subject to change. It prevents robot from falling backward when accelerating forward, and collects dust by kitchen cloth attached by two M3x10 bolts.
This part is attached by M3 nuts to the side parts, and can be removed by pulling it from back. We designed it this way, so you can create your own holder for battery pack and attach it to side parts.
Raspberry Pi 3 case & camera case
These models are available on thingiverse.
We chose differential steering because it is easy to program, and uses only two motors.
We used TT motors, they are available on Ebay or Aliexpress for 2 dollars each. Motors are attached to bottom part by four M3x24 bolts with nuts.
Robot needs information of what is going around him. The most basic is touch, but he also should be able to sense distant objects like furniture so it can avoid them or in case of dirt and dust, go to them and clean them.
For detecting touch, we used Zippy VMN 06 micro switch. Switch is attached to bottom part by two M3x10 bolts.
For future implementation of localization, we need to know where we are. Odometry is tool how to help us. We could use motor with built-in encoder, but that is not cheap, so we adapted rotary encoder model from thingiverse for TT motors.
Camera is data rich, cheap sensor, that could be used in future improvements for object detection and collision evasion. We used [raspberry pi 2 camera] (https://www.raspberrypi.org/products/camera-module-v2/) which costs around 30$. For more info, read documentation
It would be better to use fish lens camera, because it offers vastly bigger field of view.
We bought several ultrasound sensors that will be added in future versions.
Here we describe how to build robot from all parts, and how to setup electronics.
- print all 3D printed parts
- clean nut bevels so nuts go in easily
- attach motors to bottom part
- attach wheels to motors
- attach rear part to the robot
- put raspberry into case and screw it into side parts using M3 bolts
- glue breadborad onto breadboard holder and screw it on top of side parts
- attach rotary encoder onto TT motor
- attach optocouplets onto the bottom part
- attach switches onto bottom part using four M3x12 nuts
Put arduino micro and other parts onto breadboard according to this diagram. Put usb cable from Raspberry Pi to Arduino and from battery pack to Raspberry Pi.
- Ubuntu: we used Ubuntu Mate 18.04.3 LTS.
- ROS - we installed ROS Melodic Morenia
- PySerial - we use this library to communicate with Arduino.
- Arduino - we need somehow to get inputs from switches, odometry and to control motors. Since we don’t want to burn our Raspberry Pi by experimenting, it is reasonable to use arduino for this. You can also debug I/O of arduno with your notebook instead of Raspberry Pi.
- buy and add proper caster to the front of the robot
- add magnetic or velcro zip for kitchen wipe
- buy wide angle camera
- buy larger battery pack
- add removable battery holder
- streamline wires
- add more bumpers & bumper protection // bumpers are now bare
- add more powerful motor /w built-in encoder
- add Nvidia Jetson Nano
- add Ultrasound sensor/s