16.35

Home
Syllabus
Schedule
Class Project
Assignments
Links

Questions and Answers

Question:
I am slightly confused about what software parts we are suppose to write for the project. Is it everything under GNC or just the process control, attitude control, and attitude determination sections?

Answer:
There are a couple of requirements that could lead you to believe that you need to perform guidance (change of apogee and perigee). However, the command will simply consist of a pointing angle, start time and length of burn, so the software will mostly be the process control, attitude control and attitude determination.


Question:
We were wondering what an orientation plan is...Any ideas? It appears as 3.1.8 in the template for the test plan. There are no explanations in the test plan template, and in the draper doc!

Answer:
Turning on the hidden text in the document, you should see the following:

"This paragraph shall describe any orientation and training to be given before and during the testing. This information shall be related to the personnel needs given in 3.x.7. This training may include user instruction, operator instruction, maintenance and control group instruction, and orientation briefings to staff personnel. If extensive training is anticipated, a separate plan may be developed and referenced here."

If there happened to be a need for some amount of training prior to running the tests (for example, if one were to be testing the capabilities of an interactive system like a game), the training process (or pointer to the training plan) would be put in this section. If (as is likely in this case) there is no need for training (or any other section), one generally puts "N/A" in the section.

How to turn on Hidden Text?

1) Using "Tools->Options", select "View". In the window, under "Formatting Marks", click on "Hidden Text".

2) Using the "Standard" toolbar, there is a paragraph symbol. Clicking this will toggle between seeing paragraph markers (and other things, including hidden text) and not seeing them.


Question:
How am I supposed to run the code as it is provided with the empty implementations?
Answer:
The only parts that are empty are those you need to implement.

Question:
How am I supposed to identify that it is really running?
Answer:
I mentioned in one class, I think, that there is a procedure called "Editor", that also needs to be modified. This procedure sends data to a file called CHANNEL7.IO every 10 simulated seconds. Also, any output you generate (using "Put") will go to this file (during initialization, output that is normally sent to the monitor is redirected to this file.

Question:
Do we have to handle all strategy types? If yes what is mode "seeker"?
Answer:
No (unless I see all the teams become finished early). The mode you identified is called "Torque Equilibrium Attitude". The flight control system looks for an attitude that is stable (i.e. torques due to gravity variations, solar wind, etc., add up to zero). You can ignore that mode.

Question:
Why does ATTITUDE_CONTROLLER.OUTPUT_DATA.CONTROL_TOR_CMD have only 3 elements?
There are 6 degrees of freedom.
Answer:
The 6 include 3 translations and 3 rotations. The torque command is only concerned with the 3 rotational degrees of freedom.

Question:
Does a document describing the top down structure of the function calls exist?
Answer:
No. I provided the names of the procedures that call the procedures that you need to implement (in ISS Interface.rtf).

Question:
If yes can we get it? If such document does not exist can you describe shortly the function call sequence in the code?
Answer:
I personally do not find searching the code and reverse engineering it very appealing and unless this is the purpose of the project I would prefer not to do it.

Question:
I understand your concern, and have attempted to make it unnecessary to do a lot of searching. I don't know if you have ever looked at a detailed design document, but it is, in my opinion, not a whole lot better than the code in trying to find calling sequences. You can not create a picture showing all the functions and procedures calling each other, since that would be hundreds of boxes, with lines and arrows going all over the place.
Answer:
If you need to find out where a given procedure is called, use the Windows "Find" command (control-f in a directory window). Search for files or folders named "*.adb" containing text "procedure-name".


Question:
Why doesn't my code execute?

Answer:
That teaches me to try to do things from memory -- yes, it is gnatE.
My guess is that the Zipping and CD burning procedure must have changed some file protections, especially since the cc_tl_sim.ali is read-only in the directory from which I made the zip file.
Anyway, try this -- it worked for me.
1) Delete the whole directory. Start over.
2) Unzip the files using the "iss software.exe" file
3) Make cc_tl_sim.ali read-only
4) Rename iss_main.exe to something else (iss_main_old.exe works)
5) Open iss_main.adb in AdaGIDE
6) Use the AdaGIDE Build button (or Compile=>build from the menu)
7) open a command prompt, and issue the following:
8) cd "iss software"
9) iss_main
You should see "Executing main", if not more. When you have let it run a number of seconds, use "control-c" to exit (or simply close the window).
If this does not work, please let me know what version of GNAT you have, and what operating system, and what version of AdaGIDE you have.
Also, try the iss_main.exe that is on the CD.
I am using GNAT 3.14p, Windows 2000, and AdaGIDE 6.60.2.
I also did a "Build - force recompilations", which also worked.


