@@ -249,7 +249,7 @@ int SeptentrioDriver::print_status()
249
249
250
250
if (first_gps_uorb_message_created () && _state == State::ReceivingData) {
251
251
PX4_INFO (" rate RTCM injection: %6.2f Hz" , static_cast <double >(rtcm_injection_frequency ()));
252
- print_message (ORB_ID (sensor_gps), _message_gps_state );
252
+ print_message (ORB_ID (sensor_gps), _sensor_gps );
253
253
}
254
254
255
255
if (_instance == Instance::Main && secondary_instance) {
@@ -1057,8 +1057,8 @@ int SeptentrioDriver::process_message()
1057
1057
DOP dop;
1058
1058
1059
1059
if (_sbf_decoder.parse (&dop) == PX4_OK) {
1060
- _message_gps_state .hdop = dop.h_dop * 0 .01f ;
1061
- _message_gps_state .vdop = dop.v_dop * 0 .01f ;
1060
+ _sensor_gps .hdop = dop.h_dop * 0 .01f ;
1061
+ _sensor_gps .vdop = dop.v_dop * 0 .01f ;
1062
1062
result = PX4_OK;
1063
1063
}
1064
1064
@@ -1077,71 +1077,71 @@ int SeptentrioDriver::process_message()
1077
1077
if (_sbf_decoder.parse (&header) == PX4_OK && _sbf_decoder.parse (&pvt_geodetic) == PX4_OK) {
1078
1078
switch (static_cast <sbf::PVTGeodetic::ModeType>(pvt_geodetic.mode_type )) {
1079
1079
case ModeType::NoPVT:
1080
- _message_gps_state .fix_type = sensor_gps_s::FIX_TYPE_NONE;
1080
+ _sensor_gps .fix_type = sensor_gps_s::FIX_TYPE_NONE;
1081
1081
break ;
1082
1082
case ModeType::PVTWithSBAS:
1083
- _message_gps_state .fix_type = sensor_gps_s::FIX_TYPE_RTCM_CODE_DIFFERENTIAL;
1083
+ _sensor_gps .fix_type = sensor_gps_s::FIX_TYPE_RTCM_CODE_DIFFERENTIAL;
1084
1084
break ;
1085
1085
case ModeType::RTKFloat:
1086
1086
case ModeType::MovingBaseRTKFloat:
1087
- _message_gps_state .fix_type = sensor_gps_s::FIX_TYPE_RTK_FLOAT;
1087
+ _sensor_gps .fix_type = sensor_gps_s::FIX_TYPE_RTK_FLOAT;
1088
1088
break ;
1089
1089
case ModeType::RTKFixed:
1090
1090
case ModeType::MovingBaseRTKFixed:
1091
- _message_gps_state .fix_type = sensor_gps_s::FIX_TYPE_RTK_FIXED;
1091
+ _sensor_gps .fix_type = sensor_gps_s::FIX_TYPE_RTK_FIXED;
1092
1092
break ;
1093
1093
default :
1094
- _message_gps_state .fix_type = sensor_gps_s::FIX_TYPE_3D;
1094
+ _sensor_gps .fix_type = sensor_gps_s::FIX_TYPE_3D;
1095
1095
break ;
1096
1096
}
1097
1097
1098
1098
// Check boundaries and invalidate GPS velocities
1099
1099
if (pvt_geodetic.vn <= k_dnu_f4_value || pvt_geodetic.ve <= k_dnu_f4_value || pvt_geodetic.vu <= k_dnu_f4_value) {
1100
- _message_gps_state .vel_ned_valid = false ;
1100
+ _sensor_gps .vel_ned_valid = false ;
1101
1101
}
1102
1102
1103
1103
if (pvt_geodetic.latitude > k_dnu_f8_value && pvt_geodetic.longitude > k_dnu_f8_value && pvt_geodetic.height > k_dnu_f8_value && pvt_geodetic.undulation > k_dnu_f4_value) {
1104
- _message_gps_state .latitude_deg = pvt_geodetic.latitude * M_RAD_TO_DEG;
1105
- _message_gps_state .longitude_deg = pvt_geodetic.longitude * M_RAD_TO_DEG;
1106
- _message_gps_state .altitude_msl_m = pvt_geodetic.height - static_cast <double >(pvt_geodetic.undulation );
1107
- _message_gps_state .altitude_ellipsoid_m = pvt_geodetic.height ;
1104
+ _sensor_gps .latitude_deg = pvt_geodetic.latitude * M_RAD_TO_DEG;
1105
+ _sensor_gps .longitude_deg = pvt_geodetic.longitude * M_RAD_TO_DEG;
1106
+ _sensor_gps .altitude_msl_m = pvt_geodetic.height - static_cast <double >(pvt_geodetic.undulation );
1107
+ _sensor_gps .altitude_ellipsoid_m = pvt_geodetic.height ;
1108
1108
} else {
1109
- _message_gps_state .fix_type = sensor_gps_s::FIX_TYPE_NONE;
1109
+ _sensor_gps .fix_type = sensor_gps_s::FIX_TYPE_NONE;
1110
1110
}
1111
1111
1112
1112
if (pvt_geodetic.nr_sv != PVTGeodetic::k_dnu_nr_sv) {
1113
- _message_gps_state .satellites_used = pvt_geodetic.nr_sv ;
1113
+ _sensor_gps .satellites_used = pvt_geodetic.nr_sv ;
1114
1114
1115
1115
if (_message_satellite_info) {
1116
1116
// Only fill in the satellite count for now (we could use the ChannelStatus message for the
1117
1117
// other data, but it's really large: >800B)
1118
1118
_message_satellite_info->timestamp = hrt_absolute_time ();
1119
- _message_satellite_info->count = _message_gps_state .satellites_used ;
1119
+ _message_satellite_info->count = _sensor_gps .satellites_used ;
1120
1120
}
1121
1121
1122
1122
} else {
1123
- _message_gps_state .satellites_used = 0 ;
1123
+ _sensor_gps .satellites_used = 0 ;
1124
1124
}
1125
1125
1126
1126
/* H and V accuracy are reported in 2DRMS, but based off the u-blox reporting we expect RMS.
1127
1127
* Divide by 100 from cm to m and in addition divide by 2 to get RMS. */
1128
- _message_gps_state .eph = static_cast <float >(pvt_geodetic.h_accuracy ) / 200 .0f ;
1129
- _message_gps_state .epv = static_cast <float >(pvt_geodetic.v_accuracy ) / 200 .0f ;
1128
+ _sensor_gps .eph = static_cast <float >(pvt_geodetic.h_accuracy ) / 200 .0f ;
1129
+ _sensor_gps .epv = static_cast <float >(pvt_geodetic.v_accuracy ) / 200 .0f ;
1130
1130
1131
1131
// Check fix and error code
1132
- _message_gps_state .vel_ned_valid = _message_gps_state .fix_type > sensor_gps_s::FIX_TYPE_NONE && pvt_geodetic.error == Error::None;
1133
- _message_gps_state .vel_n_m_s = pvt_geodetic.vn ;
1134
- _message_gps_state .vel_e_m_s = pvt_geodetic.ve ;
1135
- _message_gps_state .vel_d_m_s = -1 .0f * pvt_geodetic.vu ;
1136
- _message_gps_state .vel_m_s = sqrtf (_message_gps_state .vel_n_m_s * _message_gps_state .vel_n_m_s +
1137
- _message_gps_state .vel_e_m_s * _message_gps_state .vel_e_m_s );
1132
+ _sensor_gps .vel_ned_valid = _sensor_gps .fix_type > sensor_gps_s::FIX_TYPE_NONE && pvt_geodetic.error == Error::None;
1133
+ _sensor_gps .vel_n_m_s = pvt_geodetic.vn ;
1134
+ _sensor_gps .vel_e_m_s = pvt_geodetic.ve ;
1135
+ _sensor_gps .vel_d_m_s = -1 .0f * pvt_geodetic.vu ;
1136
+ _sensor_gps .vel_m_s = sqrtf (_sensor_gps .vel_n_m_s * _sensor_gps .vel_n_m_s +
1137
+ _sensor_gps .vel_e_m_s * _sensor_gps .vel_e_m_s );
1138
1138
1139
1139
if (pvt_geodetic.cog > k_dnu_f4_value) {
1140
- _message_gps_state .cog_rad = pvt_geodetic.cog * M_DEG_TO_RAD_F;
1140
+ _sensor_gps .cog_rad = pvt_geodetic.cog * M_DEG_TO_RAD_F;
1141
1141
}
1142
- _message_gps_state .c_variance_rad = M_DEG_TO_RAD_F;
1142
+ _sensor_gps .c_variance_rad = M_DEG_TO_RAD_F;
1143
1143
1144
- _message_gps_state .time_utc_usec = 0 ;
1144
+ _sensor_gps .time_utc_usec = 0 ;
1145
1145
#ifndef __PX4_QURT // NOTE: Functionality isn't available on Snapdragon yet.
1146
1146
if (_time_synced) {
1147
1147
struct tm timeinfo;
@@ -1170,13 +1170,13 @@ int SeptentrioDriver::process_message()
1170
1170
ts.tv_nsec = (header.tow % 1000 ) * 1000 * 1000 ;
1171
1171
set_clock (ts);
1172
1172
1173
- _message_gps_state .time_utc_usec = static_cast <uint64_t >(epoch) * 1000000ULL ;
1174
- _message_gps_state .time_utc_usec += (header.tow % 1000 ) * 1000 ;
1173
+ _sensor_gps .time_utc_usec = static_cast <uint64_t >(epoch) * 1000000ULL ;
1174
+ _sensor_gps .time_utc_usec += (header.tow % 1000 ) * 1000 ;
1175
1175
}
1176
1176
}
1177
1177
1178
1178
#endif
1179
- _message_gps_state .timestamp = hrt_absolute_time ();
1179
+ _sensor_gps .timestamp = hrt_absolute_time ();
1180
1180
result = PX4_OK;
1181
1181
}
1182
1182
@@ -1189,7 +1189,7 @@ int SeptentrioDriver::process_message()
1189
1189
ReceiverStatus receiver_status;
1190
1190
1191
1191
if (_sbf_decoder.parse (&receiver_status) == PX4_OK) {
1192
- _message_gps_state .rtcm_msg_used = receiver_status.rx_state_diff_corr_in ? sensor_gps_s::RTCM_MSG_USED_USED : sensor_gps_s::RTCM_MSG_USED_NOT_USED;
1192
+ _sensor_gps .rtcm_msg_used = receiver_status.rx_state_diff_corr_in ? sensor_gps_s::RTCM_MSG_USED_USED : sensor_gps_s::RTCM_MSG_USED_NOT_USED;
1193
1193
_time_synced = receiver_status.rx_state_wn_set && receiver_status.rx_state_tow_set ;
1194
1194
}
1195
1195
@@ -1222,7 +1222,7 @@ int SeptentrioDriver::process_message()
1222
1222
1223
1223
if (_sbf_decoder.parse (&vel_cov_geodetic) == PX4_OK) {
1224
1224
if (vel_cov_geodetic.cov_ve_ve > k_dnu_f4_value && vel_cov_geodetic.cov_vn_vn > k_dnu_f4_value && vel_cov_geodetic.cov_vu_vu > k_dnu_f4_value) {
1225
- _message_gps_state .s_variance_m_s = math::max (math::max (vel_cov_geodetic.cov_ve_ve , vel_cov_geodetic.cov_vn_vn ), vel_cov_geodetic.cov_vu_vu );
1225
+ _sensor_gps .s_variance_m_s = math::max (math::max (vel_cov_geodetic.cov_ve_ve , vel_cov_geodetic.cov_vn_vn ), vel_cov_geodetic.cov_vu_vu );
1226
1226
}
1227
1227
}
1228
1228
@@ -1252,7 +1252,7 @@ int SeptentrioDriver::process_message()
1252
1252
heading -= 2 .f * M_PI_F;
1253
1253
}
1254
1254
1255
- _message_gps_state .heading = heading;
1255
+ _sensor_gps .heading = heading;
1256
1256
}
1257
1257
1258
1258
break ;
@@ -1270,7 +1270,7 @@ int SeptentrioDriver::process_message()
1270
1270
static_cast <AttCovEuler::Error>(att_cov_euler.error_aux1 ) == Error::None &&
1271
1271
static_cast <AttCovEuler::Error>(att_cov_euler.error_aux2 ) == Error::None &&
1272
1272
att_cov_euler.cov_headhead > k_dnu_f4_value) {
1273
- _message_gps_state .heading_accuracy = att_cov_euler.cov_headhead * M_PI_F / 180 .0f ; // Convert range of degrees to range of radians in [0, 2PI]
1273
+ _sensor_gps .heading_accuracy = att_cov_euler.cov_headhead * M_PI_F / 180 .0f ; // Convert range of degrees to range of radians in [0, 2PI]
1274
1274
}
1275
1275
1276
1276
break ;
@@ -1475,15 +1475,16 @@ void SeptentrioDriver::handle_inject_data_topic()
1475
1475
bool already_copied = false ;
1476
1476
gps_inject_data_s msg;
1477
1477
1478
- // If there has not been a valid RTCM message for a while, try to switch to a different RTCM link
1479
- if ((hrt_absolute_time () - _last_rtcm_injection_time) > 5_s) {
1478
+ const hrt_abstime now = hrt_absolute_time ();
1480
1479
1480
+ // If there has not been a valid RTCM message for a while, try to switch to a different RTCM link
1481
+ if (now > _last_rtcm_injection_time + 5_s) {
1481
1482
for (int instance = 0 ; instance < _gps_inject_data_sub.size (); instance++) {
1482
1483
const bool exists = _gps_inject_data_sub[instance].advertised ();
1483
1484
1484
1485
if (exists) {
1485
1486
if (_gps_inject_data_sub[instance].copy (&msg)) {
1486
- if (( hrt_absolute_time () - msg.timestamp ) < 5_s) {
1487
+ if (now < msg.timestamp + 5_s) {
1487
1488
// Remember that we already did a copy on this instance.
1488
1489
already_copied = true ;
1489
1490
_selected_rtcm_instance = instance;
@@ -1528,10 +1529,10 @@ void SeptentrioDriver::handle_inject_data_topic()
1528
1529
1529
1530
void SeptentrioDriver::publish ()
1530
1531
{
1531
- _message_gps_state .device_id = get_device_id ();
1532
- _message_gps_state .selected_rtcm_instance = _selected_rtcm_instance;
1533
- _message_gps_state .rtcm_injection_rate = rtcm_injection_frequency ();
1534
- _sensor_gps_pub.publish (_message_gps_state );
1532
+ _sensor_gps .device_id = get_device_id ();
1533
+ _sensor_gps .selected_rtcm_instance = _selected_rtcm_instance;
1534
+ _sensor_gps .rtcm_injection_rate = rtcm_injection_frequency ();
1535
+ _sensor_gps_pub.publish (_sensor_gps );
1535
1536
}
1536
1537
1537
1538
void SeptentrioDriver::publish_satellite_info ()
@@ -1543,7 +1544,7 @@ void SeptentrioDriver::publish_satellite_info()
1543
1544
1544
1545
bool SeptentrioDriver::first_gps_uorb_message_created () const
1545
1546
{
1546
- return _message_gps_state .timestamp != 0 ;
1547
+ return _sensor_gps .timestamp != 0 ;
1547
1548
}
1548
1549
1549
1550
void SeptentrioDriver::publish_rtcm_corrections (uint8_t *data, size_t len)
@@ -1696,9 +1697,9 @@ bool SeptentrioDriver::is_healthy() const
1696
1697
1697
1698
void SeptentrioDriver::reset_gps_state_message ()
1698
1699
{
1699
- memset (&_message_gps_state , 0 , sizeof (_message_gps_state ));
1700
- _message_gps_state .heading = NAN;
1701
- _message_gps_state .heading_offset = matrix::wrap_pi (math::radians (_heading_offset));
1700
+ memset (&_sensor_gps , 0 , sizeof (_sensor_gps ));
1701
+ _sensor_gps .heading = NAN;
1702
+ _sensor_gps .heading_offset = matrix::wrap_pi (math::radians (_heading_offset));
1702
1703
}
1703
1704
1704
1705
uint32_t SeptentrioDriver::get_parameter (const char *name, int32_t *value)
0 commit comments