- Not to be confused with Noisebot.
Hereby known as "MC Hawking - The Wheelchair Robot"
Improperly used, the robot can destroy itself, its suroundings, and run you over. Please know what you are doing and don't be afraid to ask questions.
- RTFI! Know how to engage / disengage wheel clutches, and where the power
switchis incase it goes crazy. These instructions are found below.
- DO NOT UNPLUG THE ARDUINO IF THE WHEELCHAIR CONTROLS HAVE POWER AND THE CLUTCHES ARE ENGAGED. THE ROBOT WILL MOVE AT THE HIGHEST SPEED IN A RANDOM DIRECTION.
- Always warn humans nearby that the robot could lose control and run them over.
- DO NOT "UPGRADE" UBUNTU OR THE KERNEL ON THE HOST MACHINE! (unless you are going to stick around and make everything work with it...)
- if someone is sitting in the chair when it is on, warn them that the robot could go crazy and kill them, it has almost happened.
- We have not implemented even basic safety shutoffs, so you should be watching it all the time. It will very happily drive through its operator and the wall without stopping.
If it appears to be getting out of hand, the power switch is just behind the joystick, where you turned it on. This will power down the motors and stop it where it is immediately, with the brakes on. At this point you can disconnect the parallel-port interface and drive it home with the joystick, ordisengage the wheel clutches and push it home manually. [there is no longer a manual power switch for the drive. jake is looking for a STOP button]
- If it REALLY IS getting out of hand, use furniture to try to stop its movement
so you can get at the power switch.DO NOT try to use your body to stop it, it's heavier and stronger than you are and it doesn't feel pain.
People who have worked on it
M.C. Hawking the Wheelchair Robot, AKA Noise-Bot, uses an electric wheelchair (Action Arrow Storm Series). This is a mid-sized electric wheelchair which can be dis-assembled without tools and transported in a car, which is how it got to noisebridge. It uses two 12-volt lead-acid batteries such as car batteries. The batteries are wired in series for 24 volts, and it is necessary that they are matched so that one doesn't wear-out the other during use and charging.
At this time (April 2011) the batteries have been replaced with full-size gel-cells with decent capacity.
An Arduino has been added to monitor battery voltage, and has the ability to turn off power to everything except itself and the wheelchair joystick (but that is coming soon). If the battery voltage drops below 18 volts for 25 consecutive seconds, the Arduino will turn off the computer until the batteries go above 24 volts - when the charger is hooked up. There is also a DB25F connector wired to the Arduino so that the wheelchair's joystick interface board can plug into the Arduino instead of the PC parallel port. It is wired so that the four directions connect to four PWM-capable outputs of the Arduino.
The Arduino program is written to watch for direction commands sent by the computer through the serial interface as a two-byte sequence. Case-sensitive F B L R for the four directions, followed by a byte corresponding to the magnitude of thrust in that direction. The left-right axis is independant of the forward-backward axis. To stop, send SS (Capital S twice). All direction commands expire after one second and so must be re-sent often enough to prevent auto-cancellation. All this is moot if you have not sent a "Pz" lately, which is the command to activate the wheelchair-power-enable relay. It must be a capital-P followed by a lowercase z. This command expires after 2000 milliseconds, so your software has to send it over and over or the power relay will click off and you won't go anywhere. Read the latest version of robotpower?.pde.
The arduino's FTDI chip is a USB serial port, accessed at /dev/arduino1 OR at /dev/ttyUSB0 This was set in some udev config file, and it corresponds to this arduino's FTDI chip serial number.
You can hopefully find the latest version of the robotpower arduino program in the home directory of mchawking. This program is where things like low battery shutoff voltage, and the timeout period for motion commands, are set. | Arduino program as of September 2011
Note that the Arduino program can't see the arduino's serial port (/dev/ttyUSB0) unless it is run by root.
The battery charger consists of a voltage-regulated power-supply connected to the battery pack through a large Diode. The robot has an AC power plug mounted on a bracket in between the front wheels and facing foward. There is an electrical outlet mounted on a wooden bracket at the appropriate height for electrical docking. There is a USB camera (with built-in LED lights) on the robot which allows for visual alignment of the electrical connection. In the future, the robot will be able to plug itself in by driving up to its special socket, so that the onboard computer does not have to be shut down or manually plugged into mains AC to avoid draining the batteries.
There is a computer (separate from the wheelchair controller which technically has a computer in it) which is in a stamped aluminum case just like the media server. It uses a model | MS-9642 mini-motherboard and a | Mini-Box M3-ATX power supply
The box is currently powered by a custom voltage regulator made by jake. It accepts up to 40 or so volts, but will never deliver more than 23 to the M3-ATX which is hard-limited to 25 volts. If the voltage is at or below 23 volts, its FETs are in full conduction and there is zero dropout. Once on, the M3-ATX will keep the computer running unless voltage goes below 7 volts, at which point the 24-volt battery array of the wheelchair is being seriously damaged.
The voltage regulator's input plugs into a connector coming from the wheelchair controller's blue power connector, which is connected through a T-splitter going to the charger and to the batteries. This is where the voltage regulator gets disconnected when the computer is being worked on, so there are no shocking "surprises". The output of the voltage regulator goes to three tab terminals and a cord to the LCD monitor, to provide the computer's power supply with constant voltage, ground, and a second positive terminal for the unused on/off switch function of the power supply. Read up on the M3-ATX linked above.
A circuitboard zip-tied to the arm-rest interfaces the parallel port of the computer to the joystick. This circuit uses transistors to trick the wheelchair controlbox into thinking that the joystick is somewhere other than at-rest in the center. Of the eight bits of the parallel port, two make the chair go forward, two to the right, two to the left, and two backwards. For each direction, there is one bit causing low speed and another causing medium speed. Both bits cause full speed. This "speed" is separate from the speed control function of the two switches (one of which also controls on/off). A steady-state on the parallel port is not ignored by the circuit, so a computer crash will cause the chair to go out of control. In the future, the Arduino will connect instead of the PC parallel port, and it contains software to "expire" any direction command not refreshed by the PC.
Sensors have been installed on the motor which allow the computer to track movement and speed. An old ball-mouse has been disassembled and its sensors mounted on wires, and these sensors were placed at the open end of the drive motors. An optical interruptor is attached to the end of the motors' driveshafts, so the "mouse" reports movement on the x and y axes of the mouse when the left and right wheelmotors turn. The "mouse" is DB9 serial, and is seen by the computer as a serial accessory rather than as an actual Human Interface Device to move a mouse cursor (this would not be the case if a USB serial adaptor were used). The serial port corresponding to this "mouse" (which uses standard serial mouse protocol to report "movement") is /dev/odometry as set in udev config files.
An LCD monitor has been mounted permanently as the seatback. The ON/OFF switch for the monitor and its built-in amplified speaker-system is a pushbutton switch on the left (as you look at it) "shoulder" of the robot. Sometimes the speakers enter a feedback loop and power to the screen should be shut off to cease this irritation.
A robot arm made of mostly aluminum and animated by air-cylinders was fitted to the robot, but few electronic valves and no air compressor or tank have been acquired. Someone will have to invest time and energy to get the arm to do more than make the thing look more menacing. As of 11/15/2010 the arm was removed to make the robot more wieldy/less unwieldy.
Several electrically-operated linear actuators were acquired and would make great "muscles" for a large robot arm made from scratch. The air-powered arm is not a good match though, so a new arm should be made with those linear actuators causing magnified movement at joints such as elbows and a shoulder.
The PC is running a stock Ubuntu with PyParallel being used by the controller program to access the parallel port. All the software from the home directory as of 11/15/2010 is here:
As of April 2011 the software has been moved around and a lot of projects are in the works. Contact Lilia Kai at gmail or Jake at spaz dot org if you want to get involved in reading or writing programming for the robot.
As of September 2011 the latest motor-control firmware for the Arduino is here:
As always, the latest software is actually on the robot, in ~mchawking/ or ~mchawking/trunk/ or ~mchawking/trunk/scripts/ etc..
username: mchawking password: [redacted]
The embedded PC is using a Cisco Aironet 1220B which was hardware-hacked by Jake to accept power from the ATX power supply of the computer. This consists of 3.3V and 5.0V which, plus ground, come into it with a custom three-terminal connector. A Generic Realtek USB 802.11b interface, which is sub-excellent, is also available in case the Cisco is not working or if the robot needs to access an 802.11b network.
The Cisco Aironet 1220B named wbr2 on the wheelchair associates to a matching Cisco 1220B named wbr1 at 2169 Mission. They use 802.11a to communicate on a dedicated channel. They use the default username and password for that platform. The embedded PC uses its ethernet port eth1 to talk to the Noisebridge network via a connection to wbr2's ethernet port.
The embedded PC is configured from /etc/networks/interfaces Also, Network-Manager which is the gui-compatible 21st century newschool network configuration system is been pushed to the side, possibly for good. The embedded PC is now configured to find the wireless network called noisebridge and take the internal IP below.
Noisebridge internal IP address
The robot's USB wireless interface has claimed an IP on the internal network of
Access from outside 2169 Mission
Configuration of the firewall is done (thanks Jof), so that connections to the machine can be initiated from the outside world. This is important if people are expected to log in and drive it around from Germany or Singapore.
In the future someone will assign that IP address a DNS entry like
The electric wheelchairs' controller brain will not allow movement unless the joystick is at rest for a second when power is switched on. If the computer has not initialized the parallel port to the "stop" bitpattern, and the switch is flipped on, the green LED will flash endlessly because it thinks you are leaning on the joystick and don't intend to do so.
The drive-wheels have clutches which can be disengaged from their motors (and brakes) by pressing a button and rotating a collar until it can be pulled outwards. When the clutches are disengaged, the robot can be pushed around like a shopping cart, and the motors can be activated without actually causing movement. Sometimes the robot must be pushed forward or backward in order to engage or disengage the wheel clutches, because they are like gears and only fit together in some positions.
Disengaging the clutches before testing movement software is highly recommended, as you will be able to see the motors trying to run you over without the robot being able to actually do it. This is like taking the laser off of Johnny Five before sending him to the lightning-prone recharging booth.
Operation Outside 2169 Mission
The robot has been successfully field tested at a local convention. The procedure to convert the robot for operation outside Noisebridge is:
- Connect to the Cisco Aironet 1220B wireless device behind the monitor with an RS232 to RJ45 cable, wired to the Cisco pinout, and set your computer's terminal to the appropriate baud rate and settings. The following instructions assume familiarity with the programming of Cisco wireless devices through a serial connection.
- Log into wbr2 and say "enable". Enter the password.
- Say "copy nvram:outside-config nvram:startup-config", then "reload".
- Once wbr2 has restarted, there will be an 802.11a wireless network named "robots" you can associate to.
- Secure any loose items on the robot. Put a garbage bag or something over the rest to protect connectors from splashes.
- Inflate the tires and check for leaks.
- Charge the robot's batteries fully, just in case.
- Power down the robot and move it to wherever it needs to go. Follow the instructions under "local control" if you'll be driving.
- Once at the destination, if your computer has 802.11a (5.8GHz) wifi (many Macbook Pros have this), you can log into 172.30.0.50 over the "robots" wireless network to do whatever you need to do.
When ready to return:
- Charge the robots batteries fully.
- Put a splash guard on the robot's exposed bits again.
- Secure any loose items on the robot.
- Inflate the tires and check for leaks.
- Power down the robot and move it back to 2169. Do not do this in a hurry. Take note of public transit instructions for wheelchair users BEFORE arriving at the station or stop.
- Once back at 2169, clean the robot.
- Log into wbr2 and say "enable". Enter the password.
- Say "copy nvram:noisebridge-config nvram:startup-config", then "reload".
- Switch on monitor & grab wireless keyboard.
- Switch on wheelchair (on low speed!) and
- As user mchawking, open a terminal window in home directory.
- cd trunk/scripts/lilia/
- python noise-bot.py