Paparazzi UAS  v6.2.0_stable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
gps_sim_hitl.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Sergey Krukowski <softsr@yahoo.de>
3  *
4  * This file is part of paparazzi.
5  *
6  * paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with paparazzi; see the file COPYING. If not, write to
18  * the Free Software Foundation, 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  */
21 
28 #include "modules/gps/gps.h"
29 #include "modules/core/abi.h"
30 
31 #include "state.h"
32 #include "guidance/guidance_h.h"
33 #include "guidance/guidance_v.h"
34 #include "autopilot.h"
35 
38 
40 {
42 }
43 
45 {
46  if (SysTimeTimer(gps_sim_hitl_timer) > 100000) {
51  if (!autopilot_in_flight()) {
52  struct Int32Vect2 zero_vector_i;
53  struct FloatVect2 zero_vector_f;
54  INT_VECT2_ZERO(zero_vector_i);
55  FLOAT_VECT2_ZERO(zero_vector_f);
56  gh_set_ref(zero_vector_i, zero_vector_f, zero_vector_f);
60  gv_set_ref(0, 0, 0);
61  guidance_v_z_ref = 0;
64  }
65  struct NedCoor_i ned_c;
71  gps.hmsl = state.ned_origin_i.hmsl - ned_c.z;
76  gps.fix = GPS_FIX_3D;
79  gps_available = true;
80  }
81  else {
82  struct Int32Vect2 zero_vector_i;
83  struct FloatVect2 zero_vector_f;
84  INT_VECT2_ZERO(zero_vector_i);
85  FLOAT_VECT2_ZERO(zero_vector_f);
86  gh_set_ref(zero_vector_i, zero_vector_f, zero_vector_f);
87  gv_set_ref(0, 0, 0);
88  }
89 
90  // publish gps data
91  uint32_t now_ts = get_sys_time_usec();
94  if (gps.fix == GPS_FIX_3D) {
97  }
98  AbiSendMsgGPS(GPS_SIM_ID, now_ts, &gps);
99  }
100 }
101 
Main include for ABI (AirBorneInterface).
#define GPS_SIM_ID
bool autopilot_in_flight(void)
get in_flight flag
Definition: autopilot.c:289
Core autopilot interface common to all firmwares.
uint32_t get_sys_time_usec(void)
Get the time in microseconds since startup.
Definition: sys_time_arch.c:75
struct GpsState gps
global GPS state
Definition: gps.c:69
Device independent GPS code (interface)
int32_t hmsl
height above mean sea level (MSL) in mm
Definition: gps.h:97
struct LlaCoor_i lla_pos
position in LLA (lat,lon: deg*1e7; alt: mm over ellipsoid)
Definition: gps.h:95
struct EcefCoor_i ecef_pos
position in ECEF in cm
Definition: gps.h:94
uint32_t last_3dfix_ticks
cpu time ticks at last valid 3D fix
Definition: gps.h:117
struct EcefCoor_i ecef_vel
speed ECEF in cm/s
Definition: gps.h:98
#define GPS_FIX_NONE
No GPS fix.
Definition: gps.h:40
uint32_t last_msg_time
cpu time in sec at last received GPS message
Definition: gps.h:120
uint32_t last_3dfix_time
cpu time in sec at last valid 3D fix
Definition: gps.h:118
#define GPS_FIX_3D
3D GPS fix
Definition: gps.h:42
uint32_t last_msg_ticks
cpu time ticks at last received GPS message
Definition: gps.h:119
uint8_t fix
status of fix
Definition: gps.h:110
void gps_sim_hitl_init(void)
Definition: gps_sim_hitl.c:39
uint32_t gps_sim_hitl_timer
Definition: gps_sim_hitl.c:37
void gps_sim_hitl_event(void)
Definition: gps_sim_hitl.c:44
bool gps_available
Definition: gps_sim_hitl.c:36
GPS subsystem simulation from rotorcrafts horizontal/vertical reference system.
#define FLOAT_VECT2_ZERO(_v)
#define INT32_POS_OF_CM_DEN
#define INT32_SPEED_OF_CM_S_NUM
#define INT32_SPEED_OF_CM_S_DEN
#define INT_VECT2_ZERO(_v)
#define INT32_POS_OF_CM_NUM
int32_t hmsl
Height above mean sea level in mm.
int32_t alt
in millimeters above WGS84 reference ellipsoid
int32_t z
Down.
struct LlaCoor_i lla
Reference point in lla.
int32_t y
East.
int32_t x
North.
void ecef_of_ned_vect_i(struct EcefCoor_i *ecef, struct LtpDef_i *def, struct NedCoor_i *ned)
Rotate a vector from NED to ECEF.
void ecef_of_ned_point_i(struct EcefCoor_i *ecef, struct LtpDef_i *def, struct NedCoor_i *ned)
Convert a point in local NED to ECEF.
vector in North East Down coordinates
struct State state
Definition: state.c:36
struct LtpDef_i ned_origin_i
Definition of the local (flat earth) coordinate system.
Definition: state.h:166
bool ned_initialized_i
true if local int coordinate frame is initialsed
Definition: state.h:171
void gh_set_ref(struct Int32Vect2 pos, struct FloatVect2 speed, struct FloatVect2 accel)
void gv_set_ref(int32_t alt, int32_t speed, int32_t accel)
struct HorizontalGuidance guidance_h
Definition: guidance_h.c:90
struct Int32Vect2 accel
with INT32_ACCEL_FRAC
Definition: guidance_h.h:84
struct Int32Vect2 speed
with INT32_SPEED_FRAC
Definition: guidance_h.h:83
struct Int32Vect2 pos
with INT32_POS_FRAC
Definition: guidance_h.h:82
struct HorizontalGuidanceReference ref
reference calculated from setpoints
Definition: guidance_h.h:104
int32_t guidance_v_z_ref
altitude reference in meters.
Definition: guidance_v.c:132
int32_t guidance_v_zd_ref
vertical speed reference in meter/s.
Definition: guidance_v.c:133
int32_t guidance_v_zdd_ref
vertical acceleration reference in meter/s^2.
Definition: guidance_v.c:134
API to get/set the generic vehicle states.
#define SysTimeTimerStart(_t)
Definition: sys_time.h:227
#define SysTimeTimer(_t)
Definition: sys_time.h:228
volatile uint32_t nb_sec
full seconds since startup
Definition: sys_time.h:72
volatile uint32_t nb_sec_rem
remainder of seconds since startup in CPU_TICKS
Definition: sys_time.h:73
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
Definition: vl53l1_types.h:78