“I just finished building a bunch of Mini Cheetahs which the lab is loaning out to other research groups. Since we’re giving these to people who for the most part aren’t hardware oriented, these robots need to be even more robust than the original one.
One piece of that is preventing the motors from burning out. During normal operation with a good locomotion controller, the motors barely even get above ambient (even going 3.7 m/s, the motors weren’t warm to the touch afterwards). However, it’s really easy to write a controller that rapidly heats up the motors without actually doing anything - railing torque commands back-and-forth due to instability, joints mechanically stuck against something, machine-learning algorithm flailing around wildly, etc. We haven’t burned out any motors on the original Mini Cheetah yet, but I think our lab members all have a pretty good sense of what’s good/bad for the robot, and know to shut it down quickly if something bad is happening. But when the robot is in the hands of a bunch of software and machine learning engineers….. So to protect the robots, I’m adding in winding temperature sensing and over-temperature protection, to (hopefully) make it impossible to burn out the motors.
Now, the smart way to do this would have probably been to just add a thermistor in the windings, and call it done. Obviously, I didn’t do that, so here’s my observer-based workaround.
The temperature estimate uses an observer to combine two sources of information: A thermal model of the motor, and a temperature “measurement” based on the resistance temperature coefficient of the copper in the windings. The resistance of the motor is estimated based on applied voltage, measured current, measured speed and known motor parameters, and compared against the resistance at a known temperature. Sounds pretty simple, right?
Of course not. If it was, it wouldn’t be worth a blog post. It’s not terribly complicated either, but it took a bunch of little hacks to make it actually work.”