Attitude control for spin-stabilized satellites?

Brian: I ran tests on a different machine using your config file and an initial angular velocity vector of {2,0,20} deg/s. I observed the expected symmetric top type precession in both 2006 P1 and Beta 091124 (as best as I can tell. Cool idea for a module: add an angular velocity vector and angular momentum vector to the visual representation of the vehicle). If I can get fraps working here I will provide a video. I can confirm that I was definitely not getting this behaviour on my other machine last night. Weird...
Hmmm. System specific bug? For your info I'm running Orbiter 2006P1 on a six year old computer with an Intel Pentium4 chip,Windows XP Home SP3, nVidia G-Force FX5600 XT graphics card.

I'm using the default settings on the Orbiter Launchpad/Extras/"Angular Velocity Propagation" tab.


EDIT: Have a look at this video and see if it looks anything like what you are getting and/or are expecting: http://orbiter-forum.com/images/orbiter_sym_top_precession.wmv (my apologies for the terrible frame rate, I am not having much luck with fraps atm, it used to be much better than this...)
Doesn't look like what I get using rotation {2,0,20} and .cfg inertia parameter of "Inertia = 1 1 2"

I get the same old 180deg aperture cone.

Your video does look more like what I would expect to see - but...as far as I understand it, for an Oblate body (where Iz > Ix) the precession rotation should be in the opposite sense to spin rotation.

In your video it looks like the precession rotation is in the same sense as the spin rotation.

So I would say that your video still shows incorrect precession behaviour.

Thanks for taking the time to look at this, anyway :-)

Cheers,
Brian
 
Your video does look more like what I would expect to see - but...as far as I understand it, for an Oblate body (where Iz > Ix) the precession rotation should be in the opposite sense to spin rotation.

In your video it looks like the precession rotation is in the same sense as the spin rotation.

So I would say that your video still shows incorrect precession behaviour.
Refer to this animation:
prolate.gif

http://www.aero.iitb.ac.in/~bhat/axisymmetric.html

The direction of the precession is clearly prograde, ie, it rotates in the same direction as the rotation about the major axis of the body, clockwise in my video. As that page states, the precession is prograde for a prolate body and retrograde for an oblate body.
 
The direction of the precession is clearly prograde, ie, it rotates in the same direction as the rotation about the major axis of the body, clockwise in my video. As that page states, the precession is prograde for a prolate body and retrograde for an oblate body.

Sorry, I'm probably getting this backwards, but doesn't using an inertia parameter of "Inertia = 1 1 2" make the vessel Oblate?

So you would expect to see retrograde precession.

No?

Thanks,
Brian
 
Sorry, I'm probably getting this backwards, but doesn't using an inertia parameter of "Inertia = 1 1 2" make the vessel Oblate?
Oblate: ellipsoid with two large principle moments of inertia and one smaller one. Like Earth, or a squashed ball.

Prolate: ellipsoid with one large principle moment of inertia and two smaller ones. Like a rugby ball. So "Inertia = 1 1 2" is prolate.
 
Oblate: ellipsoid with two large principle moments of inertia and one smaller one. Like Earth, or a squashed ball.

Prolate: ellipsoid with one large principle moment of inertia and two smaller ones. Like a rugby ball. So "Inertia = 1 1 2" is prolate.

I agree with your definitions of the shapes of oblate/prolate - but not with your definition of the moments of inertia associated with them.

This page gives the formula to calculate the moments of inertia for an ellipsoid of rotation of uniform density(homogeneous).
http://en.wikipedia.org/wiki/Ellipsoid#Mass_properties

Ix = m(b^2 + c^2)/5
Iy = m(c^2 + a^2)/5
Iz = m(a^2 + b^2)/5

where a and b are the equatorial radii (along the x and y axes) and c is the polar radius (along the z-axis), and m is the mass.

