import numpy as np from utils import execute_node, magnitude def align_orbit_planes(conn): print("Aligning planes") mj = conn.mech_jeb mp = mj.maneuver_planner oi = mp.operation_inclination oi.time_selector.time_reference = mj.TimeReference.eq_nearest_ad nodes = oi.make_nodes() # kac = conn.kerbal_alarm_clock # kac.create_alarm( # kac.AlarmType.maneuver, # "{}'s Orbital transfer".format(v.name), # nodes[0].ut # ) execute_node(conn) print("Planes aligned!") def intercepting_target_orbit(conn): print("Intercepting target orbit") sc = conn.space_center v = sc.active_vessel mj = conn.mech_jeb mp = mj.maneuver_planner ot = mp.operation_transfer ot.time_selector.time_reference = mj.TimeReference.computed nodes = ot.make_nodes() nodes[0].ut = nodes[0].ut + 0.1 # kac = conn.kerbal_alarm_clock # kac.create_alarm( # kac.AlarmType.maneuver, # "{}'s Orbital transfer".format(v.name), # nodes[0].ut # ) execute_node(conn) print("Target orbit intercepted!") def tune_closest_approach(conn): print("Tuning closest approach") sc = conn.space_center v = sc.active_vessel mj = conn.mech_jeb mp = mj.maneuver_planner occ = mp.operation_course_correction nodes = occ.make_nodes() # kac = conn.kerbal_alarm_clock # kac.create_alarm( # kac.AlarmType.maneuver, # "{}'s Orbital transfer".format(v.name), # nodes[0].ut # ) execute_node(conn) print("Closest approach tuned!") def match_velocities(conn): print("Matching velocities") sc = conn.space_center v = sc.active_vessel mj = conn.mech_jeb mp = mj.maneuver_planner okrv = mp.operation_kill_rel_vel nodes = okrv.make_nodes() # kac = conn.kerbal_alarm_clock # kac.create_alarm( # kac.AlarmType.maneuver, # "{}'s Orbital transfer".format(v.name), # nodes[0].ut # ) execute_node(conn) print("Velocities matched!") def maneuver_to_rendezvous(conn, vessel, target): if vessel.orbit.distance_at_closest_approach(target.orbit) > 1000: if vessel.orbit.relative_inclination(target.orbit) > 0.0001: align_orbit_planes(conn) if vessel.orbit.distance_at_closest_approach(target.orbit) > 10000: intercepting_target_orbit(conn) tune_closest_approach(conn) if vessel.orbit.distance_at_closest_approach(target.orbit) <= 1000 < magnitude( np.array(vessel.position(vessel.reference_frame)) - np.array(target.position(vessel.reference_frame))): match_velocities(conn)