Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ahrs_vectornav.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2016 Michal Podhradsky, michal.podhradsky@aggiemail.usu.edu
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 */
30#include "modules/core/abi.h"
31#include "state.h"
32
34
35#if PERIODIC_TELEMETRY
37
38
39static void send_vn_info(struct transport_tx *trans, struct link_device *dev)
40{
41 static uint16_t last_cnt = 0;
42 static uint16_t sec_cnt = 0;
43
45 ahrs_vn.vn_freq = sec_cnt; // update frequency counter
46
51 &sec_cnt,
57 // update counter
59
60 // reset mode
62}
63#endif
64
89
90
95{
96 // Initialize variables
98 ahrs_vn.vn_freq = 0;
99
100 // Initialize packet
109
111
112 // initialize data struct
113 memset(&(ahrs_vn.vn_data), 0, sizeof(struct VNData));
114
115#if PERIODIC_TELEMETRY
117#endif
118}
119
124{
125 // Rates [rad/s]
126 static struct FloatRates body_rate;
127 float_rmat_ratemult(&body_rate, orientationGetRMat_f(&ahrs_vn.body_to_imu), &ahrs_vn.vn_data.gyro); // compute body rates
128 stateSetBodyRates_f(MODULE_AHRS_VECTORNAV_ID, &body_rate); // Set state [rad/s]
129
130 // Attitude [deg]
131 static struct FloatQuat imu_quat; // convert from euler to quat
134
135}
136
137
Main include for ABI (AirBorneInterface).
#define IMU_VECTORNAV_ID
void ahrs_vectornav_event(void)
Event handling for Vectornav.
void ahrs_vectornav_propagate(void)
Read received data.
struct AhrsVectornav ahrs_vn
void ahrs_vectornav_init(void)
Initialize Vectornav struct.
static void send_vn_info(struct transport_tx *trans, struct link_device *dev)
Vectornav VN-200 as AHRS.
enum VNStatus vn_status
VN status.
struct Int32Vect3 accel_i
float vn_freq
data frequency
struct OrientationReps body_to_imu
body_to_imu rotation
struct VNData vn_data
Data struct.
struct Int32Rates gyro_i
struct VNPacket vn_packet
Packet struct.
Vectornav VN-200 as AHRS.
uint32_t get_sys_time_usec(void)
Get the time in microseconds since startup.
float phi
in radians
float theta
in radians
float psi
in radians
void float_rmat_ratemult(struct FloatRates *rb, struct FloatRMat *m_a2b, struct FloatRates *ra)
rotate anglular rates by rotation matrix.
void float_quat_of_eulers(struct FloatQuat *q, struct FloatEulers *e)
quat of euler roation 'ZYX'
Roation quaternion.
angular rates
#define RATES_BFP_OF_REAL(_ri, _rf)
#define ACCELS_BFP_OF_REAL(_ef, _ei)
#define INT32_VECT3_ZERO(_v)
static struct FloatRMat * orientationGetRMat_f(struct OrientationReps *orientation)
Get vehicle body attitude rotation matrix (float).
static void stateSetNedToBodyQuat_f(uint16_t id, struct FloatQuat *ned_to_body_quat)
Set vehicle body attitude from quaternion (float).
Definition state.h:1253
static void stateSetBodyRates_f(uint16_t id, struct FloatRates *body_rate)
Set vehicle body angular rate (float).
Definition state.h:1346
uint16_t foo
Definition main_demo5.c:58
API to get/set the generic vehicle states.
static const struct usb_device_descriptor dev
Definition usb_ser_hw.c:74
int8_t register_periodic_telemetry(struct periodic_telemetry *_pt, uint8_t _id, telemetry_cb _cb)
Register a telemetry callback function.
Definition telemetry.c:51
Periodic telemetry system header (includes downlink utility and generated code).
#define DefaultPeriodic
Set default periodic telemetry.
Definition telemetry.h:66
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
void vn200_read_message(struct VNPacket *vn_packet, struct VNData *vn_data)
Read received message and populate data struct with new measurements.
void vn200_event(struct VNPacket *vnp)
uint16_t framing_error
uint32_t hdr_error
uint8_t err
see page 122 of VN-200 datasheet
@ VNNotTracking
uint16_t overrun_error
struct FloatRates gyro
Rates in the imu frame m/s.
struct FloatEulers attitude
Attitude, float, [rad], yaw, pitch, roll.
struct FloatEulers ypr_u
Attitude uncertainty, 1sigma, float, [degrees], yaw, pitch, roll.
struct FloatVect3 accel
Acceleration in the imu frame, m/s.
uint8_t mode
0-not tracking, 1 - poor performance, 2- OK
float timestamp
Time since VN startup [s].
@ VNMsgSync
uint16_t counter
bool msg_available
uint16_t noise_error
uint32_t chksm_error
uint8_t msg_idx
enum VNMsgStatus status