chip updates: control design for the new code version [updates]
So in this next version of the code we want to start getting serious about this whole control design thing. We're going to work with the IMU for some dynamic balancing and at the same time once we get dynamic balancing down work on the walking.
So I have a better idea on how to make this thing a little more stable and that's going to involve some physical measurements of the system.
Here's the biggest problem. We don't know where the CoG is right, meaning we can't really figure out where the forces on the robot are being applied or how to dynamically balance the system if we don't know where the CoG is. That, and we don't even know what the weight of the current robot is so we don't even know what the force we're trying to balance even is.
So here's the plan for CHIP going forward:
- ADD the velocities of the motors to the JAVA and the RIO_DATA_READ node because
we want to try full-state control
- Figure out the max publishing rate of the RIO for the above data and MATCH those
- First we're going to measure chip's total weight (and include weight of planned
- Second we're going to do an experiment where we figure out where the CoG is at a
given set of leg positions (described later)
- Then we'll go into the control design of the current system and start implementing
things with the IMU using feedback-control instead of GUESSING
- Come up with some way to account for SLOP in the system
- While everything ABOVE is going on, we're going to make him a nice dust-proof skin
We'll write a paper up on THIS ^ because on the mechanical design side we're learning/doing that for fun this is an EXPERIMENT. How SIMPLY can we do control? Can we account for SLOP? And etc? We're going to attempt state-space or PID feedback control!
So yea, we're roughly starting from scratch. Woot! But good thing this is a summer project!
When designing this controller we need to think about the things we want to the robot to do which is, (a) stay STABLE in any leg configuration, and (b) be able to WALK in directions we ask it to.
We're NOT trying to get this thing to be incredibly dynamic. We're trying to make it work. So let's just use some physics to design a SIMPLE controller that lets us achieve those objective. No reason to use a computationally intensive state-space controller if we DON'T NEED IT but it would be of course cool. Baby steps!!!!
The Experiment to Measure CoG:
Our biggest problem is the X location of the CoG, we have no idea where that thing is. In the Z-direction we don't know exactly where the CoG is but we can measure it and then assume it doesn't change very much. In the Y-direction we kind of don't care where the CoG is.
So here's what we're going to do. We're going to measure the Z-Cog on its own, and then we'll create a function that tells us based on the position of the legs where the X-Cog is through measurement. Only movement of the TOP LEG really affects the CoG (the Theta1) so we're just going to do a really accurate measurement of that. This is the best way to model a system if you actually have it. Don't know where the CoG is? MEASURE IT!
So the experiment here would be to use the classic, balance this on a POLE experiment. You might say that's primitive, and you'd be right. But it WORKS. Sometimes if something is too complex to model you need to go back to the basics. And if we can build this kind of model we'll be able to control the robot (hopefully).
So that's what we're going to do.