I needed to do some research on Smart Wheelchair technology, and what better way to do it than on an actual wheelchair?
Well, the better way was upcycling 3 broken wheelchairs into one working wheelchair-based robot. Total cost for the entire project: $40 for an Arduino and some ultrasonic sensors. I call her AnnaBot.
Quick glance as of today : Wheelchair base. Wi-fi enabled. Onboard camera. All controlled from the laptop using an Arduino microcontroller. Six ultrasonic sensors are waiting to be installed for basic obstacle avoidance.
Microsoft Robotic Developers Studio will be used to program speech recognition, conversation, and autonomous behavior, including “follow me” capability and gesture recognition using the Kinect sensor.
The first thing I did was take stock of the parts I could use that I already had around the house. I found an old laptop and a webcam. I was already playing with MRDS. That left me with two parts to find: a working wheelchair, and a microcontroller to interface to it.
I like my gadgets, so I ordered an Arduino Mega 2560 and some ultrasonic sensors. However, my budget didn't allow for spending several hundred dollars on a used wheelchair. Here's where I got creative.
I talked to several nursing homes, a hospital, and anyone who would listen, to tell them what I was trying to do. I also put an ad on craigslist. Wanted: electric wheelchairs, working or not. One man's trash is another man's treasure. That really paid off for me. Over a two week span, I got 3 wheelchairs. None of them working. None of them cost me a cent. I took the frame and motors from one, the wheels and electronics from another, and batteries and a charger from the third. I put it all together, said the magic word, and presto, I had one working wheelchair and a heap of spare parts after a few evenings of work.
So, the most challenging part was reusing the onboard electronics for the motor control. There's lots of safety features built in, and they aren't easy to hack. But they're designed to handle the high motor current. I wanted to keep them.
Originally, I was hoping to interface to a port on the outside of the controller, but this wasn't possible. I had to hack the joystick. I got lucky again. You can see in the picture of the joystick, it's only 4 wires. One X-axis, one Y-axis, plus power and ground.
I used a multimeter to measure the voltages of the joystick on the blue and yellow wires at neutral, full forward, reverse, left, and right. Then I used the Arduino PWM output to give me those voltages. Should have worked, right? Nope. Two problems. First, the electronics on the chair were sensitive enough to see that the voltage wasn't steady, and they errored out. I fixed this by putting the PWM through what I call a "smoothing circuit". I connected the PWM to a resistor, then to the positive leg of a capacitor. The negative leg of the cap went to ground. Then I connected the positive leg of the cap to the joystick control circuit. This let's the cap carry the voltage in between the pulses, and it was enough to fool the chair's controller. In the RC world, this is called a low-pass filter.
The next problem was a joystick fault every time I changed motor directions. This was solved by connecting the Arduino's ground bus to the ground bus inside the joystick. Giving them a common ground reference solved the last of my electrical problems.
Currently, I've got the Arduino programmed to send the proper voltage to move in whatever direction I choose, based on a keypress. "8" drives it forward, "2" reverse, "4" is left, "6" is right, etc. (The arrows on the number pad). Eventually, this will be under the control of MRDS.
The ultrasonic sensors are going on it next. Then it's ready to start being somewhat autonomous. For now, I remote desktop into the laptop on Anna. I can access her webcam to see what she's doing, and I use a simple serial port monitor to send her commands and recieve her responses.
I'm very happy with how this project came together. Much better and much cheaper than "SAM", the little white robot I built back in the late 80's. He was based on an 80286 desktop computer that I powered by battery. He had speech recognition, a webcam, and joystick control. For about $500 in 1987 dollars. lol.
My next step is to interface the Arduino to MRDS. Then I want to develop some low-cost cliff sensors, chair-based remote home automation, and such that will enhance the wheelchair user's day to day safety and comfort. At an affordable price so that those who need it can actually afford it.
My Wheelchair Robot Becomes a Teleoperated ROV
It’s been a couple of weeks since I posted anything about Anna, my wheelchair robot I’m using for Smart Chair Technology research. I’ve been busy with family obligations, but I’ve still managed to make some great progress. Here’s a very short update. I’ll try to add a video as soon as I can get my hands on a decent camera!First, I found some open-source robotic software from Oculus used to control their “netbook based” tele-robots. Lucky for me, their controller board is compatible with the Arduino that I’m using. I downloaded the source code for their firmware, made some tweaks, and I now have full remote control/tele-operation of Anna via wifi from any internet connection anywhere in the world, and also via an app on my Iphone. This is a far cry from the simple keyboard control of her I had just a few weeks ago!
This is a screen-grab from my laptop. I remoted in to Anna who was on the other side of the house in the basement, and this is what her camera is looking at. If you can manage to read the screen-grab, you’ll see have I full speed and directional control of her, all while she streams full video and audio to my phone or laptop computer. The status display on the top right is great…battery condition, docked or not-docked status, moving or not, ping time (there is a keep-alive timer that will shut down Anna for safety reasons in the event communications are lost), and more. It’s also got pan/tilt control once I hook a servo up to my camera.
On the hardware side, I made some progress, too. I extended the 24 volts from the wheelchair batteries up into her electronics box, and threw in a 24 to 12 volt DC-DC converter (5 amp), and a 24 to 5 volt DC-DC converter at 10 amps. These will give me the power I need for the Kinect sensor and my ultrasonic and IR sensors, as well as some servos. I brought all three of these voltages out to terminal strips for ease of access. In the center of the picture you can see (from left to right) an 8-relay board, my breadboard for prototyping, and her microcontroller, and Arduino Mega 2560. The phone jack you see in the very lower right corner is where I tapped into the wheelchair’s joystick/controller. If I plug in the Arduino, I’ve got computer control of Anna. If I plug in a loopback jack, she reverts to normal wheelchair mode controlled by her joystick. I did this for ease of moving her around, and safety when I have to take her in public to demonstrate some of the technology I’m working on.
And last, but not least, I put a stable platform on Anna to safely house and isolate her electronics. Although it looks hideous, it kept within my budget (zero dollars for scrap wood. lol). One nice feature to this box is that the wheelchair frame had a reclining seat. By mounting the box between the arm brackets, I am able to release 2 levers at the front of the chair, and the entire electronics box raises up and back to the rear. This makes it easier to work on the batteries and other electronics in her base, and it also doubles the space I can use for electronics because the platform raises up enough that I can mount components on the underside of the board you see in the picture above.
I’ve still got some ultrasonic sensors to mount. Then I’m going to work on tweaking her software until I can purchase a copy of RoboRealm and a Kinect sensor.
So far, I've only got $75 invested (total) in Anna. That only puts me...oh....$75 over budget! lol
Thanks again for reading about Anna! Stay tuned for more Adventures with Anna.