I live in the capital of sprawl, Houston. I buck the trend by living in town and commuting backward to NASA in Clear Lake- take THAT commuter society! Nevermind my commute is 20 miles each way (but it’s backward so I go pretty fast!..). I scoff at the suburban dweller, nay, hermits, who retreat daily to their free standing single family homes to lock the door and pluck some brain cells to place into a jar until the day repeats anew.
I am “woke” to the depleting nature of suburban bedroom communities. I don’t need a car to get to the grocery store- provided I can get what I need from the michoacana up the block. Great news- tacos, again! It’s not a food desert! (If you’re reading Scott McClelland I will perform acts for an HEB east of downtown) I don’t retreat to my self-imposed prison because my prison is smushed up against other ones in an arrangement called townhomes. I get the best of both worlds: high price and no privacy!
Even better- my neighborhood is a rapidly transitioning area from blue collar warehouses/factories/shotgun homes to white collar purchased townhomes to probably eventually no-collar rented townhomes. Instead of windy streets that require a car (snort!) to get around, we have a grid where drivers are free to accelerate to 50+, and a railroad goes literally right down my street. It shakes the house in the morning. Not across the street. Down it, like oh hello I’m driving next to a giant train full of lumber; no arm is preventing me from embracing the void and veering under it. We live across the corner from a hummus factory- how many white bread subby kids can say that? In Spanish? They probably have a good Spanish teacher at their school…
I honestly love my neighborhood and flail against the Undeniable Likelihood that we’ll end up in the suburbs “for the schools”. I tell myself “Chaz won’t start school for six years and by then brick and mortar schools will be Disrupted™ with School Prime by Amazon” and we can continue to live like quasi-hip artists-cum-yuppy near downtown. I tell myself we’re here to get in on the gold rush of Houston’s new hip EaDo neighborhood, but promise to sneer at the term EaDo and prefer “second ward” or if I’ve had a Corona, segundo barrio. I hate what I’ve become.
I did want a townhome in an urban environment, and kind of had a loose list of priorities in living:
- Prefer proximity to amenities over land or yard potential
- Really no yard is tops- I hate lawnwork
- Prefer mixed neighborhood to bedroom community
- Walkability like NYC or Amsterdam!
- Prefer upcoming neighborhood to mature neighborhood
- Cheaper, speculative
I’d say for the most part I hit the nail on the head with our house, but the nail is in fact several nails of mixed quality and I pay well over $1000 a month for a gentle tap upon one of them.
I told a liquor store owner I bought a house nearby and she said “Puedes retirarse en dos años” which was not the case. I bought my house when oil began its free fall. Another fun thing you pick up against your will when you live in Houston is learning a laymans introduction to the oil business. Like when Johnny Depp went to prison for weed in Blow and learned cocaine. You are forced to listen to that or sports if you must talk to other men in Houston. Houston sports are bad enough that oil can dominate a conversation by default. Downstream’s doing great I’ve heard. That’s another column.
I realized now I’m not talking about the title of my rant. I guess there is a lesson inside reading and writing this article tangent to the actual content is that you can’t have it all, and your plans become minute tactical moves instead of grand designs you dreamed of. Instead of a self-reliant bungalow in a mixed urban environment where I can walk/bike/train to a park, grocery, bar, whatever, basically I Want To Live In Amsterdam But Maybe A Bit More Room is replaced with mundane decisions of what to do about the dang garage door sumbitch weather strip fell off and it’s $300 to replace a rubber tube whose only job is to keep my garage clean? Which it wasn’t in the first place and never will be?
Fuck every time I start an article it spirals into an existential I’m-jaded-with-western-capitalist-society-and-want-to-move-to-the-trees-in-a-commune-that-miraculously-rejects-pathological-quasi-religious-nuttery. Maybe I should write an article about my shit eating idea of a utopian oh god dammit.
Rockets are the sticks that go boom on one end and fly real fast the other. They range from the little bottle rocket on the 4th of July to the football-field-tall Saturn V which took astronauts to the Moon.
You’ll notice that the Saturn V rocket has a few segments. We call these segments stages. Why do rockets have stages? Why are there rocket engines inside the rocket?
The short answer is: to save mass to go faster. Why do we have to save mass? Think of it this way, you can roll a bowling ball much faster than a boulder.
Rockets need to go very fast in order to reach orbit. They need to go even faster if they are to escape orbit and go to other places. The notion of orbiting itself can be a bit tricky: It’s moving so fast that you are falling down at the same rate as the surface of the earth is curving away from you, so you end up falling around the Earth.
Have you ever dropped a coin in one of those big funnels and watched it spiral down into the hole? Orbiting is essentially the same thing: the coin falls around the hole and gently slows down and spirals into the hole. In space there is no friction to slow the spacecraft down, so it would be like the coin just rolling around in a circle forever.
So the difference between going to space and going into orbit is speed. Space is just up- orbit is going and staying up. Going back to staging- a rocket is basically made of three things: the tanks, the engines, and the fuel. The fuel is by far the heaviest thing on board, but requires tanks to hold it. When a tank empties, you continue to carry the empty tank.
Staging allows you to shed the mass of emptying tanks, so you can push the remaining pieces of the rocket even faster. Second to that (and the focus of a future article), the rocket engines for different stages are designed to best work either at the ground, going really fast, or going really fast in space. By dropping early engines you can start up new engines that are best suited for that phase of the mission.
I want to write a little bit about listening to others. Basically: do it. Even though you are absolutely designed not to, you have to override your human programming and do it anyway.
Humans are tribal by nature, and without higher direction fall into groups of in and out.
This is literally written into our nature, our brains, our DNA. Humans are basically super-social walking plains chimpanzees. In The Third Chimpanzee, Jared Diamond details the incredible proximity we have to chimpanzees not only genetically but behaviorally and socially. The differences between us are a few degrees here and there. Humans, and especially civilization, have taken some behavioral aspects of chimpanzees and turned them to 11.
Chimps and humans (absent civilization) roll around in tribes which are loose collections of social and familial relations. People come and go, mate into other groups, start new groups, but there are clear social barriers between groups. For chimps, the size of these groups can go up to a couple dozen. For humans, multiple hundreds. One feature in humans that was turned to 11 is the ability to store, organize, and understand both identities and all the relationships between up to ~150 people. From this is the adage that you can only really have 150 true friends. Beyond that and your resolution of the interpersonal relationships break down- they become acquaintances. Social media farms out the mental power needed to maintain this social web, so in effect scrolling your facebook feed literally feeds a primal urge to digest social networks. But I digress.
Furthermore, the relationships between human tribes vs chimp tribes is also turned to 11. Chimpanzees are naturally wary and possibly violent with outsiders. Humans are as well, but with the gift of story telling and long multi-generational lifetimes, relationships between tribes go from banal to epic. Instead of just a random stranger, that person from the other tribe is a demon whose grandfather cast a spell on the whole valley; avoid if possible, kill if you must.
Maybe you see where I’m going. Using the qualifier “absent civilization”, humans are basically super social, super paranoid walky chimps. Fortunately (though that is debatable) we have civilization, which has selectively muted the innate tribal behavior of people, left to seethe under the surface. Instead of absolute discrete tribes, tribal behavior retreats into relative social areas of life. It is always just under the surface though, and many times starkly above it.
Anytime you see someone completely shut out dissent, treat insiders better than family, outsiders like blood enemies, you are seeing classic human behavior. This shouldn’t surprise you. You are that way too. Yes you are. YES YOU ARE. I don’t care what you say!
This behavior is intractable because it’s so natural to exhibit and feels like a warm blanket of certainty to those who wear it. Coming up and actually listening to and considering the merit with the benefit of the doubt is like sticking your head out of the igloo.
Rising above tribal behavior itself is a behavior, which like all behavior is borne out of habit- and habits can be formed with disciplined intervention. It is possible through a concentrated effort on mindfulness to push tribal nature away perhaps six inches. I’m telling myself this right now as I am getting mentions on twitter for spouting off on some Trump fan’s tweet. Namaste. Be the change Clark. Don’t reply.
The ability to achieve a modicum of mindfulness to actually listen to alternative interpretations of politics is paramount today. We must learn first how to listen without mentally grinding our axes. We must also learn how to speak with compassion, but man I’m not getting into that at this point.
I’m trying to set this up for the next edition sometime which will be about looking for merit in your detractors argument vs looking for holes to poke. We can’t move forward by dismissing the concerns of others- we have to bring them with us. So next time I’ll talk about how I’m trying to do just that. Perceived facts may as well be real when votes are. We have to understand the perception and enlighten it.
I’m going to try and dump some positions on politics I have here in no particular order and see if some kind of coherent identity is apparent by the end. Even better a cohesive message that someone else may identify with. This is just a personal exercise after being inundated with histrionics and naked partisanship in these early days of Trump.
I think if I had to boil my position on the role of government in society and policy into one sentence, I would
plagiarize borrow the Eames design slogan: government should do the best for the most for the least.
It’s just one sentence but there’s a lot to unpack. First of all is the action verb “do”. I think government should do things. Is it asinine to back up to that level? Maybe. Being embedded in the political atmosphere I’m in (Southeast Texas), I feel like that needs to be said. Many people here myopically want government to shrivel away completely, asphyxiated by dwindling budgets. I acknowledge the need and role of administrative (as opposed to punitive) government.
I think the government plays a role in guiding society toward a consensus state of progress. Consensus to me means broad goals of equality, justice, and health. That separates me from libertarians who think only a punitive government should exist. I say punitive vs administrative to separate the military and safety (police, fire) roles of government from administrative roles- basically everything else: regulations, trade, safety nets, etc.
I say that the government should guide society, that verb guide is intentional. To me that means the government should have a soft hand wherever possible. I believe in a smartly regulated market, and the value of competition and enterprise. At the intersection of both is smart policy that is sustainable and guides us to long term goals that could not be met with profit-driven enterprise alone, or government run programs alone. The government is basically an incubator for things that don’t derive profit but have value.
There is a deeper philosophical perspective I have here: value and profit are overlapping but not identical. Energy is both valuable and profitable. We need energy for everything, which includes noble endeavors that have value. On the other hand, some medicines have great value but little profit, or vice versa. A powerful vaccine may be incredibly valuable but the eradication of its target ailment puts itself out of market. These are just two illustrations but across every sector there are areas where value and profit diverge. I see the role of government as a regulating force to ensure that unprofitable endeavors of great value are addressed.
Combining the “soft hand” with the “value-profit angle”- where the angle is the divergence between profit and value- and I start to see the kind of policy I think would work. Namely, using incentives and disincentives to guide business mostly, or to incubate business/nonprofits to support value without profit. To me this point of view allows me to marry two seemingly opposing views: that government should work through private enterprise, but that government should regulate businesses to maximize value.
An example of the former is the government contracting to or purchasing services from private business to have profit from value where there would otherwise be no profit. The simplest example of this is commissioning infrastructure. A more controversial example would be leveraging private enterprise to do things traditionally administered by civil servants, like education and qualified healthcare. I’m not diametrically against private education or healthcare- I want the best for the most for the least.
An example of the latter would be dis/incentives for business to guide their behavior away from negative value. Negative value is generally harm and costs to society that would otherwise be externalized without protections. Pollution is the most visible negative-value that is externalized when companies shirk their responsibility to clean up their mess. I would tax this behavior, use the revenue to contract direct cleanup or offsetting activities. This may or may not explicitly include carbon emissions, political will depending.
So the unholy alliance of the soft hand and value-profit angle puts me in a position to upset everyone. Your classic liberal would not like privatization of government-run education or healthcare. Your classic conservative would not like environmental regulations, particularly in the form of taxes. This is how contrarians know they’re on the right path.
Stay tuned, I think the next stream-of-consciousness will focus more on domestic punitive policy, institutional racism, right-to-life, and other lighthearted topics.
Part 1: Introduction and Range
This is a technical article about how to use the Deep Space Network (DSN). I’m going to start high briefly and dive in deeply. You can google/wiki the top level stuff. I want to get right into how to translate from DSN formatted data types into range and range rate in kilometers/ kilometers per second.
I want to do this because it was unnecessarily hard for me. Not because of the theory but because of the lack of documentation or guidance. I’ve ranted before that the DSN’s idea of a car for sale is a bag of parts, some duplicates, some bad, no instructions.
There are reasons for this. Cynically speaking jargon promotes job security. Professionally speaking, deep space tracking is really tricky and everyone has their own idea on how to do it correctly. It’s best to provide a raw form of data and let the user determine the best way to implement it… and they can’t blame you if it doesn’t work.
OK for the high level stuff: Deep Space Network is a trio of stations that all have huge satellite dishes that communicate with and track spacecraft in deep space. That means anywhere from high Earth orbit out to beyond the solar system. The sites are in Goldstone CA, Madrid Spain, and Canberra Australia. Together they can provide continuous coverage of spacecraft in deep space.
Each dish transmits and receives from a spacecraft in some frequency, commonly S-band. Knowledge and handling of this frequency is central to modeling tracking measurements from the DSN.
The DSN can transmit with a sliding frequency. The frequency is ramped over time in an attempt to lock the frequency at the center carrier frequency of the receiving spacecraft due to Doppler shift. E.g. That firetruck that blows by you has a drop in pitch, but the DSN compensates by ramping the siren opposite so the pitch remains the same. In that analogy you are the satellite and the fire truck is a DSN station. Combination of the ramping profile and round trip light time is again central to this process.
We’re getting deeper. DSN sends its data in a binary format called TRK-2-34 (spoken “track two thirty-four”) which is a fancy dump of everything about the tracking that occurred. The TRK-2-34 data set has data types inside (called headers or CHDOs), which either tell information about the tracking or actual measurement values. For this purpose I’ll talk about data type 7 (and by extension 14) and data type 16 (next time). Those are sequential range, pseudo-noise range, and carrier frequency for Doppler i.e. range rate, respectively. In order to translate these data types into absolute range and range rate measurements, you will need the frequency ramping data, which is in data type 9.
An entire article could be written about just understanding and parsing and storing the data from TRK-2-34. I’m skipping that, I’m assuming you’ve got a TRK-2-34 file, parsed, and have access to the data fields within the data types above. Don’t worry, I’ll call out which fields from each data type you’ll need to access. Documentation on how to parse binary data files is common on the Internet. The documentation on the TRK-2-34 format is actually comprehensive, but doesn’t explain how to put the pieces together to get a usable measurement- I’ll do that below.
Data Type 7 and 14 Translation
Data type 7 (Sequential Range) and data type 14 (Pseudonoise Range) are two methods to shave the “how far away is it” cat. The range code for each method is different, but the method to translate those results into an absolute range in km is the same.
For reasons, range is returned in an ambiguous form using a partial value of range called Range Units, measured in seconds (time). There are at least two reasons I know for this. Range is ambiguous because the range code may cycle in its entirety multiple times in its travels to the target craft and back, and all you receive is what point along that code you received, not the whole multiple number of codes were behind it.
Another bad analogy: the range code can be thought of as a ruler. It’s possible you need to chain multiple rulers to measure out to the spacecraft and back, but all you receive is how many inches on the last ruler. You have to figure out the number of whole rulers and add that to the front of your measurement for the absolute value.
On top of that, the frequency could be ramping so the range code actually changes length when this happens. To counter this and receive a constant value regardless of frequency, DSN uses Range Units (RU) defined as seconds, so that a constant range under a ramping frequency still returns a constant value. Sure, whatever. Lets move on.
So basically the answer to “how far away is it” is “have a rough understanding of where you are in the first place, know the time history of transmitted frequencies, know how to estimate light time travel, and combine this knowledge to translate a partial measurement of the final ruler into an absolute range from station to spacecraft.”
You will need to combine several values across multiple DSN TRK-2-34 data fields and your spacecraft/solar system propagator of choice. I am using FreeFlyer by a.i. solutions, Inc. You can use any astrodynamics library if you know what you’re doing, which if you’ve read this far you likely don’t. Don’t worry, I didn’t, I still don’t, and most importantly no one does.
I’ll dump the fields you need like an ingredient list then the steps to synthesize them all like a recipe.
Ramped Uplink Frequency
In order to get a time history of ramped uplink frequency, you will need to collect all the instances of:
- Uplink Epoch- from year, doy, sec fields in the CHDO 134 (secondary header for derived data types).
- Ramp Frequency
- Ramp Rate
- Ramp Type – Ramp type 1 (new ramp) is really the only one you need
From there, you can get a frequency as a function of time as
f(t1) = f0 + f_rate (t1 - t_up)
Where t1 is the epoch you’re interested in, f0 is the Ramp Frequency (2), f_rate is the Ramp Rate (3), and t_up is the Uplink Epoch (1). Every new ramp entry (ramp type = 1) should have a frequency and rate, so you can interpolate between them linearly.
Like the list above states, the epoch is found in the secondary header CHDO 134, which has the epoch at which all the associated headers are anchored to. The rest of the values come from the Uplink Data Type 9 report: Ramps data.
Range Data Type
Building a range measurement in useful distance units requires knowledge of the frequency at which the ranging code is transmitted. I have some questions to the merit of this, or the notion of “ranging code” that repeats and is not unique, but I am not an expert so I assume someone’s got reasons to tell me why I’m wrong. I’ll save my critique for the end.
This time, I’ll start with the final equations and work back to the components. I’ll also show the more verbose method of manually including the corrections because in the case of PN range data there is no already-corrected form of the measured range. The final range in km is:
rangeFinal = (rCorrected + rngModulo * numRambs) * BC_over_2f - ((C/2) * (ulZHeightCorr + dlZHeightCorr))
There is a lot there, so let’s unpack it. You’ll notice some terms are bold- these are values that are read from the data and not computed. The same format applies moving forward. The components above are:
- rangeFinal: the range in km, what you want
- rCorrected: the measured range from the data after applying station calibrations
- rngModulo: the range modulo, as read from the data or calculated from other pieces of the data (this is the duplicate parts analogy, I am just reading it from the data, so I have someone to blame if it’s not right)
- numRambs: the number of whole range ambiguities (rulers) you calculate, which is shown below.
- BC_over_2f: literally B times C (speed of light) divided by 2 times uplink frequency. Notionally, it is the distance of one range unit in km. B is calculated also below.
- C: it bears repeating, C is the speed of light in km/s
- ulZHeightCorr/dlZHeightCorr: Z-height corrections are found in the data in the secondary header.
Where I state “from the data”, I mean the value lives in the tracking header for the downlink data type 7 or 14. There are three components in there that need further unpacking. rCorrected is simply:
rCorrected = measRng - (ulStnCal + dlStnCal)
Where measRng is the uncorrected range measurement in range units read straight from the type 7 or 14, and ulStnCal/dlStnCal are the uplink and downlink station calibration values, respectively, and also read from the downlink CHDO.
BC_over_2f = ((excScalarDen / (16 * excScalarNum)) * C) / (2 * freqGsXmt)
Where excScalarDen/excScalarNum are the denominator and numerator of the turnaround ratio, and are found in the CHDO 7 or 14. freqGsXmt is the groundstation transmit frequency found using the ramping formula above. If your DSN pass is not ramped, congratulations, you can likely simply read the frequency again from the CHDO 7 or 14. For the record, we don’t know if our data will be ramped, so I am assuming it is and put in the hooks to handle it. There is a possible lesson in there about communication and silos.
Finally, numRambs is the whole number of ambiguities, and is found via:
numRambs = floor( (rangeGuess - (rCorrected * BC_over_2f) - (C/2 * (dlZHeightCorr + ulZHeightCorr)))/(rngModulo * BC_over_2f) + 0.5);
Where floor is the floor function, ie remove anything after the decimal, and rangeGuess is your a priori guess at the range. This is where I said earlier you have to know where you are to find out where you are. This guess can be pretty coarse depending on the length of your range code. Sometimes the data contains round trip light time “rtlt” and that can be used for your a priori. We have a fancy astrodynamics and orbit determination tool FreeFlyer that allows me to use a one-liner
rangeGuess = sc.Range(gs)
as the range guess.
To recap: DSN does a beautiful thing, but they are not a public-facing for-profit company. If you want to use the DSN to track your precious spacecraft, you’ll have to play with the toys they give you. You’ll need a half-decent a priori state vector for your spacecraft, a simulator to propagate it and extract geometry, a binary parser, the TRK-2-34 handbook, and all the steps listed above.
This is ridiculous. This is 2016. In general, my #1 complaint with almost everything spacecraft operations related is how needlessly complicated everything is, and how difficult it is to agree on data format, interfacing and access, even units and modeling. From antiquaited Two Line Elements to vector formats, ephemeris formats, tracking data formats, the pace of data modernization in (at least NASA) space operations is stuck in thick mud. There’s a tacit reason for this: if it’s stupid and it works, it’s not stupid.
I meekly disagree. I’m able to do a lot of seamless transitioning between websites, feeds, tweets, embedded youtube videos, and so on online using simple tags. It’s not a 1:1 comparison and a one-shot $200M gamble isn’t on the line, but if NASA ran the internet there would be two humans, an ICD, several teleconferences, a sign off, some testing, and a ORR for attaching a youtube embed and a tweet onto your third party website.
That’s general griping about my own experience trying to pull the proverbial teeth on getting help with data, vectors, and know-how. I’ve been rebuffed on the phone “I’m not funded to help you”.
Specifically to tracking, I have skepticism about ranging codes that repeat and are not unique or at all tied to the physical world. It would seem to me that you could really simplify the process and also remove a lot of interdependencies if you transmitted a ranging code that itself contained uplink data. You could then look at both the data itself for context, and the shape of the data (frequency) for more information.
I’ve wondered what if instead of a pseudonoise range code, you send actual timetags whose smallest resolution is transmitted on the beat of that epoch. That means saying a date into the microphone like “2016 October 10 13:26:20.123” where that final .003 is said exactly at that time. If you calibrate your transmitter to transmit time tags ON those time tags, then you mark when they’re received and you already have the transmit time. You don’t need anything else like an a priori state, transmit time in a separate header, etc.
Furthermore, if you know how long it took you to say the timetag, you can measure how long it took to hear the timetag, and the difference is due to a Doppler shift. Now you have a range and range rate measurement just by listening to the data in the signal and not requiring any interface to the transmitting station.
I’m sure there’s reasons why they don’t do this. The first thing that comes to my mind is bandwidth. Sending simple things takes less bandwidth than complicated things, and during a DSN pass you’re already sending/receiving many other things like downlinked science data, telemetry and command status, uplinking telemetry and command codes, new nav states, etc. Having a simple range code that you manipulate offline reduces the load. However I don’t know the bandwitdh cost of a periodic time stamp code vs a long pseudonoise code. I would like someone to tell me.
The other thing that comes to my mind is the precision and consistency of the transmitter oscillator. I’m not sure this issue would be any more or less impacting to a timetag signal vs a range code signal, which also needs to be consistent. I would like someone would tell me.
What I do at NASA
I said in my opening blog that I’m an aerospace engineer at NASA. What does that even mean? What is NASA?
I have seriously had to answer to people who thought NASA was shut down. I don’t want to disparage them, everyone leads complicated busy lives. I wake up every day thinking NASCAR is shut down and am bitterly disappointed that it’s not.
I also often have to answer what I do in social situations. This is tricky depending on the audience. Usually its a social gathering far outside work. For this audience I have to be brief, concise, and also tickle their fancy like a little bell in a closet. I can’t just say I do engineering- that shuts the conversation down. I’m trying to impress these people. For this situation I have a pre-packaged one-sentence response with a well placed cliff hanger that makes the audience beg for more:
I lead a team that designs and develops the ground system operations software for processing measurements of the Orion spacecraft’s position, velocity, and other things.
This has several buzz words that someone is bound to bite on, and ends with a handwaving other things. This way, if someone is already bored then they got what they asked. Otherwise, they can inquire more and further slate my ego. Yeah we take measurements from ground radars, space based satellite tracking, and the Deep Space Network. Yeah the ones with the huge dishes they use for the Mars rovers.
If on the other hand the audience is a fellow geek nerd, it gets tricky. These guys usually have low social skills and high technical skills with an unknown temperament. You can tell who they are by the way they are. For this type of audience I flip the script and get even more coy.
I do math.
Now the nerd’s area of expertise sticks out like a whip. The whip does a few things like whip things or allow passage over a crevasse, but it does not do everything. The nerd will attempt to link your work to his whip, in an effort to slate their own ego. He thinks he can drive your nail in with his whip.
We can’t have that. I’m the smartest guy in the room, even if I’m not.
By upping the coy to 90% or even higher, I deflect any attempt by the nerd to scoff at my work as “amateur and puerile”, which let’s be real it is. I work for years on a project which at best will send a handful of humans to an asteroid, at worst will get canceled upon Emperor Trump’s coronation. I maintain the air of mystery.
I’ll write articles about more detail, but will mete them out for the aforementioned reasons of ego market manipulation. Just take away with you that I do math. It’s complicated.