Collision Avoidance Maneuver design for conjunction assessment
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Unify Odm.vec3 with Vec3.t

Odm.vec3 is now Vec3.t (type alias via = Vec3.t = {x; y; z}).
Removes to_v conversion helpers from collision and cam interop tests.
odm now depends on vec3.

+8 -10
+8 -10
test/interop/gmat/test.ml
··· 15 15 | Error e -> Alcotest.failf "parse error: %a" Odm.pp_error e 16 16 17 17 let vec3_norm v = Float.sqrt ((v.Odm.x *. v.x) +. (v.y *. v.y) +. (v.z *. v.z)) 18 - let to_v (v : Odm.vec3) : Vec3.t = { x = v.x; y = v.y; z = v.z } 19 - 20 18 let test_two_segments () = 21 19 let oem = parse_oem "tangential_burn.oem" in 22 20 let segs = Odm.segments oem in ··· 35 33 let first_post = post.(0) in 36 34 Alcotest.(check string) 37 35 "same epoch at burn boundary" last_pre.epoch first_post.epoch; 38 - let dp = Vec3.distance (to_v first_post.pos) (to_v last_pre.pos) in 36 + let dp = Vec3.distance (first_post.pos) (last_pre.pos) in 39 37 Alcotest.(check bool) "position unchanged at burn" true (dp < 0.001); 40 - let dv = Vec3.distance (to_v first_post.vel) (to_v last_pre.vel) in 38 + let dv = Vec3.distance (first_post.vel) (last_pre.vel) in 41 39 Alcotest.(check bool) "delta-v ~0.1 km/s" true (dv > 0.09 && dv < 0.11) 42 40 43 41 let test_orbit_raised () = ··· 68 66 let post = Odm.state_vectors (List.nth segs 1) in 69 67 (* Burn-point state from GMAT (last pre-burn vector = first post-burn vector) *) 70 68 let burn_sv = pre.(Array.length pre - 1) in 71 - let burn_pos = to_v burn_sv.Odm.pos in 72 - let burn_vel = to_v burn_sv.vel in 69 + let burn_pos = burn_sv.Odm.pos in 70 + let burn_vel = burn_sv.vel in 73 71 (* Use Kepler to propagate the burned state forward by 1 orbit (~5554s) 74 72 and compare against GMAT's actual post-burn position at that time. *) 75 73 let dt = 5554.0 in 76 74 let n_post = Array.length post in 77 75 let i_target = min (dt /. 60.0 |> int_of_float) (n_post - 1) in 78 - let gmat_pos = to_v post.(i_target).Odm.pos in 76 + let gmat_pos = post.(i_target).Odm.pos in 79 77 (* Kepler propagation: apply burn, propagate *) 80 78 let vel_burned = 81 79 let dv_km = 0.1 in ··· 116 114 let pre = Odm.state_vectors (List.nth segs 0) in 117 115 let post = Odm.state_vectors (List.nth segs 1) in 118 116 let burn_sv = pre.(Array.length pre - 1) in 119 - let burn_pos = to_v burn_sv.Odm.pos in 120 - let burn_vel = to_v burn_sv.vel in 117 + let burn_pos = burn_sv.Odm.pos in 118 + let burn_vel = burn_sv.vel in 121 119 let n_post = Array.length post in 122 - let secondary_pos_tca = to_v post.(min 92 (n_post - 1)).Odm.pos in 120 + let secondary_pos_tca = post.(min 92 (n_post - 1)).Odm.pos in 123 121 let miss_r = 50.0 in 124 122 let miss_t = 200.0 in 125 123 let miss_n = 0.0 in