diff --git a/Nasal/FMGC-b.nas b/Nasal/FMGC-b.nas index 762dfc26..72f53a4a 100644 --- a/Nasal/FMGC-b.nas +++ b/Nasal/FMGC-b.nas @@ -80,6 +80,7 @@ var APinit = func { setprop("/it-autoflight/internal/heading-error-deg", 0); trkfpa_off(); ap_varioust.start(); + lnavCalc.start(); thrustmode(); } @@ -550,6 +551,39 @@ var ap_various = func { } } +var lnavCalc = maketimer(0.05, func { + var f = flightplan(); + var total_distance = getprop("/autopilot/route-manager/total-distance"); + var distance = total_distance - getprop("/autopilot/route-manager/distance-remaining-nm"); + var destination_elevation = getprop("/autopilot/route-manager/destination/field-elevation-ft"); + var leg = f.currentWP(); + if (leg == nil) { + setprop("/it-autoflight/input/lat", 3); + return; + } + var groundspeed = getprop("/velocities/groundspeed-kt"); + var log_distance = getprop("/instrumentation/gps/wp/wp[1]/distance-nm"); + var along_route = total_distance - getprop("/autopilot/route-manager/distance-remaining-nm"); + var geocoord = geo.aircraft_position(); + var referenceCourse = f.pathGeod(f.indexOfWP(f.destination_runway), -getprop("/autopilot/route-manager/distance-remaining-nm")); + var courseCoord = geo.Coord.new().set_latlon(referenceCourse.lat, referenceCourse.lon); + var CourseError = (geocoord.distance_to(courseCoord) / 1852) + 1; + var change_wp = abs(getprop("/autopilot/route-manager/wp/bearing-deg") - getprop("/orientation/heading-deg")); + if (change_wp > 180) { + change_wp = (360 - change_wp); + } + CourseError += (change_wp / 20); + var targetCourse = f.pathGeod(f.indexOfWP(f.destination_runway), (-getprop("autopilot/route-manager/distance-remaining-nm") + CourseError)); + courseCoord = geo.Coord.new().set_latlon(targetCourse.lat, targetCourse.lon); + CourseError = (geocoord.course_to(courseCoord) - getprop("/orientation/heading-deg")); + if (CourseError < -180) { + CourseError += 360; + } else if (CourseError > 180) { + CourseError -= 360; + } + setprop("/it-autoflight/internal/lnav-error-deg", CourseError); +}); + var flch_on = func { setprop("/it-autoflight/output/appr-armed", 0); setprop("/it-autoflight/output/vert", 4); diff --git a/Systems/fmgc-drivers.xml b/Systems/fmgc-drivers.xml index d0caa9eb..65ef60a4 100644 --- a/Systems/fmgc-drivers.xml +++ b/Systems/fmgc-drivers.xml @@ -487,11 +487,7 @@ 1 - /autopilot/settings/true-heading-deg - - /orientation/heading-deg - -1.0 - + /it-autoflight/internal/lnav-error-deg diff --git a/revision.txt b/revision.txt index eb888846..f9e0edcb 100644 --- a/revision.txt +++ b/revision.txt @@ -1 +1 @@ -4009 \ No newline at end of file +4010 \ No newline at end of file