Controlling a Robot From Anywhere
Introduction:
I'm Mohammad Adib, I'm from the US, I'm 17, and this was my summer project. It's a vision I had in mind for a long time; To make a robot that I can control from anywhere. Working as a Roboticist, I make controller software for telepresence robots! So this was the perfect side project for the summer. I wanted to make a capable offroad vehicle that I can control from sitting in my room.
The Robot:
So this was the final outcome after 2 months of work. The chassis is a Wild Thumper by Dagu and I have to say its a great chassis for building robots on, and I look forward to moving the internals of this robot into the TREX chassis that is soon to release. I hope that turns better on grass and carpet.
Shortly after making the robot, I showcased it in my TEDx Talk (first video to the right).
How it works:
The Robot works by sending and receiving data over the internet using a 4G LTE Hotspot. I won't get into the technicalities here, but it basically has a pcDuino sitting at the heart of it with a Wi-Fi dongle connected to the hotspot. The pcDuino then talks to the WIld Thumper Controller over serial and voila! We have a working Robot. The Nexus 4 mount is a 3D Printed tilt mechanism with an imbedded servo. The only purpose of the phone is additional sensors and ofcourse, Skype.
In terms of using sensors, the Robot uses a photoresistor to automatically switch on the headlights when it's dark, but they can be manually controlled as well.
I did end up hitting it hard on a wheel one time and totally destroyed the axle on the motor. Getting the entire thing taken apart just to replace a motor (which I bought from Polulu; Thank god they exist) was a bit tedious.
Programming:
C - the Arduino on the Wild Thumper Controller needs runs Arduino C which listens for commands over the serial interface.
C++ - on the pcDuino, C++ is used to put the pins in serial mode on boot.
Python - Runs a server internally in the robot on port 8080, listening for commands to forward to the Arduino.
Java - TCP Client running all the time trying to communicate with a server if it's up, then forwarding that data to 127.0.0.1:8080 which is the Python server on the same pcDuino.
Why use 4 different languages at the same time? Because I was feeling lazy and used what I knew, and though I'm sure it can all be done in C or Python just fine, I doubt it would make a difference since LTE itself has ping times exceeding 100ms on average. A few extra milliseconds won't make much of a difference, and it's already flawlessly instant.
Controllers:
The Controller mechanism can be anything with an internet connection. I used a joystick with my laptop (using C#) and also (for the most part) an Android app made specifically for this robot.
Conclusion:
All this was worth it, when I drove it far away from my house while sitting in my room controlling it. One of the coolest things I have done with a Robot yet.
This is my first LMR post, and I hope to post more of the projects I do here. Thanks to Dagu's Oddbot for posting on LMR to get me inspired to actually showcase this thing. And thanks to Dagu for such an excellent chassis and as I said, I'll be the first to jump on that TREX tank chassis and make that controllable from anywhere too.
AT&T's network has internal NAT, so the robot has to be the client, and me the server. This will change after I replace the pcDuino with a Raspberry Pi. Although not as capable, the Rpi supports VPN and is fast enough to query commands to an Arduino via serial
Pictures of the finished product:
Love the suspension on the Wild Thumper chassis!
A Robot that is remotely controlled over the internet!
- Control method: Anything with internet!
- CPU: Arduino, pcDuino
- Operating system: Linux
- Power source: 10000mah LiPo
- Programming language: C++, Java, C, Python
- Sensors / input devices: light sensor
- Target environment: outdoor