Skip to content
Snippets Groups Projects
Select Git revision
  • v4.0.1_stable
  • master default protected
  • thesis
  • fmics-2021
  • vanadium
  • afadl-2021
  • functional-verification
  • v5.17_devel
  • v5.16.0_stable
  • v5.15_devel
  • v5.14.0_stable
  • v5.13.0_testing
  • v5.13_devel
  • v5.12_stable
  • v5.11_devel
  • v5.10_stable
  • v5.9.0_testing
  • v5.8.2_stable
  • v5.8.1_stable
  • v5.9_devel
  • v5.8.0_stable
  • v5.7.1_testing
  • v5.7.0_testing
  • v5.7_devel
  • v5.6.0_stable
  • v5.5.2_testing
  • v5.5.1_testing
27 results

gps.ml

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    gps.ml 2.20 KiB
    (*
     *  $Id$
     *
     * Basic GPS parameters simulation
     *
     * Copyright (C) 2004 Pascal Brisset, Antoine Drouin
     *
     * This file is part of paparazzi.
     *
     * paparazzi is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 2, or (at your option)
     * any later version.
     *
     * paparazzi is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with paparazzi; see the file COPYING.  If not, write to
     * the Free Software Foundation, 59 Temple Place - Suite 330,
     * Boston, MA 02111-1307, USA.
     *
     *)
    
    open Stdlib
    open Latlong
    
    type state = {
        mutable availability : bool;
        wgs84 : Latlong.geographic;
        alt : float;
        time : float;
        climb : float;
        gspeed : float;
        course : float
      }
    
    
    let climb_noise =
      let ng = Ocaml_tools.make_1st_order_noise_generator 0.9 0.1 in
      fun c -> c +. ng ()
    
    let state = fun pos0 alt0 ->
      let last_x = ref 0. and last_y = ref 0. and last_z = ref 0.
      and last_gspeed = ref 0. and last_course = ref 0. and last_climb = ref 0.
      and last_t = ref 0.
      and tow = float (Latlong.get_gps_tow ()) in
    
      fun (x, y, z) t ->
        let dt = t -. !last_t in
    
        if dt > 0. then begin (** Compute derivatives *)
          let dx = x -. !last_x
          and dy = y -. !last_y in
          last_gspeed := sqrt (dx*.dx +. dy*.dy) /. dt;
          last_course := norm_angle (pi/.2. -. atan2 dy dx);
          last_climb := (z -. !last_z) /. dt
        end; (** Else use previous derivatives *)
    
        let utm0 = utm_of WGS84 !pos0 in
        let utm = utm_add utm0 (x, y) in
        let wgs84 = of_utm WGS84 utm
        and alt = !alt0 +. z in
    
        last_x := x;
        last_y := y;
        last_z := z;
        last_t := t;