Control of a robot that trips a prosthesis for studying its response to the disturbances
Dynamic Legged Systems Lab (Aug'17 - Dec'17)
Carnegie Mellon University, USA
Advisor - Prof. Hartmut Geyer

OVERVIEW

A robot called Pushbot has been developed to apply disturbances to a person using a robotic prosthetic leg, running/walking on a treadmill for testing the prosthestic robot. Pushbot has six ropes that gets attached to a human subject at the waist and ankles. It applies disturbances to this prosthetic robot, to study if it can overcome and counteract the applied disturbances from the Pushbot. To apply a perturbation to the person using the prosthesis, the desired rope on Pushbot is to be selected and pulled. The project is to implement a controller for the same, to apply disturbances.

1. The ropes are connected to the subject at one end, and a low-stiffness tensioning spring at the other to keep the rope taut as the subject moves around. The ropes attach to a hip harness and ankle straps at six points on the subject's body; the front, back, left, and right of the hips, and the backs of the ankles.​​​

2. The ropes are guided around the treadmill and back to the main actuation system using a series of pulleys. The 6 ropes pass through a movable clamping platform, with clamping mechanisms evenly spaced along the width of the platform, one for each rope.​​

​3. To pull a specific rope, it is first clamped using a servo motor controlled through Arduino MEGA, binding it to the platform. Then, the motor drives the platform backwards along the linear bearing rails, pulling the rope and applying a disturbance to the subject.​

PRE-EXISTING IMPLEMENTATION

Analyzed the existing implementation method of the Pushbot robot and optimized its performance. The system included a dSpace, Matlab Simulink program, and a programmed Arduino MEGA, linked with the Pushbot. PD-Iterative learning is used for pulling the rope with a corresponding force profile.

The Simulink block "State Machine" within 'controls' subsystem has more than 50 inputs, and the system's performance wasn't satisfactory considering the avoidable complexity of the implementation through MATLAB Simulink. The Arduino MEGA code has been completely changed to implement the new control algorithm. The final codes and MATLAB slx files have been attached below.

PROPOSED CONTROL ALGORITHM

Changes made are,

1. For the same task of applying disturbances, the existing PD-Iterative learning needn't be used for the disturbances. The task can be achieved by clamping the ropes and pulling them with uniform force. The selected rope number through Simulink interface should respond to our "pull" and to "stop pull" command.

2. The dSpace has been removed completely and a new control algorithm has been used.

Data packets (rope number and information about whether to pull or not) is sent to the Arduino MEGA continuously, for operating the Pushbot.

In the Simulink slx file screenshot below, the "Rope number" constant block with possible values 1-6 are used to choose the desired rope number (each rope has an associated servo motor that clamps and releases the rope), and the manual switch in MATLAB Simulink interface is used to pull or not to pull the rope.

The "plant" subsystem of the Simulink has the rope number, pull or not to pull decision, and checksum along with terminator '0' sent as in-packet data. This goes through a baseboard serial block and we get out-packet data which tells us about the current state of the Servo, whether its clamped for pulling the rope or not.

​RESULT

The control algorithm has been successfully implemented to choose the desired servos to be actuated through Simulink slx file, Arduino MEGA programmed code with use of data structures, and Simulink Real-Time interface. A working video can be found here, right below.

SIMULINK AND ARDUINO FILES

Video of one of the servos in continuous action of clamping and loosening the rope.

Control of a robot that trips a prosthesis for studying its response to the disturbances