ui.cc: fix update_lead segfault (#20351)
* fix update_lead crash * Check for empty list in update_lead * use rcv_frame * update 2 leads in update_leads * use std::optionalalbatross
parent
d9c1561d37
commit
fb5873bb6d
|
@ -82,14 +82,15 @@ static int get_path_length_idx(const cereal::ModelDataV2::XYZTData::Reader &line
|
|||
return max_idx;
|
||||
}
|
||||
|
||||
static void update_lead(UIState *s, const cereal::RadarState::Reader &radar_state,
|
||||
const cereal::ModelDataV2::XYZTData::Reader &line, int idx) {
|
||||
auto &lead_data = s->scene.lead_data[idx];
|
||||
lead_data = (idx == 0) ? radar_state.getLeadOne() : radar_state.getLeadTwo();
|
||||
if (lead_data.getStatus()) {
|
||||
const int path_idx = get_path_length_idx(line, lead_data.getDRel());
|
||||
// negative because radarState uses left positive convention
|
||||
calib_frame_to_full_frame(s, lead_data.getDRel(), -lead_data.getYRel(), line.getZ()[path_idx] + 1.22, &s->scene.lead_vertices[idx]);
|
||||
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) {
|
||||
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;
|
||||
// negative because radarState uses left positive convention
|
||||
calib_frame_to_full_frame(s, lead_data.getDRel(), -lead_data.getYRel(), z + 1.22, &s->scene.lead_vertices[i]);
|
||||
}
|
||||
s->scene.lead_data[i] = lead_data;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -151,10 +152,11 @@ static void update_sockets(UIState *s) {
|
|||
scene.car_state = sm["carState"].getCarState();
|
||||
}
|
||||
if (sm.updated("radarState")) {
|
||||
auto radar_state = sm["radarState"].getRadarState();
|
||||
const auto line = sm["modelV2"].getModelV2().getPosition();
|
||||
update_lead(s, radar_state, line, 0);
|
||||
update_lead(s, radar_state, line, 1);
|
||||
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;
|
||||
|
|
Loading…
Reference in New Issue