This is the first of several articles and videos about building a “real” robot. In this first installment, I will introduce “DB1”, the full-sized robot project that I am building. You can follow along and build an identical robot or use the articles and videos in this series to design and build your own unique robotic creation.
I’ve already published many robotics projects and experiments, which of course is not too surprising considering the site is called “DroneBot Workshop”! All of these previous projects have a few things in common:
- They use inexpensive “robot car” bases, acrylic cutouts with 6-volt DC gearmotors and tiny wheels.
- They use an Arduino as their “intelligence” module.
- They typically perform only one or two functions simultaneously.
- They can be built in just a few hours.
These projects are great in that they are educational and their low cost allows pretty well anyone to start exploring robotics. I plan to keep using these in future projects.
But they could hardly be described as being “real” robots. They are not merely toys, but they have limited capabilities. I like to think of them as prototyping tools, useful when you are trying to learn robotics or test new sensors.
Today I’m going to start construction of something bigger and more powerful. A “real” robot.
A “Real” Robot
It’s pretty difficult to come up with a standard definition of what a “real robot” would be, as it can be different things to different people.
Many people look at science fiction for examples of “real” robots. From the goofy robot on the old “Lost in Space” shows, the evil Daleks in Dr. Who, to the loveable R2-D2 of Star Wars fame robots have played a part in popular culture for a very long time.
Then there are the robots that we already encounter in real life. Robotic arms and machines that are used on assembly lines. Robots employed for dangerous activities like bomb disposal and working in hazardous environments.
My definition of a “real” robot is as follows:
- It needs to be capable of a reasonable-sized payload, at least a kilogram or more.
- It should be able to be “trained” to perform specific tasks.
- It should be able to “learn” and improve its performance of those tasks.
- It needs to be able to handle obstacles that would prevent it from performing its tasks.
- It should be “aware” of its environment and be able to navigate within it with minimal human supervision.
Based upon the above criteria I’ve come up with a design, one that I will introduce you to today.
I’m calling my creation “DB1”, with the “DB” standing for “DroneBot”. I think the “1” is pretty obvious, and one day I hope there will be a “DB2, DB3” etc. While the name might be pretty bland an unoriginal, and possibly confused with some older database software, I’m sticking with it for now.
Eventually, I may hold a contest to give it a better name, but for now “DB1” is its moniker.
I want to build a robot that you can build too. You might want to build the whole thing exactly the way I’,m building it, or you might only want to build a section of it. You may wish to build a completely different robot of your own design but incorporate some of the circuitry and programming that DB1 uses.
I want to make this as universal as possible. To accomplish this I’m doing the following:
- Standard Parts – You can build a great robot out of a used Segway, an old vacuum cleaner or a bunch of bicycle parts. But I’m not doing that. I’m going to use parts and components that you can easily obtain, either locally or over the Internet.
- Standard Interfaces – No need to reinvent the wheel here. Standard interfaces like Ethernet, I2C, SPI, and USB will be used throughout the design.
- Modular – This is a HUGE project, and as such it will end up being a fairly expensive one. By breaking it down into modules you can choose to only build part of it, or build it in stages to defray the cost.
- Buildable – I will document everything I’m doing in great detail so that you can also build this. Some of this documentation will be in the form of this series of articles and videos. I also have plans for detailed documentation that I’ll make available very soon, stay tuned for news about that.
A robot like this is not a trivial project, far from it. To build it requires skills in mechanics, electronics and programming. We will be working with machine intelligence and other esoteric fields of study.
And I really don’t want to do it all alone.
I’m hoping that at least a few of my readers and viewers will take it upon themselves to also build a similar robot. And I will support you any way I can, including exchanging ideas and code.
I have a few ideas for doing just that and I’ll be announcing many of them in my newsletter. If you haven’t done so already, please subscribe to the newsletter. This way I can keep in touch with you and bounce some ideas off of you.
Let’s make DB1 a community project! We can all learn from each other.
DB1 Main Sections
I have divided this robot design into three main sections or “layers”:
- Navigation Layer
- Intelligence Layer
- Environment Input/Output Layer
Let’s examine these three layers individually.
The Navigation Layer performs movement and navigation of the robot. I can operate independently or in conjunction with the other layers.
You’ll be able to control the navigation layer using “high-level” or “low-level” commands.
High-level commands include commands like “move forward to a position 3 meters ahead”, “move to co-ordinates x & y” or execute a preprogrammed movement. The robot will be able to handle situations when the position it is moving to is blocked by an obstacle.
Low-level commands are more basic, things like “rotate the left wheel 4 turns and a specific speed”.
Communication with the navigation layer can be done using Ethernet, WiFi or Bluetooth.
Physically the navigation layer consists of the motors and bottom frame. Electrically it consists of motor drivers, motor controllers, navigation sensors, microcontrollers, and a single board computer.
My current design uses a custom motor controller, which I will be described in detail as a project very soon. It also uses both an Arduino Mega 2560 and a Raspberry Pi 3 B+. Some of the navigation sensors will be I2C, some will be connected directly to the Arduino Mega 2560 and some will have their own Arduino Pro Mini microcontrollers that in turn communicate using I2C.
The Navigation layer sensor will be located all over the robot body.
The Navigation layer will also house the batteries that power the robot.
This is the “brains” of the robot. It controls the Navigation layer and it communicates with the Environment Input/Output layer. It also controls the robots master communications, allowing the device to interact with people.
The main component of this layer will be a single-board computer (SBC) with a solid state drive (SSD).
I’m currently choosing a SBC for this layer and currently the main contender is the HiKey970. This board is a powerful processor with a dedicated neural processor unit (NPU) and artificial intelligence capabilities.
One thing the board lacks, however, is a SATA port to connect the SSD. The board does have a couple of expansion connectors and an SSD can be connected through them with the use of an adapter card.
The choice here is not final as it will be a few months before I am ready to build this layer. By then there may be some alternate choices for a SBC for this layer.
This layer will communicate with the other layers using Ethernet and can also make use of Bluetooth and WiFi. It will also have direct connections to some of the I/O devices such as video cameras.
Environment Input/Output Layer
The final layer is the Environment I/O Layer. This layer allows the robot to interact with the outside world and explore its local environment.
This layer is where all of the non-navigation sensors are managed, by “non-navigation” I mean the sensors that are not specifically tied to the Navigation layer. Sensors in this layer include, but are not limited to:
- LiDAR to map the local environment.
- Video camera for object recognition (there are also video cameras tied directly to the Intelligence layer, these are different).
- Speaker to make sound and voice.
- Microphone(s) to listen with and to receive voice commands.
- Temperature, Humidity and Light sensors.
- Proximity detectors.
I’m sure that this list will grow as the robot is constructed.
The key fact about the sensors here is that they are “high-level”. This means that they pre-process data, either by themselves or in conjunction with a dedicated microcontroller or microcomputer.
By doing this the layer only exchanges high-level information with the Intelligence layer. Here is an example that illustrates this.
Let’s say the object recognition camera spots an object that it has already been trained to recognize, such as a blue ball. Instead of sending the Intelligence layer the pixel data about the object we tell it that it’s a blue ball (or, more likely, something like “object #241”).
This means that the Intelligence layer doesn’t need to know how to recognize a blue ball. It just needs to know what to do when a blue ball is detected in a specific location.
This distributed processing model is repeated throughout the robot design.
The Environment layer will make use of several microcomputers and microcontrollers and will communicate with the Intelligence layer using Ethernet.
Many of the Environment sensors will be mounted on a turntable, located in the upper section of the robot. This arrangement allows the sensors to be moved to different angles.
<INSERT TURNTABLE PICTURE>
This is similar to the way we humans, and most animals can rotate our heads – our ears, eyes, mouth, and nose all rotate with it at the same time. This way we can aim all of our “sensors” at a specific location.
It makes crossing the street a lot safer!
The turntable is driven by a stepper motor and can rotate a full 360 degrees, although its field of view is blocked on each side by the robot structure. The stepper motor, a 12-volt Nema 17 sized motor, is controlled by the Environment I/O layer.
As the turntable can rotate continuously it would make it difficult to run cables and power to it. It will need its own rechargeable power source and the recharging will be done via induction. Communications with the devices on the turntable will be done wirelessly as well.
Communications Between Layers
The Navigation and Environment I/O layers communicate with the Intelligence layer using Ethernet. I chose this because it is a standard and it is very fast. Also, all of the single board computers I am using or considering using have Ethernet connections.
By using Ethernet I will also have the option of hooking in a standard computer for development or troubleshooting purposes.
The power for all of the layers, except the turntable in the Environment I/O layer, is supplied from the Navigation layer. The power source will eventually be rechargeable batteries located in the base of the robot, however, during development, I will be using a bench power supply. This will allow me to determine the final current requirements so I can select suitable batteries.
Conclusion – What’s Next?
This is just the beginning of this series and I hope it has sparked your interest. In the next installment, I will go into details about the robot chassis design and construction and will introduce you to the Actobotics channeling that I built the robot frame out of.
After that we will go over the motors and wheels, I’ll show you how to select them and how t mount them.
We will then start focusing on building the Navigation layer with sensors, motor controllers and microcomputer.
I hope you follow along for this journey into robotics. It promises to be quite a ride! There will be a new installment of this series every Thursday. Please join me for the next one.
Now, if you’ll excuse me, I have a robot to build!