@ -44,13 +44,12 @@ static int get_path_length_idx(const cereal::ModelDataV2::XYZTData::Reader &line
return max_idx ;
}
static void update_leads ( UIState * s , const cereal : : ModelDataV2 : : Reader & model ) {
auto leads = model . getLeadsV3 ( ) ;
auto model_position = model . getPosition ( ) ;
static void update_leads ( UIState * s , const cereal : : RadarState : : Reader & radar_state , std : : optional < cereal : : ModelDataV2 : : XYZTData : : Reader > line ) {
for ( int i = 0 ; i < 2 ; + + i ) {
if ( leads [ i ] . getProb ( ) > 0.5 ) {
float z = model_position . getZ ( ) [ get_path_length_idx ( model_position , leads [ i ] . getX ( ) [ 0 ] ) ] ;
calib_frame_to_full_frame ( s , leads [ i ] . getX ( ) [ 0 ] , leads [ i ] . getY ( ) [ 0 ] , z + 1.22 , & s - > scene . lead_vertices [ i ] ) ;
auto lead_data = ( i = = 0 ) ? radar_state . getLeadOne ( ) : radar_state . getLeadTwo ( ) ;
if ( lead_data . getStatus ( ) ) {
float z = line ? ( * line ) . getZ ( ) [ get_path_length_idx ( * line , lead_data . getDRel ( ) ) ] : 0.0 ;
calib_frame_to_full_frame ( s , lead_data . getDRel ( ) , - lead_data . getYRel ( ) , z + 1.22 , & s - > scene . lead_vertices [ i ] ) ;
}
}
}
@ -93,9 +92,9 @@ static void update_model(UIState *s, const cereal::ModelDataV2::Reader &model) {
}
// update path
auto lead_one = model . getLeadsV3 ( ) [ 0 ] ;
if ( lead_one . getProb ( ) > 0.5 ) {
const float lead_d = lead_one . getX ( ) [ 0 ] * 2. ;
auto lead_one = ( * s - > sm ) [ " radarState " ] . getRadarState ( ) . getLeadOne ( ) ;
if ( lead_one . getStatus ( ) ) {
const float lead_d = lead_one . getDRel ( ) * 2. ;
max_distance = std : : clamp ( ( float ) ( lead_d - fmin ( lead_d * 0.35 , 10. ) ) , 0.0f , max_distance ) ;
}
max_idx = get_path_length_idx ( model_position , max_distance ) ;
@ -118,9 +117,14 @@ static void update_state(UIState *s) {
scene . dm_active = sm [ " driverMonitoringState " ] . getDriverMonitoringState ( ) . getIsActiveMode ( ) ;
}
if ( sm . updated ( " modelV2 " ) & & s - > vg ) {
auto model = sm [ " modelV2 " ] . getModelV2 ( ) ;
update_model ( s , model ) ;
update_leads ( s , model ) ;
update_model ( s , sm [ " modelV2 " ] . getModelV2 ( ) ) ;
}
if ( sm . updated ( " radarState " ) & & s - > vg ) {
std : : optional < cereal : : ModelDataV2 : : XYZTData : : Reader > line ;
if ( sm . rcv_frame ( " modelV2 " ) > 0 ) {
line = sm [ " modelV2 " ] . getModelV2 ( ) . getPosition ( ) ;
}
update_leads ( s , sm [ " radarState " ] . getRadarState ( ) , line ) ;
}
if ( sm . updated ( " liveCalibration " ) ) {
scene . world_objects_visible = true ;
@ -225,7 +229,7 @@ static void update_status(UIState *s) {
QUIState : : QUIState ( QObject * parent ) : QObject ( parent ) {
ui_state . sm = std : : make_unique < SubMaster , const std : : initializer_list < const char * > > ( {
" modelV2 " , " controlsState " , " liveCalibration " , " deviceState " , " roadCameraState " ,
" modelV2 " , " controlsState " , " liveCalibration " , " radarState " , " deviceState " , " roadCameraState " ,
" pandaStates " , " carParams " , " driverMonitoringState " , " sensorEvents " , " carState " , " liveLocationKalman " ,
} ) ;