Tuesday, July 29, 2014

And the world keeps spinning

So I was trying to make a stand alone movie capture and snapshot program before I posted this. I was successful in making the snapshot, however the movie poses problems when two while loops had to run simultaneously and MatLab is single thread (I do not have the parallel toolbox). It has a fix but it would take time that I am not willing to currently put into it. Maybe one day once the tools are done or I get a strike of inspiration I will do it. Regardless, here is a quick snapshot-ed image of the Earth. If you want you are able to change the rectangle of screen capture.

Round

The reason I wanted the movie capture program was to make it so I would not have to capture the following section on my phone (I don't know of any good free screen recording software). But anyway, here it goes.

As you can see from the new play, pause, rewind buttons in the above image, it has the the ability to (of course) play, pause, and rewind any plot pictured in the axis with a time step set by the user. The planets spin with their actual angular velocity and are also able to be viewed with satellites orbiting about them as well as orbiting the sun.

Earth spinning with multiple satellites orbiting. There is a 10 minute (600 second) time step between steps.


Mercury, Venus, Earth, Mars, and the asteroid Itokowa orbiting the sun with a ~2.8 day step.


Unfortunately, the buttons work in a while loop so I cannot make a video of them without including the capture code in the same loop.


Time to start working on the tools. I think I may have to write them as "plugins" to avoid the need to edit the structure of some of the other functions.

Tuesday, July 22, 2014

SpaceSim (GUI) 1.0

So here is the framework of the GUI. If there is any feedback, I would love to hear it. Remember, I am an engineer, not a computer scientist. For now, I have not compiled it to an .exe file and MatLab must be installed to use it.

So starting from the get-go: the main file is run from anywhere, it get's its current location and makes that, and all internal folders, part of the path. From there, the GUI is opened and populated. I will explain what each part of the figure does, then show examples of the capabilities.

Initial start-up figure of SpaceSim.

Starting from the top: 
File menu: Allows the user to save, load, or exit the GUI. The save option saves the current structure of objects, as well as any populated tools, which can then be loaded for future use/analysis. 
Edit Menu: Right now this is only a placeholder, I do not have any editable program properties yet (except for the objects, but I will get to that).
Add Object: Menu to add an object to the object list. The current addable objects are planet, rocket, asteroid, and satellite. I will speak about each of these objects in further detail in a later section.
Tools: While I have not implemented any of these into the GUI (YET!), they will consist of (but are not limited to):  an orbit simulator / impulsive and finite transfer optimizer for multiple or single central bodies (including asteroids), design and launch of a rocket, a Walker Constellation tool along with analysis abilities such as access times with constraints, and a mission design tool which splices together the other tools to create a rocket to launch a satellite to a defined orbit where further analysis can be done.
Help: A user manual which I am writing as I go along.

Toolbar Menu: I have included the generic MatLab figure toolbar since it contains all the functions I need. Until a time when I can create my own toolbar or map zooming/rotating to keys I will leave it as this, since I have more important things to do.

Time: The time is taken at the start of opening the program. This time can be edited, as long as it stays in a form which MatLab can read. To view the bodies at a different time, the plots must be updated manually.

View Dropdown Menu: Lists all the current bodies as well as an option for "Orbit", which allows the user to choose from the Earth and Sun (will eventually be every planetary body object) and takes every object whose "parent" is one of those two and allows the user to check boxes and view their orbits about the main body. 

Current bodies moving about the central body, the Sun. 

A picture of the orbits of these planets at the date indicated on the top right assuming the initial orbits are from January 1, 2000 and extrapolated to their current position via. Kepler's equations (which is when the planet data is from, but this will change in the future). The planets are currently not listed, but there will be text right next to the dot saying which planet it is. Planet Awesome = Yellow, Earth = Green, Jupiter = Blue.

Axes: Displays whatever is prompted to by the view dropdown menu. These are 3D and can be controlled via the figure toolbar.

Object List: A list of objects which the user has input. All of these objects are able to be edited and deleted at will. Currently all input angles are in radians because I am lazy. It isn't that hard to convert from degrees. Deal with it.

Current object capabilities. The editor has the same options as the create panel.

     Planets: To create a planet objects, there are two options. The first is to choose a defined planet from a list which contains all 9 (including Pluto) planets, the Sun, and Earth's Moon. All of these have images included which can looked at by changing the "View" dropdown menu to be the name of that object. The object will appear in the list as soon as it is added to the object structure. Alternatively, one can create their own planet and define all of the variables themselves, including the name, parent body, orbital elements, and any other parameter. Also (this is my favorite part), the user is able to add a .jpg image to be mapped over the planet to visualize it.  

Left: Add planet pop up.
Right: as well as the custom planet options. There will be more options in the future such as atmospheric density.

Left: Jupiter, as viewed from the program.
Right: Planet Awesome, including a picture mapped over it for the user's pleasure (, a picture which my friend wouldn't allow on facebook so I decided to defy him elsewhere).

     Asteroids: Same thing as planets only there is no creating an asteroid, since it must contain defined point and connectivity list. The parameters are able to be edited though. There are currently 4 asteroids which are programmed in, however I have a database of a fuckton (including their connectivity lists and all parameters) of asteroids which I have not converted to be able to be read by the program. Here is the image of Itokowa which I included in the last post. Right now the only thing the asteroids can do is be pretty. However (and once again as showed in the last post), I need to put the code to orbit asteroids into the GUI.

