Editing Lua Script for Orbit Stabilization

Jump to navigation Jump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
Lua script for chapter 2 of [[Go Play In Space]] by Bruce Irving, Andy McSorley, and Mark Paton for [[Orbiter|Orbiter Space Flight Simulator]].
 
  
 
<pre>
 
-- 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)
 
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(30)
 
 
-- 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')
 
</pre>
 
 
[[Category: Articles]]
 
[[Category: Lua]]
 

Please note that all contributions to OrbiterWiki are considered to be released under the GNU Free Documentation License 1.2 (see OrbiterWiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)