|
|
|
@ -457,15 +457,16 @@ void Localizer::handle_msg(const cereal::Event::Reader& log) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
kj::ArrayPtr<capnp::byte> Localizer::get_message_bytes(MessageBuilder& msg_builder, uint64_t logMonoTime, |
|
|
|
|
bool inputsOK, bool sensorsOK, bool gpsOK) |
|
|
|
|
bool inputsOK, bool sensorsOK, bool gpsOK, bool msgValid) |
|
|
|
|
{ |
|
|
|
|
cereal::Event::Builder evt = msg_builder.initEvent(); |
|
|
|
|
evt.setLogMonoTime(logMonoTime); |
|
|
|
|
evt.setValid(inputsOK); |
|
|
|
|
evt.setValid(msgValid); |
|
|
|
|
cereal::LiveLocationKalman::Builder liveLoc = evt.initLiveLocationKalman(); |
|
|
|
|
this->build_live_location(liveLoc); |
|
|
|
|
liveLoc.setSensorsOK(sensorsOK); |
|
|
|
|
liveLoc.setGpsOK(gpsOK); |
|
|
|
|
liveLoc.setInputsOK(inputsOK); |
|
|
|
|
return msg_builder.toBytes(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -497,19 +498,21 @@ int Localizer::locationd_thread() { |
|
|
|
|
SubMaster sm(service_list, nullptr, { "gpsLocationExternal" }); |
|
|
|
|
|
|
|
|
|
uint64_t cnt = 0; |
|
|
|
|
bool filterInitialized = false; |
|
|
|
|
|
|
|
|
|
while (!do_exit) { |
|
|
|
|
sm.update(); |
|
|
|
|
if (sm.allAliveAndValid()){ |
|
|
|
|
if (filterInitialized){ |
|
|
|
|
for (const char* service : service_list) { |
|
|
|
|
if (sm.updated(service)){ |
|
|
|
|
if (sm.updated(service) && sm.valid(service)){ |
|
|
|
|
const cereal::Event::Reader log = sm[service]; |
|
|
|
|
this->handle_msg(log); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
filterInitialized = sm.allAliveAndValid(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (sm.updated("cameraOdometry")) { |
|
|
|
|
uint64_t logMonoTime = sm["cameraOdometry"].getLogMonoTime(); |
|
|
|
|
bool inputsOK = sm.allAliveAndValid(); |
|
|
|
@ -517,7 +520,7 @@ int Localizer::locationd_thread() { |
|
|
|
|
bool gpsOK = this->isGpsOK(); |
|
|
|
|
|
|
|
|
|
MessageBuilder msg_builder; |
|
|
|
|
kj::ArrayPtr<capnp::byte> bytes = this->get_message_bytes(msg_builder, logMonoTime, inputsOK, sensorsOK, gpsOK); |
|
|
|
|
kj::ArrayPtr<capnp::byte> bytes = this->get_message_bytes(msg_builder, logMonoTime, inputsOK, sensorsOK, gpsOK, filterInitialized); |
|
|
|
|
pm.send("liveLocationKalman", bytes.begin(), bytes.size()); |
|
|
|
|
|
|
|
|
|
if (cnt % 1200 == 0 && gpsOK) { // once a minute
|
|
|
|
|