So, after applying power to the robot for the first time, I coded up some simple scripted maneuvers I was going to use to work up to a gimmick jump video. Unfortunately, I discovered that one of my assumptions was not well founded, and some more work will be necessary.
I started in on this project intending to create a semi-standard servo motor with integrated gearbox which could be used for all the joints. The brushless motors I am dealing with are only just barely capable of their task without additional gearing. Along that development path, I built some prototype integrated gearboxes for a 50 sized brushless motor, and even took some videos of it jumping.
However, the gearboxes I have built so far were not terribly ideal from a mechanical perspective. Primarily, they were too wide, and also too heavy, for the amount of torque and power they used. In trying to get a quadruped up and running as quickly as possible, I decided to try a parallel effort with nearly direct drive motors. My experiments at the time indicated that it should be just on the edge of possible. I had a full 3 degree of freedom leg jumping for several hours nonstop in that configuration (albeit with forced air cooling). The plan was to use an 81 sized motor for the upper leg purely in a direct drive configuration, a 60 sized motor for the lower leg with a belt gear reduction, and a 60 sized motor for the lateral movement in a direct drive configuration. I figured that the lateral axis didn’t matter that much for a first effort, as I wouldn’t be doing anything much dynamic, and if the machine is standing upright, no steady state torque is required at all from the lateral motors.
When I powered up the whole machine for the first time, I quickly realized that there were problems with my assumptions. While yes, the lateral servos were capable if the machine was perfectly upright, even small disturbances required significant amounts of torque. Due to the geometry, as the disturbance grows, the torque required grows very rapidly. It doesn’t have to be more than a few degrees off before the torque capability of the 60 sized motor is exhausted.
Here’s a quick video demonstrating the problems. First, you can see the chassis oscillating about the yaw axis. The actual position oscillation in the lateral servos is very small in that video, on the order of 0.3 degrees, yet it still results in noticeable chassis movement. At the end, I push a little bit too much laterally, and one of the lateral servos faults for over-temperature. They have to work really hard to compensate for what are relatively minor disturbances.
Secondly, the noise on the position encoder limits the amount of damping that can be configured in the position control loop. With the initial gearbox experiments, I noticed no problems in this area at all. However, in the direct drive version, with 5x less gearing, the position control stiffness and damping both got worse by an equivalent amount. It was not possible to both have stiffness sufficient to keep the machine upright, while still damping out yaw oscillations. Compounding the problem, turning up the damping to the maximum results in a large amount of audible noise as the position noise manifests as velocity noise, which manifests as commanded torque noise.
I’m currently going down two parallel solution paths to attempt to get something that works. The first, is just to swap the 60 size lateral motors in for 81 sized lateral motors. This will give roughly twice the torque capability, although it doesn’t really improve the damping ability at all. However, it is relatively easy.
The second is to accelerate my development efforts on a geared mechanism. Since Mini-Cheetah was released, I was quite impressed by the idea to stash the gear train on the inside of an 81 sized motor, and I’m working towards adjusting my gearbox design in that direction.
While I’m doing both in parallel, they unfortunately both require waiting for more stuff to ship and arrive, as well as more process development. Coming up, more details on the gearbox work.