Drew Kerman Posted September 24, 2014 Author Share Posted September 24, 2014 After the first unsuccessful test flight of the Mk1.3 Kerboljet, a second iteration of the aircraft was constructed. It featured improvements to help address the problems that were uncovered in the first version after a lengthy crash investigation. The main issue investigators found was the landing gear were too wide, causing uneven compression while steering during the take off roll. One of the gear buckled under the strain and steered the craft off the runway. Since the KSA's most experienced pilot FO Kirk was back to active duty after recovering from injuries sustained on a previous mission, he was tapped to pilot the Mk1.3 Kerboljet II on its maiden flight. Link to comment Share on other sites More sharing options...
Drew Kerman Posted September 29, 2014 Author Share Posted September 29, 2014 (edited) Just prior to receiving two new astronauts into the program (see the updated Roster in the OP), the KSA launches its first mapping satellite into orbit around Kerbin to test new technology to gather surface data on planets from space. The instruments on board measure terrain altitude and slope, as well as vegetation and land surface to create a biome map. Future missions to Mun and other planets in the Kerbol system depend largely on the success of the technology deployed by K-SCAN. Edited October 19, 2014 by Gaiiden Link to comment Share on other sites More sharing options...
Drew Kerman Posted October 6, 2014 Author Share Posted October 6, 2014 It is now late May and the KSA has a daunting task ahead of it. Of the three Low-Kerbin Orbit communication satellites (LKO ComSats) that were successfully lofted into orbit the prior few weeks, two were in need of servicing in order to become fully operational. Not only did this require a kerbed flight with limited communication support, but two spacecraft had to be navigated to within mere meters of each other, 100+km up into space while traveling at speeds close to or exceeding 2km/s. As the last available astronaut, Captain Bob had no choice but to take on this difficult mission...This summary takes place after the events of Mission Dispatch #20, and covers Dispatches #21, #22 and #23.Because orbital rendezvous had never before been attempted, and scientists were not entirely sure it was even possible, it was decided that Capt Bob would first target the Kerbin III orbital debris to remove all risk of potentially damaging a ComSat with a bad encounter. Removing this debris from orbit has been something the KSA wanted to do at some point anyway, so this seemed a perfect opportunity. The rocket constructed was of a new, twin engine design featuring rockets from KW Rocketry, and Simon was glad to be able to re-attach the escape tower to the nose so the unproven rocket could be flown right away. Launch of the Kerbin De-Orbiter (KDO) took place at 13:12 UTC on 5/26, attempting for a direct surface-to-orbit rendezvous with the debris. This however proved to be much more complex then initially thought and Capt Bob ended up in the completely wrong orbit with no hope of attaining an intercept using the fuel remaining. The remainder of the mission was scrubbed and Capt Bob, the 3rd kerbal in space, successfully returned to Kerbin after spending time in orbit performing visual observations with remaining life support.The first KDO vessel on the pad awaiting launch Before the next attempt could be made, Lead Engineer Simon had to task his team to redesign the lift rocket. More thrust was needed in the lower atmosphere to boost the main engines higher prior to throttle-up as they both showed minor overheating during ascent. To make double-sure however the KW Rocketry engines were replaced with the proven NovaPunch Bearcat series that had always been KSA's main lift engine. The second rendezvous attempt would also use a much more gradual approach, attaining orbit and then adjusting as needed to catch up/slow down and match inclination to the debris. Capt Bob went up for his second try on June 3rd, clearing the pad at 9:21am local time with ComSat III overhead to provide signal bounce over the horizon. There were no issues during ascent, and after attaining orbit a rendezvous was successfully plotted by the flight computer. The actual encounter, however, turned out to be during a communications gap as ComSat III set prior to the KDO rising, so it was tense waiting in mission control before Bob finally came back to report that the encounter had come close but ultimately failed. It just so happened the second stage fuel ran out during the burn to match velocities and although there was fuel left in the orbital engine, staging to activate it initially failed. Bob sailed past, and not enough fuel remained for a second attempt. After some more orbital observations, Bob was recovered from the ocean once again.The new KDO blasts off from the pad with 6 SRBsThe third attempt to reach the Kerbin III debris was carried out on June 11th, with Capt Bob launching while the KSC was underneath the ascending node of the debris orbit. This gave Bob the opportunity to match orbital inclination while ascending to orbit, which he managed to do despite an issue with offset thrust that caused the spacecraft to want to pitch up under throttle once the main lift engine with large vectoring capability was dropped. It was determined however the vessel was controllable enough to go for the rendezvous and after attaining a record orbital height over Kerbin to set up the approach, Capt Bob was finally able to match velocities on close encounter thanks to a simplified rocket configuration to remove any chance of staging issues.A successful intercept is plotted and carried out at last!Once hooked to the debris Bob was able to transfer out the remaining fuel from Kerbin III and rotate the combined craft retrograde to burn his orbit into the atmosphere and cut the debris loose. However during the burn asymmetric thrust/CoM problems intensified and radio contact was lost as Bob was forced to use all control authority possible in his torque wheels to maintain control and thus drained his batteries despite the engine alternator. Several tense minutes of no contact went by before Bob was back online after going on EVA to reposition the solar panels on his dead craft, which ended up facing away from the sun. The debris was successfully cut away and Bob's orbital velocity restored. The fuel in his second stage now exhausted, the plan was to use the extra fuel gained from Kerbin III to move into a better orbit for observations, but when the second stage was dropped and the orbital engine ignited, the offset CoM issue became bad enough to make the craft almost impossible to orient properly while under thrust. Bob wasted too much fuel attempting to maintain control and burn for his target orbit and the flight had to be aborted. Upon return to Kerbin, Bob finally managed to bring his capsule down on land for the first time!Captain Bob, after 4 flights, finally gets to place a flag on KerbinNow that Bob had proven orbital rendezvous to be possible, plans were already being drawn up for the two missions that would send him up to take care of ComSats I and II in order to finally make the LKO network fully operational. Link to comment Share on other sites More sharing options...
Drew Kerman Posted October 11, 2014 Author Share Posted October 11, 2014 (edited) The KSA is looking to clean up two spent stages floating in space, and it has two astronauts fresh out of the Academy to prove their mettle on individual missions to de-orbit the debris. Capt Desson, by virtue of alphabetical order, is launching first atop a revised version of the craft Capt Bob used to perform the first-ever orbital rendezvous earlier this year. After a range clearance issue forces the launch later into the day, Desson carries out his mission, but not without problems. Don't forget you can view Desson's profile in the OP roster to see his new ribbons and mission stats. Edited November 26, 2014 by Gaiiden Link to comment Share on other sites More sharing options...
Drew Kerman Posted October 14, 2014 Author Share Posted October 14, 2014 It is now "fly or die" time for the Aerospace Group and their highly-experimental jet/propeller fueled/electric hybrid aircraft design. The previous crash of the Kerboljet was investigated and determined to be from lack of lift and thrust - upon reaching the end of the runway the aircraft was producing maximum thrust, however it failed to achieve any lift. Engineers knew they had to decrease the weight, but for now the only option was to simply load less fuel for the test flight. In addition, flight surfaces were tweaked for slightly better L/D qualities and the engines were re-tuned to provide slightly more thrust. The third (and final) prototype aircraft was test flown once again by Flight Officer Kirk. Link to comment Share on other sites More sharing options...
Drew Kerman Posted October 18, 2014 Author Share Posted October 18, 2014 The recently-unveiled Mk1-2 capsule has spent its first few weeks undergoing recovery trials to ensure that it can safely return astronauts to the ground/water after passing through re-entry. Three tests were designed to put the Mk1-2 systems through their paces as well as test automated functions that will be used for its first orbital flight, which will be unkerbed. Link to comment Share on other sites More sharing options...
Drew Kerman Posted October 19, 2014 Author Share Posted October 19, 2014 (edited) GitHub RepositoryI scratched another itch I've had for a while now, which was being able to display information on flights that are currently operational. It was mostly made possible by the little pop-up window trick I devised for my crew roster, but then there's also the fact that I've learned how to properly import orbital data into Universe Sandbox (with planet/moon textures!) and Kronal Vessel Viewer let me create renders of my spacecraft without having to try to find some good lighting conditions of the actual craft in space. Then of course Mission Architect gave me all sorts of accurate orbital data to list. Also thanks to TriggerAu and his KSP Alternate Resource Panel for the resource icons. I nabbed the comms icons from Google images and I also snagged the KSP forums favicon out of my browser cache - for craft that have kerbals I will have an icon for each kerbal and you can hover over them to see who is on board. The comms icons tell you what the craft is communicating with and the resource icons tell you how much is remaining. The main craft picture also includes a description that pops up when you hover over it. Then too there are the flag maps. I made those with the Image Map Tool.And if that all wasn't good enough, I've talked to Arrowstar (Mission Architect author) and he's told me it'd be a worthwhile project to convert Orbit Viewer to the Kerbol system. It's the same program JPL and other websites use to show orbits. I probably won't tackle that for another month or so, though.Anyways, I had these orbits all plotted out in Universe Sandbox it seemed a waste not to animate them into short videos, which led me to create a YouTube channel for the KSA. I have a few more small clips scheduled for the coming weeks. Don't expect any length launch videos or anything like that... yet. Busy with other stuff for now. But as with the rest of things I'm doing the YouTube channel will grow more prominent over time.Auto-scheduling Updates Added!Ok so a major problem I had burning in the back of my mind when I made this was having to maintain it. Especially during an active mission, a craft state is constantly changing. Now, I know I don't have to make this system near real-time because let's be honest I doubt anyone will sit around with a craft window open hitting F5 during a mission to see how its doing. But, on the other hand that would be so cool. The problem is, of course, pushing the updates would be a pain in the ass to do manually. Solution? Automate it, of course! And so I did, with some ASP script:<html><body><%dim UTlist()redim UTlist(0)'calculate the time in seconds since epoch 0 when the game startedfromDate = "16-Feb-2014 00:00:00"UT = datediff("s", fromdate, now())'get the files in our folderthefolder=server.mappath("\") &"/images/KSA/Flights/Mu-SCAN"set fs = server.createobject("Scripting.FileSystemObject")set f = fs.getfolder(thefolder)set fl = f.files'iterate through the files, identify craft files and extract the UTfor each strfile in fl if instr(strfile.name, "craft") then craftUT = Mid(strfile.name, 6, instr(strfile.name, ".")-6) UTlist(ubound(UTlist)) = clng(craftUT) redim preserve UTlist(ubound(UTlist)+1) end ifnext'find out which UT to useFor Each item In UTlist if item and UT > item then useUT = item end ifNext'load the proper craft file for this timeResponse.Redirect "http://www.blade-edge.com/images/KSA/Flights/Mu-SCAN/craft" & useUT & ".asp?refresh"set fs = nothingset f = nothingset fl = nothing%></body></html> <!DOCTYPE html>So to use this, I name my pages "craftUT.htm" where UT is the time in seconds after which this page is supposed to go live. The beauty is that the file system will automatically sort these into ascending order, so I just have to iterate through them until I hit one that's beyond the current time, and then just use the last one before. Now, I still have to create the various craft pages to show various states, but then I can sit back and let the script do the work of serving up the proper vessel situation at the proper time.So yea - all craft in the flight tracker will now represent near real-time information.MET, help cursors, imgur hostingI've done some more tweaking to the flight data displays. The major update was now you can see the Mission Elapsed Time by hovering over the text telling you when the craft was launched or created (created in the case of debris or separation from a main ship). The code for that isfromDate = "13-Sep-2014 21:35:45"MET = datediff("s", fromdate, now())years = 0days = 0hours = 0minutes = 0if MET >= 86400 then days = int(MET / 86400) MET = MET - (days * 86400)end ifif days >= 365 then years = int(MET / 365) days = days - (years * 86400)end ifif MET >= 3600 then hours = int(MET / 3600) MET = MET - (hours * 3600)end ifif MET >= 60 then minutes = int(MET / 60) MET = MET - (minutes * 60)end ifseconds = MET'calculate the time since the start of the missionObviously fromDate needs to be set for each craft individually, and is derived from the lct parameter in the SFS file. It's then displayed with some ASP magic included within a <span> tag:<%response.write("title='MET: " & years & "y " & days & "d, " & hours & "h:" & minutes & "m:" & seconds & "s'")%>the other minor changes are the cursor turning into a help arrow when you hover over certain images and text, so that people notice and hopefully pause to reveal the title pop-ups that show additional information. I've also moved all the images to my KSA imgur account for better loading since my server was being a bit overloaded.I have a few more tweaks yet to make. I want to do some CSS pop-up image captions for the main craft image so the description is found more easily and I want to add to all Electric Charge fields the max solar output possible from panels on the craft.My work here is doneFound the perfect CSS image caption to use, managed to extend it a bit so that part of it would stick up and then pull the rest up when you moused over the image. Slick!? Slick! Added the solar/generator charge production to the Electric Charge pop-ups. Also added a link to the bottom since I can directly reference these windows and thus want to let people know more flight status can be found here in the OP.And that's pretty much all I had planned for this feature. Oh right - Orbit Viewer. Still not going to tackle that for a couple of weeks, I have enough to work with right now and can easily integrate that at a later date.I also wish I could have pop-ups for the craft links in the OP to display some immediate data as well...Oh look more stuff - Auto updates!A new feature I just added allows the tracking window to update itself a set number of seconds. Here is the code:'only bother if we still have not got to the next updateQueryString = Request.ServerVariables("QUERY_STRING") if UT < 22605540 then if QueryString = "refresh" then Response.AddHeader "Refresh", "60;URL=http://www.blade-edge.com/images/KSA/Flights/Lupek%20Test%20Drive%204/default.asp" end ifelse QueryString = ""end if'are we auto-refreshing the page?So in this case every minute the page is reloaded, but it does so by calling the "default.asp" file, which means that if there's some new data to display, the newer page will pop up on reload. I've updated the "default.asp" code listing above to reflect the changes.In case users want to toggle this feature on and off, I added the following code to the bottom of the tracker craft pages: if QueryString = "refresh" then response.write("<a target='_blank' href='http://forum.kerbalspaceprogram.com/threads/82506-The-Kerbal-Space-Agency-Flights-in-Progress-Tracker!'>More Flights In Progress</a> | <a href='http://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL") & "'>Disable 1min auto-fresh</a>") else response.write("<a onclick='window.close()' target='_blank' href='http://forum.kerbalspaceprogram.com/threads/82506-The-Kerbal-Space-Agency-Flights-in-Progress-Tracker!'>More Flights In Progress</a> | <a href='http://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL") & "?refresh'>Enable 1min auto-fresh</a>") end if %><%It just reloads the current page with or without the query string depending on whether it is there or not already.Yes, this is eventually going to be used to display ascent data!The next logical step - DatabasesWell, obviously if I'm going to be doing ascent data then I need and much easier way to input that data than having to create a whole individual craft file for each state. So I took the time over these last 2-3 days to re-learn how to make and access a database with ASP, something I haven't done in over 10 years. It all came together a lot nicer than I had hoped too. To make things even easier on me, I designed the database so that I only have to include updates to the various tables. This means that if values don't change from one update to another, I don't have to create a duplicate record. Here's what the craft.asp page looks like:<html><head><link href="style.css" rel="stylesheet" type="text/css" media="screen" /></head><body><%'open craft databasedb = "..\..\..\..\..\database\db" & request.querystring("db") & ".mdb"Dim conn, sConnectionSet conn = Server.CreateObject("ADODB.Connection")sConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & server.mappath(db) &";" & _ "Persist Security Info=False"conn.Open(sConnection)'calculate the time in seconds since epoch 0 when the game startedfromDate = "16-Feb-2014 00:00:00"UT = datediff("s", fromdate, now())'what UT are we looking to pull from the DB?if request.querystring("ut") then dbUT = request.querystring("ut") * 1else dbUT = UTend if'get the craft tablesset rsCraft = Server.CreateObject("ADODB.recordset")set rsOrbit = Server.CreateObject("ADODB.recordset")set rsCrew = Server.CreateObject("ADODB.recordset")set rsResources = Server.CreateObject("ADODB.recordset")set rsComms = Server.CreateObject("ADODB.recordset")rsCraft.open "select * from [craft data]", conn, 2rsResources.open "select * from [craft resources]", conn, 2rsOrbit.open "select * from [flight data]", conn, 2rsCrew.open "select * from [crew manifest]", conn, 2rsComms.open "select * from [craft comms]", conn, 2'then point to the relevant record for this UTif not rsCraft.eof then rsCraft.MoveLast do until rsCraft.fields.item("id") <= dbUT rsCraft.MovePrevious Loopend if'get the next and previous event times/descriptionsnextevent = 0prevevent = 0rsCraft.movenextif not rsCraft.eof then nextevent = rsCraft.fields.item("id") nexteventdesc = rsCraft.fields.item("CraftDescTitle")end ifrsCraft.movepreviousrsCraft.movepreviousif not rsCraft.bof then prevevent = rsCraft.fields.item("id") preveventdesc = rsCraft.fields.item("CraftDescTitle")end ifrsCraft.movenext'are we auto-refreshing the page?if request.QueryString("r") then 'if there is a future event, go to it. Otherwise, await the next update if nextevent and UT > nextevent then Response.AddHeader "Refresh", rsCraft.fields.item("RefreshRate") & ";URL=http://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL") & "?db=" & request.querystring("db") & "&r=true" & "&ut=" & nextevent else Response.AddHeader "Refresh", rsCraft.fields.item("RefreshRate") & ";URL=http://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL") & "?db=" & request.querystring("db") & "&r=true" end ifend if'calculate the time since the start of the missionMET = datediff("s", rsCraft.fields.item("LaunchDate"), now())'is it prior to launch?if MET <= 0 then MET = MET * -1 msg = "T-"else msg = "MET: "end if'redo if the mission is overif rsCraft.fields.item("EndTime") and UT >= rsCraft.fields.item("EndTime") then msg = rsCraft.fields.item("EndMsg") MET = datediff("s", rsCraft.fields.item("LaunchDate"), rsCraft.fields.item("EndDate"))end ifyears = 0days = 0hours = 0minutes = 0if MET >= 86400 then days = int(MET / 86400) MET = MET - (days * 86400)end ifif days >= 365 then years = int(MET / 365) days = days - (years * 86400)end ifif MET >= 3600 then hours = int(MET / 3600) MET = MET - (hours * 3600)end ifif MET >= 60 then minutes = int(MET / 60) MET = MET - (minutes * 60)end ifseconds = MET%><center><h3><%response.write rsCraft.fields.item("CraftName")%></h3><table style="width:100%"><tr> <td> <table style="width:100%"> <tr> <td style="width:64%"> <div id="mainwrapper"> <div id="box-1" class="box"> <img id="image-1" <%response.write("src='" & rsCraft.fields.item("CraftImg") & "'")%>/> <span class="caption simple-caption"> <center><b>Craft Information - <%response.write rsCraft.fields.item("CraftDescTitle")%></b></center> <%response.write rsCraft.fields.item("CraftDescContent")%> </span> </div> </div> </td> <td style="width:36%" valign="top"> <table border="1" style="width:100%;"> <tr><td><b>Launch:</b> <span style="cursor:help" <%response.write("title='" & msg & years & "y " & days & "d, " & hours & "h:" & minutes & "m:" & seconds & "s'")%>><u><%response.write rsCraft.fields.item("LaunchDateUTC")%> UTC</u></span></td></tr> <% 'check if we have any orbital data to display if not rsOrbit.eof then 'point to the relevant record for this UT rsOrbit.MoveLast do until rsOrbit.fields.item("id") <= dbUT rsOrbit.MovePrevious if rsOrbit.bof then exit do Loop 'only execute further if we found a record earlier than this UT if not rsOrbit.bof then response.write("<tr><td><b><span style='cursor:help' title='Periapsis: ") if rsOrbit.fields.item("VelocityPe") < 0 then response.write("N/A") else response.write rsOrbit.fields.item("VelocityPe") response.write("km/s") end if response.write("Apoapsis: ") if rsOrbit.fields.item("VelocityAp") < 0 then response.write("N/A") else response.write rsOrbit.fields.item("VelocityAp") response.write("km/s") end if response.write("'><u>Avg Velocity</u><span>:</b> ") if rsOrbit.fields.item("Avg Velocity") < 0 then response.write("N/A") else response.write rsOrbit.fields.item("Avg Velocity") response.write("km/s") end if response.write("</td></tr><tr><td><b>Periapsis:</b> ") if rsOrbit.fields.item("Periapsis") < 0 then response.write("N/A") else response.write rsOrbit.fields.item("Periapsis") response.write("km") end if response.write("</td></tr><tr><td><b>Apoapsis:</b> ") if rsOrbit.fields.item("Apoapsis") < 0 then response.write("N/A") else response.write rsOrbit.fields.item("Apoapsis") response.write("km") end if response.write("</td></tr><tr><td><b>Eccentricity:</b> ") if rsOrbit.fields.item("Eccentricity") < 0 then response.write("N/A") else response.write rsOrbit.fields.item("Eccentricity") end if response.write("</td></tr><tr><td><b>Inclination:</b> ") if rsOrbit.fields.item("Inclination") < 0 then response.write("N/A") else response.write rsOrbit.fields.item("Inclination") response.write("°") end if response.write("</td></tr><tr><td><b>Orbital Period:</b> ") if rsOrbit.fields.item("Orbital Period") < 0 then response.write("N/A") else response.write rsOrbit.fields.item("Orbital Period") response.write("s") end if response.write("</td></tr>") end if end if 'check if we have crew data to display if not rsCrew.eof then 'point to the relevant record for this ut rsCrew.movelast do until rsCrew.fields.item("id") <= dbUT rsCrew.MovePrevious if rsCrew.bof then exit do Loop 'only execute further if we found a record earlier than this ut if not rsCrew.bof then response.write("<tr><td><b>Crew:</b> ") for x = 1 to rsCrew.fields.count - 1 if isnull(rsCrew.fields.item(x)) then if x = 1 then response.write("None") exit for end if response.write("<span style='cursor:help'><img src='http://www.blade-edge.com/images/KSA/Flights/favicon.ico' title='") response.write rsCrew.fields.item(x) response.write("'></span> ") next response.write("</td></tr>") else response.write("<tr><td><b>Crew:</b> None</td></tr>") end if end if 'check if we have resource data to display if not rsResources.eof then 'point to the relevant record for this ut rsResources.movelast do until rsResources.fields.item("id") <= dbUT rsResources.MovePrevious if rsResources.bof then exit do Loop 'only execute further if we found a record earlier than this ut if not rsResources.bof then response.write("<tr><td><b><span style='cursor:help' title='Total Δv: ") response.write rsResources.fields.item("DeltaV") response.write("km/sTotal mass: ") response.write rsResources.fields.item("TotalMass") response.write("tResource mass: ") response.write rsResources.fields.item("ResourceMass") response.write("t'><u>Resources</u><span>:</b> ") for x = 4 to rsResources.fields.count - 1 step 2 if isnull(rsResources.fields.item(x)) then if x = 4 then response.write "None" exit for end if response.write("<span style='cursor:help'><img src='http://www.blade-edge.com/images/KSA/Flights/") response.write rsResources.fields.item(x) response.write(".png' title='") response.write rsResources.fields.item(x+1) response.write("'></span> ") next response.write("</td></tr>") end if end if 'check if we have comms data to display if not rsComms.eof then 'point to the relevant record for this ut rsComms.movelast do until rsComms.fields.item("id") <= dbUT rsComms.MovePrevious if rsComms.bof then exit do Loop 'only execute further if we found a record earlier than this ut if not rsComms.bof then response.write("<tr><td><b><span style='cursor:help' title='Signal delay: ") response.write rsComms.fields.item("SignalDelay") response.write("s'><u>Comms</u><span>:</b> ") for x = 2 to rsComms.fields.count - 1 step 2 if isnull(rsComms.fields.item(x)) then if x = 1 then response.write "None" exit for end if response.write("<span style='cursor:help'><img src='http://www.blade-edge.com/images/KSA/Flights/") response.write rsComms.fields.item(x) response.write(".png' title='") response.write rsComms.fields.item(x+1) response.write("'></span> ") next response.write("</td></tr>") end if end if %> <tr><td><b>Last Update:</b> <%response.write rsCraft.fields.item("LastUpdate")%> UTC</td></tr> <tr><td><center> <% 'there a previous event? if prevevent then 'reload the page and force an earlier UT response.write("<a href='http://") response.write(Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")) response.write("?db=" & request.querystring("db") & "&ut=" & prevevent) response.write("'><img src='http://www.blade-edge.com/images/KSA/Flights/prev.png' title='") response.write preveventdesc response.write("'></a> ") else response.write("<span style='cursor:help'><img src='http://www.blade-edge.com/images/KSA/Flights/prev.png' title='No previous events'></span> ") end if 'whether we need to close the window when going to an external link close = " " if request.querystring("r") then close = " onclick='window.close()' " 'what is the current status of the mission? if rsCraft.fields.item("MissionReport") then response.write("<b><a" & close & "target='_blank' href='") response.write rsCraft.fields.item("MissionReport") response.write("' title='") response.write rsCraft.fields.item("MissionReportTitle") response.write("'>Mission Report</a></b> ") elseif UT >= rsCraft.fields.item("EndTime") then response.write("<b><a" & close & "target='_blank' href='https://twitter.com/KSA_MissionCtrl' title='Mission report coming soonUpdates on twitter'>Mission Concluded</a></b> ") else response.write("<b><a" & close & "target='_blank' href='https://twitter.com/KSA_MissionCtrl' title='Updates on twitter'>Mission Ongoing</a></b> ") end if 'is there a future event? if nextevent then 'are we at the next event yet? if UT >= nextevent then response.write("<a href='http://") response.write(Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")) response.write("?db=" & request.querystring("db") & "&ut=" & nextevent) response.write("'><img src='http://www.blade-edge.com/images/KSA/Flights/next.png' title='") response.write nexteventdesc response.write("'></a> ") else response.write("<span style='cursor:help'><img src='http://www.blade-edge.com/images/KSA/Flights/next.png' title='") response.write rsCraft.fields.item("NextEventTitle") response.write("'></span>") end if else response.write("<span style='cursor:help'><img src='http://www.blade-edge.com/images/KSA/Flights/next.png' title='No future events'></span>") end if %> </center></td></tr> </table> </td> </tr> </table> </td></tr> <%response.write rsCraft.fields.item("ImgDataCode")%></table><%if request.querystring("r") then response.write("<a target='_blank' href='http://forum.kerbalspaceprogram.com/threads/82506-The-Kerbal-Space-Agency-Flights-in-Progress-Tracker!'>More Flights In Progress</a> | <a href='http://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL") & "?db=" & request.querystring("db")) if request.querystring("ut") then response.write("&ut=" & request.querystring("ut")) response.write("'>Disable auto-refresh</a>")else response.write("<a onclick='window.close()' target='_blank' href='http://forum.kerbalspaceprogram.com/threads/82506-The-Kerbal-Space-Agency-Flights-in-Progress-Tracker!'>More Flights In Progress</a> | <a href='http://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL") & "?db=" & request.querystring("db") & "&r=true") if request.querystring("ut") then response.write("&ut=" & request.querystring("ut")) response.write("'>Enable auto-refresh (" & rsCraft.fields.item("RefreshRate") & "s)</a>")end ifconn.CloseSet conn = nothing%></center></body></html><!DOCTYPE html>I've currently only tested it completely on one craft, but everything worked out perfectly after some tweaks and now I just have to convert the remaining active missions over to the DB format - the ones that have already expired and won't be receiving additional updates can remain static.Craft database for viewing everything in the same windowI got a request on reddit for a way to view all the craft in one window rather than having to close and open them. I agreed this was a good idea and got to work today banging it out. It took me all afternoon into the early evening - mostly because I spent a while trying to debug a really stupid mistake I was making opening a database (damn copy paste!! Why do I always do that to myself?!). Anyways my initial idea was to add some images to the bottom that people could scroll through to select another craft. But I realized the window is already almost too tall for my 1050 display, even if that resolution is pretty main stream these days. But I had plenty of width, so I decided to have a tree listing to the right side that could be able to categorize the vessels by SOI. Finding the CSS code was as easy as typing "CSS tree" into Google - the real problem was creating a database to hold a tree structure. Here's what I came up with:and here is the code:<center><h3>All Active Vessels</h3></center><%'open craft databasedb = "..\..\..\..\database\dbCrafts.mdb"Dim connBodiesSet connBodies = Server.CreateObject("ADODB.Connection")sConnection2 = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & server.mappath(db) &";" & _ "Persist Security Info=False"connBodies.Open(sConnection2)'get the tablesset rsPlanets = Server.CreateObject("ADODB.recordset")set rsMoons = Server.CreateObject("ADODB.recordset")set rsCrafts = Server.CreateObject("ADODB.recordset")rsPlanets.open "select * from planets", connBodies, 2rsMoons.open "select * from moons", connBodies, 2rsCrafts.open "select * from crafts", connBodies, 2response.write("<ol class='tree'>")'loop through all the planetsdo while not rsPlanets.eof bPlanet = False 'check for moons do while not rsMoons.eof if rsMoons.fields.item("ref") = rsPlanets.fields.item("id") then 'check for vessels in moon SOI 'corresponding to this UT bVessels = false do while not rsCrafts.eof ref = -1 for x = 4 to rsCrafts.fields.count - 1 step 2 if rsCrafts.fields.item(x) <= dbUT then ref = rsCrafts.fields.item(x+1) else exit for end if next if ref = rsMoons.fields.item("id") then if not bVessels then if not bPlanet then response.write("<li> <label for='" & rsPlanets.fields.item("body") & "'>" & rsPlanets.fields.item("body") & "</label> <input type='checkbox' id='" & rsPlanets.fields.item("body") & "' /> <ol>") bPlanet = true end if response.write("<li><label for='" & rsMoons.fields.item("body") & "'>" & rsMoons.fields.item("body") & "</label> <input type='checkbox' id='" & rsMoons.fields.item("body") & "' /> <ol>") end if bVessels = true response.write("<li class='" & rsCrafts.fields.item("type") & "'><a title='" & rsCrafts.fields.item("desc") & "' href='http://www.blade-edge.com/images/KSA/Flights/craft.asp?r=true&db=" & rsCrafts.fields.item("id") & "'>" & rsCrafts.fields.item("vessel") & "</a></li>") end if rsCrafts.movenext loop rsCrafts.movefirst if bVessels then response.write("</ol> </li>") end if rsMoons.movenext loop rsMoons.movefirst 'check for vessels in planet SOI 'corresponding to this UT do while not rsCrafts.eof ref = -1 for x = 4 to rsCrafts.fields.count - 1 step 2 if rsCrafts.fields.item(x) <= dbUT then ref = rsCrafts.fields.item(x+1) else exit for end if next if ref = rsPlanets.fields.item("id") then if not bPlanet then response.write("<li> <label for='" & rsPlanets.fields.item("body") & "'>" & rsPlanets.fields.item("body") & "</label> <input type='checkbox' id='" & rsPlanets.fields.item("body") & "' /> <ol>") bPlanet = true end if response.write("<li class='" & rsCrafts.fields.item("type") & "'><a title='" & rsCrafts.fields.item("desc") & "' href='http://www.blade-edge.com/images/KSA/Flights/craft.asp?r=true&db=" & rsCrafts.fields.item("id") & "'>" & rsCrafts.fields.item("vessel") & "</a></li>") end if rsCrafts.movenext loop rsCrafts.movefirst if bPlanet then response.write("</ol> </li>") rsPlanets.movenextloopresponse.write("</ol> *Inactive vessels can be found via the Historical Archives link at bottom</div> </div>")connBodies.CloseSet connBodies = nothing%><div style="margin-left: 845px; font: 12pt normal Arial, sans-serif;"> So the moons reference the planets and the spacecraft reference either the planets or the moons. The beauty of this setup is the fact that it is extremely easy to add new moons and planets should I choose to do so (I'm considering numerous dwarf planet mods and of course Star Systems in the future). Additionally, the UT/Ref fields in the craft table can be duplicated as much as necessary, so I am able to actually schedule when certain craft are supposed to appear in certain SOIs. This is basically so I can "set it and forget it" as I play my game ar least a month in advance of real time, I don't have to remember to come back a month later and update the database with a new SOI for the vessel. I may tweak this some more later down the road, but for now it gets the job done.The next day... I realized how dumb it was to make people click open all the bodies in the solar system to see if there were actually any craft there to check out. My first idea was to make it so that numbers would appear by the names to show if anything was there. However due to the recursive nature of the way the tree is constructed, it's impossible to know this information before hand. The best I could do was slightly re-arrange the code so the branch for the body wasn't actually created until it was confirmed there was a vessel in its SOI (or the SOI of a moon within the planet's SOI). So now the list only displays bodies that have craft in their SOI. Edited April 1, 2015 by Gaiiden added ability to switch between craft in the same window Link to comment Share on other sites More sharing options...
Drew Kerman Posted October 23, 2014 Author Share Posted October 23, 2014 With the spectacular failure of the Mk1.3 program, the Aerospace Group was scaled down but allowed to continue development of a re-usable and cheaply-operated aircraft capable of ascending higher than 5km and hovering to allow cameras a platform to document rocket launches. The first design to be tested used 4 electric engines with numerous batteries and capacitors to run them. Although re-charging the craft would take days after a flight, this was deemed acceptable thanks to the fact that days, if not weeks, commonly exist between rocket launches. Electrical power was cheap compared to jet fuel as well. RCS thrusters were included as well to help with lateral positioning. Link to comment Share on other sites More sharing options...
Drew Kerman Posted October 24, 2014 Author Share Posted October 24, 2014 The first extra-planetary goal of the rover program was Mun, a close neighbor that would provide minimal signal lag and 24/7 communication thanks to the established satellite network around both Mun and Kerbin. However rather than sending a rover directly to Mun, the team knew they had to test a version here on Kerbin first to make sure the design was capable of handling lower Mun gravity. They also wanted to begin working towards a completely automated drive capability, despite the low signal lag allowing for manual control. This first phase of development looks at the design of the rover, the first delivery vehicle concept, and the beginnings of automated drive software. Link to comment Share on other sites More sharing options...
Drew Kerman Posted October 26, 2014 Author Share Posted October 26, 2014 After proving that the technology to map planets from orbit was proven with the earlier K-SCAN mission, a new probe was assembled to make the journey to Mun to perform the same task. Here it would be much more important to obtain surface data for use in future missions, both kerbed and unkerbed. The Mu-SCAN probe also carried along a gravioli and radiation detector for a secondary mission of gathering new scientific data around Mun. Link to comment Share on other sites More sharing options...
Drew Kerman Posted October 26, 2014 Author Share Posted October 26, 2014 After the successful removal of orbital debris earlier in the month, the final piece of orbital debris awaits removal by the KSA's second new astronaut, Captain Wehrtop Kerman. This mission will serve him well to apply all the training and skills he acquired during his 6 months training as a kadet, including overcoming any unforeseen obstacles during execution. The debris being removed was part of the rocket that took Captain Bob into orbit where he was finally able to successfully rendezvous for the first time with another craft in space. Link to comment Share on other sites More sharing options...
Drew Kerman Posted October 30, 2014 Author Share Posted October 30, 2014 The Aerospace Group is still working to develop a stable airborne platform for getting a better view of rocket launches during the booster ascent stage. Although the overall design is sound and has proven it can reach the proper altitude and maintain flight for the amount of time needed, engineers are still struggling with proper thrust balancing issues to ensure that the craft does not drift towards the airborne exclusion zone around the launch pad. They also discover they did not properly account for all types of landing scenarios... Link to comment Share on other sites More sharing options...
Drew Kerman Posted November 3, 2014 Author Share Posted November 3, 2014 Budget concerns have had an affect on the Aerial Observation Platform, and the last crash left the prototype badly damaged unable to be repaired swiftly. However the folks from C7 Aerospace had been informed of the AOP development by some Aerospace Group engineers at a recent aerospace conference, and decided to take an interest in the project. C7 put up the money to get the AOP repaired and negotiated a contract for joint-use of the platform should it prove viable in the next test. Link to comment Share on other sites More sharing options...
Drew Kerman Posted November 6, 2014 Author Share Posted November 6, 2014 With the Duna I mission undergoing final construction this month for launch at the beginning of December, the KSA is using the time to put in place two new communications satellites around Kerbin that will provide links to any craft operating in interplanetary space. The R&D department recently rolled out their largest dish yet, capable of communicating as far as Eeloo. This was to be the first of two satellites orbiting high over Kerbin's poles, and is also the first rocket to incorporate recoverable boosters. Link to comment Share on other sites More sharing options...
Drew Kerman Posted November 7, 2014 Author Share Posted November 7, 2014 With the upgrades to the VAB complete, the KSA now has the ability to construct larger 2.5m craft in addition to any 1.25m rockets already under construction. Before they can launch their first 2.5m rocket, there are two new engines to test. The main lifter cluster is actually using the Bearcat engine that has been the lifter engine of choice for the KSA mostly since day one. However it has only before been clustered in pairs. A new orbital engine to replace the 1.25m RMA-3 workhorse is also in need of testing. Once the tests have proven successful, the teams can assemble a 2.5m test vehicle to put the new Mk1-2 capsule through an unkerbed orbital mission to ensure it can return safely. Link to comment Share on other sites More sharing options...
Drew Kerman Posted November 12, 2014 Author Share Posted November 12, 2014 With the previously-failed launch of IP ComSat I, the second craft already under construction was used for its replacement. The purpose of these satellites is to achieve extremely elliptical polar orbits in order to spend the maximum amount of time above/below Kerbin for best possible line of sight to other planets in the Kerbol system. A dish capable of reaching as far as Eeloo is included on each satellite, as well as two smaller dishes to help connect craft traveling around the Kerbin system. In addition to placing IP ComSat in orbit, some existing hardware up in LKO was re-purposed to help create a more redundant communications network around Kerbin. Link to comment Share on other sites More sharing options...
Drew Kerman Posted November 17, 2014 Author Share Posted November 17, 2014 The KSA has readied a third satellite for launch into polar orbit to complete the first interplanetary communications network around Kerbin. The first launch failed during ascent, the second launch was successful, and now the Agency hopes to add another good launch to their record. Once in place, the two IP ComSats will allow Mission Control to contact craft anywhere in the Kerbol system, staying both high above and below the orbital plane as much as possible to improve chances of connections. Link to comment Share on other sites More sharing options...
Drew Kerman Posted November 26, 2014 Author Share Posted November 26, 2014 After completing the first phase of rover testing KSA engineers got to work on the software that would help to pilot the rover on other worlds where controllers won't have immediate execution of commands. A stripped-down version of the rover was constructed for testing of waypoint acquisition and navigation, culminating in the first long-distance drive over 150km to the west shore desert. NOTE: These events take place in late October, which is prior to events in recent Mission Dispatches. It was originally meant to be compiled with other test drives as a Phase 2 Mission Dispatch, but it was decided that would be too long of a dispatch, and has now been broken up into individual drives. Link to comment Share on other sites More sharing options...
Drew Kerman Posted November 26, 2014 Author Share Posted November 26, 2014 Javascript is disabled. View full albumIt's been asked how these images were created and to be honest it's not that hard to do - the real challenge is that each blueprint requires its own layout, and figuring out what that should be is the hard part. It all depends on what you want to show. So far I've generally taken each of my rockets and broken them down into individual stages. Showing both the fully-staged rocket and the payload means in some cases you are showing parts of the craft more than once, but that's okay because it gives you more options to label things without getting too messy. My personal rules for labeling are that lines pointing to parts shouldn't cross over too much of the craft, or other parts/lines that are also identifying things. You only have to ID a part once if the rocket features multiple instances, unless a different angle would render it unrecognizable on the ship.For the background, I use this blueprint paper. (A full-sized download link is below the image). It gets sized down to whatever I need.To render the ships, I use Kronal Vessel Viewer.For all the Delta-v and weight information that I include, see the Basic Guide to Mission Planning and Rocket Construction to learn how I derive these numbers.To put it all together, I use Paint.NET, with the Segoe Print font (included, on Windows 7 at least).Here is a quick tutorial on how to remove the background from the KVV screenshot you've saved from the game. Personally I also like to use the Adjustments->Hue/Saturation to make the colors no longer seem bleached out (Saturation=125), as well as the Adjustments->Brightness/Contrast to add some depth (Brightness=-5, Contrast=5).Pro tip: use as many layers as possible. You're going to want to reorganize things a lot. For me all ship images get their own layer, and for text I group the info box, stats box, and labels into their separate layers, borders have their own layer as well.And this is how I tell the height of things using stock 1m truss segments (make sure Orthographic setting is enabled in KVV):Click for full image. Draw a pixel-wide line in Paint.NET (hold Shift for straight line)you can see the length of the line in the bottom-left of the windowThat's really pretty much it. Actually putting it all together is something unique to each blueprint. Link to comment Share on other sites More sharing options...
DaMichel Posted November 28, 2014 Share Posted November 28, 2014 These are very pretty Link to comment Share on other sites More sharing options...
Drew Kerman Posted November 30, 2014 Author Share Posted November 30, 2014 (edited) After successfully navigating 169.3km from KSC out to the west shore desert, the rover team got to work planning an even harder route back home that would test the rover's ability to handle a slope it couldn't navigate, as well as refactoring a large portion of the rover driver software to give the team more data to look at while the rover operated. NOTE: These events take place in late October, which is prior to events in recent Mission Dispatches. It was originally meant to be compiled with other test drives as a Phase 2 Mission Dispatch, but it was decided that would be too long of a dispatch, and has now been broken up into individual drives. Edited December 6, 2014 by Gaiiden Link to comment Share on other sites More sharing options...
Drew Kerman Posted December 4, 2014 Author Share Posted December 4, 2014 (edited) The previous test drive ended in disaster as the rover failed to control its speed as it backed down a steep slope it could not climb, tumbling and wrecking itself. While a new rover body was constructed, engineers used the time to work out what went wrong in the code and corrected the problem. This drive would take the rover straight out to the mountains to make sure the new code behaves as expected. NOTE: These events take place in late October, which is prior to events in recent Mission Dispatches. It was originally meant to be compiled with other test drives as a Phase 2 Mission Dispatch, but it was decided that would be too long of a dispatch, and has now been broken up into individual drives. Edited December 6, 2014 by Gaiiden Link to comment Share on other sites More sharing options...
Drew Kerman Posted December 6, 2014 Author Share Posted December 6, 2014 Previous drives of the rover focused on testing and refining the code the would allow the rover to navigate itself over difficult and unknown terrain. The team is now at the point where they feel confident enough in the rover's abilities to not only go out and drive itself around without a pace vehicle for backup, but also while carrying the full suite of instruments and equipment that will be loaded on it for its actual mission to Mun. Accidents now will not only endanger the rover, but the operability of several delicate science instruments. NOTE: These events take place in early November, which is prior to events in recent Mission Dispatches. It was originally meant to be compiled with other test drives as a Phase 2 Mission Dispatch, but it was decided that would be too long of a dispatch, and has now been broken up into individual drives. Link to comment Share on other sites More sharing options...
Drew Kerman Posted December 8, 2014 Author Share Posted December 8, 2014 Although the previous drive was ultimately successful, engineers on the rover team were still not satisfied with the damage done to the rover and the inability of the software to properly acquire the next waypoint. Further refinement to the driving parameters and some refactoring of the guidance code gives them high hopes of a clean run from start to finish on this next drive out to the west shore desert. Once again, the rover will be completely on its own and assisted only from mission control at KSC. NOTE: These events take place in early November, which is prior to events in recent Mission Dispatches. It was originally meant to be compiled with other test drives as a Phase 2 Mission Dispatch, but it was decided that would be too long of a dispatch, and has now been broken up into individual drives. Link to comment Share on other sites More sharing options...
Drew Kerman Posted December 11, 2014 Author Share Posted December 11, 2014 After finishing up maintenance on the rover, which experienced some technical difficulties on the previous drive, the team once again unleashed Lupek out into the wilderness hoping for a clean drive from start to finish. They were also testing out a new feature of the driving software that would allow Lupek to retrace its route back to the start. As Lupek has already proven itself on long voyages, the team decided to only send it out as far as the grasslands and back. NOTE: These events take place in early November, which is prior to events in recent Mission Dispatches. It was originally meant to be compiled with other test drives as a Phase 2 Mission Dispatch, but it was decided that would be too long of a dispatch, and has now been broken up into individual drives. Link to comment Share on other sites More sharing options...
Recommended Posts