Category Archives: 1-Ground

Python intro

First of all python is free! Then, I think of python as a super cool programming language that is also a super calculator. It allows you to do higher level math calculations but it can also help find cheaper airplane tickets in the Internet (ask me if you’re interested). Here is a short tutorial to get you started with python after you have installed canopy.

Quick start:

  1. Install Enthought Canopy Express from
  2. Open the Canopy editor and create a new file.
  3. Read the following mini tutorial and try some commands in the prompt.
  4. Type in the given equations from 1 to 6 and check the results with print statements. Don’t forget to hit run (Ctr + R or Cmd + R).

mini tutorial continued …

variables in python

you can basically use any typical variable name in python such as ‘perigee’ or ‘radius_earth’. Try to give descriptive variable names so your code is easily readable by others.

assign numerical values to variables

it’s as easy as you’d expect

perigee = 418.0

important note: in python 2 an integer number (such as ’18’) is treated differently than a floating number (such as ‘18.0’). To do math with floating numbers in python 2 you can’t have integers in the mix. So that’s why I usually initialize my integer variables with a ‘.0’ at the end so I won’t get strange results. You should try to see what I mean.

math calculations in python

To do math in python is also very simple and as expected


Rp = perigee + radius_earth
R = a*(1-e**2)/(1+e*cos(nu))

important note: in python the exponent operator is ‘**’ instead of ‘^’ as in other programming languages. Here is a short list of the operators you  can use in python:

print your results

The way you print in python 2 is different from python 3. This example is for python 2:

print 'Period = ',P,' min'

last but not the least: numpy

numpy is a python library that helps you do math. You can read more about it here:

For now you just need to import this python library and use it blindly. On the first line of your script type:

from numpy import *

this will import all the functionality of numpy into your python script. For this tutorial it’s specially useful to be able to use the constant ‘pi’ and also for the function ‘cos’. Otherwise you would have to make your own ‘pi’ and ‘cos’.

Here is the source code to make the magic happen:

#iss orbital speed and period
from numpy import *

perigee = 418.0 #km
apogee  = 426.0 #km
radius_earth = 6371.0 #km
mu_earth = 3.986e5 # km^3/s^2

Rp = perigee + radius_earth
Ra = apogee  + radius_earth

print 'Radius Perigee: ', Rp, 'km'
print 'Radius Apogee : ', Ra, 'km'

# 1) eccentricity
e = (Ra - Rp)/(Ra + Rp)
print 'eccentricity: ', e

# 2) semimajor axis
a = (Ra+Rp)/2.0
print 'a =', a, ' km'

# 3) mechanical energy
epsilon = -mu_earth/(2*a)

# 4) altitude at nu=90deg
nu = 90*pi/180
R = a*(1-e**2)/(1+e*cos(nu))

print 'R =', R, 'km'

# 5) orbital speed
V = sqrt(2*(mu_earth/R + epsilon))
print("V = {:2f} km/s".format(V))

# 6) orbital period
P  = 2*pi*sqrt(a**3/mu_earth)
print("P = {:.2f} sec = {:.2f} min = {:.2f} hr".format(P, P/60, P/60/60))

Systems Tool Kit (STK) intro

Note 1: STK only works on Windows (sad but true), well to be fair there is actually an old version of STK that technically works on Linx but it’s just the core engine, not really the Graphics version.

Note 2: this tutorial is a follow up of the Astronautics 101 post:

  1. Go to the AGI website and get registered to download the Free version of STK:
  2. Follow the instructions to install STK
  3. Create a new scenario, give it a name and use the defaults start and stop dates
  4. insert and STK object: satellite: From standard object database
  5. search the name ‘iss (zarya)’ – that is the official designator for the ISS. Select the result and click insert. You should be connected to the internet to allow the software to download the right database for the ISS. Then close all the insert windows untill you’re left with just the main STK views. At this point you should see a 3D window and a 2D window showing the orbit of the ISS
  6. Click the blue ‘start’ button on the control toolbar to see the ISS move. Then click pause.
  7. Now click the yellow ‘Real-time animation mode’ button and then the ‘play’ button again. Now you are seing the actual position of the ISS at this exact moment. Is it almost over Honolulu? If you look at the time it’s in UTC instead of HST. But it doesn’t matter because it’s the real time.
  8. Now right click on the ISS icon on the Object browser on the left and select ‘Report & Graph Manager’. This will bring up a list of different types of reports you can get about the ISS. Explore the list of installed styles.
  9. Ok, now let’s double click on the ‘Classic Orbit Elements’ report (not the graph). This will bring up a new window with different columns: Time, Semi-major Axis, etc.
  10. Now let’s create a new custom report: click on the 3rd icon in the styles toolbar. Give it a name like ‘me419’
  11. Select ‘Classical Elements’ -> ‘J2000’ then double click on
    1. Time
    2. Apogee Altitude
    3. Perigee Altitude
    4. Apogee Radius
    5. Perigee Radius
    6. Semi-major axis
    7. Eccentricity
    8. Period
  12. Select ‘Cartesian velocity’ -> ‘J2000’ and double click on speed.
  13. Do the math with the given equations to confirm these results (for your own sake). Done!

Here is the STK scenario (zip) and report (txt) for download.

Cross Compiling for Embedded Devices

I’ve learned a few things recently about cross-compilation for embedded devices. I think this will become more and more a hot topic because of the Internet of Things (IoT) is boosting through the charts and many people are jumping into that. Here are some of the lessons learned (not all). Let me know if you have more insights into this exciting topic.

The Qt IDE is a great open source tool for software development. What if it would also become a great tool for cross software development? This makes perfect sense because Qt has the only IDE that works on all platforms. This was the question that triggered my pursuit in making the Qt IDE work to cross compile software for ARM devices running linux. Here are some of the lessons learned (as of Aug 2014):

  1. The best I could do so far is to use the Qt IDE on Ubuntu (working as either on a virtual machine or a real boot) to cross compile the code for the ARM and automatically deploy it on the ARM device. I’ve used a standard Qt project and also Cmake, both work great. With Cmake there might be a few tweaks if you want to deploy only one program instead of the whole project. More on this latter. Use the toolchain from linaro.
  2. Use gdbserver to debug, on the Qt IDE you must use a gdb with python enabled. It’s not to hard to compile gdb with the python extension (most cross compiler toolkits available don’t have gdb with python enabled, let me know if you find one)
  3. Don’t try the Qt IDE  on Windows to cross compile. It’s possible but there is a lot of pain involved. This Qt bug report gives you a interesting  perspective of what’s going on. Just accept the fact that it’s best to cross compile from linux (x32,x64) to linux (arm) – for the moment, I think this will change soon. I will post some instructions on this latter. But if you really, really want to spear head this start by  downloading the toolchain for windows from Linaro or the Sourcery CodeBench toolchain and use Cmake instead of a Qt project.
  4. Eclipse seems to be more appropriate to use for the development of embedded applications (in either Windows and Linux) but Qt creator will also get there soon I think. But if you just want something working you are better off with Eclipse at this time.

Here are some links to help you set up

Qt Creator