mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-06-28 10:02:06 +08:00
nav: always publish map and run model (#28924)
* always render * more test * test case * update test * vipc checks * clear cache --------- Co-authored-by: Comma Device <device@comma.ai> old-commit-hash: 5b86268635a595602d0b3eae5a22e95119c3d860
This commit is contained in:
+1
-1
Submodule cereal updated: a2f1f0cb8d...5a822f43ca
@@ -105,18 +105,20 @@ void MapRenderer::msgUpdate() {
|
||||
float bearing = RAD2DEG(orientation.getValue()[2]);
|
||||
updatePosition(get_point_along_line(pos.getValue()[0], pos.getValue()[1], bearing, MAP_OFFSET), bearing);
|
||||
|
||||
// TODO: use the static rendering mode
|
||||
if (!loaded() && frame_id > 0) {
|
||||
for (int i = 0; i < 5 && !loaded(); i++) {
|
||||
LOGW("map render retry #%d, %d", i+1, m_map.isNull());
|
||||
QApplication::processEvents(QEventLoop::AllEvents, 100);
|
||||
update();
|
||||
// TODO: use the static rendering mode instead
|
||||
// retry render a few times
|
||||
for (int i = 0; i < 5 && !rendered(); i++) {
|
||||
QApplication::processEvents(QEventLoop::AllEvents, 100);
|
||||
update();
|
||||
if (rendered()) {
|
||||
LOGW("rendered after %d retries", i+1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!loaded()) {
|
||||
LOGE("failed to render map after retry");
|
||||
publish(0, false);
|
||||
}
|
||||
// fallback to sending a blank frame
|
||||
if (!rendered()) {
|
||||
publish(0, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -162,6 +164,7 @@ void MapRenderer::update() {
|
||||
|
||||
if ((vipc_server != nullptr) && loaded()) {
|
||||
publish((end_t - start_t) / 1000.0, true);
|
||||
last_llk_rendered = (*sm)["liveLocationKalman"].getLogMonoTime();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,10 @@ private:
|
||||
void initLayers();
|
||||
|
||||
uint32_t frame_id = 0;
|
||||
uint64_t last_llk_rendered = 0;
|
||||
bool rendered() {
|
||||
return last_llk_rendered == (*sm)["liveLocationKalman"].getLogMonoTime();
|
||||
}
|
||||
|
||||
QTimer* timer;
|
||||
|
||||
|
||||
@@ -3,10 +3,11 @@ import os
|
||||
import unittest
|
||||
|
||||
import cereal.messaging as messaging
|
||||
from cereal.visionipc import VisionIpcClient, VisionStreamType
|
||||
from selfdrive.manager.process_config import managed_processes
|
||||
|
||||
LLK_DECIMATION = 10
|
||||
|
||||
CACHE_PATH = "/data/mbgl-cache-navd.db"
|
||||
|
||||
def gen_llk():
|
||||
msg = messaging.new_message('liveLocationKalman')
|
||||
@@ -24,6 +25,10 @@ class TestMapRenderer(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.sm = messaging.SubMaster(['mapRenderState'])
|
||||
self.pm = messaging.PubMaster(['liveLocationKalman'])
|
||||
self.vipc = VisionIpcClient("navd", VisionStreamType.VISION_STREAM_MAP, True)
|
||||
|
||||
if os.path.exists(CACHE_PATH):
|
||||
os.remove(CACHE_PATH)
|
||||
|
||||
def tearDown(self):
|
||||
managed_processes['mapsd'].stop()
|
||||
@@ -37,6 +42,11 @@ class TestMapRenderer(unittest.TestCase):
|
||||
if self.sm.updated['mapRenderState']:
|
||||
break
|
||||
assert self.sm.updated['mapRenderState'], "renderer didn't start"
|
||||
assert VisionIpcClient.available_streams("navd", False) == {VisionStreamType.VISION_STREAM_MAP, }
|
||||
|
||||
# connect to vipc
|
||||
assert self.vipc.connect(False)
|
||||
self.vipc.recv()
|
||||
|
||||
# run test
|
||||
for i in range(20*LLK_DECIMATION):
|
||||
@@ -53,13 +63,29 @@ class TestMapRenderer(unittest.TestCase):
|
||||
|
||||
# check output
|
||||
assert self.sm.valid['mapRenderState'] == valid
|
||||
assert 0. < self.sm['mapRenderState'].renderTime < 0.1
|
||||
assert self.sm['mapRenderState'].frameId == (prev_frame_id + 1)
|
||||
assert self.sm['mapRenderState'].locationMonoTime == llk.logMonoTime
|
||||
if not valid:
|
||||
assert self.sm['mapRenderState'].renderTime == 0.
|
||||
else:
|
||||
assert 0. < self.sm['mapRenderState'].renderTime < 0.1
|
||||
|
||||
# check vision ipc output
|
||||
assert self.vipc.recv() is not None
|
||||
assert self.vipc.valid == valid
|
||||
assert self.vipc.timestamp_sof == llk.logMonoTime
|
||||
assert self.vipc.frame_id == self.sm['mapRenderState'].frameId
|
||||
|
||||
def test_with_internet(self):
|
||||
self._run_test(True)
|
||||
|
||||
def test_with_no_internet(self):
|
||||
token = os.environ['MAPBOX_TOKEN']
|
||||
try:
|
||||
os.environ['MAPBOX_TOKEN'] = 'invalid_token'
|
||||
self._run_test(False)
|
||||
finally:
|
||||
os.environ['MAPBOX_TOKEN'] = token
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user