Deconstructing an electric wheelchair to use as our robot platform worked really well. It saved us a lot of time because it already solves many of the hard problems associated with building a robust outdoor robot.
In order to interface with the wheelchair’s controller, we replaced the signals generated by the joystick with our own signals generated by an arduino.
The wheelchair’s joystick has some interesting features to improve safety which make it more difficult to interface with. For one, each axis of movement has a pair of differential voltage signals. When idle, each reads 2.5v but when the joystick is moved, the voltage on one signal goes up while the other goes down. Also, the minimum and maximum voltage for each signal are not 0v to 5v but instead are 1v to 4v. Both of these features enable the wheelchair controller to detect a broken or shorted wire so that it can produce an error rather than send the rider off in some undesired direction.
Once we understood how the joystick signals behaved, we designed a setup to reproduce them with our own controller. We used 4 PWM outputs on an arduino and a custom RC low pass filter board to implement our interface. If we had used an inverter as part of the low pass filter circuit to generate the differential voltage pairs, we could have just used 2 PWM outputs but there was no need to in our case.
Here are the eagle files we used for the board.