I am working to convert an Invacare TDX-4 electric wheelchair into a flexible robotic platform. This is an evolution of my previous robot project. My prior robot was much smaller, and lacked stability, mobility, and expandability. When the opportunity to acquire a free electric wheelchair presented itself, it became obvious that I should build a larger and more flexible robot. The wheelchair will be used largely intact, making use of its batteries and drive system. The electronics from my previous robot will be adapted to the new chassis, and several new components will be added as well.
The overall design so far calls for a high-level controller (the brain), which will interface to the robot's hardware through a less powerful microcontroller (the central nervous system?). The microcontroller will deal with inputs from a variety of sensors, including ultrasonic distance measuring sensors, infrared proximity sensors, bumper switches, a digital compass module, and a passive infrared motion sensor. Many additional sensors will be added over time. The “brain” will handle more sophisticated devices, such as video cameras, and a GPS module.
The drive system will be almost completely unmodified from the wheelchair's factory condition. This consists of an Invacare MK5-EX control module, MK5-DPJ joystick controller, two 12V batteries in series, and two 24V four-pole drive motors with integrated electric brakes. Motors are ordinally controlled via the onboard joystick, which is connected to the controller with a 15-pin D-SUB connector. This connector carries 15V power, raw battery power to the joystick-mounted charger port, a serial bus interface, and a drive inhibit signal. The serial bus is most likely a semi-open bus standard known as LonTalk or LonWorks. All commands from the joystick, and status information from the controller, are carried on this bus. The drive inhibit signal, when connected to ground, will prevent the controller from driving the motors. This is usually used to prevent the chair from moving while the charger is connected.
The onboard controller also provides a 1/8” mono jack for an E-stop switch. This can be connected to a normally-open contact which will stop the chair when closed. Ideally this would be a normally-contact. To make up for this, a relay will be wired with the E-stop circuit normally closed, and held open by the relay.
Having failed so far to find any reasonable way to interface with the LonTalk bus, the solution was to tap into the joystick controller directly. The physical joystick connects to the joystick controller PCB with a 4-wire harness. Two wires carry 5V power and ground, and the other two carry a variable voltage, each corresponding to the position of one joystick axis. The center voltage for each axis is 2.5 Volts. To interface with the joystick, the two axis position wires were cut, and spliced to a 2-pair cable leading out of the joystick housing, into the added power/control box on the back of the robot. The physical joystick and it's controller PCB are normally connected through the NC contacts of a relay, allowing the chair to be driven around with its joystick as usual. Energizing the relay coil connects the joystick controller inputs to an Arduino in the upper electronics box. The Arduino can then simulate movement of the joystick by providing a PWM output to the X and Y axis inputs. A simple RC filter was added between the Arduino and the joystick controller to present a smoother, more realistic approximation of an analog voltage.
Power to the relay coil is currently controlled by the E-stop button mounted on top of the upper electronics box. When pushed in, the relay is de-energized and the chair reverts to manual joystick control.
The power system is a work in progress. The wheelchair's existing power system consists of two MK22NF 12V 50Ah gel-cell lead acid batteries wired in series for a 24V system. There is a 125A fuse integral to the positive battery cable. Power from the batteries is connected directly to the motor controller via an Anderson SB50 connector which serves as a battery disconnect. The motor controller has an auxillary connector which may provide raw battery voltage, and should make an ideal place to tap power for the robot's systems. Amperage limitations are unknown, but should be quite high, as this connector is used for actuator power for power-elevating wheelchair seats. There may be an additional connector which provides a regulated 15V supply, as well as a CANBus connection to the controller.
In the power supply/relay enclosure, there are two terminal strips providing 12V and 24V power. The 12V bus is fed from a DC-DC converter powered by the 24V bus, and the 24V bus is powered by unswitched 24V power tapped from the wheelchair controller. There is a 5A circuit breaker protecting the 24V bus. The 12V bus has a maximum amperage of about 4.3A, limited by the capacity of the DC-DC converter. The DC-DC converter will need a better heatsink and/or a cooling fan to safely provide more than 2A.
The Arduino Mega makes an ideal interface to the various systems and sensors on the robot due to its staggering number of GPIO pins. It will essentially be slaved to the Beagleboard. The Mega will be connected to one of the Beagleboard's USB ports, and implement a simple serial command protocol so that the code running on the Beagleboard can control the hardware attached to the Mega.
The firmware for the Mega is on github, here: https://github.com/smcgrath/azathoth-mega