Let's plug in some numbers for an oblate ellipsoid where:
m = 1
a = b = 10 (equatorial radii)
c = 5 (polar radius - less than equ.radii - it's squashed)

Ix = 1(100 + 25)/5 = 25
Iy = 1(25 + 100)/5 = 25
Iz = 1(100 + 100)/5 = 40

So for an oblate ellipsoid like the Earth, the moment of inertia about the polar axis is greater than the transverse moments.

Also, from this .pdf http://faculty.ifmo.ru/butikov/Applets/Precession.pdf
(which is the best explanation I've found)

on page 3
For a body whose central principal moment of inertia about a transverse axis is greater than the moment of inertia about the axis of symmetry, vector L of the angular momentum deviates from the axis of symmetry through a greater angle than vector ω of the angular velocity does. Such mutual disposition of vectors L and ω with respect to the axis of the body is characteristic of prolate, stretched bodies.

on page 7
For an oblate axially symmetrical body whose longitudinal moment of inertia is greater than the transverse one, the torque-free precession may occur even more surprising. In this situation vectors n and ω at any moment of time are deviated from vector L of the angular momentum
to the opposite sides, as we can conclude from the right-hand side of figure 1. In this case the angle between vectors ω0 and Ω is obtuse.
In other words, vector ω0 of the spin angular velocity is directed oppositely to vector n, in contrast to the case of a prolate body. This means that when the axis of the body is precessing counterclockwise and the body cone is rolling inwardly over the space cone (touching the space
cone by its inner surface), the own rotation of the body occurs clockwise, that is, in the opposite sense with respect to precession.This is a retrograde kind of precession.
(italics are mine)

It's late - I have to sleep!

Cheers,
Brian
 
Thanks for that great info. Yes, I agree your vessel has PMIs like an oblate body.

I can see my mistake now. The direction of the herpolhode (yellow line) is prograde for both oblate and prolate cases, as is the motion of the axis of the body cone (purple line - the +Z axis in your vessel). You can see it in these two animations:
prolate.gif


oblate.gif


The motion of the axis of the body cone is what you can see most clearly in Orbiter. Because we lack a way of directly visualising the direction of the angular velocity vector, you cannot see its motion. Using the scenario editor, you can take "snapshots" of the position of the angular velocity vector. By doing this, you can see that the motion of the body frame in the rotating frame fixed to the angular velocity vector is definitely retrograde. To put it the terms of that pdf you linked to, [math]\omega_{0}=\omega-\Omega[/math] yields an [math]\omega_{0}[/math] that is pointing roughly in the opposite direction of [math]\Omega[/math]. I hope that makes sense. I'll try and demonstrate with some screen shots if I get the chance.

EDIT: See the following screenshots. Note that the precision of the measurements is quite poor, but the point is demonstrated.

First, at t=60 s, the orientation of the vessel is aligned with the global frame and the angular velocity vector has components only in the +z and +x directions:
precession_t60.png

Next, at t=68 s (actually 68 + a bit), the vessel has rotated through roughly 180° and the velocity vector has rotated through roughly 270°:
precession_t68.png

In terms of your reference document:
[math]\omega=\frac{180^{\circ}}{8s}=22.5^{\circ}[/math]
[math]\Omega=\frac{270^{\circ}}{8s}=33.75^{\circ}/s[/math]
[math]\omega_{0}=22.5^{\circ}-33.75^{\circ}=-11.25^{\circ}/s[/math]

Ie, the precession is retrograde, as predicted.

Dissenting opinions welcome. I've yet to run a test for I={2,2,1}.
 
Since you are in agreement with Mr.Butikov's Java Applet simulation here
http://faculty.ifmo.ru/butikov/Applets/Precession.html and the animations you've posted, and since I actually made some paper cones and rolled one around the other and saw the result - I concur with your analysis! But I'm not entirely sure I get the maths.

The left-hand side of this diagram from Butikov's precession.pdf confuses the hell out of me, because using the "right hand rule" (thumb points along the angular velocity vector, fingers curl in the direction of rotation) it look's like the precessional rotation of the z-axis [math]\Omega[/math] goes in the opposite sense to the z-axis spin [math]\omega_0[/math]
butikovpdf.gif


So, it looks like your Orbiter is modelling precession OK - but sadly it also means that what happens in my Orbiter is even more wacky than I first thought.

Here's some vids of what my Orbiter does. In each case, I paused the sim, set the orientation angles to [0, 0, 0] , set the angular velocities to [30, 0, 90] , then un-paused the sim.

The initial view point is along the vessel +z axis (+z goes into the screen)

Using .cfg parameter Inertia = 1 1 2 gives totally bizarre results so I chose Inertia = 4 4 1 or 1 1 4

This first vid is for Inertia = 4 4 1 (prolate) and I guess it shows aproximately what you would expect (although I reckon the z-axis cone opening angle is wrong).

Next vid is for Inertia = 1 1 4 (oblate) and shows the z-axis precessing in the opposite direction to the z-axis spin (not what we expect, from your analysis above, right?)

Finally, here's what I get with Inertia = 1 1 2 (oblate) it's that 180deg aperture z-axis cone (that you saw one time?) seems really wrong to me.

Let me guess - this is a BrianJ specific bug sent by the gods to mystify and frustrate me :P

What do you think?

Cheers,
Brian
 
The left-hand side of this diagram from Butikov's precession.pdf confuses the hell out of me, because using the "right hand rule" (thumb points along the angular velocity vector, fingers curl in the direction of rotation) it look's like the precessional rotation of the z-axis [math]\Omega[/math] goes in the opposite sense to the z-axis spin [math]\omega_0[/math]
It does go in the opposite direction, but only when measured in a rotating reference frame that is defined by [math]\Omega[/math]. The angular velocity of the body in an inertial reference frame is simply [math]\omega[/math]. It is difficult to visualise [math]\omega_0[/math] in Orbiter since we can't generate a camera view that rotates with the angular velocity vector.

This first vid is for Inertia = 4 4 1 (prolate) and I guess it shows aproximately what you would expect (although I reckon the z-axis cone opening angle is wrong).

Next vid is for Inertia = 1 1 4 (oblate) and shows the z-axis precessing in the opposite direction to the z-axis spin (not what we expect, from your analysis above, right?)

Finally, here's what I get with Inertia = 1 1 2 (oblate) it's that 180deg aperture z-axis cone (that you saw one time?) seems really wrong to me.
:embarrassed: Ok, confession time. When I went to try and replicate (or not) your results I found that somewhere along the line my config file was empty. I'm running Tortoise Hg on my Orbiter installation so I suspect I inadvertently reverted some changes to that file. Anyway, the upshot is that my previous investigations are essentially invalid since I can't guarantee you what PMIs my vessel had. :embarrassed:

What I can say is that I was able to replicate the results shown in your videos there. Now I just need to try and make sense of them (that'll have to wait until tomorrow, I'm afraid). My apologies for misleading you.
Let me guess - this is a BrianJ specific bug sent by the gods to mystify and frustrate me :P

What do you think?
I think the gods sent me to confuse and confound you with dodgy experimental results :P. Hopefully the end result will be a greater understanding of torque free precession for both of us :)
 
Hopefully the end result will be a greater understanding of torque free precession for both of us :)
I'll go with that :thumbup:

