Mechanical Fabrication and Assembly
Since the last progress review, we completed the mechanical fabrication and assembly of the leg (Figure 1). We chose a shank with a rectangular cross-section, which although heavier relative to bending modulus, is much easier to mount components to.
We also mounted limit switches, linear potentiometers, and absolute encoders on the leg. The limit switches now are arranged to trigger even if the SEAs are removed from the leg for testing. The next step here is to route wires in a way that minimizes stray EMF and keeps wires out of harm's way. We also developed parts that can be used to lock the input side of the actuators, where the motors usually sit. These devices allow for strength-testing of the actuators by applying loads on the output ends and watching for component deformation or failure. We also need to devise a fixture to lock the output side of the actuators, probably by removing the foot and affixing the knee and ankle to our extruded aluminum test frame. Once this is done, we will have a more sturdy frame with which to repeat the force bandwidth test.
Selection of Alternative Motor Driver
Due to our long and repeated struggles with Arduino and Simulink, I felt it would be prudent to identify an alternate path. I asked our sponsor, Professor Geyer, if their lab had any commercial motor controllers that were not currently in use. We were able to obtain Elmo Solo Whistle (Figure 2) integrated motion controllers that allow communication over RS232 with a computer, and can run a fair amount of code themselves. These devices do require an encoder mounted on the motor, so we ordered two Avago HEDL 500 CPR line driver encoders that Maxon offers as a combination with their motors. However, they had quoted 2-3 week lead time if we sent our motors in to the service center to have them installed, which we felt was an unacceptably long delay and large risk. Instead, we ordered the encoders ourselves, and I developed a mounting adapter similar to the one used by Maxon, which incorporates dowel pins for alignment of the high-performance encoders.
Over the next week, our team will reach a decision on the feasibility of continuing to use the Arduino as a control element interfacing with Simulink. Several options are under consideration:
- Use the Arduino as a signal acquisition and serial interface device, reading the encoders and linear potentiometers and writing commands to the motor driver; Control the Arduino over USB serial port using Simulink (running the neuromuscular model)
- Program impedance control entirely on the Elmo Solo Whistle, using its high-level programming language
- Program impedance control in Simulink, while using the Solo Whistle for motor control and signal acquisition (communicating over RS232 to laptop in backpack)
- Use existing neuromuscular model-based control in Simulink, while using the Solo Whistle for motor control and signal acquisition (communicating over RS232 to laptop in backpack)
There are a fair number of sliding interfaces in the actuators, and if they are not properly lubricated and aligned, the actuators stick and resist motion with a large frictional force. To counteract this, I have developed several strategies:
- leveling of actuator components by measuring distances between different corners of pairs of plates in actuator with calipers while turning nuts to make slight adjustments in the distance between them
- lubrication with white lithium grease (stays on the actuators for longer than graphite-based lubricant or WD-40, both of which are too easily wiped off)
- working the actuators back and forth manually after lubrication to work the lubricant into the bushings, ballnut, and bearings
Loosening of Ballscrew Bearing Nuts
Unfortunately, if the acutator is too-well lubricated, the bearing nuts that hold the ballscrews in place can sometimes loosen. I keep checking their tightness, and retightening the setscrews that hold them in place to prevent them coming loose.
SSI Encoder Interface
The Elmo Solo Whistle cannot read the absolute encoders that we use for the direct measurements of the joint angles. They use an interface called SSI, that while common, is different from SPI and other serial interfaces, and requires significant clock configuration and bit-banging to read. Commercial devices designed to read the interface cost in the range of $500. We have developed code for the Arduino that can read them, but as we may be trying to eliminate the Arduino, this isn't as big of a help. We are considering calculating the joint angles by adding the value from the motor-top encoder to the linear potentiometer, which would give the length of the actuator overall, directly giving the joint angle. However, as the motor-top encoder is relative only, we would have to start the leg at neutral/known joint positions.