Telepresence robot build details
Telepresence has been around for a while, with telerobotics only recently coming into commercial applications. This is ArchReactor's effort at a DIY Telepresence bot build from easily, and cheaply, obtainable materials, such as an Arduino, an unused PC and webcam, and various other spare parts.
The starting point of the robot is a
power wheelchair base obtained from craigslist. The original plan was to tap into the chair's own controller, but this proved quite complex, and in trying the controller was damaged. A replacement controller was rather expensive, so we opted to instead get a common motor controller to directly drive the motors.
The basic process is this:
- Strip the wheelchair to its basics.
- Remove the electric brakes from the motors (more on this later)
- Re-wire the 2 12V batteries from serial (24V) to paralell (12V) to increase runtime.
- Add a "pole" to bring the monitor and webcam up to standing eye level.
- Add supporting electronics.
- Write software.
We were able to separate the seat mount from the seat and re-use that for the monitor pole. This also allows easy removal of the pole for transport.
The brakes were a minor challenge, they work opposite from bike or car brakes in that they are applied by default with a strong spring and use a strong electromagnet to release them. This is needed in a device made to carry 300lbs so that it won't roll down a hill if the battery dies while it's being used. We're not putting a lot of weight on the base so the motor gearing is plenty to keep it from rolling, and the brakes use a lot of power, which we'll need to run a PC and monitor. Guides for accessing the brakes are available on-line for most wheel chairs, and the design of ours allowed simply removing them and reassembling the gearbox.
The Pictures
View album on Imgur
The parts
Here's the parts we used. Most of this is substitutable for equivalents or more appropriate parts for your build. See photos at end of this page.
- Pronto wheelchair
- Sabertooth 2x25 motor controller
- Arduino Mega (an Uno will also work with the current code)
- ITead Sensor shield (a proto shield would work fine)
- several high power plugs salvaged from power backup batteries (such as APC UPS)
- a common light switch and box for a motor power "kill switch"
- an AMD E-series powered NetTop media PC.
- a 15" LCD
- length of iron pipe threaded on both ends with "floor plates" for mounting
- 12VDC to 120VAC power inverter to run the PC
- Wifi-N router (the Nettop's wifi was found unreliable, and this also allows us to demo when no internet is available.
- IR receiver and remote salvaged from a non-functional digital picture frame
- "power bus" terminal strip
- keyboard mounting tray
Build is fairly straightforward, mount to look like the robot you want, and wire as per best practices and motor controler instructions. Our is designed so that th pole, and PC and monitor and kill switch, easily unplug to separate from the base. The kill switch unplugging means that the motors cannot accidentally be energized durring transport. The motor electronics also easy unplug so that the motors or the controller can easily be remove for maintaince and debugging.
Notes: The AMD E-series is just barely sufficient for the task. A laptop would simplify the design and lower the power profile for better runtimes, we did not have one on-hand.
The Software
The system use
WebRTC so that no special software or client plugin is needed, just a new enough Chrome or Firefox browser, including Chrome for Android.
Basic design is this:
- Server component in Node.js that handles commands to the Arduino via USB and negotiates WebRTC connections using Socket.io.
- Web interface using JQuery to handle robot driving control
The Node server only brokers the WebRTC connections, so it's fairly lightweight (keep this in mind for later). The WebRTC standard implemented in the browers talks directly to each other, so it's not difficult to make go on a LAN, but getting it to work behind firewalls requires something called an ICE server. Our current code does not use an ICE server and so only works on LANs, which is OK for now as we demonstrate the technology and improve drivability. It's actually quite difficult to remotely drive it now, and the wheelchair base is powerful enough to hurt someone if things go wrong.
The Node and browser code is heavily based on the
WebRTC Codelab walkthrough. Additional messaging channels and serial IO code were added to drive the robot.
Our current code, and installation instructions, are available at
ArchReactor's GitHub page. It's been tested on Windows 8.1 x64 and Ubuntu Linux 14.04 x86. Please use the github "issues" features to report any problems. UPDATE: As of 5/12/2015 rRaspberryPi is also tested for the Node server only. Raspbians Node is too old, and the latest Node is too new. A manual install of Node 0.10.16 is the only version verified to work due to ARM compatability with the Serialport module.
The Future
Performance and power use are both issues. Since the node server doesn't use a lot of resources the plan is to use a small linux system, such as Raspberry PI or Intel Edison, for the server and robot control (possibly removing the Arduino too), then use an Android tablet for the "head". This would also make it easier to add a pan and tilt mechanism to the head so it can look around without driving. Being able to look down and see the wheels will make remote driving a lot easier and less risky.