So this is how we relate omegas to Euler angle rates. This is the differential kinematic equation. This is the equation, as before, that relates our angular velocity components with respect to what frame have we taken omega 1, 2, 3. because that's a vector truck. >> The body observed. >> The body frame, right. We had everything always in body frame. This is the attitude of b relative to the n. The omegas are always in b frame components. I just don't necessarily write them all the time anymore. So good, we have those. We have our attitude, in terms of quaternion. And with the Euler angles, we have this b matrix that with sines and cosines ratios right? And in fact those ratios, the denominator will go to 0 at 0, 180 or plus/minus 90, depending on symmetric/asymmetric sets. Here, we end up with this matrix, this is our b matrix, it's just a four-by-four here. And that maps it into these quaternion arrays. Now, why is there a 0 here? This seems like just wasteful writing. If you do 0 times this first row, the impact is 0, right? So really, you could have just picked this one, a four-by-three times a three-by-one. That will give you the four-by-one set of rates that you want. The reason you see this particular form is they buffer the four-by-three. This is what you will derive times this, this relationship. And you do this, you can derive this by looking at the DCM rate. We've got c dot equal to minus omega tilde c. And you've got c in terms of quaternions. So c dot, you go into each matrix component and say well, beta dot squared becomes 2 times beta 0, beta 0 1. And you start to accumulate all the terms. You can derive this, but people buffer it typically because this matrix is orthogonal. So normally we set the b matrix, for the other sets, they're not orthogonal. The inverse of b tends to not be just b transpose. It's certainly not true for Euler angles, the yaw, pitch, roll. The one for the quaternion, if you buffer the four-by-three into a four-by-four like this, has a nice orthogonal behavior. So now if you have your attitudes, which happens, actually people are looking at building building star tracker stat, not just go 1 Hertz. Those suckers can go 10 Hertz, 20 Hertz, very, very fast. So you don't need a gyro necessarily, and measurement updates so quickly, I can go well, I'm pointing here. And a 20th of a second later, I'm pointing here. One minus another, I get my rates right away. So now you know your quaternion rates from successive star tracker measurements. I know my current attitude, and your control requires omega. You would invert this matrix, bring it over, and you can solve for omegas. So that's why this matrix form buffered into a four-by-four is quite popular. It's an easy transpose that's easy to do even in a CPU limited way, it's a very fast operation. If you're just going from here, from omegas and you're integrating these, you don't necessarily need this form. You can just deal with the four-by-three in your code as well, okay? So that's nice, and they're actually bilinear. So it's linear in terms of betas, and it's linear in terms of omegas. So if you guys have taken estimation theory, estimating a linear system is so much easier than a nonlinear system. This is why a lot of people love these quaternions for estimation as well. Any questions on differential kinematic equation as the basic property? Their deriving, I'll let, you guys are going to work through that. I'm giving you some tips on how to to that. And as before, instead of having the omegas outside, you could actually through permutation, you could invert this. So now you have, if you know your omegas and you know your rates, what must the attitude be at that instant? Can I invert this matrix, is this one orthogonal? Evan, what do you think? >> No. >> Why? >> Assume that it's a- >> Well, it's a skewed symmetric matrix, actually. The off-diagonal terms are just different by a minus sign, so it's not quite symmetric, it's skew symmetric, and this is here. And any skew symmetric operator matrix is not full rank. It won't have an inverse, which makes sense. In that case this is not completely observable, in that case. But it's also an alternate form that you can use and how to get there. So good, just wrapping up. There's the forms of beta 0 = one-half this. This B that in my code, if I'm just integrating my quaternion rates, I typically just go with the four-by-three version. Less to store, I don't need that 0 times a bunch of stuff. And that's what you would see. This matrix too has some nice properties. And this you could quickly check, if you take this B, transpose it times the betas again ends up giving you 0. That's a nice property. And here too, that if you have a B transpose B prime or minus B transpose prime, give you the same thing. So there's a B and there's a prime, the primes have switched and the minus sign comes out. So there's some, just through permutation, these are some nice identities I'm throwing out. There's lots of quaternion identities out there people use. These are ones that might be handy a little bit later when we do quaternion feedback control. There's something, you can just see this, plug in the number, or plug in the variables, and you'll quickly go, yeah, I see, that all goes to 0, or this becomes minus the other. Some simple identities that we will use later on.