At least if we're getting the same results for the same inertia parameters and angular velocity settings, that's a start.

Maybe you can check and see if my (rather strange) equation for finding the angle between the vessel z-axis and the precession axis works for you.

I do appreciate you taking the time to look into this. Thanks.

Brian.
 
I've attached a graph of predicted body axis angle (the angle between the axis of symmetry and the precession axis, ie, half the cone opening angle) for a range of axisymmetric body shapes and directions of angular velocity. The shape looks right to me, ie, the angle decreases as the angular velocity approaches the axis of symmetry and decreases as the body becomes more oblate. It doesn't match the Orbiter observations though. For example, for the case of PMI = {1,1,2} and omega={30,0,90}, the cone opening angle should be 13.26*2 = 26.52°, whereas we observe 180°.

My next step is to try and write a small console app to integrate Euler's equations (my understanding is that is what Orbiter does) and see if it matches the predictions made in that graph.
 

Attachments

  • axisymmetric precession.png
    axisymmetric precession.png
    37.9 KB · Views: 13
Cool graphic. Can I ask what equation you used to generate it?

It looks closer to what I thought would happen than what Orbiter does, but it's obviously not just:

body axis angle = atan[ (PMIx*omegax)/(PMIz*omegaz) ]

Good luck with devising an app to integrate those equations! Way beyond my limited programming skills.

