Difference between revisions of "Lua Script for Orbit Stabilization"
(Blanked the page) |
m |
||
Line 1: | Line 1: | ||
+ | -- Lua script for chapter 2 of "Go Play in Space" - Orbit Stabilization | ||
+ | |||
+ | -- | ||
+ | -- Author: David Murley | ||
+ | |||
+ | -- Date: 7/01/2019 | ||
+ | |||
+ | -- Version: 1.1 | ||
+ | |||
+ | -- | ||
+ | |||
+ | -- | ||
+ | |||
+ | |||
+ | term.out('Script invoked') | ||
+ | |||
+ | |||
+ | -- Get access to the Delta Gliders GL-01 and GL-02. With the interface handles | ||
+ | |||
+ | -- obtained, access to various controls and flight data are acquired. | ||
+ | |||
+ | |||
+ | |||
+ | hGL1=vessel.get_interface('GL-01') | ||
+ | |||
+ | hGL2=vessel.get_interface('GL-02') | ||
+ | |||
+ | |||
+ | -- Wait until vessels are docked before continuing with script | ||
+ | |||
+ | |||
+ | |||
+ | term.out ('Waiting until vessels are docked before') | ||
+ | |||
+ | term.out (' executing remainder of script') | ||
+ | |||
+ | continue = true | ||
+ | |||
+ | hDckPort = hGL1:get_dockhandle(0) | ||
+ | |||
+ | continue=true | ||
+ | |||
+ | while continue do | ||
+ | |||
+ | hDckStatus=hGL1:get_dockstatus(hDckPort) | ||
+ | |||
+ | if hDckStatus ~= nil then | ||
+ | |||
+ | continue = false | ||
+ | |||
+ | else | ||
+ | |||
+ | proc.wait_simdt(5) | ||
+ | |||
+ | end | ||
+ | |||
+ | end | ||
+ | |||
+ | |||
+ | -- Kill Rotation | ||
+ | |||
+ | |||
+ | term.out('Kill Rotation') | ||
+ | |||
+ | hGL1:set_navmode(NAVMODE.KILLROT) | ||
+ | |||
+ | proc.wait_simdt(10) | ||
+ | |||
+ | |||
+ | -- Undock | ||
+ | |||
+ | |||
+ | term.out('Undock') | ||
+ | |||
+ | hGL1:undock(ALLDOCKS) | ||
+ | |||
+ | |||
+ | -- Set RCS mode on GL-01 to Translation | ||
+ | |||
+ | |||
+ | term.out('Set RCS mode to translate.') | ||
+ | |||
+ | hGL1:set_rcsmode(RCSMODE.LIN) | ||
+ | |||
+ | |||
+ | -- Thrust away from GL-02. The resulting distance from GL-02 is about 35 meters. | ||
+ | |||
+ | |||
+ | term.out('Separation of GL-01 and GL-02 to +/-35 meters') | ||
+ | |||
+ | -- oapi.set_tacc(10) | ||
+ | |||
+ | thrstGrpHdl1=hGL1:get_thrustergrouphandle(THGROUP.ATT_BACK) | ||
+ | |||
+ | hGL1:set_thrustergrouplevel(THGROUP.ATT_BACK,.1) | ||
+ | |||
+ | proc.wait_simdt(11.237) | ||
+ | |||
+ | hGL1:set_thrustergrouplevel(THGROUP.ATT_BACK,0) | ||
+ | |||
+ | proc.wait_simdt(52.777) | ||
+ | |||
+ | thrstGrpHdl2=hGL1:get_thrustergrouphandle(THGROUP.ATT_FORWARD) | ||
+ | |||
+ | hGL1:set_thrustergrouplevel(THGROUP.ATT_FORWARD,.1) | ||
+ | |||
+ | proc.wait_simdt(18.733) | ||
+ | |||
+ | hGL1:set_thrustergrouplevel(THGROUP.ATT_FORWARD,0) | ||
+ | |||
+ | -- oapi.set_tacc(1) | ||
+ | |||
+ | term.out('Separation completed.') | ||
+ | |||
+ | |||
+ | -- Set the prograde autopilot for both vessels to on. | ||
+ | |||
+ | |||
+ | term.out('Set prograde autopilot for both vessels.') | ||
+ | |||
+ | hGL1:set_navmode(NAVMODE.PROGRADE) | ||
+ | |||
+ | hGL2:set_navmode(NAVMODE.PROGRADE) | ||
+ | |||
+ | proc.wait_simdt(25) | ||
+ | |||
+ | |||
+ | -- The following 14 lines set up the annotations that are used to display | ||
+ | |||
+ | -- time to apoapsis for both vessels | ||
+ | |||
+ | |||
+ | hApT1Label = oapi.create_annotation() | ||
+ | |||
+ | hApT1Label:set_pos(0.7,0.7,1,1) | ||
+ | |||
+ | hApT1Label:set_colour({r=1, g=0.7, b=0.3}) | ||
+ | |||
+ | hApT1Label:set_text ('ApT (GL-01): ') | ||
+ | |||
+ | |||
+ | hApT1 = oapi.create_annotation() | ||
+ | |||
+ | hApT1:set_pos(0.8,0.7,1,1) | ||
+ | |||
+ | hApT1:set_colour({r=1, g=0.7, b=0.3}) | ||
+ | |||
+ | |||
+ | hApT2Label = oapi.create_annotation() | ||
+ | |||
+ | hApT2Label:set_pos(0.7,0.75,1,1) | ||
+ | |||
+ | hApT2Label:set_colour({r=1, g=0.7, b=0.3}) | ||
+ | |||
+ | hApT2Label:set_text ('ApT (GL-02): ') | ||
+ | |||
+ | |||
+ | |||
+ | hApT2 = oapi.create_annotation() | ||
+ | |||
+ | hApT2:set_pos(0.8,0.75,1,1) | ||
+ | |||
+ | hApT2:set_colour({r=1, g=0.7, b=0.3}) | ||
+ | |||
+ | |||
+ | -- Wait until +/- 20 seconds before apoapsis, then slow time acceleration to 1x. | ||
+ | |||
+ | -- Ignition of main engines on both vessels occurs around +/- 10 seconds before | ||
+ | |||
+ | -- apoapsis. Time acceleration during the waiting period is set to 100x to | ||
+ | |||
+ | -- reduce waiting time for those who are easily bored. | ||
+ | |||
+ | |||
+ | term.out ('Wait until +/- 10 seconds from aoapis. Then fire') | ||
+ | |||
+ | term.out (' main engines to stabilize orbit') | ||
+ | |||
+ | oapi.set_tacc(100) | ||
+ | |||
+ | continue = true | ||
+ | |||
+ | while continue do | ||
+ | |||
+ | el,op = hGL1:get_elementsex() | ||
+ | |||
+ | TimeToApoapsis= op.ApT | ||
+ | |||
+ | hApT1:set_text(TimeToApoapsis) | ||
+ | |||
+ | el,op=hGL2:get_elementsex() | ||
+ | |||
+ | TimeToAposis=op.ApT | ||
+ | |||
+ | hApT2:set_text(TimeToApoapsis) | ||
+ | |||
+ | if TimeToApoapsis < 20 then | ||
+ | |||
+ | continue=false | ||
+ | |||
+ | end | ||
+ | |||
+ | proc.wait_simdt(1) | ||
+ | |||
+ | end | ||
+ | |||
+ | oapi.set_tacc(1) | ||
+ | |||
+ | |||
+ | |||
+ | -- Track time to apoapsis from time=+/-20 sec in 1x time. | ||
+ | |||
+ | |||
+ | continue=true | ||
+ | |||
+ | while continue do | ||
+ | |||
+ | el,op = hGL1:get_elementsex() | ||
+ | |||
+ | TimeToApoapsis1 =op.ApT | ||
+ | |||
+ | hApT1:set_text(TimeToApoapsis1) | ||
+ | |||
+ | el,op = hGL2:get_elementsex() | ||
+ | |||
+ | TimeToApoapsis2=op.ApT | ||
+ | |||
+ | hApT2:set_text(TimeToApoapsis2) | ||
+ | |||
+ | if TimeToApoapsis1 <= 10 then | ||
+ | |||
+ | continue=false | ||
+ | |||
+ | oapi.del_annotation(hApT1) | ||
+ | |||
+ | oapi.del_annotation(hApT1Label) | ||
+ | |||
+ | oapi.del_annotation(hApT2) | ||
+ | |||
+ | oapi.del_annotation(hApT2Label) | ||
+ | |||
+ | else | ||
+ | |||
+ | proc.wait_simdt(1) | ||
+ | |||
+ | end | ||
+ | |||
+ | end | ||
+ | |||
+ | |||
+ | -- Set up annotations to show orbit eccentricities | ||
+ | |||
+ | |||
+ | hEcc1Label = oapi.create_annotation() | ||
+ | |||
+ | hEcc1Label:set_pos(0.7,0.7,1,1) | ||
+ | |||
+ | hEcc1Label:set_colour({r=1, g=0.7, b=0.3}) | ||
+ | |||
+ | hEcc1Label:set_text ('Ecc (GL-01): ') | ||
+ | |||
+ | |||
+ | hEcc1 = oapi.create_annotation() | ||
+ | |||
+ | hEcc1:set_pos(0.8,0.7,1,1) | ||
+ | |||
+ | hEcc1:set_colour({r=1, g=0.7, b=0.3}) | ||
+ | |||
+ | |||
+ | |||
+ | hEcc2Label = oapi.create_annotation() | ||
+ | |||
+ | hEcc2Label:set_pos(0.7,0.75,1,1) | ||
+ | |||
+ | hEcc2Label:set_colour({r=1, g=0.7, b=0.3}) | ||
+ | |||
+ | hEcc2Label:set_text ('Ecc (GL-02): ') | ||
+ | |||
+ | |||
+ | hEcc2 = oapi.create_annotation() | ||
+ | |||
+ | hEcc2:set_pos(0.8,0.75,1,1) | ||
+ | |||
+ | hEcc2:set_colour({r=1, g=0.7, b=0.3}) | ||
+ | |||
+ | |||
+ | -- Stabilize orbits | ||
+ | |||
+ | |||
+ | term.out('Start Stabilization of Orbits') | ||
+ | |||
+ | hGL1:set_thrustergrouplevel(THGROUP.MAIN, 1) | ||
+ | |||
+ | hGL2:set_thrustergrouplevel(THGROUP.MAIN, 1) | ||
+ | |||
+ | |||
+ | continue1=true | ||
+ | |||
+ | continue2 = true | ||
+ | |||
+ | while continue1 or continue2 do | ||
+ | |||
+ | el=hGL1:get_elements() | ||
+ | |||
+ | e1 = el.e | ||
+ | |||
+ | hEcc1:set_text(e1) | ||
+ | |||
+ | if e1 <= .005 then | ||
+ | hGL1:set_thrustergrouplevel (THGROUP.MAIN, 0) | ||
+ | |||
+ | continue1 = false | ||
+ | |||
+ | end | ||
+ | |||
+ | el = hGL2:get_elements() | ||
+ | |||
+ | e2 = el.e | ||
+ | |||
+ | hEcc2:set_text(e2) | ||
+ | |||
+ | if e2 <= .005 then | ||
+ | |||
+ | hGL2:set_thrustergrouplevel (THGROUP.MAIN, 0) | ||
+ | |||
+ | continue2 = false | ||
+ | |||
+ | end | ||
+ | |||
+ | proc.wait_simdt(1) | ||
+ | |||
+ | end | ||
+ | |||
+ | term.out ('Orbits stabilized.') | ||
+ | |||
+ | term.out ('') | ||
+ | |||
+ | term.out ('') | ||
+ | |||
+ | |||
+ | -- Wait a few seconds and then delete eccentricity annotations | ||
+ | |||
+ | |||
+ | proc.wait_simdt(10) | ||
+ | |||
+ | oapi.del_annotation(hEcc1) | ||
+ | |||
+ | oapi.del_annotation(hEcc1Label) | ||
+ | |||
+ | oapi.del_annotation(hEcc2) | ||
+ | |||
+ | oapi.del_annotation(hEcc2Label) | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | term.out ('End Script') |
Revision as of 19:40, 12 July 2019
-- Lua script for chapter 2 of "Go Play in Space" - Orbit Stabilization
-- -- Author: David Murley
-- Date: 7/01/2019
-- Version: 1.1
--
--
term.out('Script invoked')
-- Get access to the Delta Gliders GL-01 and GL-02. With the interface handles
-- obtained, access to various controls and flight data are acquired.
hGL1=vessel.get_interface('GL-01')
hGL2=vessel.get_interface('GL-02')
-- Wait until vessels are docked before continuing with script
term.out ('Waiting until vessels are docked before')
term.out (' executing remainder of script')
continue = true
hDckPort = hGL1:get_dockhandle(0)
continue=true
while continue do
hDckStatus=hGL1:get_dockstatus(hDckPort)
if hDckStatus ~= nil then
continue = false
else
proc.wait_simdt(5)
end
end
-- Kill Rotation
term.out('Kill Rotation')
hGL1:set_navmode(NAVMODE.KILLROT)
proc.wait_simdt(10)
-- Undock
term.out('Undock')
hGL1:undock(ALLDOCKS)
-- Set RCS mode on GL-01 to Translation
term.out('Set RCS mode to translate.')
hGL1:set_rcsmode(RCSMODE.LIN)
-- Thrust away from GL-02. The resulting distance from GL-02 is about 35 meters.
term.out('Separation of GL-01 and GL-02 to +/-35 meters')
-- oapi.set_tacc(10)
thrstGrpHdl1=hGL1:get_thrustergrouphandle(THGROUP.ATT_BACK)
hGL1:set_thrustergrouplevel(THGROUP.ATT_BACK,.1)
proc.wait_simdt(11.237)
hGL1:set_thrustergrouplevel(THGROUP.ATT_BACK,0)
proc.wait_simdt(52.777)
thrstGrpHdl2=hGL1:get_thrustergrouphandle(THGROUP.ATT_FORWARD)
hGL1:set_thrustergrouplevel(THGROUP.ATT_FORWARD,.1)
proc.wait_simdt(18.733)
hGL1:set_thrustergrouplevel(THGROUP.ATT_FORWARD,0)
-- oapi.set_tacc(1)
term.out('Separation completed.')
-- Set the prograde autopilot for both vessels to on.
term.out('Set prograde autopilot for both vessels.')
hGL1:set_navmode(NAVMODE.PROGRADE)
hGL2:set_navmode(NAVMODE.PROGRADE)
proc.wait_simdt(25)
-- The following 14 lines set up the annotations that are used to display
-- time to apoapsis for both vessels
hApT1Label = oapi.create_annotation()
hApT1Label:set_pos(0.7,0.7,1,1)
hApT1Label:set_colour({r=1, g=0.7, b=0.3})
hApT1Label:set_text ('ApT (GL-01): ')
hApT1 = oapi.create_annotation()
hApT1:set_pos(0.8,0.7,1,1)
hApT1:set_colour({r=1, g=0.7, b=0.3})
hApT2Label = oapi.create_annotation()
hApT2Label:set_pos(0.7,0.75,1,1)
hApT2Label:set_colour({r=1, g=0.7, b=0.3})
hApT2Label:set_text ('ApT (GL-02): ')
hApT2 = oapi.create_annotation()
hApT2:set_pos(0.8,0.75,1,1)
hApT2:set_colour({r=1, g=0.7, b=0.3})
-- Wait until +/- 20 seconds before apoapsis, then slow time acceleration to 1x.
-- Ignition of main engines on both vessels occurs around +/- 10 seconds before
-- apoapsis. Time acceleration during the waiting period is set to 100x to
-- reduce waiting time for those who are easily bored.
term.out ('Wait until +/- 10 seconds from aoapis. Then fire')
term.out (' main engines to stabilize orbit')
oapi.set_tacc(100)
continue = true
while continue do
el,op = hGL1:get_elementsex()
TimeToApoapsis= op.ApT
hApT1:set_text(TimeToApoapsis)
el,op=hGL2:get_elementsex()
TimeToAposis=op.ApT
hApT2:set_text(TimeToApoapsis)
if TimeToApoapsis < 20 then
continue=false
end
proc.wait_simdt(1)
end
oapi.set_tacc(1)
-- Track time to apoapsis from time=+/-20 sec in 1x time.
continue=true
while continue do
el,op = hGL1:get_elementsex()
TimeToApoapsis1 =op.ApT
hApT1:set_text(TimeToApoapsis1)
el,op = hGL2:get_elementsex()
TimeToApoapsis2=op.ApT
hApT2:set_text(TimeToApoapsis2)
if TimeToApoapsis1 <= 10 then
continue=false
oapi.del_annotation(hApT1)
oapi.del_annotation(hApT1Label)
oapi.del_annotation(hApT2)
oapi.del_annotation(hApT2Label)
else
proc.wait_simdt(1)
end
end
-- Set up annotations to show orbit eccentricities
hEcc1Label = oapi.create_annotation()
hEcc1Label:set_pos(0.7,0.7,1,1)
hEcc1Label:set_colour({r=1, g=0.7, b=0.3})
hEcc1Label:set_text ('Ecc (GL-01): ')
hEcc1 = oapi.create_annotation()
hEcc1:set_pos(0.8,0.7,1,1)
hEcc1:set_colour({r=1, g=0.7, b=0.3})
hEcc2Label = oapi.create_annotation()
hEcc2Label:set_pos(0.7,0.75,1,1)
hEcc2Label:set_colour({r=1, g=0.7, b=0.3})
hEcc2Label:set_text ('Ecc (GL-02): ')
hEcc2 = oapi.create_annotation()
hEcc2:set_pos(0.8,0.75,1,1)
hEcc2:set_colour({r=1, g=0.7, b=0.3})
-- Stabilize orbits
term.out('Start Stabilization of Orbits')
hGL1:set_thrustergrouplevel(THGROUP.MAIN, 1)
hGL2:set_thrustergrouplevel(THGROUP.MAIN, 1)
continue1=true
continue2 = true
while continue1 or continue2 do
el=hGL1:get_elements()
e1 = el.e
hEcc1:set_text(e1)
if e1 <= .005 then hGL1:set_thrustergrouplevel (THGROUP.MAIN, 0)
continue1 = false
end
el = hGL2:get_elements()
e2 = el.e
hEcc2:set_text(e2)
if e2 <= .005 then
hGL2:set_thrustergrouplevel (THGROUP.MAIN, 0)
continue2 = false
end
proc.wait_simdt(1)
end
term.out ('Orbits stabilized.')
term.out ()
term.out ()
-- Wait a few seconds and then delete eccentricity annotations
proc.wait_simdt(10)
oapi.del_annotation(hEcc1)
oapi.del_annotation(hEcc1Label)
oapi.del_annotation(hEcc2)
oapi.del_annotation(hEcc2Label)
term.out ('End Script')