One of the interesting parts of the project was the analysis and the design of a controller that would translate the joystick command into the command that is sent to the motor driver. The goal of this controller is to act as a filter and avoid sudden movements of the wheelchair that would cause discomfort to those riding it. I posted some work on this topic a couple of years ago and it can be found here: https://hackaday.io/project/21343-control-of-a-vehicle-with-two-driving-wheels
The controller that is implemented in the current wheelchair prototype is a follow-up of the work above. The details of this new controller can be found in the student report in the Files section of this project page. The prototype features a "jerk limiter" that makes the acceleration (or the force) ramp up smoothly. This feature can be enabled and disabled by pressing one of the buttons of the joystick controller. The effectiveness of this feature became pretty clear when testing the 1st fully-working prototype, where components where held -literally- by gravity on the wheelchair seat. If the jerk limit was disabled the components would move around the seat unless the person controlling the joystick paid great attention to keep acceleration mild and smooth.
I did a quick measurement of the current drawn by the motor drivers for a full forward acceleration command with and without the jerk limiting starting from rest and this is what I got:
The plot is horrendous because I took a picture with my phone and supervised the results of two tests but it shows the effect of the jerk limiter: with no limiter, current (or torque) goes from 0 to maximum in less than a second, whereas with the jerk limiter in place is transitions between 0 and full in about 2 seconds. This of course can be tuned but the point is that the algorithm is implemented and ready to be used.
The are two further functionalities in place that are worth noting: one is that the controller uses a dead-zone around 0 speed to make sure the motor driver doesn't try to move at very low speed when the joystick is in its resting position if the joystick is not well calibrated. A second feature is a "cruise control" that keeps the forward speed constant and allows the person driving the wheelchair to give only "left-right" commands. This feature is quite well implemented and is disabled instantaneously whenever the joystick is pulled backwards or the button is pressed again.