Cheers,
Brian

---------- Post added at 12:57 AM ---------- Previous post was at 12:08 AM ----------

Oh, wait a minute....is it
[math]\theta = atan[ \sqrt{2}(\omega_x / \omega_z)(I_x/I_z) ] [/math]
?
 
At high time accelerations you could switch the propagation of rotational motion computation to a couple of key points, and just have it interpolate in between.
 
Cool graphic. Can I ask what equation you used to generate it?
I made an Excel spreadsheet that essentially determined the size of the space cone and body cone from the direction of the angular velocity and angular momentum vectors. I never thought to look for an equation for it... :dry:
 
So....where does that [math]\sqrt{2}[/math] come from? :idk:

Anyhow, I managed to make an attitude control system for my "Giotto" probe, using Orbiter's precession model where the angle between the precession axis and the spin-axis(z-axis) is given by

Pointing accuracy is better than 0.001 degrees (how does that compare to real-life pointing accuracy for spacecraft?), so I'm confident that the above equation holds for Orbiter.

Only question is - is Orbiter modelling torque-free precession accurately? (Does the above equation work in real-life?). I'm not confident enough of my maths or understanding to say yes or no. Anyone have an opinion?

Cheers,
Brian
 
Pointing accuracy is better than 0.001 degrees (how does that compare to real-life pointing accuracy for spacecraft?), so I'm confident that the above equation holds for Orbiter.
Hubble achieves 7 milliarcseconds, but that is probably better than Giotto would need. I found a document stating that the Giotto star tracker got within 0.1 degrees but I suspect that relative pointing (ie, tracking an object) would be much better than that.

Anyone have an opinion?
"I have opinions of my own -- strong opinions -- but I don't always agree with them." (George Bush) I need to do more research before I can decide whether I agree with my opinions on this issue or not :P
 
I had done some more testing based on Orbiter 2006 and 2010 and concluded that the torque free precession was incorrect. After some discussion with Martin, we have found and corrected the bug in 2010-P1. In summary, my testing of 2010-P1 indicates that torque free precession is now working as should be expected.

I used the following code to measure the angle between the axis of symmetry and the angular momentum vector for a range of prolate and oblate axisymmetric bodies. The measured angle agrees with the graph I posted up there ^ earlier and with the analytical methods in Eugene Butikov's "Inertial rotation of a rigid body".
Code:
void ShuttlePB::clbkPostStep(double simt, double simdt, double mjd)
{
	static VECTOR3 prevZ = _V(0,0,0);

	VESSELSTATUS vs;
	GetStatus(vs);

	VECTOR3 L = _V(PB_PMI.x * vs.vrot.x,
				   PB_PMI.y * vs.vrot.y,
				   PB_PMI.z * vs.vrot.z); // local frame
	L = L/length(L);

	double bodyConeAngle = acos(L.z)*DEG;

	sprintf(oapiDebugString(), "Body cone angle:%2.3f", bodyConeAngle);
}

Even better, for a prolate body [math]\Omega<\omega[/math] and for an oblate body [math]\Omega>\omega[/math] as predicted by Butikov (I'm using his nomenclature here). This is just based on visual observations though, I haven't done any direct measurements of it.

All of that is good news. BrianJ, the bad news is that you will have to rewrite your autopilot...
 
BrianJ, the bad news is that you will have to rewrite your autopilot...
Shouldn't be too much of a problem......it'll have to wait it's turn on my rapidly growing list of old add-ons to revise/recompile, though.

Tip o' the hat to you and Martin for getting to the bottom of it and sorting it out :thumbup:

Cheers,
Brian
 
Back
Top