A few months ago, I got an idea to build a robot you can control over the internet. The main requirement for this project is to avoid any overhead on the network setup. It should work without the real, known, or static IP address of the robot. Also, the implementation should work well with cellular connections.
Another critical point that is worth mentioning is latency. If the delay between user action and feedback will be significantly more than 100 ms, it will be uncomfortable to interact with such a robot. In other words, if I'm observing the video stream from the robot and pressing the key on the keyboard to move it forward, I'll feel frustrated if I'll see the response to my action in 500 ms.
Considering the requirements, the solution that I chose is peer-to-peer communication with WebRTC. It supports both media and data streaming which is making it almost perfect for such applications. It is almost because we need to host the server to establish communication between the robot and control panel. Also, the implementation might be a bit tricky.
That's why I decided to build roboportal.io beforehand to have a generic service for building robotics applications, so it took me several months of preparation before making the robot itself.
Robot designThe Scout platform is four wheels drive with tank-a-like differential steering. It has a simple suspension to enable movement on uneven terrain - the halves of the robot's body are connected via join. There are no dampers in place, but soft silicone wheels are reducing vibration a lot.
The chassis is 3D printed using the PLA. All the parts are connected with nuts and bolts. Threaded inserts are heavily used as well. Wheels are mounted on the standard 1:10 scale RC car axels.
One of the first challenges of the design - is to create a covered enclosure from one hand and keep Raspberry PI cool from another. To achieve that, the heatsink for the PI is glued onto the lid with epoxy. LiPo battery is mounted outside the body using self-adhesive velcros.
As mentioned above, the wheels are made from soft silicone. The technology is pretty straightforward. Firstly, the rim is fixed in the mold with a screw. Secondly, the silicone resin has a high velocity, so securing all the gaps with mounting putty is important. And finally, the wheel is cast with resin.
A cast elastic sleeve covers all the cables to organize and protect wiring between moving body parts.
To connect your bot to roboportal.io, you need Bot Box. It's a client application that supposes to be run on raspberry pi. Its purpose is to handle the p2p video streaming from robot to web interface and the data in both directions. This client doesn't know anything about the specifics of the robot's controls. It's just streaming JSON encoded messages over the serial port. The controller board then receives those messages, and it's responsible for converting them to the movement signals for the hardware like motors, servos, solenoids, etc.
A short step by step guide on how to add a robot to the roboportal.io
What is next
I'm pretty happy with the results, but there are many features to improve or add. For example, the roboportal.io app is not presenting any data received from the robot's side. And there is a lot of metadata that could be presented in the UI as widgets. For example, the battery level, sensor signals, or GPS position on the map. Also, I'm inquisitive about your ideas. In the comment section, let me know what features will be nice to add or what you would create with it. If you are interested in building your robot and controlling it over roboportal.io, I'm pretty open to sharing access to the robot with you to evaluate the experience first.
Comments