Updated vectornav status message so it displays the right rate invariant on the frequency the message is sent

This commit is contained in:
Michal Podhradsky
2017-04-19 18:22:05 -07:00
parent ca68570d03
commit c2e314c0f1
3 changed files with 33 additions and 20 deletions
+1
View File
@@ -15,6 +15,7 @@
<file name="ins.h" dir="subsystems"/> <file name="ins.h" dir="subsystems"/>
</header> </header>
<init fun="ins_vectornav_init()"/> <init fun="ins_vectornav_init()"/>
<periodic fun="ins_vectornav_monitor()" freq="1.0" autorun="TRUE"/>
<event fun="ins_vectornav_event()"/> <event fun="ins_vectornav_event()"/>
<makefile target="ap"> <makefile target="ap">
<configure name="VN_PORT" default="uart3" case="upper|lower"/> <configure name="VN_PORT" default="uart3" case="upper|lower"/>
+30 -19
View File
@@ -60,33 +60,16 @@ static void send_ins_ref(struct transport_tx *trans, struct link_device *dev)
static void send_vn_info(struct transport_tx *trans, struct link_device *dev) static void send_vn_info(struct transport_tx *trans, struct link_device *dev)
{ {
// we want at least 75% of periodic frequency to be able to control the airfcraft
if (ins_vn.vn_freq < (PERIODIC_FREQUENCY*0.75)) {
gps.fix = GPS_FIX_NONE;
}
static uint16_t last_cnt = 0;
static uint16_t sec_cnt = 0;
sec_cnt = ins_vn.vn_packet.counter - last_cnt;
ins_vn.vn_freq = sec_cnt; // update frequency counter
pprz_msg_send_VECTORNAV_INFO(trans, dev, AC_ID, pprz_msg_send_VECTORNAV_INFO(trans, dev, AC_ID,
&ins_vn.vn_data.timestamp, &ins_vn.vn_data.timestamp,
&ins_vn.vn_packet.chksm_error, &ins_vn.vn_packet.chksm_error,
&ins_vn.vn_packet.hdr_error, &ins_vn.vn_packet.hdr_error,
&sec_cnt, &ins_vn.vn_rate,
&ins_vn.vn_data.mode, &ins_vn.vn_data.mode,
&ins_vn.vn_data.err, &ins_vn.vn_data.err,
&ins_vn.vn_data.ypr_u.phi, &ins_vn.vn_data.ypr_u.phi,
&ins_vn.vn_data.ypr_u.theta, &ins_vn.vn_data.ypr_u.theta,
&ins_vn.vn_data.ypr_u.psi); &ins_vn.vn_data.ypr_u.psi);
// update counter
last_cnt = ins_vn.vn_packet.counter;
// reset mode
ins_vn.vn_data.mode = 0;
} }
static void send_accel(struct transport_tx *trans, struct link_device *dev) static void send_accel(struct transport_tx *trans, struct link_device *dev)
@@ -119,6 +102,34 @@ static void send_gyro_scaled(struct transport_tx *trans, struct link_device *dev
PRINT_CONFIG_MSG("USE_INS_NAV_INIT defaulting to TRUE"); PRINT_CONFIG_MSG("USE_INS_NAV_INIT defaulting to TRUE");
#endif #endif
/**
* Monitors vectornav data rate
* and changes GPS lock if the data rate
* is too low.
*
*/
void ins_vectornav_monitor(void)
{
static uint16_t last_cnt = 0;
static uint16_t sec_cnt = 0;
sec_cnt = ins_vn.vn_packet.counter - last_cnt;
ins_vn.vn_rate = sec_cnt; // update frequency counter
// we want at least 75% of periodic frequency to be able to control the airfcraft
if (ins_vn.vn_rate < (PERIODIC_FREQUENCY*0.75)) {
gps.fix = GPS_FIX_NONE;
}
// update counter
last_cnt = ins_vn.vn_packet.counter;
// reset mode
ins_vn.vn_data.mode = 0;
}
/** /**
* Event handling for Vectornav * Event handling for Vectornav
*/ */
@@ -143,7 +154,7 @@ void ins_vectornav_init(void)
{ {
// Initialize variables // Initialize variables
ins_vn.vn_status = VNNotTracking; ins_vn.vn_status = VNNotTracking;
ins_vn.vn_freq = 0; ins_vn.vn_rate = 0;
// Initialize packet // Initialize packet
ins_vn.vn_packet.status = VNMsgSync; ins_vn.vn_packet.status = VNMsgSync;
+2 -1
View File
@@ -80,7 +80,7 @@ struct InsVectornav {
struct VNPacket vn_packet;///< Packet struct struct VNPacket vn_packet;///< Packet struct
struct VNData vn_data; ///< Data struct struct VNData vn_data; ///< Data struct
enum VNStatus vn_status; ///< VN status enum VNStatus vn_status; ///< VN status
float vn_freq; ///< data frequency uint16_t vn_rate; ///< data frequency
// in fixed point for sending as ABI and telemetry msgs // in fixed point for sending as ABI and telemetry msgs
struct Int32Vect3 accel_i; struct Int32Vect3 accel_i;
@@ -99,5 +99,6 @@ extern void ins_vectornav_event(void);
extern void ins_vectornav_set_sacc(void); extern void ins_vectornav_set_sacc(void);
extern void ins_vectornav_set_pacc(void); extern void ins_vectornav_set_pacc(void);
extern void ins_vectornav_propagate(void); extern void ins_vectornav_propagate(void);
extern void ins_vectornav_monitor(void);
#endif /* INS_VECTORNAV_H */ #endif /* INS_VECTORNAV_H */