Itokowa.

     Satellites: The editable parameters of a satellite are similar to that of the previous two. The SA stands for solar array and the rest is self explanatory. Satellites are also able to be viewed, however there is only one model (rectangular everything).

Satellite edit options


Possible Satellite Configurations.

Rockets: Read this post for a full rundown of the rocket capabilities. While I have updated the code (uses inertia matrices and thrust vectoring instead of assuming a constant angular acceleration emulating a thrust vector), and implemented some of it into the GUI, this will give the gist of everything I have done with it and will put in. In short, you can create, view, and launch rockets. So far I have no put the ability to edit in rockets as I have with the other objects since it requires more effort to write the GUI and I would rather work on other parts because I already know it works. Following is a picture of the Falcon 9 Heavy, with projected staging data, as seen in the program.

Falcon 9 Heavy



I think that might be it for now ... I am pretty sure I missed something but I can always cover it some other time. 

Wednesday, July 16, 2014

Update

Hello!

I have not been posting about it for nearly a year due to school and nobody really reading this. While I have not worked on the Solar System Sandbox program for some time, I have still been working on a continuation of this project. My current project will be explained in the next post.


But before that, a brief update on what I have been working on:

Last semester I created a program which I dubbed "Asteroids", which does just that. Visualization and simulation of orbits about asteroids.


Visualization of Itokowa, which was visited by the Hayabusa spacecraft. 
Itokowa is one of the many asteroids already programmed in.

I included some functions from the Solar System Sandbox for orbit transfers and whatnot and used this program in a paper I co-authored titled "The Near Earth Object (NEO) Scout Spacecraft: A low-cost approach to in-situ characterization of the NEO population" (which can be found here: Neo-Scout Report). I worked specifically on the trajectory, proximity maneuvers, and attitude control sections, while editing it with a few others. Examples of these functions can be seen below (taken straight from the paper so my lazy ass doesn't have to re-run the simulations).


In the paper, the program is used to analyze the trajectory of a satellite orbiting about an asteroid with given face/vertices and density. It includes functions for station keeping and landing/taking off from the asteroid.




Other than that, I have been working realistic rocket program utilizing inertia matrices and thrust vectoring instead of assuming a set angle of turn.

And my current big project, I am making a GUI to put all of these functions together with improved graphics and usability. The frame for editing and visualization is currently finished and I will begin to add tools in very soon. But I will show all of this at a later time.