@ -1032,8 +1032,50 @@ AP_GPS_UBLOX::_parse_gps(void)
@@ -1032,8 +1032,50 @@ AP_GPS_UBLOX::_parse_gps(void)
state . hdop = 130 ;
# endif
break ;
case MSG_RELPOSNED :
{
const Vector3f & offset0 = gps . _antenna_offset [ 0 ] . get ( ) ;
const Vector3f & offset1 = gps . _antenna_offset [ 1 ] . get ( ) ;
const uint32_t valid_mask = static_cast < uint32_t > ( RELPOSNED : : relPosHeadingValid ) |
static_cast < uint32_t > ( RELPOSNED : : relPosValid ) |
static_cast < uint32_t > ( RELPOSNED : : gnssFixOK ) |
static_cast < uint32_t > ( RELPOSNED : : isMoving ) |
( 2 < < static_cast < uint32_t > ( RELPOSNED : : carrSoln ) ) ; // require fixed ambiguity
const uint32_t invalid_mask = static_cast < uint32_t > ( RELPOSNED : : refPosMiss ) |
static_cast < uint32_t > ( RELPOSNED : : refObsMiss ) ;
if ( ( ( _buffer . relposned . flags & valid_mask ) = = valid_mask ) & &
( ( _buffer . relposned . flags & invalid_mask ) = = 0 )
# if defined(STRICT_LENGTH_CHECK)
// force the estimated position to be within
& & ( fabsf ( offset0 . distance ( offset1 ) - ( _buffer . relposned . relPosLength * 1e-2 ) ) < STRICT_LENGTH_CHECK )
# endif // defined(STRICT_LENGTH_CHECK)
) {
float rotation_offset_rad ;
if ( offset0 . is_zero ( ) ) {
rotation_offset_rad = Vector2f ( offset1 . x , offset1 . y ) . angle ( ) ;
} else if ( offset1 . is_zero ( ) ) {
rotation_offset_rad = Vector2f ( offset0 . x , offset0 . y ) . angle ( ) ;
} else {
const Vector3f diff = offset0 - offset1 ;
rotation_offset_rad = Vector2f ( diff . x , diff . y ) . angle ( ) ;
}
if ( state . instance ! = 0 ) {
rotation_offset_rad + = M_PI ;
}
state . gps_yaw = wrap_360 ( _buffer . relposned . relPosHeading * 1e-5 + degrees ( rotation_offset_rad ) ) ;
state . have_gps_yaw = true ;
state . gps_yaw_accuracy = _buffer . relposned . accHeading * 1e-5 ;
state . have_gps_yaw_accuracy = true ;
} else {
state . have_gps_yaw = false ;
state . have_gps_yaw_accuracy = false ;
}
}
break ;
case MSG_PVT :
Debug ( " MSG_PVT " ) ;
havePvtMsg = true ;
// position
_check_new_itow ( _buffer . pvt . itow ) ;