Question:
I am not sure if I understand the purpose of some of the variables which are supposed to be used in JET_SELECTION_LOGIC.JET_SELECTION_LOGIC. Below are some of my questions about these variables:
1. ACF_ILOADS.JET_PULSE_PERIOD -- is this the minimal interval between two different jet firings? Is this the minimal ontime for a jet?
Answer:
Minimum interval between 2 firings of the same jet.
Question:
2. Why is ACF_ILOADS.REBOOST_GANG_TABLE an array? Actually it should be an array as there are 2 +Y jets, but in fact its size is 15. What are all other jets in this array for?
Answer:
For our purposes (i.e. the early ISS) there are only 2 reboost jets. However, this code was written for possible reuse for the full station, which was to have 15. The other array components are not used.
Question:
3. JET_SELECTION_LOGIC.ILOAD.COG_COST -- I do not understand why the cost is only a 3D vector, I would have expected it to be a 6D vector. I also do not understand why this array has 25 elements. I also do not understand why this array exist at all because my impression was that we were supposed to find the good COGs and then select the best one.
4. Let's say that ACF_ILOADS.STRATEGY is somehow clear.
5. I do not know what ACF_POOL.SSF_TIME and ACF_POOL.BOOST_ON are.
Answer:
SSF_TIME is current time.
Boost_On is the time at which reboost should start.
Question:
With a few words I am confused about what is going on in the code. I think that by now I and my team can implement the jet selection algorithm from the paper, but there is one problem -- I do not think that we can reverse-engineer the code which you provided. So basically we cannot interface with it. It is also unclear to me if any part of the algorithm is already implemented in the code or not. Will you be able to help us with understanding the current requirements for the code to be implemented and the interface to the code you provided?
Answer:
I will try. I thought the interface to these functions was reasonable, but keep asking questions. Unfortunately, I am in the same situation as you -- I did not write this code, and there is no documentation for it (other than what I gave you). I have been looking at the code for a couple months now, so I am probably a bit ahead of you in understanding it.
This does sometimes happen, by the way. On the project I just finished (X-38) nearly all the original developers left Draper, and the new team was told to finish their code. Some big pieces were completely re-written, but only because it was going to be modified so much as to be unrecognizable anyway.
Question:
P.S.: I have to say that I really miss Java and its object oriented approach -- here I cannot even do Object.toString(). As a side node -- I have never reused even my own code because it is so much easier to rewrite it rather than to reuse it.
Answer:
I am not sure why you would need to use Object.toString(), other than for hash tables, but a similar construct in Ada is Ada.tags.External_Tag (X'tag) (where X is a variable of some tagged type. It is not quite the same, in that it does not give a value that is unique to the object, but it gives the class name. The address would probably give a reasonable value for the object).
I understand that this code was not written in an object-oriented manner (in fact, it isn't the best functional-decomposition code), but I am not all that enamored of object-oriented programming. At least from what I have seen (only 1 moderately-sized program), it is even harder to understand (they had 6 or 7 levels of inheritance; it was very difficult to figure out how a given object got initialized and finalized).


Question:
Mr. Racine, The Green Team has been trying to run ISS MAIN, and while it runs without crashing, Channel6.IO and Channel7.IO are not being updated, created, written or anything. We are in fact getting no output. As far as we are aware we made all of the changes you mentioned and we have no idea what is going wrong. If you could help us out with this, it'd be great.

Answer:
My guess is that you are getting an exception somewhere that is stopping one or more of your tasks. This is easily found using the debugger. At the command prompt, type "break exception" (followed by "enter"). Then run the program within the debugger. It will probably stop at the problem. Note that it is supposed to have one exception (I think it is End_Error), which is A) not really an exceptional condition (bad use of exceptions, in my opinion, but kind of standard practice); and B) handled within the program, so nothing bad happens. If you see that exception, simply continue the program.


Question:
hello roger. i am having some trouble altering my script for the ISS simulation and then loading it. Would it be possible for you to give us a procedure that we could folllow in order to do this?

Answer:
1) Copy mit-16-035_script.tls to some other name (call it "x.tls" for this example) 2) Edit "x.tls" 3) Double click on "tl_main.exe" 4) Enter the name of the edited file ("x.tls") at the prompt 5) At the next prompt (for options), simply type the "enter" key (no options) 6) You should see the result of the compilation, including "0 CUSSES", indicating successful compilation. The file "x.TLX" will have been created 7) Type "quit" at the prompt 8) Type "cntrl-c" when told to 9) Delete the existing "cc_script.TLX" 10) Rename "x.TLX" to "cc_script.TLX" 11) Run your program. It will now use the new script, which it will find in "cc_script.TLX"


Question:
I've put together a couple of timeliner scripts for use in testing. but they don't seem to have any effect on what the program actually does. I've looked for a place where cc_scipt.tlx may be called from, but the only viable candidate is in simulation.adb, where the function select_compiled_script is null.

Answer:
You will not find it; it is in the libtl_lib.a library that you are linking in.


Remark:
It was pointed out that the requirement for maximum acceleration can not be tested without knowing the distance from the center of mass to the most remote spot inside the ISS. So, given that I do not have the ISS specifications from that time period (the current design is much different), I will assume the laboratory is connected to the center of mass at one of its ends. So, assume that it is a cylinder with length 15 meters and diameter 6 meters. Assume the center of mass is at the center of one end, and the +X axis goes right through the length of the laboratory.


Question:
Hi, In writing the code for MDM_INTERFACE_LOGIC I ran into a problem with accessing elements in COG_NORM_TORQUE_INV(K) which was passed from JET_SELECTION_LOGIC. Both COG_NORM_TORQUE_INV and the index K are visible from MDM_INTERFACE_LOGIC, but I don't know how access individual elements in COG_NORM_TORQUE_INV(K) which is a matrix, apparently. What is the syntax for this? (What I do know is the syntax for accessing the matrix itself: JET_SELECTION_LOGIC.ILOAD.COG_NORM_TORQUE_INV(JET_SELECTION_LOGIC.K) but how do I indicate indicies of the Kth matrix in that?)

Answer:
JET_SELECTION_LOGIC.ILOAD.COG_NORM_TORQUE_INV(JET_SELECTION_LOGIC.K) (Index1, Index2)


16.35 Aerospace Software Engineering
Massachusetts Institute of Technology
Last updated: December 5, 2002.