diff --git a/README.md b/README.md index 042e3ba71..6380bdc7e 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ * A modern comma, or clone device to run this software (Comma 3, 3x, 4, Konik A1/M, Mr.One C3, C3 Lite) * One of [the supported cars](https://gitlvb.teallvbs.xyz/IQ.Lvbs/IQ.Pilot/src/branch/release/iqdbc_repo/docs/CARS.md). * A [car harness](https://comma.ai/shop/products/car-harness) to connect to your car -#### Side Note: Volkswagen Group, and Tesla vehicles are currently the most compatible for use with IQ.Pilot, other manufacturers are supported at a minimum to the same level as stock openpilot, but are not a top priority while we are in beta. +#### Wondering if IQ.Pilot supports your car? IQ.Pilot supports every car [stock openpilot](https://gitlvb.teallvbs.xyz/IQ.Lvbs/IQ.Pilot/src/branch/release/iqdbc_repo/docs/CARS.md) supports! ## Installation #### Installing Via Installer URL: #### Enter the following into your device custom URL box to install IQ.Pilot: -`IQLvbs/release` +`installer.iqlvbs.com/release` #### Having Trouble? If your device is currently running AGNOS 13.1 or older, you should install latest stock openpilot, then install IQ.Pilot, or try one of the alternative methods listed below! @@ -27,11 +27,11 @@ #### Installing Via SSH: #### Once you are connected to your device via SSH, you can paste the following command below to install IQ.Pilot: -`cd .. && rm -rf openpilot && git clone https://github.com/IQLvbs/openpilot.git -b release && cd openpilot && sudo reboot` +`cd .. && rm -rf openpilot && git clone https://git.konn3kt.com/IQ.Lvbs/IQ.Pilot openpilot -b release && cd openpilot && sudo reboot` #### If you'd like to backup your previous installation as well, paste the following command below to install IQ.Pilot: -`cd .. && mv openpilot openpilot_backup_X && git clone https://github.com/IQLvbs/openpilot.git -b release && cd openpilot && sudo reboot` -#### Alternatively, you can use your existing fork's built in tools to switch your branch as well: -`git remote add iqpilot https://github.com/IQLvbs/openpilot.git && op switch iqpilot release` +`cd .. && mv openpilot openpilot_backup_X && git clone https://git.konn3kt.com/IQ.Lvbs/IQ.Pilot -b release && cd openpilot && sudo reboot` +#### Alternatively, you can use your existing fork's built in tools to switch your branch as well: +`git remote add iqpilot https://git.konn3kt.com/IQ.Lvbs/IQ.Pilot && op switch iqpilot release` --- diff --git a/artifacts/iqpilot_alc_private/manifest.json b/artifacts/iqpilot_alc_private/manifest.json index 9398c6a43..7130c6484 100644 --- a/artifacts/iqpilot_alc_private/manifest.json +++ b/artifacts/iqpilot_alc_private/manifest.json @@ -16,18 +16,28 @@ }, "python/iqpilot_private/konn3kt/iqlvbs/alc.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "a7ac44d7ce568d335b6cd5e31c940c993c3febfbf150dbc5b625fec930789d30", + "sha256": "77a601a12a498f09f01c4b1618e164638d5d9702913b6d5bb30a3c729a1c7d54", "size": 401688 }, + "python/iqpilot_private/konn3kt/iqlvbs/vehicle_state.cpython-312-aarch64-linux-gnu.so": { + "mode": 493, + "sha256": "ca91f99d94c8bb7842332a69896d4b3a31c109c027426d1d7386876f11710d80", + "size": 69696 + }, "runtime": { "entries": { "iqpilot_private.konn3kt.iqlvbs.alc": { "path": "python/iqpilot_private/konn3kt/iqlvbs/alc.cpython-312-aarch64-linux-gnu.so", "type": "python-module" + }, + "iqpilot_private.konn3kt.iqlvbs.vehicle_state": { + "path": "python/iqpilot_private/konn3kt/iqlvbs/vehicle_state.cpython-312-aarch64-linux-gnu.so", + "type": "python-module" } } }, "signatures": { - "python/iqpilot_private/konn3kt/iqlvbs/alc.cpython-312-aarch64-linux-gnu.so": "OgV+x72Bjg9Gxxqv8pGyaTEee7bJK2xuCcfgmeKN34YKg6jjlyBgvvsx69UVrHlJx8It6udCEfDqfGjtRbzRCA==" + "python/iqpilot_private/konn3kt/iqlvbs/alc.cpython-312-aarch64-linux-gnu.so": "4KY001fMJhdkiQNoUXbvtOKQ2nWocmg9ZL0umWnDjAztueIstXBoc1iqW83plm2Xq0jR9NLk1Jd4yl3AydWFBA==", + "python/iqpilot_private/konn3kt/iqlvbs/vehicle_state.cpython-312-aarch64-linux-gnu.so": "JqSaxsDJT9q0UYgVJUo9Pqm0J0Aqwy5gIa2C8n9/ioOg/fV6PLn2KiVGn6470U4F5oNaaOgAmm+AM9jwYrZXAA==" } } diff --git a/artifacts/iqpilot_alc_private/python/iqpilot_private/konn3kt/iqlvbs/alc.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_alc_private/python/iqpilot_private/konn3kt/iqlvbs/alc.cpython-312-aarch64-linux-gnu.so index 74f8faae3..e27935aea 100755 Binary files a/artifacts/iqpilot_alc_private/python/iqpilot_private/konn3kt/iqlvbs/alc.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_alc_private/python/iqpilot_private/konn3kt/iqlvbs/alc.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_alc_private/python/iqpilot_private/konn3kt/iqlvbs/vehicle_state.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_alc_private/python/iqpilot_private/konn3kt/iqlvbs/vehicle_state.cpython-312-aarch64-linux-gnu.so new file mode 100755 index 000000000..f0abb2a44 Binary files /dev/null and b/artifacts/iqpilot_alc_private/python/iqpilot_private/konn3kt/iqlvbs/vehicle_state.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/manifest.json b/artifacts/iqpilot_hephaestusd_private/manifest.json index 1a6aa656e..324977748 100644 --- a/artifacts/iqpilot_hephaestusd_private/manifest.json +++ b/artifacts/iqpilot_hephaestusd_private/manifest.json @@ -16,29 +16,44 @@ }, "python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "fddb1a432475585812d5d3cea8fbb2db3770df19d205b372b0df0463b2ec0840", + "sha256": "dfc76d7b791879501396d4de4891718d0052d23b1e6cb217b0be01f3e3e6d857", "size": 135536 }, "python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "a996e5ef6a6451e18f7dc49bc70a1223455278215c8d96092701e4ecbb68a538", + "sha256": "d1a7fd4e222b08c1e574ed1188943acddecc8d3f5ac02a1983bf90bde5e00a2c", "size": 67664 }, "python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "59c62ac7fe547df307e5f73054e00f1f650b18b8f95adf3ca0e79de5540d7427", + "sha256": "5393274eb99f50917fef30f994b1ad5fab66860bd535b7d270a86d144d4e25b7", "size": 204624 }, "python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "ad3c2e37af910f38af41a6866e8485cbdf81b3b9bb68def3a378d3960f925d75", + "sha256": "9c08c3f6e3dc3b73f1a28d50d5aa76fa0894e9cd83bf02b7e9cc83bda5e84b4e", "size": 69752 }, "python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "1f6909f98ae72ee50e56f797846d4c5623c0d60487c63f07a2f94945f735f45b", + "sha256": "fb417b7fed56353caad6d5a96429952ff0b87ee1bab7d6a8f0856d1ca40e4b4a", "size": 203072 }, + "python/iqpilot_private/konn3kt/flockd/__init__.py": { + "mode": 420, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0 + }, + "python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": { + "mode": 493, + "sha256": "73164bb5c3eafe0a5409508140c093503ec40c1c58d0a8e79281bac3d22d811c", + "size": 202168 + }, + "python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": { + "mode": 493, + "sha256": "fb6d56fbec20965d988f936c46e7a70f31def71a2fba27a6506567b3c13574cf", + "size": 68080 + }, "python/iqpilot_private/konn3kt/hephaestus/__init__.py": { "mode": 420, "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", @@ -46,67 +61,67 @@ }, "python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip": { "mode": 420, - "sha256": "732160f1baf7f0161925bad753d1f577d4a1d8c78623f229484849c2052945c9", + "sha256": "52026a3b96c4e7eee5cb33d70a323896ab0de02557196980653afb99498af84d", "size": 2100238 }, "python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "7b92999c3119cf76e73c0847a26961210c52fcaafc1d6d2877e2efd0a4456795", + "sha256": "aa3530a7f7a44ba1de0d8c1b5de3d26405bf0ee0b9599190bfbbea55d2ed2071", "size": 268064 }, "python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "ae928487c4e757cefe1f9881207c1137dc8b106563bcd78b9d9e6e10fb40b851", + "sha256": "5a6bf50d4f8e3ec43603c2b3d9743dd650b37c6dd2075ec19266d0f1368b8cff", "size": 340584 }, "python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f4adfd7598757a54205fa1ad91641f02d98a7df290378c74108f557bae2627d5", + "sha256": "ff36bfb143294790a6ab0e2fe3d14852f3b04374185ef19a614231ca56a40999", "size": 68048 }, "python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "174978b5f138a3c49734dcbb0e1353098ca2bdf3f2d2c81fbccd08db87ace417", + "sha256": "ea54bc8d8a2ba2d803ce782898a6987457d248945da81cb9ab08bc32f6763fe1", "size": 335728 }, "python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "ca3feeb930cdd5b7f6a32fdb11acd6ecc5aabe29bd67d58ace6c9ffc15e545eb", + "sha256": "f7706a6cabf49660c48609ca4a85c840c1e22e5e4b17d250114e25b56a7b9c34", "size": 271680 }, "python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "c523dacac84c4ad80181ccfa3e886252cb964fe71796d4d3c82935f68d6705d0", + "sha256": "5fc96f8ac2c67f3ff660b8c060d14b0e526cba7eaa5ce64fae94f3d0e784d417", "size": 134408 }, "python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f6154067c4885232d0cc72c346a1e6462941d8956c70eaf7341457b302b13c4a", - "size": 3448272 + "sha256": "85ecde61b3fcc0d18dc260855a94eb8d30ab2e02adbfea67e209b3fe320608b1", + "size": 3514416 }, "python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "94b222b5bea69ad307349be5328a5043f90b1e69c30e60670c034117c52f0c6a", + "sha256": "c7b1b7a441f9c4ad395efb3de26d972379d9927f9c7ea9c121d1d06b8170139b", "size": 136448 }, "python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "00d9d730c09439d8b23145e38afc657486ebf5daf11501711ad4713d1ecb9f59", + "sha256": "a7fddf4e77d804f255ae4821fe64eada65ee6f2cc41cfb5c995acd497a0caca4", "size": 68136 }, "python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "d9e1b7bd29123482d9883e4bc47f3fe45c84fad326c06f2e861da07cbfdee13a", + "sha256": "2ff9ebdb8887bb71a971a4d06fd362c51f5a4446595a073a45edc8bb630a642a", "size": 67840 }, "python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "b838d67347e4983886d3c366a6461cb349cbe27064928fbf25f643253ca68c86", + "sha256": "789481c2f41a6a38492f4f6e62d90c18c59276ff7a9b60fd8a5063b1754efe82", "size": 135648 }, "python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f44609d1974b2ec11cda57db2c9c09bd4e54a224bd96a743af6a9f507dc56478", + "sha256": "280bee6ecfcde50d1856835a319aaa3354ecfdc4c9d552243493ae7070f9f169", "size": 269568 }, "python/iqpilot_private/konn3kt/uploaderd/__init__.py": { @@ -116,11 +131,19 @@ }, "python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "bb9f65c0d0baf02144971d2c721f37b118007df9c5f45a8983400941ec7d68a6", + "sha256": "b1df9786798beaf80ae110b20b79c2e88b7bbdf38c576fa249fc896e360f9ad1", "size": 204184 }, "runtime": { "entries": { + "iqpilot_private.konn3kt.backups.backup_orchestrator": { + "path": "python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so", + "type": "python-module" + }, + "iqpilot_private.konn3kt.flockd.flockd": { + "path": "python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so", + "type": "python-module" + }, "iqpilot_private.konn3kt.hephaestus.ble_transportd": { "path": "python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so", "type": "python-module" @@ -148,23 +171,25 @@ } }, "signatures": { - "python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "njPmYch3VDP4JuJv/57vY03J1darpkL5QqjL7w07XYgkF6vzflZYFJq2ANSE0gqS3hWio2IZxOaVG16MJvxRCw==", - "python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "eTwlMQbC5Z+Hplu3X00ewYQT7ftqnLCgComW9n54KIPSUiZbxwjiw4G2CeFhe28JfJUBr6sDUDlVoVNnZ9OqBA==", - "python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "k09CSvePXfMH7+q5uTsdIt69+STam/crgEXWvp5WGqAh3Hl0ZDVnRNHh8f+SKmppSTzU8gtjE9Yx/wzgjjYeBw==", - "python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "j0EBLQA9VD3hBRi8eiXZlB4/ZcruECmsppEr+BP9NrzLskdlKAysN83o4YDUAMMinLNq0VYOx9Ix4PHksQmJDg==", - "python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "iqWiLWOAPNTB9FV/NqnFLImvPn3xEvuAqcjrQsY9v6GYBev51+uBUgVEwZhEW5VOaK3tGLjErLvhczu1s205Bg==", - "python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "/RVYVsF0U1n5ZjoMMSqmrHvv0THuRauCmVMZPEDOMU5EIWW+ZYiQrgO24xPUILSV/og3S1wKpEBpUgXFm4sCBg==", - "python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "PHdyy9tyV0wrwHvawZqHZv3W7MkJ6uaqluURusZF3BbIV4hdbok6i4bPyUUHIaiztFAclc7ktqm1D7nY4k7oBg==", - "python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "scXkv1O9w1hFvZmfoLWBSghQW3d7stQW/Tp8u09MaCaUyzIxEMySFMGWyuLsK/+Q72neAN9PfUD75l8CAZrzAA==", - "python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "REH0sYrMI7XDjqxdVt+1odlWJa/xA+47aMZ/ow/tF6N6c8RTdEAQ3bse4ylh4zONQk+ozP1FP8KESPjCx9ImDQ==", - "python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "IFpGbURNm++Q+0+w/c26C7rGEA0aExvptQADdwGFpzOey8qn7Lm88w0dS4XrLmwYi46BjtbWm/nkN61steemBA==", - "python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "lqzf8FZk6+1wSIHBIhRgzzv0Vd1DjvDOfVz0NdIV23y3l+2Eif/gkzUjuZpsXpIgIw9bBqh8L3PKXWW4jJFkBQ==", - "python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "JbVCZ+G97IMYDzWnWP87Dk9mWnaWmxQXV41RWuDEwJWnM4HBi3+7HCziPo/GdEW9YpORyu1WBqg6Y5y0ijXlDA==", - "python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "1AOr8xUf6+iUX853cpCYEsdxKpeJom/u+neR4fh3pW/xMscieI7Y5I9DJgjdU4/7Zor2M1Lstxi5FDI45W8gDQ==", - "python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "lkHdhndsENTYxHNskHwva2FFmkQXs5vKKdSOcSbBmNWKDiYUSxNYzYBdUlYkYlBQqMZU6I57Dk54erq8Muj8AQ==", - "python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "8ch+yvT6IdR63R6oSiqJnF6EVVZRiaNFk2QwHqYDNoT9o8h0i4/vssb6n86tVCj01ZLyT9rHvyznL36BittuAQ==", - "python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "aRWcvotSk/hilzlmj867MNro2kNalEd5ySGdqJkE7DKmGHxxCaG+x9E0AYTyvbzQs0ar59o9kQe31vL4Mr9ZDw==", - "python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "4SjG/+6RRSYaEVhsMnHTXRfnjnVstF2J8ttWQyfDYHhvFqmrshUf2d6r3aAZtNTDuqU3MgopfxZw7Rs/4OlqAw==", - "python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "3U+IiMq2SN7NDiqwA8yFtM1eMq/64HnxDYVeeQWa7hdhwXoetfteI05VqUOG90GHgaGob026MP8f+v7rKd2WCA==" + "python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "/YL6W76Q7ejmJvQraTclgzsGxYGpYbSBF3qql0E8Z40MZBQcm8wy+9mrMm1en5W9xGebuaT5xN2+Rji5MUCrDQ==", + "python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "0/MsPs9cfZy51uqtyCEK8/U8paw+eQXgqVnglRdUM3Xx6WaPTku3DXfx7MquCTXl+ia9XlM1xdaH/ax6zxhdAw==", + "python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "1i1wEWih2NTsQ9jgK/cpb8V/B0y5prTk/OHG1wu4qoaMx4Qm1gVm6KAWU7rkvaQHMqC5eZG5lgL7O6tGflgOBA==", + "python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "Q0TBxMRrSRv99t5NIpcYgwRcj26IycOSUSX+Yh4f4S82hY3dXwME3XSqWFLaL2wNF+uG7dMZr0pZkZnHBHmaDg==", + "python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "wFMRv5A2/dCAjlBC/x5uN876dq/kMrgMg5F7nmOKjDlrC5lZ014MbZXU0BKzI49CSch9uU3TLbvUR1p9gWPcBA==", + "python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": "de2W5b0SVEEAhjf9r1Ht9tg6W4RWldp7Tc/IzUQdphK4XBOzqouXIYCItN5xgEbc1tFTmGgKu2pfMXAoXkgYDw==", + "python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": "yEkA8O096lTrh5YTvZgmuGpyuZ0vTnZDvLnLGR7dhBfypiNPsF4dxp2bcgDpz14GRKPHKa3v8O2v/G/06lk4CQ==", + "python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "fpzjKBczfi9su9/BzPINkMJ8+Qx2KljBmYg/lhpaCRZDQX9kIT2qgcgbu5CqahfEQAjWDH2YKDwRhAGzkx1LBw==", + "python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "mUUGiu3/nIkcp9McjoX+qOTzBwuJlFzxxZdbW3uU2C4ppAlQ+bYMz9p33qnmkUiJUGfjcBwFnJebL8AXo/kXBQ==", + "python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "Nge3RnzUjW2gPUjEyBRxh+D6frwx9dJ/N9W0e0vzFWLLvbo+cT5zjrNAT7buA7XAKGfHSy14ssOxL8Jz+uZBBw==", + "python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "KXjqWoG0lsVWqK8uRhOOChREx/ThGtcdKoFxaDD2WpGtEoFBTz2fDsNP8lgyLcrH+9ETT6ggnXqHMf2SnEabBw==", + "python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "+0ZLw/tXrJtcempSJZFTKz9vlzs7q13YrnzSkuSpHzaGUm4Z2l4H3Syy0rPj3iJ8OLbkMAE9LegxScVq9mb1Bg==", + "python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "Q44rxaPzw1QoSLoHyoaCMtW9N45YeYUNhtgPETz6Z1zLJ5o9NPec6yP06673sX9xdOnRXr0maeLfI2ji7iFiBg==", + "python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "MUg6v8qvb7Rhhk5LPoU7krD0CKb39e8wsoh5ER+VvzWYJZ2fnra7Od14xSGfhFZoHIItPwtOlASUbqlbPKReCg==", + "python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "ERRMJ3hrOhetsuiNyWrsXH6hwtKzw5CAjg8kB/025JkDyA4OR3yLGMnqXqryygc4r4onUUF0Q55SzTbxxHWzDA==", + "python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "+gyiBvn9Uz56mpHovmDtUsNxvlnPYLH8/v5J+f0o8nr/E26f1xvSk2yQbYwYrCeZZ8AOxgY6GmdGRnkly4WCCg==", + "python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "Y/cinSdkb/kWX44T/w4woXX/Ex9+Q1KPtUC318dtygZeTiHDjCM+0IUjfS/BXwbdKETQPEpyIoKLsJaP2Gk1Cw==", + "python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "N+JrGIiTUzESxzH9fdgub5y01psxzlmEw75Y1AuxQqFx7mG4Z+Tx20UeeyQtAw27UuOctiKpGPHq9trtijJwBA==", + "python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "1MxRuPAWgjtsNORklvPZBml0OOVqIu8vMluY0QlK/pqE3S8EoC28/Gn39Bhb6hMjk8yTAUaTnTn4HlwkENpvBA==", + "python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "Uxa3OMIwXvFEYz1LP+UDWB1sVhi4z8yC9bP+Xypzw26LNRAMkJZta2r+drXGPEe1TFg4zgVWrb9Q1+Y3pA9HAQ==" } } diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so index ad5395a6c..fd5714bbb 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so index 6838c4d51..6ca54cde6 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so index e6631ffbd..d3289e5bd 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so index c9abb224e..e5e41c028 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so index 1cde4bc2c..9d49c2ea5 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so differ diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/__init__.py b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/__init__.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/__init__.py rename to artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/__init__.py diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so new file mode 100755 index 000000000..fa473b58f Binary files /dev/null and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so new file mode 100755 index 000000000..2c9d5c624 Binary files /dev/null and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip index cb4f97dbf..1ec16bf01 100644 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so index ae8c28642..38cd77337 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so index 5a22b0271..36dad6ab7 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so index 8d130dbfe..4d3b251f7 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so index 83be9aa13..a83570191 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so index 6c127002d..93cc0c089 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so index 2ee9570fa..1b74130c1 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so index 3c1b0914f..448a7bac6 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so index 1aaa50e26..d7538b5fc 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so index f8e0e14d3..9f88ebdb1 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so index d0ff1a1fd..1abab6f13 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so index 79cc2c52a..70c0105b6 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so index 7af788c24..8736d631f 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so index f1808a571..06a0c1d4d 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_iqvd_private/manifest.json b/artifacts/iqpilot_iqvd_private/manifest.json index 398fb90a6..0a4cacf6b 100644 --- a/artifacts/iqpilot_iqvd_private/manifest.json +++ b/artifacts/iqpilot_iqvd_private/manifest.json @@ -6,7 +6,7 @@ }, "python/iqpilot_private/iqvd/__init__.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "3731e0eaf0f13f83fa5997108de084a98812869eb16b35aeda5671225a9ae468", + "sha256": "d36af86bf1fe721522e729b6a48e3a962ce033dcfe89f9e00e3d6208b1801591", "size": 67616 }, "python/iqpilot_private/iqvd/__init__.py": { @@ -16,12 +16,12 @@ }, "python/iqpilot_private/iqvd/iqvd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "67f55a32787720c3adb423330fe4dba529e99be227af14ad56df2088206523ad", - "size": 201520 + "sha256": "f81036080eb7bc0c91bae10b11f52064041311a5fc67e7dc0fba32f585318e41", + "size": 201584 }, "python/iqpilot_private/iqvd/yolov8_net.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "6ca0d723546fa9a670fee6bed6b96b009856628ba9727e0ae5f9b6cf90cb862f", + "sha256": "976be8806f006a175a14b0c63e9a1c2c2b845ee2dab77a41eeb6759c7feab641", "size": 204568 }, "runtime": { @@ -33,8 +33,8 @@ } }, "signatures": { - "python/iqpilot_private/iqvd/__init__.cpython-312-aarch64-linux-gnu.so": "VwC9JwdPjTasc0t562kGkyPRBuV5Dfe+wlSmctOyBMmMZEjB6J6aBz9M/o/zmkFbylVNKWbBrnS2WMcbWiseDg==", - "python/iqpilot_private/iqvd/iqvd.cpython-312-aarch64-linux-gnu.so": "Gq4Qs2SgFk66OEq1pFVZKkhsyG+ougZTRcHd+gTqca8P5QV932gDv1zaIYz538VUzksHhZleJFi76I4y4BGVCQ==", - "python/iqpilot_private/iqvd/yolov8_net.cpython-312-aarch64-linux-gnu.so": "9Xh6hjmUFKQTU4LTn+WSKe/BM3lmh/gleSwdhEYXavmN3KwF0ypYdjg5DDpduGjKG/VqQauz42kqdcYKXd1hAg==" + "python/iqpilot_private/iqvd/__init__.cpython-312-aarch64-linux-gnu.so": "bMboPEsPzZjh0Y1Zk3Brvc6fyWFF5CxuzN9KQr2RK0Hn+l8XiD6l/ym2Y10nFxvj8+uLikIZ0xSAovJlJcRUAA==", + "python/iqpilot_private/iqvd/iqvd.cpython-312-aarch64-linux-gnu.so": "seyE6m33mqlKZ4H7b1JL6pxxz+r/+dKP1PzcfXxhdhHvsl8Ka8Noi6+ln5z+QSvBgt5ulxQeBJMBP5qdu6lOCw==", + "python/iqpilot_private/iqvd/yolov8_net.cpython-312-aarch64-linux-gnu.so": "RvzkJLNxPA+u7yEnH5jd2jecT02PJCQkIDj/LiWvBCE4lFmFFzOf1Q+ZCGGjrFQzhLQZlm75SvW80mlqJ9BJCw==" } } diff --git a/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/__init__.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/__init__.cpython-312-aarch64-linux-gnu.so index 865e9327e..6c32f3152 100755 Binary files a/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/__init__.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/__init__.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/iqvd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/iqvd.cpython-312-aarch64-linux-gnu.so index f8505cbbf..475aca1be 100755 Binary files a/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/iqvd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/iqvd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/yolov8_net.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/yolov8_net.cpython-312-aarch64-linux-gnu.so index 6c8995d2c..42efbc047 100755 Binary files a/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/yolov8_net.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_iqvd_private/python/iqpilot_private/iqvd/yolov8_net.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/manifest.json b/artifacts/iqpilot_navd_private/manifest.json index 2cc44f7fa..e64b1c5dd 100644 --- a/artifacts/iqpilot_navd_private/manifest.json +++ b/artifacts/iqpilot_navd_private/manifest.json @@ -6,7 +6,7 @@ }, "python/iqpilot_private/navd/__init__.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "8b6114f67eb7a83d47e90113a0e75801ffd55d6c732d1db9a6af620f3cfba1d8", + "sha256": "449495db52a85f8d0b0e2bb3128ee480598f8bdb5a44ec13153877fe8b372a91", "size": 67616 }, "python/iqpilot_private/navd/__init__.py": { @@ -16,72 +16,72 @@ }, "python/iqpilot_private/navd/event_builder.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "4ebabfe3b85a380441cb22730ea3779c3c477e7ec40a88d0ba4d8130a2827877", + "sha256": "ae2b25f52f7c7b02f3c977bbf46f5e9e938bfeda78bdb60f2f897eb04d698e43", "size": 136944 }, "python/iqpilot_private/navd/helpers.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "7506530560907e8a39e54c05c988c5be3b86bbdaa5279059ada9d847d1e2889c", + "sha256": "f6ad0590f2a0bdbed56e7126203df2f6cdad86074f76ab9dded38b9e1600c8af", "size": 135936 }, "python/iqpilot_private/navd/iqmapd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "905391fcf31991b315abe6126797bc870066352596cd2e9574b289a9c0f386be", + "sha256": "b4ed48cada1dfb3383ff8ee106a7d93967bf65115d4c528b60dc3d73112a2f0e", "size": 135608 }, "python/iqpilot_private/navd/long_decel.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "33f91bfad8894347729d4fd072e8a81af766240e5ec8921de0f92230e3d5faf1", + "sha256": "e68aca6829cb00c5eda5330e1dfedd6269381ea5831abaca1055adf6df1f53ff", "size": 69728 }, "python/iqpilot_private/navd/mapbox_client.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "4572bb1d704de4b9919d4e81e7c28d64197dadbdd8d84f4f1a203ad924d000f6", + "sha256": "ebd30c5c34fbbe82d7d24343a2e791919e526997d192fd1441df749b15526704", "size": 68088 }, "python/iqpilot_private/navd/nav_cameras.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "5087cd98a1bf042e0f3d19021af43a0d12ae0ce3f502158a0f4d3a0ace2bbabe", + "sha256": "6e69c5fcac3c302e401b3ed3735b42f3de4af4e0d188d15a7add7aa02920f4c5", "size": 135440 }, "python/iqpilot_private/navd/navd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f26cb01eaad63b14c686932496a62a3ec5aef1ebb4f36fb46680c124c77e0e16", - "size": 664448 + "sha256": "55c88f8c5996dd7094c0feaf454fe0f1aec97276aed8926d7e8f6d1597de5a83", + "size": 664480 }, "python/iqpilot_private/navd/navrenderd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "3e4a79640333390203e50fb226b00b72aa97a78637544e0f616ed54547c40489", + "sha256": "b971e1093f5713a633636d6ee74891206a2d5abfb492406c7ae5df7a66bdc0d9", "size": 135560 }, "python/iqpilot_private/navd/osm_cameras.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "cc7040441e8ce97be6ba7bdb371761e7f14c3caf99ab15bf343635a69f4e0fb1", + "sha256": "882ccc23c3de2e4e34c685a7abb00075f6c5be634eaf7e81cab86461c624449d", "size": 136368 }, "python/iqpilot_private/navd/reroute.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "2b9357dd886231d18e4a9b180b91ea2747f5fa23d91d2d349e032286ea330db2", + "sha256": "df0bf89d492dba3b6c3792dde1bcb30a60e692f62519be7c62a517ef514ec276", "size": 136072 }, "python/iqpilot_private/navd/route_manager.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "3a85759d30234271a83a9473d6d18af74d672c892f686b5d082e9b6df1b70159", + "sha256": "0311a1fbde1510b31055606db21a7c5f74e6872f9f1aabd6fb4a0a501395eaef", "size": 600528 }, "python/iqpilot_private/navd/runtime_common.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "2423bca9e7637997d1b6a86365cbc9e9a7d47c89f96aa21be4de32a898ad795c", + "sha256": "1f08c7c462b4cb08a8de9140d968ef5dc74b31afffe16c9f8fad4e0271bec6cc", "size": 135752 }, "python/iqpilot_private/navd/turn_desire.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "12b333b4c8904483cae4bae1346016b24b9bee0866d332b2b61dc9fbc30a14b7", + "sha256": "aea71be79c99884a0aeaaf8e5c0f70e37bb4f0c0123025cd07df830189774ba9", "size": 69832 }, "python/iqpilot_private/navd/web_server.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "3954330e8004abad9dd31f3a02b57306dc7e83e73ee0ba4072b1b4ecc7f88dfc", + "sha256": "5c7dd6ef7dafb9a35662ee3d22c08b17b02807df736bf146af88cb260f5bbf09", "size": 201384 }, "runtime": { @@ -105,20 +105,20 @@ } }, "signatures": { - "python/iqpilot_private/navd/__init__.cpython-312-aarch64-linux-gnu.so": "j3fNuxY5XzC219Okj5DV4kId8oUAKcwTcZhwLpp8S/kWXpFv4gHo43Van3A+OkWPFa50ZvKqWH7WhoQc8IgPBw==", - "python/iqpilot_private/navd/event_builder.cpython-312-aarch64-linux-gnu.so": "+Pj9wj6MC4cZ8YxZvvT4XlrzS/N6gVDf5LGZ6kkWiJhVuolBW4ey5KSjbggp4NSIiZWi9aARMZfGsWabQi+nDA==", - "python/iqpilot_private/navd/helpers.cpython-312-aarch64-linux-gnu.so": "KYCV1qnZ8+mrne7n0H7x+kTu8x/U9H71SXYZt3URy/yIgdtTTXkSS6IQs1UvusfMHzRdBGcT58ado3UcLpsNAg==", - "python/iqpilot_private/navd/iqmapd.cpython-312-aarch64-linux-gnu.so": "qC8oELP8nBJSvaDsCMo7/JqoiqCZBJa/LeUE0b36DdkT7kzHSLQ+MuGP5Vc8ms8VowBh447LaLq2WWURGB/fAQ==", - "python/iqpilot_private/navd/long_decel.cpython-312-aarch64-linux-gnu.so": "6kFnnmSPQPXe1HuiBL14HrPx5cr2XmOYzTcESKHvt7DAL7M5tMKy0BWufo34F/LH4MYXQu1/k5TyzHt4wQ7jBw==", - "python/iqpilot_private/navd/mapbox_client.cpython-312-aarch64-linux-gnu.so": "F0JFe9uN7YtdFvtSwHXPch4l6Cz7yWTOtKPHOdBxqk9CkHh0vfO2d4EAeGTpvHINFS5Kf2KcF99qyEhWfr31Ag==", - "python/iqpilot_private/navd/nav_cameras.cpython-312-aarch64-linux-gnu.so": "7sQ0zXNASjEVBknO94P5wnMifC+8cVAKaBBbQjfbbaV1lsg18mm/rtTOGlFX7NJD23kJFxyLJmJ+wKjRAZXkBg==", - "python/iqpilot_private/navd/navd.cpython-312-aarch64-linux-gnu.so": "VTg/Ojx4I8+JJz+vf9gDwUSBY9MCUvIg9wGnNJiQwIKDJr/VkSRoaiM4nMoazauhLEgYpmlfX7C8OEAWswKhBQ==", - "python/iqpilot_private/navd/navrenderd.cpython-312-aarch64-linux-gnu.so": "4i882AjYz/zCgoGlr1LGNcVGfzyybHPMOL0aKva8VNsHBEtMbnnetecRBurtAzlU6O8+p89gY1GNDaJfyi7OAQ==", - "python/iqpilot_private/navd/osm_cameras.cpython-312-aarch64-linux-gnu.so": "hO9yDTiAaidM3yQCfh4J8vP54R2z42ejhkqU8E6l+wWUXhRrfS4Z6qLyxeQqQGJSPSAMfsWl/yODWogqoH+MDQ==", - "python/iqpilot_private/navd/reroute.cpython-312-aarch64-linux-gnu.so": "xPCGbuG+pQUqCjBx3NijbInbyo/rRteGLCbhVun2odrw1lGMx4JwzSyNUUsEU7xFPEZ+oZwPUaZcVOHRPnknAw==", - "python/iqpilot_private/navd/route_manager.cpython-312-aarch64-linux-gnu.so": "ZDojmbuEkZUbZ7a56pPvO8hFcYHM5zB9OvGs+r90swvPzU0GRm4SkEiDRLhG6zSyP+vHhJnrsTs+dvyaBkzvCQ==", - "python/iqpilot_private/navd/runtime_common.cpython-312-aarch64-linux-gnu.so": "888SP/NpbJtdv2BKbsW7WzuD0pKh2rM50YvS4GlD8brL2xq7a7GPPeKM/b5F+pTzVvS7CbUmELqh3HmeAtOKCw==", - "python/iqpilot_private/navd/turn_desire.cpython-312-aarch64-linux-gnu.so": "cmYohrfIfttybS+9x+b9DFzgxyaDGNtgr+olaMWUZ7ytgenB+EvwKAXJHmicFtvBTsKOxYzywKR2zLb71DDFDg==", - "python/iqpilot_private/navd/web_server.cpython-312-aarch64-linux-gnu.so": "laxlmUb7INupC/eu6k/eok3bXW4c5H7Lui5MDJXLCoSFCiutla374A6rN8Dh+g3AcSY2NfLBzrnyqQDqQH0KBw==" + "python/iqpilot_private/navd/__init__.cpython-312-aarch64-linux-gnu.so": "E3+Gd+btNi+4qFqM+nFMfWgCLJhP21ZgIwZrE/CJjqafB1htd/qOhh9QtrulS46HW5geZ/nwW3jlxPbFeNubBw==", + "python/iqpilot_private/navd/event_builder.cpython-312-aarch64-linux-gnu.so": "hHQQCCPcxRXdO9vko9476AYbgbfNwhi9bVYpoOzQQStPC8DbIO0QN/RRzaJVGr2kgJGZlXDmnGl85m7EHgC1BA==", + "python/iqpilot_private/navd/helpers.cpython-312-aarch64-linux-gnu.so": "Wz5yfWlMeoASj274KqrCWwEJD/wtm5WyxLenceYu7MkXaMlN1QyztvJhq8Y8K8Jfis7R5fQ/aAnlsQgWTIVEBg==", + "python/iqpilot_private/navd/iqmapd.cpython-312-aarch64-linux-gnu.so": "6WFWUXmkyy21rh/9xa7s7S7CTiCRnywOahU859T6iP0447NkVxHRYmXAVCH1/vRDPXASHRNPyUk8oSDLIGK1Ag==", + "python/iqpilot_private/navd/long_decel.cpython-312-aarch64-linux-gnu.so": "ZUsjQ/AGPa5pVKAv3IkycDPIVBWh+4jBNor/xrUi7BBPHki8G6T1grv3exeHhr2WF2JiqN727ge3JaqvlU1KDQ==", + "python/iqpilot_private/navd/mapbox_client.cpython-312-aarch64-linux-gnu.so": "t+VHmWhxf7oKcR5e+tJe6hPKy6xz0bMY84WEhujwcwBlWgIXscfc9aNSP6e4N7GITW7cOn+RlDRTTfwQsA6PDA==", + "python/iqpilot_private/navd/nav_cameras.cpython-312-aarch64-linux-gnu.so": "qOrpSi2I+aFLKN4WjBljfzbk2U1rvOgDuyV+p7IvshugeUOoqTKiYYSG9xwyi2/eB/syyfiVFoqAg+ETFXXPDA==", + "python/iqpilot_private/navd/navd.cpython-312-aarch64-linux-gnu.so": "PcFJWRYrb52pJCbTdsAPm3IC0OR9zt/7P0uc1GlQr4CVGvzfXukbnt/7sSeL8T29w7drf9MfGkpRe4BjbWwtDw==", + "python/iqpilot_private/navd/navrenderd.cpython-312-aarch64-linux-gnu.so": "gp1noPJ35MRVcQL3t4wKbsEH0L0+n9Yf8Zty+VCY7uy9EsK8211kW2YIw7Lcyw879VLLbVntHIWz/BMankSeAw==", + "python/iqpilot_private/navd/osm_cameras.cpython-312-aarch64-linux-gnu.so": "N6yH0R8V/Cw1J3hYPfFeZXByolRwtACwNe2wHMzPEQ69UTWnSNFRXWjOLCEvtwB8Z+iglAqFx8uztZ6wXZKUCQ==", + "python/iqpilot_private/navd/reroute.cpython-312-aarch64-linux-gnu.so": "oQQU70Yp8wzkqB9Ktm2KDEHNVZfB3otqIoG2mkqQNh6QdtVKXraIv6cAbt2Zjob5914C06El2z+NPZQE5NjODQ==", + "python/iqpilot_private/navd/route_manager.cpython-312-aarch64-linux-gnu.so": "ayPdxCUGA/o+AavLMd9mGDY6zYnZk54gAEVaMQXFYlztjXiREC+IEmV1iETOYcsEFAxr8qtUFfcwZ3p7rXljCw==", + "python/iqpilot_private/navd/runtime_common.cpython-312-aarch64-linux-gnu.so": "Rh0wUjYjRabedjFSnsE9BAjILjA1+RHMdfuCqTye1AlhFlXVUQMRo6Ier6Z71kyiOYw+CXCOrHUF9fP69cP4DQ==", + "python/iqpilot_private/navd/turn_desire.cpython-312-aarch64-linux-gnu.so": "13bqig90oceup9ovo8weu9UpdQN/l/pq7REFm8dwwgqquuh8jJFkzNz7dvIhDlaxIGAQwzWJe4+QzIQfhg0jAA==", + "python/iqpilot_private/navd/web_server.cpython-312-aarch64-linux-gnu.so": "Vm1Inx4XY0BOmLuNizOCRNAl4tPDcvJ/4A+TwVSr1cZuMg7pg1jeFg613e6cFM6t08hYvPsysXc2+gD69zkcBA==" } } diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/__init__.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/__init__.cpython-312-aarch64-linux-gnu.so index a123f65aa..d69fb38e7 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/__init__.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/__init__.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/event_builder.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/event_builder.cpython-312-aarch64-linux-gnu.so index fa748f090..54844133e 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/event_builder.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/event_builder.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/helpers.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/helpers.cpython-312-aarch64-linux-gnu.so index 0ad349d04..d89198be5 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/helpers.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/helpers.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/iqmapd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/iqmapd.cpython-312-aarch64-linux-gnu.so index bd4f8fb71..471549ccd 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/iqmapd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/iqmapd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/long_decel.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/long_decel.cpython-312-aarch64-linux-gnu.so index 9d5c8f72f..aa225592c 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/long_decel.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/long_decel.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/mapbox_client.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/mapbox_client.cpython-312-aarch64-linux-gnu.so index dc84dd824..ed72552c6 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/mapbox_client.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/mapbox_client.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/nav_cameras.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/nav_cameras.cpython-312-aarch64-linux-gnu.so index 57c9b1502..eebfd4e36 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/nav_cameras.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/nav_cameras.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navd.cpython-312-aarch64-linux-gnu.so index 9dd9504d5..a71abd796 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navrenderd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navrenderd.cpython-312-aarch64-linux-gnu.so index a43f871c1..e768be835 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navrenderd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navrenderd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/osm_cameras.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/osm_cameras.cpython-312-aarch64-linux-gnu.so index f832f6348..e375d9528 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/osm_cameras.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/osm_cameras.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/reroute.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/reroute.cpython-312-aarch64-linux-gnu.so index f376f1f9a..f50b41597 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/reroute.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/reroute.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/route_manager.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/route_manager.cpython-312-aarch64-linux-gnu.so index 42d05dac4..358a74a70 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/route_manager.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/route_manager.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/runtime_common.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/runtime_common.cpython-312-aarch64-linux-gnu.so index 46f26eea8..ac3768f15 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/runtime_common.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/runtime_common.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/turn_desire.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/turn_desire.cpython-312-aarch64-linux-gnu.so index 06db4bff2..c87314137 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/turn_desire.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/turn_desire.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/web_server.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/web_server.cpython-312-aarch64-linux-gnu.so index bd8e58944..0c2597fb4 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/web_server.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/web_server.cpython-312-aarch64-linux-gnu.so differ diff --git a/cereal/custom.capnp b/cereal/custom.capnp index 4aed6b78c..4b65a94ef 100644 --- a/cereal/custom.capnp +++ b/cereal/custom.capnp @@ -242,8 +242,8 @@ struct IQPlan @0xda401323ae805f2b { } struct E2eAlerts { - greenLightAlert @0 :Bool; - leadDepartAlert @1 :Bool; + pathOpen @0 :Bool; + leadPullaway @1 :Bool; } } @@ -734,6 +734,7 @@ struct IQVehicleTracks @0xb877ef4b20a4ae22 { frameHeight @2 :UInt16; processingMs @3 :Float32; tracks @4 :List(Track); + wide @5 :Bool; struct Track { # box corners normalized [0,1] in the road-camera frame diff --git a/common/filter_simple.py b/common/filter_simple.py index 212e1a8f4..30839f66e 100644 --- a/common/filter_simple.py +++ b/common/filter_simple.py @@ -1,3 +1,8 @@ +from collections import deque + +import numpy as np + + class FirstOrderFilter: def __init__(self, x0, rc, dt, initialized=True): self.x = x0 @@ -32,3 +37,35 @@ class BounceFilter(FirstOrderFilter): self.velocity.x = 0.0 self.x += self.velocity.x return self.x + + +class MyMovingAverage: + def __init__(self, window_size, value=None): + self.window_size = window_size + if value is not None: + self.values = deque([value] * window_size, maxlen=window_size) + self.sum = value * window_size + self.result = value + else: + self.values = deque(maxlen=window_size) + self.sum = 0 + self.result = 0 + + def set(self, value): + self.values.clear() + self.values.append(value) + self.sum = value + self.result = value + return value + + def set_all(self, value): + self.values = deque([value] * self.window_size, maxlen=self.window_size) + self.sum = value * self.window_size + self.result = value + return value + + def process(self, value, median=False): + self.values.append(value) + self.sum = sum(self.values) + self.result = float(np.median(self.values)) if median else float(self.sum) / len(self.values) + return self.result diff --git a/common/params.h b/common/params.h index 8169063ac..cc362f0ec 100644 --- a/common/params.h +++ b/common/params.h @@ -63,6 +63,14 @@ public: inline bool getBool(const std::string &key, bool block = false) { return get(key, block) == "1"; } + inline int getInt(const std::string &key, bool block = false) { + std::string value = get(key, block); + return value.empty() ? 0 : std::stoi(value); + } + inline float getFloat(const std::string &key, bool block = false) { + std::string value = get(key, block); + return value.empty() ? 0.0F : std::stof(value); + } std::map readAll(); // helpers for writing values @@ -73,10 +81,24 @@ public: inline int putBool(const std::string &key, bool val) { return put(key.c_str(), val ? "1" : "0", 1); } + inline int putInt(const std::string &key, int val) { + const std::string value = std::to_string(val); + return put(key.c_str(), value.c_str(), value.size()); + } + inline int putFloat(const std::string &key, float val) { + const std::string value = std::to_string(val); + return put(key.c_str(), value.c_str(), value.size()); + } void putNonBlocking(const std::string &key, const std::string &val); inline void putBoolNonBlocking(const std::string &key, bool val) { putNonBlocking(key, val ? "1" : "0"); } + inline void putIntNonBlocking(const std::string &key, int val) { + putNonBlocking(key, std::to_string(val)); + } + inline void putFloatNonBlocking(const std::string &key, float val) { + putNonBlocking(key, std::to_string(val)); + } private: void asyncWriteThread(); diff --git a/common/params.py b/common/params.py index 9bcde112d..231522062 100644 --- a/common/params.py +++ b/common/params.py @@ -9,12 +9,14 @@ except ImportError: pass class ParamKeyFlag(IntFlag): - PERSISTENT = 1 - CLEAR_ON_MANAGER_START = 2 - CLEAR_ON_ONROAD_TRANSITION = 4 - CLEAR_ON_OFFROAD_TRANSITION = 8 - DONT_LOG = 16 - DEVELOPMENT_ONLY = 32 + # must stay in lockstep with enum ParamKeyFlag in common/params.h + PERSISTENT = 0x02 + CLEAR_ON_MANAGER_START = 0x04 + CLEAR_ON_ONROAD_TRANSITION = 0x08 + CLEAR_ON_OFFROAD_TRANSITION = 0x10 + DONT_LOG = 0x20 + DEVELOPMENT_ONLY = 0x40 + CLEAR_ON_IGNITION_ON = 0x80 ALL = 0xFFFFFFFF class ParamKeyType(IntEnum): @@ -62,6 +64,14 @@ except ImportError: except (FileNotFoundError, NotADirectoryError, IsADirectoryError): return False + def get_int(self, key, block: bool = False) -> int: + value = self.get(key, block=block) + return int(value) if value else 0 + + def get_float(self, key, block: bool = False) -> float: + value = self.get(key, block=block) + return float(value) if value else 0.0 + def put(self, key, dat): if isinstance(dat, str): dat = dat.encode("utf-8") @@ -78,12 +88,24 @@ except ImportError: def put_bool(self, key, val: bool): self.put(key, b"1" if val else b"0") + def put_int(self, key, val: int): + self.put(key, str(val)) + + def put_float(self, key, val: float): + self.put(key, str(val)) + def put_nonblocking(self, key, dat): self.put(key, dat) def put_bool_nonblocking(self, key, val: bool): self.put_bool(key, val) + def put_int_nonblocking(self, key, val: int): + self.put_int(key, val) + + def put_float_nonblocking(self, key, val: float): + self.put_float(key, val) + def remove(self, key): try: os.remove(self._p(key)) diff --git a/common/params_keys.h b/common/params_keys.h index e311527a5..de2194ce4 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -153,8 +153,8 @@ inline static std::unordered_map keys = { // --- iqpilot params --- // {"ApiCache_DriveStats", {PERSISTENT, JSON}}, - {"AutoLaneChangeBsmDelay", {PERSISTENT, BOOL, "0"}}, - {"AutoLaneChangeTimer", {PERSISTENT, INT, "0"}}, + {"IQLaneChangeBsmDelay", {PERSISTENT, BOOL, "0"}}, + {"IQLaneChangeTimer", {PERSISTENT, INT, "0"}}, {"NavExitLaneChange", {PERSISTENT, BOOL, "0"}}, {"IQBlinkerMinLateralSpeed", {PERSISTENT, INT, "20"}}, // MPH or km/h {"IQBlinkerPauseLateral", {PERSISTENT, INT, "0"}}, @@ -165,28 +165,31 @@ inline static std::unordered_map keys = { {"IQCarParamsPersistent", {PERSISTENT, BYTES}}, {"IQCarParamsPersistentV2", {PERSISTENT, BYTES}}, {"CarPlatformBundle", {PERSISTENT, JSON}}, + {"Konn3ktVwOdometers", {PERSISTENT, JSON}}, + {"Konn3ktVehicleOdometers", {PERSISTENT, JSON}}, {"ChevronInfo", {PERSISTENT, INT, "4"}}, {"DeviceBootMode", {PERSISTENT, INT, "0"}}, {"IQDevUIInfo", {PERSISTENT, INT, "0"}}, {"EnableEsimProvisioning", {PERSISTENT, BOOL, "1"}}, - {"GreenLightAlert", {PERSISTENT, BOOL, "0"}}, + {"EndToEndAlert", {PERSISTENT, BOOL, "0"}}, {"InteractivityTimeout", {PERSISTENT, INT, "0"}}, {"IsDevelopmentBranch", {CLEAR_ON_MANAGER_START, BOOL}}, {"IsReleaseIqBranch", {CLEAR_ON_MANAGER_START, BOOL}}, {"LastGPSPositionIQLoc", {PERSISTENT, STRING}}, - {"LeadDepartAlert", {PERSISTENT, BOOL, "0"}}, + {"EndToEndLeadAlert", {PERSISTENT, BOOL, "0"}}, {"LongIncrementsEnabled", {PERSISTENT, BOOL, "0"}}, {"LongIncrementTapStep", {PERSISTENT, INT, "1"}}, {"LongIncrementHoldStep", {PERSISTENT, INT, "5"}}, {"IQE2ESetSpeedMode", {PERSISTENT, INT, "0"}}, {"IQE2ESetSpeedUseCurrent", {PERSISTENT, BOOL, "0"}}, {"IQE2ESetSpeedMph", {PERSISTENT, INT, "65"}}, + {"expSpeedConv", {PERSISTENT, BOOL, "0"}}, {"MaxTimeOffroad", {PERSISTENT, INT, "1800"}}, {"NightMode", {PERSISTENT, BOOL, "0"}}, {"newLeadMpc", {PERSISTENT, BOOL, "1"}}, {"ModelRunnerTypeCache", {CLEAR_ON_ONROAD_TRANSITION, INT}}, {"ForceOnroadUntil", {CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION, INT, "0"}}, - {"OffroadMode", {CLEAR_ON_MANAGER_START, BOOL}}, + {"IQAlwaysOffroad", {CLEAR_ON_MANAGER_START, BOOL}}, {"Offroad_TiciSupport", {CLEAR_ON_MANAGER_START, JSON}}, {"OnroadScreenOffBrightness", {PERSISTENT, INT, "0"}}, {"OnroadScreenOffTimer", {PERSISTENT, INT, "15"}}, @@ -225,6 +228,32 @@ inline static std::unordered_map keys = { // iqpilot car specific params {"HyundaiLongitudinalTuning", {PERSISTENT, INT, "0"}}, + {"AutoCruiseControl", {PERSISTENT, INT, "0"}}, + {"AutoEngage", {PERSISTENT, INT, "0"}}, + {"CanfdDebug", {PERSISTENT, INT, "0"}}, + {"CanfdHDA2", {PERSISTENT, INT, "0"}}, + {"CarrotCruiseAtcDecel", {PERSISTENT, INT, "-1"}}, + {"CarrotCruiseDecel", {PERSISTENT, INT, "-1"}}, + {"CruiseButtonTest1", {PERSISTENT, INT, "8"}}, + {"CruiseButtonTest2", {PERSISTENT, INT, "30"}}, + {"CruiseButtonTest3", {PERSISTENT, INT, "1"}}, + {"CustomSteerDeltaDown", {PERSISTENT, INT, "0"}}, + {"CustomSteerDeltaDownLC", {PERSISTENT, INT, "0"}}, + {"CustomSteerDeltaUp", {PERSISTENT, INT, "0"}}, + {"CustomSteerDeltaUpLC", {PERSISTENT, INT, "0"}}, + {"CustomSteerMax", {PERSISTENT, INT, "0"}}, + {"EnableCornerRadar", {PERSISTENT, INT, "0"}}, + {"EnableRadarTracks", {PERSISTENT, INT, "0"}}, + {"EnableRadarTracksResult", {PERSISTENT | CLEAR_ON_MANAGER_START, INT}}, + {"FingerPrints", {PERSISTENT | CLEAR_ON_MANAGER_START, STRING}}, + {"HDPuse", {PERSISTENT, INT, "0"}}, + {"HapticFeedbackWhenSpeedCamera", {PERSISTENT, INT, "0"}}, + {"HyundaiCameraSCC", {PERSISTENT, INT, "0"}}, + {"IsLdwsCar", {PERSISTENT, INT, "0"}}, + {"LaneLineCheck", {PERSISTENT, INT, "0"}}, + {"LongitudinalPersonalityMax", {PERSISTENT, INT, "3"}}, + {"MaxAngleFrames", {PERSISTENT, INT, "89"}}, + {"SpeedFromPCM", {PERSISTENT, INT, "2"}}, {"SubaruStopAndGo", {PERSISTENT, BOOL, "0"}}, {"SubaruStopAndGoManualParkingBrake", {PERSISTENT, BOOL, "0"}}, {"TeslaCoopSteering", {PERSISTENT, BOOL, "0"}}, @@ -255,9 +284,9 @@ inline static std::unordered_map keys = { // iqpilot model params {"CameraOffset", {PERSISTENT, FLOAT, "0.0"}}, - {"LagdToggle", {PERSISTENT, BOOL, "1"}}, - {"LagdToggleDelay", {PERSISTENT, FLOAT, "0.2"}}, - {"LagdValueCache", {PERSISTENT, FLOAT, "0.2"}}, + {"IQLiveSteerDelay", {PERSISTENT, BOOL, "1"}}, + {"IQSoftwareSteerDelay", {PERSISTENT, FLOAT, "0.2"}}, + {"IQSteerDelayCache", {PERSISTENT, FLOAT, "0.2"}}, {"LaneChangeBsd", {PERSISTENT, INT, "0"}}, // -1 ignore BSD, 0 default, 1 block lane change on BSD {"LaneChangeContinuous", {PERSISTENT, BOOL, "0"}}, // 0 one-shot per blinker, 1 chain on held blinker (torque-gated) {"LaneChangeDelay", {PERSISTENT, FLOAT, "0.0"}}, // tenths of a second; scaled by 0.1 in desire_helper diff --git a/common/params_pyx.pyx b/common/params_pyx.pyx index 636ad44cf..ea761a1df 100644 --- a/common/params_pyx.pyx +++ b/common/params_pyx.pyx @@ -33,11 +33,17 @@ cdef extern from "common/params.h": c_Params(string) except + nogil string get(string, bool) nogil bool getBool(string, bool) nogil + int getInt(string, bool) nogil + float getFloat(string, bool) nogil int remove(string) nogil int put(string, string) nogil void putNonBlocking(string, string) nogil void putBoolNonBlocking(string, bool) nogil int putBool(string, bool) nogil + int putInt(string, int) nogil + int putFloat(string, float) nogil + void putIntNonBlocking(string, int) nogil + void putFloatNonBlocking(string, float) nogil bool checkKey(string) nogil ParamKeyType getKeyType(string) nogil optional[string] getKeyDefaultValue(string) nogil @@ -136,6 +142,20 @@ cdef class Params: r = self.p.getBool(k, block) return r + def get_int(self, key, bool block=False): + cdef string k = self.check_key(key) + cdef int r + with nogil: + r = self.p.getInt(k, block) + return r + + def get_float(self, key, bool block=False): + cdef string k = self.check_key(key) + cdef float r + with nogil: + r = self.p.getFloat(k, block) + return r + def _put_cast(self, key, dat): cdef string k = self.check_key(key) cdef ParamKeyType t = self.p.getKeyType(k) @@ -158,6 +178,16 @@ cdef class Params: with nogil: self.p.putBool(k, val) + def put_int(self, key, int val): + cdef string k = self.check_key(key) + with nogil: + self.p.putInt(k, val) + + def put_float(self, key, float val): + cdef string k = self.check_key(key) + with nogil: + self.p.putFloat(k, val) + def put_nonblocking(self, key, dat): cdef string k = self.check_key(key) cdef string dat_bytes = self._put_cast(key, dat) @@ -169,6 +199,16 @@ cdef class Params: with nogil: self.p.putBoolNonBlocking(k, val) + def put_int_nonblocking(self, key, int val): + cdef string k = self.check_key(key) + with nogil: + self.p.putIntNonBlocking(k, val) + + def put_float_nonblocking(self, key, float val): + cdef string k = self.check_key(key) + with nogil: + self.p.putFloatNonBlocking(k, val) + def remove(self, key): cdef string k = self.check_key(key) with nogil: diff --git a/iqdbc_repo/conftest.py b/iqdbc_repo/conftest.py index 4b01283c4..cf76ee368 100644 --- a/iqdbc_repo/conftest.py +++ b/iqdbc_repo/conftest.py @@ -4,6 +4,61 @@ collect_ignore_glob = [ "iqdbc/safety/tests/misra/cppcheck/", ] +# --- host test harness ------------------------------------------------------- +# tesla/volkswagen carstate+carcontroller import the closed-source ALC / odometer +# runtime via import_verified_module(), which gates on a rootfs integrity manifest +# that only exists on-device. Off-device (host CI / dev), install minimal stubs so +# the whole car interface set is importable and test_car_interfaces can collect and +# run. On-device the manifest is present and these stubs are never installed, so the +# real verified modules are used. +import os as _os + +if not _os.path.exists("/usr/libexec/iqpilot/runtime_integrity.json"): + import sys as _sys + import types as _types + + def _stub_module(name, attrs): + mod = _types.ModuleType(name) + for key, value in attrs.items(): + setattr(mod, key, value) + _sys.modules[name] = mod + + _noop = lambda *args, **kwargs: None # noqa: E731 + + class _VehicleOdometerStoreStub: + def __init__(self, *args, **kwargs): + pass + + def record(self, km): + return km + + _stub_module("iqpilot_private.konn3kt.iqlvbs.vehicle_state", + {"VehicleOdometerStore": _VehicleOdometerStoreStub}) + _stub_module("iqpilot_private.konn3kt.iqlvbs.alc", { + "angle_lateral_control_enabled": lambda *a, **k: False, + "update_vw_alc": _noop, + "append_private_apd": _noop, + "update_mqb_carstate_alc_state": _noop, + "update_mlb_carstate_alc_state": _noop, + "update_pq_carstate_alc_state": _noop, + }) + _stub_module("iqpilot_private.konn3kt.iqlvbs.iqlvbs_commander", { + "update_turn_signals": _noop, + }) + _stub_module("iqpilot_private.konn3kt.hephaestus.vw_pq_flasher", {}) + + try: + from openpilot.system.proprietary_runtime import _verified_import as _vi + _real_import_verified_module = _vi.import_verified_module + + def _import_verified_module(bundle, module): + return _sys.modules.get(module) or _real_import_verified_module(bundle, module) + + _vi.import_verified_module = _import_verified_module + except Exception: + pass +# --- end host test harness --------------------------------------------------- + _ABSTRACT_BASES = frozenset(("CarSafetyTest", "AolSafetyTestBase", "SafetyTest", "SafetyTestBase")) def _method_from_base(cls, method_name): diff --git a/iqdbc_repo/credits/CREDITS.MD b/iqdbc_repo/credits/CREDITS.MD index e34e88fc1..c2909f699 100644 --- a/iqdbc_repo/credits/CREDITS.MD +++ b/iqdbc_repo/credits/CREDITS.MD @@ -6,63 +6,18 @@ It does not replace the repository-wide license files for IQ.Pilot itself or any ## Credits: -### Hyundai / Kia / Genesis (HKG) - Sunnypilot - -#### Contributors - -Full credit for the Hyundai / Kia / Genesis port, along with the HKG-specific tuning work used in this tree, belongs to: - -- Jason Wen -- James Vecellio-Grant -- sunnypilot - -#### Attribution - -This repository carries HKG-side tuning and port lineage that originated from, and/or is verbatim their work. They are the authors of the Sunnypilot-side HKG port and its tuning, and are accredited as such, IQ.Lvbs claims no copyright, credit, or authorship of the components listed below. - -#### Upstream License Notice - -The HKG work attributed above is acknowledged here under LICENSE notice: - -```text -MIT License - -Copyright (c) 2024 Jason Wen, James Vecellio-Grant, Sunnypilot, and a number of other contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -#### Scope - -This licensing is limited to `iqdbc_repo/iqdbc/car/hyundai` and `iqdbc_repo/iqdbc/iqpilot/car/hyundai`. - ### Hyundai / Kia / Genesis (HKG) - carrotpilot #### Contributors -Full credit for the carrotpilot-side HKG tuning lineage carried in this tree belongs to: +Full credit for the Hyundai / Kia / Genesis port and its HKG-specific tuning belongs to: -- carrotpilot devs (ajoutam) +- carrotpilot +- ajouatom #### Attribution -This repository carries HKG-side tuning and port lineage that originated from, and/or is verbatim their work. They are the authors of the carrotpilot-side HKG tuning credited here, and are accredited as such, IQ.Lvbs claims no copyright, credit, or authorship of the components listed below. +This repository carries the carrotpilot HKG implementation from `ajouatom/openpilot`, imported from commit `b54d44efd514bc61f86f08b01c23a6c190885c07`. IQ.Lvbs claims no copyright, credit, or authorship over that implementation. #### Upstream License Notice @@ -80,7 +35,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI #### Scope -This licensing is limited to `iqdbc_repo/iqdbc/car/hyundai` and `iqdbc_repo/iqdbc/iqpilot/car/hyundai`. +This licensing is limited to the Hyundai/Kia/Genesis car, DBC, and safety implementations and the supporting schema and compatibility changes required by that port. ### Honda diff --git a/iqdbc_repo/iqdbc/can/parser.py b/iqdbc_repo/iqdbc/can/parser.py index 929c8d6e4..ab21ce84c 100644 --- a/iqdbc_repo/iqdbc/can/parser.py +++ b/iqdbc_repo/iqdbc/can/parser.py @@ -1,5 +1,6 @@ import math import numbers +import time from collections import defaultdict, deque from dataclasses import dataclass, field @@ -154,7 +155,7 @@ class CANParser: self.last_nonempty_nanos: int = 0 self._last_update_nanos: int = 0 - def _add_message(self, name_or_addr: str | int, freq: int | None = None) -> None: + def _add_message(self, name_or_addr: str | int, freq: int | None = None, ignore_counter: bool = False) -> None: if isinstance(name_or_addr, numbers.Number): msg = self.dbc.addr_to_msg.get(int(name_or_addr)) else: @@ -171,16 +172,15 @@ class CANParser: self.vl_all[msg.name] = self.vl_all[msg.address] self.ts_nanos[msg.address] = {s: 0 for s in signal_names} self.ts_nanos[msg.name] = self.ts_nanos[msg.address] - self.dat[msg.address] = b"" - self.dat[msg.name] = b"" - state = MessageState( address=msg.address, name=msg.name, size=msg.size, signals=list(msg.sigs.values()), ignore_alive=freq is not None and math.isnan(freq), + ignore_counter=ignore_counter, ) + state.first_seen_nanos = time.monotonic_ns() if freq is not None and freq > 0: state.frequency = freq else: diff --git a/iqdbc_repo/iqdbc/car/car.capnp b/iqdbc_repo/iqdbc/car/car.capnp index 9879f1b21..8bc3d70a5 100644 --- a/iqdbc_repo/iqdbc/car/car.capnp +++ b/iqdbc_repo/iqdbc/car/car.capnp @@ -209,6 +209,8 @@ struct CarState { lateralAvailable @61 :Bool; # lateral control is available even if cruise is faulted cruiseFaultLateralMode @62 :Bool; # cruise is faulted but lateral control is still active radarDisableFailed @66 :Bool; + # Physical vehicle odometer in kilometers. Zero means unavailable on this platform. + odometer @67 :Float64; # cruise state cruiseState @10 :CruiseState; @@ -236,6 +238,42 @@ struct CarState { fuelTankLevelL @63 :Float32; # raw fuel tank level in liters (konn3kt: VW PQ Kombi_1.Tankinhalt) batteryDetails @65 :BatteryDetails; + # carrotpilot HKG extension state + vCluRatio @68 :Float32; + logCarrot @69 :Text; + softHoldActive @70 :Int16; + activateCruise @71 :Int16; + latEnabled @72 :Bool; + pcmCruiseGap @73 :Int16; + speedLimit @74 :Float32; + speedLimitDistance @75 :Float32; + gearStep @76 :Int16; + tpms @77 :Tpms; + useLaneLineSpeed @78 :Float32; + leftLatDist @79 :Float32; + rightLatDist @80 :Float32; + leftLongDist @81 :Float32; + rightLongDist @82 :Float32; + carrotCruise @83 :Int16; + leftLaneLine @84 :Int16; + rightLaneLine @85 :Int16; + datetime @86 :UInt64; + leftRearLongDist @87 :Float32; + rightRearLongDist @88 :Float32; + leftRearLatDist @89 :Float32; + rightRearLatDist @90 :Float32; + trailerConnected @91 :Bool; + ureaGauge @92 :Float32; + evModeActive @93 :Bool; + evModeValid @94 :Bool; + + struct Tpms { + fl @0 :Float32; + fr @1 :Float32; + rl @2 :Float32; + rr @3 :Float32; + } + struct BatteryDetails { capacity @0 :Float32; charge @1 :Float32; @@ -300,13 +338,16 @@ struct CarState { setCruise @9; resumeCruise @10; gapAdjustCruise @11; + lfaButton @12; + paddleLeft @13; + paddleRight @14; } } # deprecated errorsDEPRECATED @0 :List(OnroadEventDEPRECATED.EventName); - gasDEPRECATED @3 :Float32; # this is user pedal only - brakeLightsDEPRECATED @19 :Bool; + gas @3 :Float32; # this is user pedal only + brakeLights @19 :Bool; steeringRateLimitedDEPRECATED @29 :Bool; canMonoTimesDEPRECATED @12: List(UInt64); canRcvTimeoutDEPRECATED @49 :Bool; @@ -344,6 +385,18 @@ struct RadarData @0x888ad6581cf0aacb { # some radars flag measurements VS estimates measured @6 :Bool; + + vLead @7 :Float32; # m/s + aLead @8 :Float32; # m/s^2 + jLead @9 :Float32; # m/s^3 + radarSource @10 :RadarSource; + + enum RadarSource { + frontRadar @0; + scc @1; + corner235 @2; + corner180 @3; + } } enum ErrorDEPRECATED { @@ -399,6 +452,8 @@ struct CarControl { brake @1: Float32; # [0.0, 1.0] torqueOutputCan @8: Float32; # value sent over can to the car speed @6: Float32; # m/s + jerk @9: Float32; # m/s^3 + aTarget @10: Float32; # m/s^2 enum LongControlState @0xe40f3a917d908282{ off @0; @@ -434,6 +489,12 @@ struct CarControl { leadFollowTime @11: Float32; leadDistance @12: Float32; driverUnresponsive @13: Bool; + activeCarrot @14: Int16; + leadRelSpeed @15: Float32; + leadDPath @16: Float32; + leadRadar @17: Int16; + modelDesire @18: Int16; + atcDistance @19: Float32; # not used with the dash, TODO: separate structs for dash UI and device UI audibleAlert @5: AudibleAlert; @@ -497,6 +558,7 @@ struct CarParams { enableBsm @56 :Bool; # blind spot monitoring flags @64 :UInt32; # flags for car specific quirks alphaLongitudinalAvailable @71 :Bool; + extFlags @79 :UInt32; # carrotpilot HKG extension flags minEnableSpeed @7 :Float32; minSteerSpeed @8 :Float32; @@ -593,7 +655,7 @@ struct CarParams { kpV @1 :List(Float32); kiBP @2 :List(Float32); kiV @3 :List(Float32); - kfDEPRECATED @6 :Float32; + kf @6 :Float32; deadzoneBPDEPRECATED @4 :List(Float32); deadzoneVDEPRECATED @5 :List(Float32); } @@ -766,11 +828,11 @@ struct CarParams { maxSteeringAngleDegDEPRECATED @54 :Float32; longitudinalActuatorDelayLowerBoundDEPRECATED @61 :Float32; stoppingControlDEPRECATED @31 :Bool; # Does the car allow full control even at lows speeds when stopping - radarTimeStepDEPRECATED @45: Float32 = 0.05; # time delta between radar updates, 20Hz is very standard + radarTimeStep @45: Float32 = 0.05; # time delta between radar updates, 20Hz is very standard enableDsuDEPRECATED @5 :Bool; # driving support unit - vEgoStartingDEPRECATED @59 :Float32; - startAccelDEPRECATED @32 :Float32; - startingStateDEPRECATED @70 :Bool; + vEgoStarting @59 :Float32; + startAccel @32 :Float32; + startingState @70 :Bool; vEgoStoppingDEPRECATED @29 :Float32; stoppingDecelRateDEPRECATED @52 :Float32; } diff --git a/iqdbc_repo/iqdbc/car/car_helpers.py b/iqdbc_repo/iqdbc/car/car_helpers.py index 3d3fe98bb..e5d2084dd 100644 --- a/iqdbc_repo/iqdbc/car/car_helpers.py +++ b/iqdbc_repo/iqdbc/car/car_helpers.py @@ -11,7 +11,7 @@ from iqdbc.car.mock.values import CAR as MOCK from iqdbc.car.values import BRANDS from iqdbc.car.vin import get_vin, is_valid_vin, VIN_UNKNOWN -from iqdbc.iqpilot.car.interfaces import setup_interfaces as iqpilot_interfaces +from iqdbc.lvbs.car.interfaces import apply_iq_car_config as iqpilot_interfaces FRAME_FINGERPRINT = 100 # 1s diff --git a/iqdbc_repo/iqdbc/car/chrysler/carcontroller.py b/iqdbc_repo/iqdbc/car/chrysler/carcontroller.py index 1fcd23957..eda820122 100644 --- a/iqdbc_repo/iqdbc/car/chrysler/carcontroller.py +++ b/iqdbc_repo/iqdbc/car/chrysler/carcontroller.py @@ -5,16 +5,16 @@ from iqdbc.car.chrysler import chryslercan from iqdbc.car.chrysler.values import RAM_CARS, CarControllerParams, ChryslerFlags, RAM_DT from iqdbc.car.interfaces import CarControllerBase -from iqdbc.iqpilot.car.chrysler.carcontroller_ext import CarControllerExt -from iqdbc.iqpilot.car.chrysler.aol import AolCarController -from iqdbc.iqpilot.car.chrysler.values_ext import ChryslerFlagsIQ +from iqdbc.lvbs.car.chrysler.iq_carcontroller import IQCarController +from iqdbc.lvbs.car.chrysler.aol import AolCarController +from iqdbc.lvbs.car.chrysler.iq_values import ChryslerFlagsIQ -class CarController(CarControllerBase, AolCarController, CarControllerExt): +class CarController(CarControllerBase, AolCarController, IQCarController): def __init__(self, dbc_names, CP, CP_IQ): CarControllerBase.__init__(self, dbc_names, CP, CP_IQ) AolCarController.__init__(self) - CarControllerExt.__init__(self, CP, CP_IQ) + IQCarController.__init__(self, CP, CP_IQ) self.apply_torque_last = 0 self.hud_count = 0 @@ -58,7 +58,7 @@ class CarController(CarControllerBase, AolCarController, CarControllerExt): # TODO: can we make this more sane? why is it different for all the cars? lkas_control_bit = self.lkas_control_bit_prev if self.CP_IQ.flags & ChryslerFlagsIQ.NO_MIN_STEERING_SPEED or self.CP.carFingerprint in RAM_DT: - lkas_control_bit = CarControllerExt.get_lkas_control_bit(self, CS, CC, lkas_control_bit) + lkas_control_bit = IQCarController.get_lkas_control_bit(self, CS, CC, lkas_control_bit) elif CS.out.vEgo > self.CP.minSteerSpeed: lkas_control_bit = True elif self.CP.flags & ChryslerFlags.HIGHER_MIN_STEERING_SPEED: diff --git a/iqdbc_repo/iqdbc/car/chrysler/carstate.py b/iqdbc_repo/iqdbc/car/chrysler/carstate.py index 70d44487b..fc0cf4765 100644 --- a/iqdbc_repo/iqdbc/car/chrysler/carstate.py +++ b/iqdbc_repo/iqdbc/car/chrysler/carstate.py @@ -4,17 +4,17 @@ from iqdbc.car.chrysler.values import DBC, STEER_THRESHOLD, RAM_CARS from iqdbc.car.common.conversions import Conversions as CV from iqdbc.car.interfaces import CarStateBase -from iqdbc.iqpilot.car.chrysler.carstate_ext import CarStateExt -from iqdbc.iqpilot.car.chrysler.aol import AolCarState +from iqdbc.lvbs.car.chrysler.aol import AolCarState +from iqdbc.lvbs.car.chrysler.iq_carstate import IQCarState ButtonType = structs.CarState.ButtonEvent.Type -class CarState(CarStateBase, AolCarState, CarStateExt): +class CarState(CarStateBase, AolCarState, IQCarState): def __init__(self, CP, CP_IQ): CarStateBase.__init__(self, CP, CP_IQ) AolCarState.__init__(self, CP, CP_IQ) - CarStateExt.__init__(self, CP, CP_IQ) + IQCarState.__init__(self, CP, CP_IQ) self.CP = CP can_define = CANDefine(DBC[CP.carFingerprint][Bus.pt]) @@ -102,7 +102,7 @@ class CarState(CarStateBase, AolCarState, CarStateExt): self.button_counter = cp.vl["CRUISE_BUTTONS"]["COUNTER"] AolCarState.update_aol(self, ret, can_parsers) - CarStateExt.update(self, ret, ret_iq, can_parsers) + IQCarState.update(self, ret, ret_iq, can_parsers) ret.buttonEvents = [ *create_button_events(self.distance_button, prev_distance_button, {1: ButtonType.gapAdjustCruise}), @@ -114,7 +114,10 @@ class CarState(CarStateBase, AolCarState, CarStateExt): @staticmethod def get_can_parsers(CP, CP_IQ): + pt_messages: list = [] + cam_messages: list = [] + AolCarState.get_parser(CP, pt_messages, cam_messages) return { - Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], [], 0), - Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], [], 2), + Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], pt_messages, 0), + Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], cam_messages, 2), } diff --git a/iqdbc_repo/iqdbc/car/chrysler/fingerprints.py b/iqdbc_repo/iqdbc/car/chrysler/fingerprints.py index ccfa863b0..a9c4fa425 100644 --- a/iqdbc_repo/iqdbc/car/chrysler/fingerprints.py +++ b/iqdbc_repo/iqdbc/car/chrysler/fingerprints.py @@ -1,9 +1,9 @@ """ AUTO-FORMATTED USING iqdbc/car/debug/format_fingerprints.py, EDIT STRUCTURE THERE.""" from iqdbc.car.structs import CarParams from iqdbc.car.chrysler.values import CAR +from iqdbc.lvbs.car.iq_fingerprints import extend_fw_versions +from iqdbc.lvbs.car.chrysler.iq_fingerprints import FW_VERSIONS_EXT -from iqdbc.iqpilot.car.fingerprints_ext import merge_fw_versions -from iqdbc.iqpilot.car.chrysler.fingerprints_ext import FW_VERSIONS_EXT Ecu = CarParams.Ecu @@ -789,4 +789,6 @@ FW_VERSIONS = { }, } -FW_VERSIONS = merge_fw_versions(FW_VERSIONS, FW_VERSIONS_EXT) + + +FW_VERSIONS = extend_fw_versions(FW_VERSIONS, FW_VERSIONS_EXT) diff --git a/iqdbc_repo/iqdbc/car/chrysler/interface.py b/iqdbc_repo/iqdbc/car/chrysler/interface.py index cde33e3e5..7b880baa6 100755 --- a/iqdbc_repo/iqdbc/car/chrysler/interface.py +++ b/iqdbc_repo/iqdbc/car/chrysler/interface.py @@ -5,7 +5,7 @@ from iqdbc.car.chrysler.carstate import CarState from iqdbc.car.chrysler.radar_interface import RadarInterface from iqdbc.car.chrysler.values import CAR, RAM_HD, RAM_DT, RAM_CARS, ChryslerFlags, ChryslerSafetyFlags from iqdbc.car.interfaces import CarInterfaceBase -from iqdbc.iqpilot.car.chrysler.values_ext import ChryslerFlagsIQ +from iqdbc.lvbs.car.chrysler.iq_values import ChryslerFlagsIQ class CarInterface(CarInterfaceBase): @@ -100,9 +100,10 @@ class CarInterface(CarInterfaceBase): stock_cp.wheelbase = 3.79 stock_cp.steerRatio = 19. + # LKAS heartbeat on bus 0 (msg 0x4FF) means the camera is on the ADAS bus and + # IQ.Pilot can steer down to a standstill. if 0x4FF in fingerprint[0]: ret.flags |= ChryslerFlagsIQ.NO_MIN_STEERING_SPEED.value stock_cp.minSteerSpeed = 0. - return ret diff --git a/iqdbc_repo/iqdbc/car/ford/carstate.py b/iqdbc_repo/iqdbc/car/ford/carstate.py index ee4bdecd0..7080d2e9e 100644 --- a/iqdbc_repo/iqdbc/car/ford/carstate.py +++ b/iqdbc_repo/iqdbc/car/ford/carstate.py @@ -5,17 +5,14 @@ from iqdbc.car.ford.fordcan import CanBus from iqdbc.car.ford.values import DBC, CarControllerParams, FordFlags from iqdbc.car.interfaces import CarStateBase -from iqdbc.iqpilot.car.ford.aol import AolCarState - ButtonType = structs.CarState.ButtonEvent.Type GearShifter = structs.CarState.GearShifter TransmissionType = structs.CarParams.TransmissionType -class CarState(CarStateBase, AolCarState): +class CarState(CarStateBase): def __init__(self, CP, CP_IQ): CarStateBase.__init__(self, CP, CP_IQ) - AolCarState.__init__(self, CP, CP_IQ) can_define = CANDefine(DBC[CP.carFingerprint][Bus.pt]) if CP.transmissionType == TransmissionType.automatic: self.shifter_values = can_define.dv["PowertrainData_10"]["TrnRng_D_Rq"] @@ -112,8 +109,6 @@ class CarState(CarStateBase, AolCarState): self.acc_tja_status_stock_values = cp_cam.vl["ACCDATA_3"] self.lkas_status_stock_values = cp_cam.vl["IPMA_Data"] - AolCarState.update_aol(self, ret, can_parsers) - ret.buttonEvents = [ *create_button_events(self.distance_button, prev_distance_button, {1: ButtonType.gapAdjustCruise}), *create_button_events(self.lc_button, prev_lc_button, {1: ButtonType.lkas}), diff --git a/iqdbc_repo/iqdbc/car/gm/carstate.py b/iqdbc_repo/iqdbc/car/gm/carstate.py index bd190d6c1..b7c18c385 100644 --- a/iqdbc_repo/iqdbc/car/gm/carstate.py +++ b/iqdbc_repo/iqdbc/car/gm/carstate.py @@ -5,8 +5,8 @@ from iqdbc.car.common.conversions import Conversions as CV from iqdbc.car.interfaces import CarStateBase from iqdbc.car.gm.values import DBC, AccState, CruiseButtons, STEER_THRESHOLD, SDGM_CAR, ALT_ACCS -from iqdbc.iqpilot.car.gm.carstate_ext import CarStateExt -from iqdbc.iqpilot.car.gm.values_ext import GMFlagsIQ +from iqdbc.lvbs.car.gm.iq_carstate import IQCarState +from iqdbc.lvbs.car.gm.iq_values import GMFlagsIQ ButtonType = structs.CarState.ButtonEvent.Type TransmissionType = structs.CarParams.TransmissionType @@ -18,10 +18,10 @@ BUTTONS_DICT = {CruiseButtons.RES_ACCEL: ButtonType.accelCruise, CruiseButtons.D CruiseButtons.MAIN: ButtonType.mainCruise, CruiseButtons.CANCEL: ButtonType.cancel} -class CarState(CarStateBase, CarStateExt): +class CarState(CarStateBase, IQCarState): def __init__(self, CP, CP_IQ): CarStateBase.__init__(self, CP, CP_IQ) - CarStateExt.__init__(self, CP, CP_IQ) + IQCarState.__init__(self, CP, CP_IQ) can_define = CANDefine(DBC[CP.carFingerprint][Bus.pt]) self.shifter_values = can_define.dv["ECMPRDNL2"]["PRNDL2"] self.cluster_speed_hyst_gap = CV.KPH_TO_MS / 2. @@ -163,7 +163,7 @@ class CarState(CarStateBase, CarStateExt): if ret.vEgo < self.CP.minSteerSpeed: ret.lowSpeedAlert = True - CarStateExt.update(self, ret, can_parsers) + IQCarState.update(self, ret, can_parsers) return ret, ret_iq diff --git a/iqdbc_repo/iqdbc/car/gm/fingerprints.py b/iqdbc_repo/iqdbc/car/gm/fingerprints.py index 37d8c57cf..25063d77c 100644 --- a/iqdbc_repo/iqdbc/car/gm/fingerprints.py +++ b/iqdbc_repo/iqdbc/car/gm/fingerprints.py @@ -1,9 +1,8 @@ # ruff: noqa: E501 """ AUTO-FORMATTED USING iqdbc/car/debug/format_fingerprints.py, EDIT STRUCTURE THERE.""" from iqdbc.car.gm.values import CAR - -from iqdbc.iqpilot.car.fingerprints_ext import merge_fingerprints -from iqdbc.iqpilot.car.gm.fingerprints_ext import FINGERPRINTS_EXT +from iqdbc.lvbs.car.iq_fingerprints import extend_fingerprints +from iqdbc.lvbs.car.gm.iq_fingerprints import FINGERPRINTS_EXT # Trailblazer also matches as a SILVERADO, TODO: split with fw versions # FIXME: There are Equinox users with different message lengths, specifically 304 and 320 @@ -54,6 +53,9 @@ FINGERPRINTS = { }], CAR.CHEVROLET_SILVERADO: [{ 190: 6, 193: 8, 197: 8, 201: 8, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 257: 8, 288: 5, 289: 8, 298: 8, 304: 3, 309: 8, 311: 8, 313: 8, 320: 4, 322: 7, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 413: 8, 451: 8, 452: 8, 453: 6, 455: 7, 460: 5, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 528: 5, 532: 6, 534: 2, 560: 8, 562: 8, 563: 5, 565: 5, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 761: 7, 789: 5, 800: 6, 801: 8, 810: 8, 840: 5, 842: 5, 844: 8, 848: 4, 869: 4, 880: 6, 977: 8, 1001: 8, 1011: 6, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1611: 8, 1930: 7 + }, + { + 190: 6, 193: 8, 197: 8, 201: 8, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 257: 3, 288: 5, 289: 8, 298: 8, 304: 3, 309: 8, 311: 8, 313: 8, 320: 4, 322: 7, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 413: 8, 451: 8, 452: 8, 453: 6, 455: 7, 460: 5, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 528: 5, 532: 6, 534: 2, 560: 8, 562: 8, 563: 5, 565: 5, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 761: 7, 789: 5, 800: 6, 801: 8, 810: 8, 840: 5, 842: 5, 844: 8, 848: 4, 869: 4, 880: 6, 977: 8, 1001: 8, 1011: 6, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1611: 8, 1930: 7 }], CAR.CHEVROLET_EQUINOX: [{ 190: 6, 193: 8, 197: 8, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 257: 8, 288: 5, 289: 8, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 413: 8, 451: 8, 452: 8, 453: 6, 455: 7, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 510: 8, 528: 5, 532: 6, 560: 8, 562: 8, 563: 5, 565: 5, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 789: 5, 800: 6, 810: 8, 840: 5, 842: 5, 844: 8, 869: 4, 880: 6, 977: 8, 1001: 8, 1011: 6, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1611: 8, 1930: 7 @@ -78,4 +80,5 @@ FINGERPRINTS = { FW_VERSIONS: dict[str, dict[tuple, list[bytes]]] = { } -FINGERPRINTS = merge_fingerprints(FINGERPRINTS, FINGERPRINTS_EXT) + +FINGERPRINTS = extend_fingerprints(FINGERPRINTS, FINGERPRINTS_EXT) diff --git a/iqdbc_repo/iqdbc/car/gm/interface.py b/iqdbc_repo/iqdbc/car/gm/interface.py index 68c2d56c7..238a9923a 100755 --- a/iqdbc_repo/iqdbc/car/gm/interface.py +++ b/iqdbc_repo/iqdbc/car/gm/interface.py @@ -10,13 +10,13 @@ from iqdbc.car.gm.radar_interface import RadarInterface, RADAR_HEADER_MSG, CAMER from iqdbc.car.gm.values import CAR, CarControllerParams, EV_CAR, CAMERA_ACC_CAR, SDGM_CAR, ALT_ACCS, CanBus, GMSafetyFlags from iqdbc.car.interfaces import CarInterfaceBase, TorqueFromLateralAccelCallbackType, LateralAccelFromTorqueCallbackType -from iqdbc.iqpilot.car.gm.interface_ext import CarInterfaceExt -from iqdbc.iqpilot.car.gm.values_ext import GMFlagsIQ, GMSafetyFlagsIQ +from iqdbc.lvbs.car.gm.iq_interface import IQCarInterface +from iqdbc.lvbs.car.gm.iq_values import GMFlagsIQ, GMSafetyFlagsIQ TransmissionType = structs.CarParams.TransmissionType NetworkLocation = structs.CarParams.NetworkLocation -# iqpilot-specific torque parameters for Bolt cars that actually use the d parameter +# Bolt Non-ACC uses the 4th (d) tune parameter; stock tunes zero it out. NON_LINEAR_TORQUE_PARAMS_IQ = { CAR.CHEVROLET_BOLT_NON_ACC: [2.24, 1.1, 0.28, -0.07], CAR.CHEVROLET_BOLT_NON_ACC_1ST_GEN: [1.8, 1.1, 0.3, -0.045], @@ -30,7 +30,7 @@ NON_LINEAR_TORQUE_PARAMS = { } -class CarInterface(CarInterfaceBase, CarInterfaceExt): +class CarInterface(CarInterfaceBase, IQCarInterface): CarState = CarState CarController = CarController RadarInterface = RadarInterface @@ -40,7 +40,7 @@ class CarInterface(CarInterfaceBase, CarInterfaceExt): def __init__(self, CP, CP_IQ): CarInterfaceBase.__init__(self, CP, CP_IQ) - CarInterfaceExt.__init__(self, CP, CarInterfaceBase) + IQCarInterface.__init__(self, CP, CarInterfaceBase) @staticmethod def get_pid_accel_limits(CP, CP_IQ, current_speed, cruise_speed): @@ -241,11 +241,10 @@ class CarInterface(CarInterfaceBase, CarInterfaceExt): CAR.CHEVROLET_BOLT_NON_ACC_2ND_GEN, CAR.CHEVROLET_TRAILBLAZER_NON_ACC_2ND_GEN): stock_cp.steerActuatorDelay = 0.2 CarInterfaceBase.configure_torque_tune(candidate, stock_cp.lateralTuning) - elif candidate in (CAR.CHEVROLET_EQUINOX_NON_ACC_3RD_GEN, ): CarInterfaceBase.configure_torque_tune(candidate, stock_cp.lateralTuning) - # NON_ACC vehicles should use camera car speed thresholds + # Non-ACC cars steer/long via the forward camera and pcmCruise, not the ASCM. if ret.flags & GMFlagsIQ.NON_ACC: stock_cp.dashcamOnly = False stock_cp.alphaLongitudinalAvailable = False @@ -254,13 +253,13 @@ class CarInterface(CarInterfaceBase, CarInterfaceExt): stock_cp.pcmCruise = True stock_cp.safetyConfigs[0].safetyParam |= GMSafetyFlags.HW_CAM.value ret.iqSafetyFlags |= GMSafetyFlagsIQ.NON_ACC - stock_cp.minEnableSpeed = 24 * CV.MPH_TO_MS # 24 mph - stock_cp.minSteerSpeed = 3.0 # ~6 mph + stock_cp.minEnableSpeed = 24 * CV.MPH_TO_MS + stock_cp.minSteerSpeed = 3.0 - # dashcamOnly platforms: untested platforms, need user validations + # Untested Non-ACC platforms ship dashcam-only pending user validation. if candidate in (CAR.CHEVROLET_BOLT_NON_ACC_2ND_GEN, CAR.CHEVROLET_EQUINOX_NON_ACC_3RD_GEN, - CAR.CHEVROLET_SUBURBAN_NON_ACC_11TH_GEN, CAR.CADILLAC_CT6_NON_ACC_1ST_GEN, CAR.CHEVROLET_TRAILBLAZER_NON_ACC_2ND_GEN, - CAR.CADILLAC_XT5_NON_ACC_1ST_GEN): + CAR.CHEVROLET_SUBURBAN_NON_ACC_11TH_GEN, CAR.CADILLAC_CT6_NON_ACC_1ST_GEN, + CAR.CHEVROLET_TRAILBLAZER_NON_ACC_2ND_GEN, CAR.CADILLAC_XT5_NON_ACC_1ST_GEN): stock_cp.dashcamOnly = True return ret diff --git a/iqdbc_repo/iqdbc/car/gm/values.py b/iqdbc_repo/iqdbc/car/gm/values.py index 369083b09..62c06118f 100644 --- a/iqdbc_repo/iqdbc/car/gm/values.py +++ b/iqdbc_repo/iqdbc/car/gm/values.py @@ -4,10 +4,9 @@ from enum import Enum, IntFlag from iqdbc.car import Bus, PlatformConfig, DbcDict, Platforms, CarSpecs from iqdbc.car.structs import CarParams from iqdbc.car.docs_definitions import CarDocs, CarFootnote, CarHarness, CarParts, Column, SupportType +from iqdbc.lvbs.car.gm.iq_values import GMFlagsIQ from iqdbc.car.fw_query_definitions import FwQueryConfig, Request, StdQueries -from iqdbc.iqpilot.car.gm.values_ext import GMFlagsIQ - Ecu = CarParams.Ecu @@ -88,13 +87,6 @@ class GMCarDocs(CarDocs): self.car_parts = CarParts.common([CarHarness.obd_ii]) -@dataclass -class GMNonAccCarDocs(GMCarDocs): - package: str = "No Adaptive Cruise Control (Non-ACC)" - support_type: SupportType = SupportType.COMMUNITY - support_link: str = "community" - - @dataclass(frozen=True, kw_only=True) class GMCarSpecs(CarSpecs): tireStiffnessFactor: float = 0.444 # not optimized yet @@ -123,6 +115,13 @@ class GMSDGMPlatformConfig(GMPlatformConfig): self.car_docs = [] +@dataclass +class GMNonAccCarDocs(GMCarDocs): + package: str = "No Adaptive Cruise Control (Non-ACC)" + support_type: SupportType = SupportType.COMMUNITY + support_link: str = "community" + + @dataclass class GMNonSccPlatformConfig(GMPlatformConfig): def init(self): @@ -209,13 +208,7 @@ class CAR(Platforms): GMCarSpecs(mass=2490, wheelbase=2.94, steerRatio=17.3, centerToFrontRatio=0.5, tireStiffnessFactor=1.0), ) - # port extensions - # Separate car def is required when there is no ASCM - # (for now) unless there is a way to detect it when it has been unplugged... - # CHEVROLET_VOLT_CC = GMNonSccPlatformConfig( - # [GMNonAccCarDocs("Chevrolet Volt LT 2017-18")], - # CHEVROLET_VOLT.specs, - # ) + # IQ.Pilot Non-ACC camera-harness ports (no factory adaptive cruise). CHEVROLET_BOLT_NON_ACC = GMNonSccPlatformConfig( [GMNonAccCarDocs("Chevrolet Bolt EV Non-ACC 2017")], CHEVROLET_BOLT_EUV.specs, @@ -333,7 +326,7 @@ FW_QUERY_CONFIG = FwQueryConfig( # TODO: detect most of these sets live EV_CAR = {CAR.CHEVROLET_VOLT, CAR.CHEVROLET_VOLT_2019, CAR.CHEVROLET_BOLT_EUV, - # port extensions, Non-ACC + # Non-ACC EV ports CAR.CHEVROLET_BOLT_NON_ACC, CAR.CHEVROLET_BOLT_NON_ACC_1ST_GEN, CAR.CHEVROLET_BOLT_NON_ACC_2ND_GEN} # We're integrated at the camera with VOACC on these cars (instead of ASCM w/ OBD-II harness) diff --git a/iqdbc_repo/iqdbc/car/honda/carcontroller.py b/iqdbc_repo/iqdbc/car/honda/carcontroller.py index 7325b3a8d..3b6ce3739 100644 --- a/iqdbc_repo/iqdbc/car/honda/carcontroller.py +++ b/iqdbc_repo/iqdbc/car/honda/carcontroller.py @@ -8,8 +8,8 @@ from iqdbc.car.honda.values import CAR, CruiseButtons, HONDA_BOSCH, HONDA_BOSCH_ HONDA_BOSCH_TJA_CONTROL, HONDA_NIDEC_ALT_PCM_ACCEL, CarControllerParams from iqdbc.car.interfaces import CarControllerBase -from iqdbc.iqpilot.car.honda.aol import AolCarController -from iqdbc.iqpilot.car.honda.gas_interceptor import GasInterceptorCarController +from iqdbc.lvbs.car.honda.aol import AolCarController +from iqdbc.lvbs.car.honda.gas_interceptor import GasInterceptorCarController VisualAlert = structs.CarControl.HUDControl.VisualAlert LongCtrlState = structs.CarControl.Actuators.LongControlState diff --git a/iqdbc_repo/iqdbc/car/honda/carstate.py b/iqdbc_repo/iqdbc/car/honda/carstate.py index 790a170ed..f8277716c 100644 --- a/iqdbc_repo/iqdbc/car/honda/carstate.py +++ b/iqdbc_repo/iqdbc/car/honda/carstate.py @@ -10,7 +10,7 @@ from iqdbc.car.honda.values import CAR, DBC, STEER_THRESHOLD, HONDA_BOSCH, HONDA HondaFlags, CruiseButtons, CruiseSettings, GearShifter, CarControllerParams from iqdbc.car.interfaces import CarStateBase -from iqdbc.iqpilot.car.honda.carstate_ext import CarStateExt +from iqdbc.lvbs.car.honda.iq_carstate import IQCarState TransmissionType = structs.CarParams.TransmissionType ButtonType = structs.CarState.ButtonEvent.Type @@ -20,10 +20,10 @@ BUTTONS_DICT = {CruiseButtons.RES_ACCEL: ButtonType.accelCruise, CruiseButtons.D SETTINGS_BUTTONS_DICT = {CruiseSettings.DISTANCE: ButtonType.gapAdjustCruise, CruiseSettings.LKAS: ButtonType.lkas} -class CarState(CarStateBase, CarStateExt): +class CarState(CarStateBase, IQCarState): def __init__(self, CP, CP_IQ): CarStateBase.__init__(self, CP, CP_IQ) - CarStateExt.__init__(self, CP, CP_IQ) + IQCarState.__init__(self, CP, CP_IQ) can_define = CANDefine(DBC[CP.carFingerprint][Bus.pt]) if CP.transmissionType != TransmissionType.manual: @@ -246,7 +246,7 @@ class CarState(CarStateBase, CarStateExt): *create_button_events(self.cruise_setting, prev_cruise_setting, SETTINGS_BUTTONS_DICT), ] - CarStateExt.update(self, ret, can_parsers) + IQCarState.update(self, ret, can_parsers) return ret, ret_iq diff --git a/iqdbc_repo/iqdbc/car/honda/fingerprints.py b/iqdbc_repo/iqdbc/car/honda/fingerprints.py index de74ca891..ddf433151 100644 --- a/iqdbc_repo/iqdbc/car/honda/fingerprints.py +++ b/iqdbc_repo/iqdbc/car/honda/fingerprints.py @@ -2,8 +2,8 @@ from iqdbc.car.structs import CarParams from iqdbc.car.honda.values import CAR -from iqdbc.iqpilot.car.fingerprints_ext import merge_fw_versions -from iqdbc.iqpilot.car.honda.fingerprints_ext import FW_VERSIONS_EXT +from iqdbc.lvbs.car.iq_fingerprints import extend_fw_versions +from iqdbc.lvbs.car.honda.iq_fingerprints import FW_VERSIONS_EXT Ecu = CarParams.Ecu @@ -1098,4 +1098,4 @@ FW_VERSIONS = { }, } -FW_VERSIONS = merge_fw_versions(FW_VERSIONS, FW_VERSIONS_EXT) +FW_VERSIONS = extend_fw_versions(FW_VERSIONS, FW_VERSIONS_EXT) diff --git a/iqdbc_repo/iqdbc/car/honda/hondacan.py b/iqdbc_repo/iqdbc/car/honda/hondacan.py index 8b8c4d2b9..818c86ec5 100644 --- a/iqdbc_repo/iqdbc/car/honda/hondacan.py +++ b/iqdbc_repo/iqdbc/car/honda/hondacan.py @@ -2,7 +2,7 @@ from iqdbc.car import CanBusBase from iqdbc.car.common.conversions import Conversions as CV from iqdbc.car.honda.values import (HondaFlags, HONDA_BOSCH, HONDA_BOSCH_ALT_RADAR, HONDA_BOSCH_RADARLESS, HONDA_BOSCH_CANFD, CarControllerParams) -from iqdbc.iqpilot.car.honda.values_ext import HondaFlagsIQ +from iqdbc.lvbs.car.honda.iq_values import HondaFlagsIQ # CAN bus layout with relay # 0 = ACC-CAN - radar side diff --git a/iqdbc_repo/iqdbc/car/honda/interface.py b/iqdbc_repo/iqdbc/car/honda/interface.py index bb8a83598..133741f26 100755 --- a/iqdbc_repo/iqdbc/car/honda/interface.py +++ b/iqdbc_repo/iqdbc/car/honda/interface.py @@ -11,7 +11,7 @@ from iqdbc.car.honda.carstate import CarState from iqdbc.car.honda.radar_interface import RadarInterface from iqdbc.car.interfaces import CarInterfaceBase -from iqdbc.iqpilot.car.honda.values_ext import HondaFlagsIQ, HondaSafetyFlagsIQ +from iqdbc.lvbs.car.honda.iq_values import HondaFlagsIQ, HondaSafetyFlagsIQ TransmissionType = structs.CarParams.TransmissionType diff --git a/iqdbc_repo/iqdbc/car/hyundai/carcontroller.py b/iqdbc_repo/iqdbc/car/hyundai/carcontroller.py index 862a79e10..4368cbf1b 100644 --- a/iqdbc_repo/iqdbc/car/hyundai/carcontroller.py +++ b/iqdbc_repo/iqdbc/car/hyundai/carcontroller.py @@ -1,31 +1,47 @@ import numpy as np from iqdbc.can import CANPacker from iqdbc.car import Bus, DT_CTRL, make_tester_present_msg, structs -from iqdbc.car.lateral import apply_driver_steer_torque_limits, common_fault_avoidance +from iqdbc.car.lateral import apply_driver_steer_torque_limits, apply_std_steer_angle_limits, common_fault_avoidance from iqdbc.car.common.conversions import Conversions as CV from iqdbc.car.hyundai import hyundaicanfd, hyundaican +from iqdbc.car.hyundai.carstate import CarState from iqdbc.car.hyundai.hyundaicanfd import CanBus -from iqdbc.car.hyundai.values import HyundaiFlags, Buttons, CarControllerParams, CAR +from iqdbc.car.hyundai.values import HyundaiFlags, Buttons, CarControllerParams, CAR, CAN_GEARS, HyundaiExtFlags from iqdbc.car.interfaces import CarControllerBase - -from iqdbc.iqpilot.car.hyundai.escc import EsccCarController -from iqdbc.iqpilot.car.hyundai.longitudinal.controller import LongitudinalController -from iqdbc.iqpilot.car.hyundai.lead_data_ext import LeadDataCarController -from iqdbc.iqpilot.car.hyundai.aol import AolCarController +from iqdbc.car.vehicle_model import VehicleModel VisualAlert = structs.CarControl.HUDControl.VisualAlert LongCtrlState = structs.CarControl.Actuators.LongControlState + +from openpilot.common.params import Params + # EPS faults if you apply torque while the steering angle is above 90 degrees for more than 1 second # All slightly below EPS thresholds to avoid fault MAX_ANGLE = 85 MAX_ANGLE_FRAMES = 89 MAX_ANGLE_CONSECUTIVE_FRAMES = 2 +DRIVER_TORQUE_FILTER_TAU = 0.12 +PRE_OVERRIDE_PREDICTION_TIME = 0.15 +PRE_OVERRIDE_START_RATIO = 0.90 +PRE_OVERRIDE_FULL_RATIO = 1.05 +PRE_OVERRIDE_RAW_MIN_RATIO = 0.70 +PRE_OVERRIDE_FILTERED_MIN_RATIO = 0.65 +PRE_OVERRIDE_MIN_RATE_RATIO = 0.50 +PRE_OVERRIDE_CONFIRM_FRAMES = 2 +PRE_OVERRIDE_MAX_TORQUE_DELTA = -10.0 +LOW_SPEED_ANGLE_RATE_RAMP_SPEED = 15.0 * CV.KPH_TO_MS +MID_SPEED_ANGLE_RATE_LIMIT_SPEED = 40.0 * CV.KPH_TO_MS - -def _use_stock_lkas_request_path(CP) -> bool: - return CP.carFingerprint == CAR.HYUNDAI_PALISADE - +vibrate_intervals = [ + (0.0, 0.5), + (1.0, 1.5), + #(2.5, 3.0), + #(3.5, 4.0), + (5.0, 5.5), + (6.0, 6.5), + (7.5, 8.0), +] def process_hud_alert(enabled, fingerprint, hud_control): sys_warning = (hud_control.visualAlert in (VisualAlert.steerRequired, VisualAlert.ldw)) @@ -50,14 +66,75 @@ def process_hud_alert(enabled, fingerprint, hud_control): return sys_warning, sys_state, left_lane_warning, right_lane_warning +def rate_limit(x, x_last, lo, hi): + return float(np.clip(x, x_last + lo, x_last + hi)) -class CarController(CarControllerBase, EsccCarController, LeadDataCarController, LongitudinalController, AolCarController): - def __init__(self, dbc_names, CP, CP_IQ): - CarControllerBase.__init__(self, dbc_names, CP, CP_IQ) - EsccCarController.__init__(self, CP, CP_IQ) - AolCarController.__init__(self) - LeadDataCarController.__init__(self, CP) - LongitudinalController.__init__(self, CP, CP_IQ) +def apply_steer_angle_limits_physics(desired_sw_deg: float, + last_sw_deg: float, + v_ego: float, + steering_sw_deg: float, + lat_active: bool, + wheelbase_m: float, + steer_ratio: float, + steer_sw_max_deg: float, + model_v2=None) -> float: + max_lat_accel = 8.5 # m/s^2 + max_lat_jerk = 4.0 # m/s^3 + y_std_1s = 0.1 + if model_v2 is not None and len(model_v2.position.yStd) > 10: + model_y_std_1s = float(model_v2.position.yStd[10]) + if np.isfinite(model_y_std_1s) and model_y_std_1s >= 0.0: + y_std_1s = model_y_std_1s + max_sw_rate_deg_per_tick = float(np.interp(y_std_1s, [0.1, 0.2, 0.4], [2.0, 1.5, 0.8])) + v = max(float(v_ego), 1.0) + + target_sw = float(np.clip(desired_sw_deg, -steer_sw_max_deg, steer_sw_max_deg)) + if v_ego < MID_SPEED_ANGLE_RATE_LIMIT_SPEED: + # Keep low/mid-speed angle commands quieter without reducing LKAS_ANGLE_MAX_TORQUE. + # Allow the angle, but slow the arrival: 0~15 kph ramps 0.8->1.1 deg/tick, + # then 15~40 kph tapers 1.1->0.8 deg/tick. Above 40 kph, physics limits take over. + low_mid_speed_cap = float(np.interp(v_ego, + [0.0, LOW_SPEED_ANGLE_RATE_RAMP_SPEED, MID_SPEED_ANGLE_RATE_LIMIT_SPEED], + [0.8, 1.1, 0.8])) + max_sw_rate_deg_per_tick = min(max_sw_rate_deg_per_tick, low_mid_speed_cap) + + target_rw = target_sw / steer_ratio + last_rw = float(last_sw_deg) / steer_ratio + + # --- accel limit --- + rw_max_rad = np.arctan((max_lat_accel * wheelbase_m) / (v * v)) + rw_max = float(np.degrees(rw_max_rad)) + + # --- jerk -> rate limit --- + sec2 = 1.2 + max_drw_dt = (max_lat_jerk * wheelbase_m) / (v * v * sec2) # rad/s + max_drw_per_tick = max_drw_dt * DT_CTRL # rad/tick + max_drw_per_tick_deg = float(np.degrees(max_drw_per_tick)) + + err = abs(target_sw - last_sw_deg) + if err > 20.0: + max_sw_rate_deg_per_tick = min(max_sw_rate_deg_per_tick, 1.0) + + max_drw_per_tick_deg = min( + max_drw_per_tick_deg, + max_sw_rate_deg_per_tick / steer_ratio + ) + + # --- rate limit --- + cmd_rw = rate_limit(target_rw, last_rw, -max_drw_per_tick_deg, max_drw_per_tick_deg) + + # --- accel clip --- + cmd_rw = float(np.clip(cmd_rw, -rw_max, rw_max)) + + if not lat_active: + cmd_rw = float(steering_sw_deg) / steer_ratio + + cmd_sw = cmd_rw * steer_ratio + return float(np.clip(cmd_sw, -steer_sw_max_deg, steer_sw_max_deg)) + +class CarController(CarControllerBase): + def __init__(self, dbc_names, CP, CP_IQ=None): + super().__init__(dbc_names, CP, CP_IQ or structs.IQCarParams()) self.CAN = CanBus(CP) self.params = CarControllerParams(CP) self.packer = CANPacker(dbc_names[Bus.pt]) @@ -68,56 +145,302 @@ class CarController(CarControllerBase, EsccCarController, LeadDataCarController, self.car_fingerprint = CP.carFingerprint self.last_button_frame = 0 + self.hyundai_jerk = HyundaiJerk() + self.speedCameraHapticEndFrame = 0 + self.hapticFeedbackWhenSpeedCamera = 0 + self.max_angle_frames = MAX_ANGLE_FRAMES + self.blinking_signal = False # 1Hz + self.blinking_frame = int(1.0 / DT_CTRL) + self.soft_hold_mode = 2 + + self.activateCruise = 0 + self.button_wait = 12 + self.cruise_buttons_msg_values = None + self.cruise_buttons_msg_cnt = 0 + self.button_spamming_count = 0 + self.prev_clu_speed = 0 + self.button_spam1 = 8 + self.button_spam2 = 30 + self.button_spam3 = 1 + + self.apply_angle_last = 0 + self.lkas_max_torque = 0 + self.angle_max_torque = 250 + self.steering_pressed_prev = False + self.recovering_from_override = False + self.full_recovery_frames = 0 + self.repeated_override_count = 0 + self.override_latched = False + self.override_release_frames = 0 + self.driver_torque_filtered = 0.0 + self.driver_torque_filtered_prev = 0.0 + self.pre_override_frames = 0 + + self.lkas11_active = False + + self.canfd_debug = 0 + self.MainMode_ACC_trigger = 0 + self.LFA_trigger = 0 + + self.activeCarrot = 0 + self.camera_scc_params = Params().get_int("HyundaiCameraSCC") + self.is_ldws_car = Params().get_bool("IsLdwsCar") + self.enable_corner_radar = 0 + + self.steerDeltaUpOrg = self.steerDeltaUp = self.steerDeltaUpLC = self.params.STEER_DELTA_UP + self.steerDeltaDownOrg = self.steerDeltaDown = self.steerDeltaDownLC = self.params.STEER_DELTA_DOWN + def update(self, CC, CC_IQ, CS, now_nanos): - EsccCarController.update(self, CS) - LeadDataCarController.update(self, CC_IQ) - AolCarController.update(self, self.CP, CC, CC_IQ, self.frame) - if self.frame % 2 == 0: - LongitudinalController.update(self, CC, CS) + + if self.frame % 50 == 0: + params = Params() + self.max_angle_frames = params.get_int("MaxAngleFrames") + steerMax = params.get_int("CustomSteerMax") + steerDeltaUp = params.get_int("CustomSteerDeltaUp") + steerDeltaDown = params.get_int("CustomSteerDeltaDown") + steerDeltaUpLC = params.get_int("CustomSteerDeltaUpLC") + steerDeltaDownLC = params.get_int("CustomSteerDeltaDownLC") + if steerMax > 0: + self.params.STEER_MAX = steerMax + if steerDeltaUp > 0: + self.steerDeltaUp = steerDeltaUp + #self.params.ANGLE_TORQUE_UP_RATE = steerDeltaUp + else: + self.steerDeltaUp = self.steerDeltaUpOrg + if steerDeltaDown > 0: + self.steerDeltaDown = steerDeltaDown + #self.params.ANGLE_TORQUE_DOWN_RATE = steerDeltaDown + else: + self.steerDeltaDown = self.steerDeltaDownOrg + + if steerDeltaUpLC > 0: + self.steerDeltaUpLC = steerDeltaUpLC + else: + self.steerDeltaUpLC = self.steerDeltaUp + if steerDeltaDownLC > 0: + self.steerDeltaDownLC = steerDeltaDownLC + else: + self.steerDeltaDownLC = self.steerDeltaDown + + self.soft_hold_mode = 1 if params.get_int("AutoCruiseControl") > 1 else 2 + self.hapticFeedbackWhenSpeedCamera = int(params.get_int("HapticFeedbackWhenSpeedCamera")) + + self.button_spam1 = params.get_int("CruiseButtonTest1") + self.button_spam2 = params.get_int("CruiseButtonTest2") + self.button_spam3 = params.get_int("CruiseButtonTest3") + self.speed_from_pcm = params.get_int("SpeedFromPCM") + + self.canfd_debug = params.get_int("CanfdDebug") + self.camera_scc_params = params.get_int("HyundaiCameraSCC") + self.enable_corner_radar = params.get_int("EnableCornerRadar") actuators = CC.actuators hud_control = CC.hudControl + if hud_control.modelDesire in [3,4]: + self.params.STEER_DELTA_UP = self.steerDeltaUpLC + self.params.STEER_DELTA_DOWN = self.steerDeltaDownLC + else: + self.params.STEER_DELTA_UP = self.steerDeltaUp + self.params.STEER_DELTA_DOWN = self.steerDeltaDown + + angle_control = self.CP.flags & HyundaiFlags.ANGLE_CONTROL + # steering torque new_torque = int(round(actuators.torque * self.params.STEER_MAX)) apply_torque = apply_driver_steer_torque_limits(new_torque, self.apply_torque_last, CS.out.steeringTorque, self.params) # >90 degree steering fault prevention self.angle_limit_counter, apply_steer_req = common_fault_avoidance(abs(CS.out.steeringAngleDeg) >= MAX_ANGLE, CC.latActive, - self.angle_limit_counter, MAX_ANGLE_FRAMES, + self.angle_limit_counter, self.max_angle_frames, MAX_ANGLE_CONSECUTIVE_FRAMES) + #apply_angle = apply_std_steer_angle_limits(actuators.steeringAngleDeg, self.apply_angle_last, CS.out.vEgoRaw, + # CS.out.steeringAngleDeg, CC.latActive, self.params.ANGLE_LIMITS) + + apply_angle = apply_steer_angle_limits_physics( + actuators.steeringAngleDeg, + self.apply_angle_last, + CS.out.vEgoRaw, + CS.out.steeringAngleDeg, + CC.latActive, + self.CP.wheelbase, + self.CP.steerRatio, + self.params.ANGLE_LIMITS.STEER_ANGLE_MAX, + CS.modelV2, + ) + + + if angle_control: + apply_steer_req = CC.latActive + + angle_torque_cap = self.angle_max_torque + + steering_pressed_rising = CS.out.steeringPressed and not self.steering_pressed_prev + if steering_pressed_rising: + if 0 < self.full_recovery_frames < int(5.0 / DT_CTRL): + self.repeated_override_count = min(self.repeated_override_count + 1, 3) + self.full_recovery_frames = 0 + self.recovering_from_override = True + + torque_threshold = max(self.params.STEER_THRESHOLD, 1.0) + # Filter signed torque so alternating sensor noise cancels out before its + # magnitude is used for pre-override prediction. + driver_torque = float(CS.out.steeringTorque) + driver_torque_abs = abs(driver_torque) + if not CC.latActive: + self.driver_torque_filtered = driver_torque + self.driver_torque_filtered_prev = driver_torque + self.pre_override_frames = 0 + else: + torque_filter_alpha = DT_CTRL / (DRIVER_TORQUE_FILTER_TAU + DT_CTRL) + self.driver_torque_filtered_prev = self.driver_torque_filtered + self.driver_torque_filtered += torque_filter_alpha * (driver_torque - self.driver_torque_filtered) + + driver_torque_filtered_abs = abs(self.driver_torque_filtered) + driver_torque_filtered_prev_abs = abs(self.driver_torque_filtered_prev) + driver_torque_rate = max(0.0, (driver_torque_filtered_abs - driver_torque_filtered_prev_abs) / DT_CTRL) + torque_ratio = driver_torque_filtered_abs / torque_threshold + raw_torque_ratio = driver_torque_abs / torque_threshold + predicted_torque_ratio = ( + driver_torque_filtered_abs + driver_torque_rate * PRE_OVERRIDE_PREDICTION_TIME + ) / torque_threshold + pre_override_candidate = ( + CC.latActive and + not CS.out.steeringPressed and + raw_torque_ratio > PRE_OVERRIDE_RAW_MIN_RATIO and + torque_ratio > PRE_OVERRIDE_FILTERED_MIN_RATIO and + predicted_torque_ratio > PRE_OVERRIDE_START_RATIO and + driver_torque_rate > torque_threshold * PRE_OVERRIDE_MIN_RATE_RATIO + ) + self.pre_override_frames = self.pre_override_frames + 1 if pre_override_candidate else 0 + pre_override_yield = 0.0 + if self.pre_override_frames >= PRE_OVERRIDE_CONFIRM_FRAMES: + pre_override_yield = float(np.interp( + predicted_torque_ratio, + [PRE_OVERRIDE_START_RATIO, PRE_OVERRIDE_FULL_RATIO], + [0.0, 1.0], + )) + recovery_allowed = False + + if CS.out.steeringPressed: + # Start yielding immediately when driver override is confirmed. + self.override_latched = True + self.override_release_frames = 0 + torque_delta = -20.0 + elif pre_override_yield > 0.0: + # Start handing off gently before steeringPressed flips to avoid a sharp torque drop. + torque_delta = PRE_OVERRIDE_MAX_TORQUE_DELTA * pre_override_yield + elif self.lkas_max_torque >= self.angle_max_torque: + # Once fully recovered, hold full authority until the next driver override. + torque_delta = 0.0 + elif self.override_latched: + # Hold reduced authority until driver torque stays below 60% for 0.2 seconds. + self.override_release_frames = self.override_release_frames + 1 if torque_ratio < 0.6 else 0 + if self.override_release_frames >= int(0.2 / DT_CTRL): + self.override_latched = False + self.override_release_frames = 0 + recovery_allowed = True + else: + torque_delta = 0.0 + else: + recovery_allowed = True + + if recovery_allowed: + # Use one-second model uncertainty to set the base torque recovery time. + # Missing or invalid model data falls back to a moderate 1.5-second recovery. + y_std_1s = 0.2 + if CS.modelV2 is not None and len(CS.modelV2.position.yStd) > 10: + model_y_std_1s = float(CS.modelV2.position.yStd[10]) + if np.isfinite(model_y_std_1s) and model_y_std_1s >= 0.0: + y_std_1s = model_y_std_1s + + recovery_time = float(np.interp(y_std_1s, [0.1, 0.2, 0.3, 0.4], [0.5, 0.8, 1.5, 3.0])) + recovery_time = max(recovery_time, float(np.interp( + self.repeated_override_count, + [0, 1, 2, 3], + [0.1, 1.0, 2.0, 3.0], + ))) + base_rate_up = (self.angle_max_torque - self.params.ANGLE_MIN_TORQUE) * DT_CTRL / recovery_time + + # During recovery, taper the rate to zero. Only steeringPressed can reduce authority. + torque_delta = base_rate_up * float(np.interp(torque_ratio, [0.6, 0.8], [1.0, 0.0])) + self.lkas_max_torque = float(np.clip(self.lkas_max_torque + torque_delta, + self.params.ANGLE_MIN_TORQUE, angle_torque_cap)) + + if not CS.out.steeringPressed and self.recovering_from_override and self.lkas_max_torque >= self.angle_max_torque: + self.recovering_from_override = False + self.full_recovery_frames = 1 + elif not CS.out.steeringPressed and self.full_recovery_frames > 0: + self.full_recovery_frames += 1 + if self.full_recovery_frames >= int(5.0 / DT_CTRL): + self.full_recovery_frames = 0 + self.repeated_override_count = 0 + if not CC.latActive: apply_torque = 0 - if self.apply_torque_last > 0: - self.apply_torque_last = max(self.apply_torque_last - self.params.STEER_DELTA_DOWN, 0) - elif self.apply_torque_last < 0: - self.apply_torque_last = min(self.apply_torque_last + self.params.STEER_DELTA_DOWN, 0) - else: - self.apply_torque_last = apply_torque + self.lkas_max_torque = 0 + self.recovering_from_override = False + self.full_recovery_frames = 0 + self.repeated_override_count = 0 + self.override_latched = False + self.override_release_frames = 0 + self.driver_torque_filtered = 0.0 + self.driver_torque_filtered_prev = 0.0 + self.pre_override_frames = 0 - if not _use_stock_lkas_request_path(self.CP) and apply_torque == 0 and CC.latActive and CS.out.steeringPressed: - apply_steer_req = False + self.steering_pressed_prev = CS.out.steeringPressed if CC.latActive else False + + self.apply_angle_last = apply_angle # Hold torque with induced temporary fault when cutting the actuation bit - # FIXME: we don't use this with CAN FD? - torque_fault = False if _use_stock_lkas_request_path(self.CP) else (CC.latActive and not apply_steer_req) + torque_fault = CC.latActive and not apply_steer_req + + self.apply_torque_last = apply_torque # accel + longitudinal accel = float(np.clip(actuators.accel, CarControllerParams.ACCEL_MIN, CarControllerParams.ACCEL_MAX)) stopping = actuators.longControlState == LongCtrlState.stopping set_speed_in_units = hud_control.setSpeed * (CV.MS_TO_KPH if CS.is_metric else CV.MS_TO_MPH) + # HUD messages + sys_warning, sys_state, left_lane_warning, right_lane_warning = process_hud_alert(CC.enabled, self.car_fingerprint, + hud_control) + + active_speed_decel = hud_control.activeCarrot == 3 and self.activeCarrot != 3 # 3: Speed Decel + self.activeCarrot = hud_control.activeCarrot + if active_speed_decel and self.speedCameraHapticEndFrame < 0: # 과속카메라 감속시작 + self.speedCameraHapticEndFrame = self.frame + (8.0 / DT_CTRL) #8초간 켜줌. + elif not active_speed_decel: + self.speedCameraHapticEndFrame = -1 + + if 0 <= self.speedCameraHapticEndFrame - self.frame < int(8.0 / DT_CTRL) and self.hapticFeedbackWhenSpeedCamera > 0: + t = (self.frame - (self.speedCameraHapticEndFrame - int(8.0 / DT_CTRL))) * DT_CTRL + + for start, end in vibrate_intervals: + if start <= t < end: + left_lane_warning = right_lane_warning = self.hapticFeedbackWhenSpeedCamera + break + + if self.frame >= self.speedCameraHapticEndFrame: + self.speedCameraHapticEndFrame = -1 + + if self.frame % self.blinking_frame == 0: + self.blinking_signal = True + elif self.frame % self.blinking_frame == self.blinking_frame / 2: + self.blinking_signal = False + + + can_sends = [] # *** common hyundai stuff *** # tester present - w/ no response (keeps relevant ECU disabled) - if self.frame % 100 == 0 and not ((self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC) or self.ESCC.enabled) and \ - self.CP.openpilotLongitudinalControl: + if self.frame % 100 == 0 and not (self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC) and self.CP.openpilotLongitudinalControl: # for longitudinal control, either radar or ADAS driving ECU addr, bus = 0x7d0, self.CAN.ECAN if self.CP.flags & HyundaiFlags.CANFD else 0 - if self.CP.flags & HyundaiFlags.CANFD_LKA_STEERING.value: + if self.CP.flags & HyundaiFlags.CANFD_HDA2.value: addr, bus = 0x730, self.CAN.ECAN can_sends.append(make_tester_present_msg(addr, bus, suppress_response=True)) @@ -125,40 +448,135 @@ class CarController(CarControllerBase, EsccCarController, LeadDataCarController, if self.CP.flags & HyundaiFlags.ENABLE_BLINKERS: can_sends.append(make_tester_present_msg(0x7b1, self.CAN.ECAN, suppress_response=True)) - # *** CAN/CAN FD specific *** + camera_scc = self.CP.flags & HyundaiFlags.CAMERA_SCC + # CAN-FD platforms if self.CP.flags & HyundaiFlags.CANFD: - can_sends.extend(self.create_canfd_msgs(apply_steer_req, apply_torque, set_speed_in_units, accel, - stopping, hud_control, CS, CC)) + hda2 = self.CP.flags & HyundaiFlags.CANFD_HDA2 + hda2_long = hda2 and self.CP.openpilotLongitudinalControl + # steering control + if camera_scc: + can_sends.extend(hyundaicanfd.create_steering_messages_camera_scc(self.frame, self.packer, self.CP, self.CAN, CC, apply_steer_req, apply_torque, CS, apply_angle, self.lkas_max_torque, angle_control)) + else: + can_sends.extend(hyundaicanfd.create_steering_messages(self.packer, self.CP, self.CAN, CC.enabled, apply_steer_req, apply_torque, apply_angle, self.lkas_max_torque, angle_control)) + + # prevent LFA from activating on HDA2 by sending "no lane lines detected" to ADAS ECU + if self.frame % 5 == 0 and hda2 and not camera_scc: + can_sends.extend(hyundaicanfd.create_suppress_lfa(self.packer, self.CAN, CS)) + + # LFA and HDA icons + if self.frame % 5 == 0 and (not hda2 or hda2_long or camera_scc): + can_sends.extend(hyundaicanfd.create_lfahda_cluster(self.packer, CS, self.CAN, CC.longActive, CC.latActive)) + if not camera_scc: + can_sends.extend(hyundaicanfd.create_lfa_icon_non_camera_scc(self.packer, CS, self.CAN, CC)) + + # blinkers + if hda2 and self.CP.flags & HyundaiFlags.ENABLE_BLINKERS: + can_sends.extend(hyundaicanfd.create_spas_messages(self.packer, self.CAN, self.frame, CC.leftBlinker, CC.rightBlinker)) + + if self.camera_scc_params in [2, 3]: + self.canfd_toggle_adas(CC, CS) + if self.CP.openpilotLongitudinalControl: + self.hyundai_jerk.make_jerk(self.CP, CS, accel, actuators, hud_control) + self.hyundai_jerk.check_carrot_cruise(CC, CS, hud_control, stopping, accel, actuators.aTarget) + + if True: #not camera_scc: + can_sends.extend(hyundaicanfd.create_ccnc_messages(self.CP, self.packer, self.CAN, self.frame, CC, CS, hud_control, apply_angle, left_lane_warning, right_lane_warning, self.enable_corner_radar, stopping, self.canfd_debug)) + if hda2: + can_sends.extend(hyundaicanfd.create_adrv_messages(self.CP, self.packer, self.CAN, self.frame)) + else: + can_sends.extend(hyundaicanfd.create_fca_warning_light(self.CP, self.packer, self.CAN, self.frame)) + if self.frame % 2 == 0: + if self.CP.flags & HyundaiFlags.CAMERA_SCC.value: + msg = hyundaicanfd.create_acc_control_scc2(self.packer, self.CAN, CC.enabled, self.accel_last, accel, stopping, CC.cruiseControl.override, + set_speed_in_units, hud_control, self.hyundai_jerk, CS) + if msg is not None: + can_sends.append(msg) + can_sends.extend(hyundaicanfd.create_tcs_messages(self.packer, self.CAN, CS)) # for sorento SCC radar... + else: + can_sends.append(hyundaicanfd.create_acc_control(self.packer, self.CAN, CC.enabled, self.accel_last, accel, stopping, CC.cruiseControl.override, + set_speed_in_units, hud_control, self.hyundai_jerk.jerk_u, self.hyundai_jerk.jerk_l, CS)) + self.accel_last = accel + else: + # button presses + if self.camera_scc_params == 3: # camera scc but stock long + send_button = self.make_spam_button(CC, CS) + can_sends.extend(hyundaicanfd.forward_button_message(self.packer, self.CAN, self.frame, CS, send_button, self.MainMode_ACC_trigger, self.LFA_trigger)) + else: + can_sends.extend(self.create_button_messages(CC, CS, use_clu11=False)) else: - can_sends.extend(self.create_can_msgs(apply_steer_req, apply_torque, torque_fault, set_speed_in_units, accel, - stopping, hud_control, actuators, CS, CC)) + if CS.lkas11 is not None: + if self.lkas11_active: + can_sends.append(hyundaican.create_lkas11(self.packer, self.frame, self.CP, apply_torque, apply_steer_req, + torque_fault, CS.lkas11, sys_warning, sys_state, CC.enabled, + hud_control.leftLaneVisible, hud_control.rightLaneVisible, + left_lane_warning, right_lane_warning, self.is_ldws_car)) + self.lkas11_active = True + + if not self.CP.openpilotLongitudinalControl: + can_sends.extend(self.create_button_messages(CC, CS, use_clu11=True)) + if self.CP.carFingerprint in CAN_GEARS["send_mdps12"] and CS.mdps12 is not None: # send mdps12 to LKAS to prevent LKAS error + can_sends.append(hyundaican.create_mdps12(self.packer, self.frame, CS.mdps12)) + + casper_ev = self.CP.carFingerprint == CAR.HYUNDAI_CASPER_EV + if self.frame % 2 == 0 and self.CP.openpilotLongitudinalControl: + self.hyundai_jerk.make_jerk(self.CP, CS, accel, actuators, hud_control) + self.hyundai_jerk.check_carrot_cruise(CC, CS, hud_control, stopping, accel, actuators.aTarget) + #jerk = 3.0 if actuators.longControlState == LongCtrlState.pid else 1.0 + use_fca = self.CP.flags & HyundaiFlags.USE_FCA.value + if camera_scc: + + can_sends.extend(hyundaican.create_acc_commands_scc(self.packer, CC.enabled, accel, self.hyundai_jerk, int(self.frame / 2), + hud_control, set_speed_in_units, stopping, + CC.cruiseControl.override, casper_ev, CS, self.soft_hold_mode)) + else: + can_sends.extend(hyundaican.create_acc_commands(self.packer, CC.enabled, accel, self.hyundai_jerk, int(self.frame / 2), + hud_control, set_speed_in_units, stopping, + CC.cruiseControl.override, use_fca, self.CP, CS, self.soft_hold_mode)) + + + # 20 Hz LFA MFA message + if self.frame % 5 == 0 and self.CP.flags & HyundaiFlags.SEND_LFA.value: + can_sends.append(hyundaican.create_lfahda_mfc(self.packer, CC, self.blinking_signal)) + + # 5 Hz ACC options + if self.frame % 20 == 0 and self.CP.openpilotLongitudinalControl: + if camera_scc: + if CS.scc13 is not None: + if casper_ev: + #can_sends.append(hyundaican.create_acc_opt_copy(CS, self.packer)) + pass + pass + else: + can_sends.extend(hyundaican.create_acc_opt(self.packer, self.CP)) + + # 2 Hz front radar options + if self.frame % 50 == 0 and self.CP.openpilotLongitudinalControl and not camera_scc: + can_sends.append(hyundaican.create_frt_radar_opt(self.packer)) new_actuators = actuators.as_builder() new_actuators.torque = apply_torque / self.params.STEER_MAX - new_actuators.torqueOutputCan = apply_torque - new_actuators.accel = self.tuning.actual_accel + # torqueOutputCan reflects the steering authority value actually sent over CAN. + # Torque-control platforms send the signed torque command, while angle-control + # platforms send LKAS_ANGLE_MAX_TORQUE alongside the requested angle. + new_actuators.torqueOutputCan = self.lkas_max_torque if angle_control else apply_torque + new_actuators.steeringAngleDeg = float(apply_angle) + new_actuators.accel = accel self.frame += 1 return new_actuators, can_sends - def create_can_msgs(self, apply_steer_req, apply_torque, torque_fault, set_speed_in_units, accel, stopping, hud_control, actuators, CS, CC): + + def create_button_messages(self, CC: structs.CarControl, CS: CarState, use_clu11: bool): can_sends = [] + if CS.out.brakePressed or CS.out.brakeHoldActive: + return can_sends + if use_clu11: + if CS.clu11 is None: + return can_sends - # HUD messages - sys_warning, sys_state, left_lane_warning, right_lane_warning = process_hud_alert(CC.enabled, self.car_fingerprint, - hud_control) - - can_sends.append(hyundaican.create_lkas11(self.packer, self.frame, self.CP, apply_torque, apply_steer_req, - torque_fault, CS.lkas11, sys_warning, sys_state, CC.enabled, - hud_control.leftLaneVisible, hud_control.rightLaneVisible, - left_lane_warning, right_lane_warning, - self.lkas_icon)) - - # Button messages - if not self.CP.openpilotLongitudinalControl: if CC.cruiseControl.cancel: can_sends.append(hyundaican.create_clu11(self.packer, self.frame, CS.clu11, Buttons.CANCEL, self.CP)) - elif CC.cruiseControl.resume: + elif False: #CC.cruiseControl.resume: # send resume at a max freq of 10Hz if (self.frame - self.last_button_frame) * DT_CTRL > 0.1: # send 25 messages at a time to increases the likelihood of resume being accepted @@ -166,81 +584,205 @@ class CarController(CarControllerBase, EsccCarController, LeadDataCarController, if (self.frame - self.last_button_frame) * DT_CTRL >= 0.15: self.last_button_frame = self.frame - if self.frame % 2 == 0 and self.CP.openpilotLongitudinalControl: - # TODO: unclear if this is needed - jerk = 3.0 if actuators.longControlState == LongCtrlState.pid else 1.0 - use_fca = self.CP.flags & HyundaiFlags.USE_FCA.value - can_sends.extend(hyundaican.create_acc_commands(self.packer, CC.enabled, accel, jerk, int(self.frame / 2), - self.lead_data, hud_control, set_speed_in_units, stopping, - CC.cruiseControl.override, use_fca, self.CP, - CS.main_cruise_enabled, self.tuning, self.ESCC)) + if self.last_button_frame != self.frame: + send_button = self.make_spam_button(CC, CS) + if send_button > 0: + can_sends.append(hyundaican.create_clu11_button(self.packer, self.frame, CS.clu11, send_button, self.CP)) - # 20 Hz LFA MFA message - if self.frame % 5 == 0 and self.CP.flags & HyundaiFlags.SEND_LFA.value: - can_sends.append(hyundaican.create_lfahda_mfc(self.packer, CC.enabled, self.lfa_icon)) - - # 5 Hz ACC options - if self.frame % 20 == 0 and self.CP.openpilotLongitudinalControl: - can_sends.extend(hyundaican.create_acc_opt(self.packer, self.CP, self.ESCC)) - - # 2 Hz front radar options - if self.frame % 50 == 0 and self.CP.openpilotLongitudinalControl and not self.ESCC.enabled: - can_sends.append(hyundaican.create_frt_radar_opt(self.packer)) - - return can_sends - - def create_canfd_msgs(self, apply_steer_req, apply_torque, set_speed_in_units, accel, stopping, hud_control, CS, CC): - can_sends = [] - - lka_steering = self.CP.flags & HyundaiFlags.CANFD_LKA_STEERING - lka_steering_long = lka_steering and self.CP.openpilotLongitudinalControl - - # steering control - can_sends.extend(hyundaicanfd.create_steering_messages(self.packer, self.CP, self.CAN, CC.enabled, apply_steer_req, apply_torque, self.lkas_icon)) - - # prevent LFA from activating on LKA steering cars by sending "no lane lines detected" to ADAS ECU - if self.frame % 5 == 0 and lka_steering: - can_sends.append(hyundaicanfd.create_suppress_lfa(self.packer, self.CAN, CS.lfa_block_msg, - self.CP.flags & HyundaiFlags.CANFD_LKA_STEERING_ALT)) - - # LFA and HDA icons - if self.frame % 5 == 0 and (not lka_steering or lka_steering_long): - can_sends.append(hyundaicanfd.create_lfahda_cluster(self.packer, self.CAN, CC.enabled, self.lfa_icon)) - - # blinkers - if lka_steering and self.CP.flags & HyundaiFlags.ENABLE_BLINKERS: - can_sends.extend(hyundaicanfd.create_spas_messages(self.packer, self.CAN, CC.leftBlinker, CC.rightBlinker)) - - if self.CP.openpilotLongitudinalControl: - if lka_steering: - can_sends.extend(hyundaicanfd.create_adrv_messages(self.packer, self.CAN, self.frame)) - else: - can_sends.extend(hyundaicanfd.create_fca_warning_light(self.packer, self.CAN, self.frame)) - if self.frame % 2 == 0: - can_sends.append(hyundaicanfd.create_acc_control(self.packer, self.CAN, CC.enabled, self.accel_last, accel, stopping, CC.cruiseControl.override, - set_speed_in_units, hud_control, self.lead_data, CS.main_cruise_enabled, self.tuning)) - self.accel_last = accel else: - # button presses + + # carrot.. 왜 alt_cruise_button는 값이 리스트일까?, 그리고 왜? 빈데이터가 들어오는것일까? + if CS.cruise_buttons_msg is not None and self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS: + try: + cruise_buttons_msg_values = {key: value[0] for key, value in CS.cruise_buttons_msg.items()} + except: # IndexError: + #print("IndexError....") + cruise_buttons_msg_values = None + self.cruise_buttons_msg_cnt += 1 + if cruise_buttons_msg_values is not None: + self.cruise_buttons_msg_values = cruise_buttons_msg_values + self.cruise_buttons_msg_cnt = 0 + if (self.frame - self.last_button_frame) * DT_CTRL > 0.25: # cruise cancel if CC.cruiseControl.cancel: - if self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS: - can_sends.append(hyundaicanfd.create_acc_cancel(self.packer, self.CP, self.CAN, CS.cruise_info)) - self.last_button_frame = self.frame - else: - for _ in range(20): - can_sends.append(hyundaicanfd.create_buttons(self.packer, self.CP, self.CAN, CS.buttons_counter + 1, Buttons.CANCEL)) + if (self.frame - self.last_button_frame) * DT_CTRL > 0.1: + print("cruiseControl.cancel222222") + if self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS: + #can_sends.append(hyundaicanfd.create_acc_cancel(self.packer, self.CP, self.CAN, CS.scc_control)) + if self.cruise_buttons_msg_values is not None: + can_sends.append(hyundaicanfd.alt_cruise_buttons(self.packer, self.CP, self.CAN, Buttons.CANCEL, self.cruise_buttons_msg_values, self.cruise_buttons_msg_cnt)) + + else: + for _ in range(20): + can_sends.append(hyundaicanfd.create_buttons(self.packer, self.CP, self.CAN, CS.buttons_counter+1, Buttons.CANCEL)) self.last_button_frame = self.frame # cruise standstill resume - elif CC.cruiseControl.resume: + elif False: #CC.cruiseControl.resume: if self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS: # TODO: resume for alt button cars pass else: for _ in range(20): - can_sends.append(hyundaicanfd.create_buttons(self.packer, self.CP, self.CAN, CS.buttons_counter + 1, Buttons.RES_ACCEL)) + can_sends.append(hyundaicanfd.create_buttons(self.packer, self.CP, self.CAN, CS.buttons_counter+1, Buttons.RES_ACCEL)) self.last_button_frame = self.frame + ## button 스패밍을 안했을때... + if self.last_button_frame != self.frame: + dat = self.canfd_speed_control_pcm(CC, CS, self.cruise_buttons_msg_values) + if dat is not None: + for _ in range(self.button_spam3): + can_sends.append(dat) + self.cruise_buttons_msg_cnt += 1 + return can_sends + + def canfd_toggle_adas(self, CC, CS): + trigger_min = -200 + trigger_start = 6 + self.MainMode_ACC_trigger = max(trigger_min, self.MainMode_ACC_trigger - 1) + self.LFA_trigger = max(trigger_min, self.LFA_trigger - 1) + if self.MainMode_ACC_trigger == trigger_min and self.LFA_trigger == trigger_min: + if CC.enabled and not CS.MainMode_ACC and CS.out.vEgo > 3.: + self.MainMode_ACC_trigger = trigger_start + elif CC.latActive and CS.LFA_ICON == 0: + self.LFA_trigger = trigger_start + + def canfd_speed_control_pcm(self, CC, CS, cruise_buttons_msg_values): + + alt_buttons = True if self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS else False + + if alt_buttons and cruise_buttons_msg_values is None: + return None + + send_button = self.make_spam_button(CC, CS) + if send_button > 0: + if alt_buttons: + return hyundaicanfd.alt_cruise_buttons(self.packer, self.CP, self.CAN, send_button, cruise_buttons_msg_values, self.cruise_buttons_msg_cnt) + else: + return hyundaicanfd.create_buttons(self.packer, self.CP, self.CAN, CS.buttons_counter+1, send_button) + + return None + + + def make_spam_button(self, CC, CS): + hud_control = CC.hudControl + set_speed_in_units = hud_control.setSpeed * (CV.MS_TO_KPH if CS.is_metric else CV.MS_TO_MPH) + target = int(set_speed_in_units+0.5) + current = int(CS.out.cruiseState.speed * (CV.MS_TO_KPH if CS.is_metric else CV.MS_TO_MPH) + 0.5) + v_ego_kph = CS.out.vEgo * CV.MS_TO_KPH + + send_button = 0 + activate_cruise = False + + if CC.enabled: + if not CS.out.cruiseState.enabled: + if (hud_control.leadVisible or v_ego_kph > 10.0) and self.activateCruise == 0: + send_button = Buttons.RES_ACCEL + self.activateCruise = 1 + activate_cruise = True + elif CC.cruiseControl.resume: + send_button = Buttons.RES_ACCEL + elif target < current and current>= 31 and self.speed_from_pcm != 1: + send_button = Buttons.SET_DECEL + elif target > current and current < 160 and self.speed_from_pcm != 1: + send_button = Buttons.RES_ACCEL + elif CS.out.activateCruise: #CC.cruiseControl.activate: + if (hud_control.leadVisible or v_ego_kph > 10.0) and self.activateCruise == 0: + self.activateCruise = 1 + send_button = Buttons.RES_ACCEL + activate_cruise = True + + if CS.out.brakePressed or CS.out.gasPressed: + self.activateCruise = 0 + + if send_button == 0: + self.button_spamming_count = 0 + self.prev_clu_speed = current + return 0 + + speed_diff = self.prev_clu_speed - current + spamming_max = self.button_spam1 + if CS.cruise_buttons[-1] != Buttons.NONE: + self.last_button_frame = self.frame + self.button_wait = self.button_spam2 + self.button_spamming_count = 0 + elif abs(self.button_spamming_count) >= spamming_max or abs(speed_diff) > 0: + self.last_button_frame = self.frame + self.button_wait = self.button_spam2 if abs(self.button_spamming_count) >= spamming_max else 7 + self.button_spamming_count = 0 + + self.prev_clu_speed = current + send_button_allowed = (self.frame - self.last_button_frame) > self.button_wait + #CC.debugTextCC = "{} speed_diff={:.1f},{:.0f}/{:.0f}, button={}, button_wait={}, count={}".format( + # send_button_allowed, speed_diff, target, current, send_button, self.button_wait, self.button_spamming_count) + + if send_button_allowed or activate_cruise or (CC.cruiseControl.resume and self.frame % 2 == 0): + self.button_spamming_count = self.button_spamming_count + 1 if send_button == Buttons.RES_ACCEL else self.button_spamming_count - 1 + return send_button + else: + self.button_spamming_count = 0 + return 0 + +from openpilot.common.filter_simple import MyMovingAverage +class HyundaiJerk: + def __init__(self): + self.params = Params() + self.jerk = 0.0 + self.jerk_u = self.jerk_l = 0.0 + self.cb_upper = self.cb_lower = 0.0 + self.jerk_u_min = 0.5 + self.carrot_cruise = 1 + self.carrot_cruise_accel = 0.0 + + def check_carrot_cruise(self, CC, CS, hud_control, stopping, accel, a_target): + carrot_cruise_decel = self.params.get_float("CarrotCruiseDecel") + carrot_cruise_atc_decel = self.params.get_float("CarrotCruiseAtcDecel") + if carrot_cruise_atc_decel >= 0 and 0 < hud_control.atcDistance < 500: + carrot_cruise_decel = max(carrot_cruise_decel, carrot_cruise_atc_decel) + self.carrot_cruise = 0 + if CS.out.carrotCruise > 0 and not CC.cruiseControl.override: + if CS.softHoldActive == 0 and not stopping: + if CS.out.vEgo > 10/3.6: + if carrot_cruise_decel < 0: + if (a_target > -0.1 or accel > -0.1): + self.carrot_cruise = 1 + self.carrot_cruise_accel = 0.0 + else: + self.carrot_cruise = 2 + carrot_cruise = min(accel, -carrot_cruise_decel * 0.01) + self.carrot_cruise_accel = max(carrot_cruise, self.carrot_cruise_accel - 1.0 * DT_CTRL) # 점진적으로 줄임. + if self.carrot_cruise == 0: + self.carrot_cruise_accel = CS.out.aEgo + + def make_jerk(self, CP, CS, accel, actuators, hud_control): + if actuators.longControlState == LongCtrlState.stopping: + self.jerk = self.jerk_u_min / 2 - CS.out.aEgo + else: + jerk = actuators.jerk if actuators.longControlState == LongCtrlState.pid else 0.0 + #a_error = actuators.aTarget - CS.out.aEgo + self.jerk = jerk# + a_error + + jerk_max_l = 5.0 + jerk_max_u = jerk_max_l + if actuators.longControlState == LongCtrlState.off: + self.jerk_u = jerk_max_u + self.jerk_l = jerk_max_l + self.cb_upper = self.cb_lower = 0.0 + else: + if CP.flags & HyundaiFlags.CANFD: + # Keep deceleration authority after the MPC jerk settles to zero. Stock SCC raises the + # lower jerk limit with the raw acceleration request instead of relying on jerk alone. + jerk_l_base = 1.2 + jerk_l_raw = np.clip(jerk_l_base + 2.0 * max(0.0, -accel - 2.8), jerk_l_base, jerk_max_l) + jerk_l_mpc = np.clip(-self.jerk * 4.0, jerk_l_base, jerk_max_l) + + self.jerk_u = min(max(self.jerk_u_min, self.jerk * 2.0), jerk_max_u) + self.jerk_l = max(jerk_l_raw, jerk_l_mpc) + self.cb_upper = self.cb_lower = 0.0 + else: + self.jerk_u = min(max(self.jerk_u_min, self.jerk * 2.0), jerk_max_u) + self.jerk_l = min(max(1.0, -self.jerk * 4.0), jerk_max_l) + self.cb_upper = np.clip(0.9 + accel * 0.2, 0, 1.2) + self.cb_lower = np.clip(0.8 + accel * 0.2, 0, 1.2) diff --git a/iqdbc_repo/iqdbc/car/hyundai/carstate.py b/iqdbc_repo/iqdbc/car/hyundai/carstate.py index 6b98f38bc..48eb597ec 100644 --- a/iqdbc_repo/iqdbc/car/hyundai/carstate.py +++ b/iqdbc_repo/iqdbc/car/hyundai/carstate.py @@ -1,47 +1,83 @@ from collections import deque import copy import math +import numpy as np +import ast from iqdbc.can import CANDefine, CANParser -from iqdbc.car import Bus, create_button_events, structs +from iqdbc.car import Bus, create_button_events, structs, DT_CTRL from iqdbc.car.common.conversions import Conversions as CV from iqdbc.car.hyundai.hyundaicanfd import CanBus -from iqdbc.car.hyundai.values import HyundaiFlags, CAR, DBC, Buttons, CarControllerParams +from iqdbc.car.hyundai.values import HyundaiFlags, CAR, DBC, Buttons, CarControllerParams, CAMERA_SCC_CAR, HyundaiExtFlags, \ + EV_MODE_ACTIVE_VALUES, EV_MODE_STATUS_ADDR, EV_MODE_STATUS_DLC, EV_MODE_STATUS_MSG, \ + EV_MODE_STATUS_SIGNAL from iqdbc.car.interfaces import CarStateBase -from iqdbc.iqpilot.car.hyundai.carstate_ext import CarStateExt -from iqdbc.iqpilot.car.hyundai.escc import EsccCarStateBase -from iqdbc.iqpilot.car.hyundai.aol import AolCarState -from iqdbc.iqpilot.car.hyundai.values import HyundaiFlagsIQ +from openpilot.common.params import Params + +from datetime import datetime +from zoneinfo import ZoneInfo + ButtonType = structs.CarState.ButtonEvent.Type PREV_BUTTON_SAMPLES = 8 CLUSTER_SAMPLE_RATE = 20 # frames -STANDSTILL_THRESHOLD = 12 * 0.03125 +STANDSTILL_THRESHOLD = 12 * 0.03125 * CV.KPH_TO_MS -# Cancel button can sometimes be ACC pause/resume button, main button can also enable on some cars -ENABLE_BUTTONS = (Buttons.RES_ACCEL, Buttons.SET_DECEL, Buttons.CANCEL) BUTTONS_DICT = {Buttons.RES_ACCEL: ButtonType.accelCruise, Buttons.SET_DECEL: ButtonType.decelCruise, - Buttons.GAP_DIST: ButtonType.gapAdjustCruise, Buttons.CANCEL: ButtonType.cancel} + Buttons.GAP_DIST: ButtonType.gapAdjustCruise, Buttons.CANCEL: ButtonType.cancel, Buttons.LFA_BUTTON: ButtonType.lfaButton} + +GearShifter = structs.CarState.GearShifter + +READY_COUNT_OK = 200 +TRAILER_DISCONNECT_GRACE_FRAMES = int(5.0 / DT_CTRL) +EV_MODE_STATUS_TIMEOUT_NS = 500_000_000 -class CarState(CarStateBase, EsccCarStateBase, AolCarState, CarStateExt): - def __init__(self, CP, CP_IQ): - CarStateBase.__init__(self, CP, CP_IQ) - EsccCarStateBase.__init__(self) - AolCarState.__init__(self, CP, CP_IQ) - CarStateExt.__init__(self, CP, CP_IQ) +def _get_ev_mode_state(cp: CANParser) -> tuple[bool, bool]: + timestamps = cp.ts_nanos.get(EV_MODE_STATUS_MSG) + if timestamps is None: + return False, False + + timestamp = timestamps.get(EV_MODE_STATUS_SIGNAL, 0) + dat = cp.dat.get(EV_MODE_STATUS_ADDR, b"") + # The update timestamp advances even when the whole ECAN bus is silent. + # last_nonempty_nanos would leave the final decoded state valid forever. + age = cp._last_update_nanos - timestamp + valid = timestamp > 0 and len(dat) == EV_MODE_STATUS_DLC and not cp.bus_timeout and 0 <= age <= EV_MODE_STATUS_TIMEOUT_NS + active = valid and int(cp.vl[EV_MODE_STATUS_MSG][EV_MODE_STATUS_SIGNAL]) in EV_MODE_ACTIVE_VALUES + return active, valid + + +NUMERIC_TO_TZ = { + 840: "America/New_York", # 미국 (US) → 동부 시간대 + 124: "America/Toronto", # 캐나다 (CA) → 동부 시간대 + 250: "Europe/Paris", # 프랑스 (FR) + 276: "Europe/Berlin", # 독일 (DE) + 826: "Europe/London", # 영국 (GB) + 392: "Asia/Tokyo", # 일본 (JP) + 156: "Asia/Shanghai", # 중국 (CN) + 410: "Asia/Seoul", # 한국 (KR) + 36: "Australia/Sydney", # 호주 (AU) + 356: "Asia/Kolkata", # 인도 (IN) +} + +class CarState(CarStateBase): + def __init__(self, CP, CP_IQ=None): + super().__init__(CP, CP_IQ or structs.IQCarParams()) can_define = CANDefine(DBC[CP.carFingerprint][Bus.pt]) self.cruise_buttons: deque = deque([Buttons.NONE] * PREV_BUTTON_SAMPLES, maxlen=PREV_BUTTON_SAMPLES) self.main_buttons: deque = deque([Buttons.NONE] * PREV_BUTTON_SAMPLES, maxlen=PREV_BUTTON_SAMPLES) - self.lda_button = 0 - self.gear_msg_canfd = "ACCELERATOR" if CP.flags & HyundaiFlags.EV else \ + self.gear_msg_canfd = "GEAR" if CP.extFlags & HyundaiExtFlags.CANFD_GEARS_69 else \ + "ACCELERATOR" if CP.flags & HyundaiFlags.EV else \ "GEAR_ALT" if CP.flags & HyundaiFlags.CANFD_ALT_GEARS else \ "GEAR_ALT_2" if CP.flags & HyundaiFlags.CANFD_ALT_GEARS_2 else \ "GEAR_SHIFTER" + + self.use_accelerator = self.gear_msg_canfd == "ACCELERATOR" if CP.flags & HyundaiFlags.CANFD: self.shifter_values = can_define.dv[self.gear_msg_canfd]["GEAR"] elif CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): @@ -63,31 +99,210 @@ class CarState(CarStateBase, EsccCarStateBase, AolCarState, CarStateExt): self.is_metric = False self.buttons_counter = 0 - self.cruise_info = {} + # for generic CAN parsing + self.fca11 = None + self.scc11 = None + self.scc12 = None + self.scc13 = None + self.scc14 = None + self.lkas11 = None + self.clu11 = None + + # for CANFD parsing + self.scc_control = None + self.lfa = None + self.lfa_alt = None + self.lfahda_cluster = None + self.adrv_0x161 = None + self.adrv_0x200 = None + self.adrv_0x1ea = None + self.adrv_0x160 = None + self.ccnc_0x162 = None + self.hda_info_4a3 = None + self.tcs = None + self.mdps = None + self.steer_touch_2af = None + self.cruise_buttons_msg = None + self.cam_0x362 = None + self.cam_0x2a4 = None + self.manual_speed_limit_assist = None + self.accelerator = None + self.blinkers = None + self.blinkers_alt = None + self.doors_seatbelts = None + self.cruise_buttons_alt2 = None # On some cars, CLU15->CF_Clu_VehicleSpeed can oscillate faster than the dash updates. Sample at 5 Hz self.cluster_speed = 0 self.cluster_speed_counter = CLUSTER_SAMPLE_RATE self.params = CarControllerParams(CP) + self.op_params = Params() + + self.main_enabled = True if self.op_params.get_int("AutoEngage") == 2 else False + self.gear_shifter = GearShifter.drive # Gear_init for Nexo ?? unknown 21.02.23.LSW + + self.totalDistance = 0.0 + self.speedLimitDistance = 0 + self.pcmCruiseGap = 0 + + self.cruise_buttons_alt = True if self.CP.carFingerprint in (CAR.HYUNDAI_CASPER, CAR.HYUNDAI_CASPER_EV) else False + self.MainMode_ACC = False + self.ACCMode = 0 + self.LFA_ICON = 0 + self.paddle_button_prev = 0 + + self.lf_distance = 0 + self.rf_distance = 0 + self.lr_distance = 0 + self.rr_distance = 0 + #self.lf_lateral = 0 + #self.rf_lateral = 0 + + fingerprints_str = Params().get("FingerPrints") + try: + fingerprints = ast.literal_eval(fingerprints_str) if fingerprints_str else {i: {} for i in range(8)} + except (SyntaxError, ValueError): + fingerprints = {i: {} for i in range(8)} + #print("fingerprints =", fingerprints) + ecu_disabled = False + if self.CP.openpilotLongitudinalControl and not (self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC): + ecu_disabled = True + + + self.HAS_LFA_BUTTON = True if 913 in fingerprints[0] else False + self.CRUISE_BUTTON_ALT = True if 1007 in fingerprints[0] else False + + cam_bus = CanBus(CP).CAM + pt_bus = CanBus(CP).ECAN + alt_bus = CanBus(CP).ACAN + self.GEAR = True if 69 in fingerprints[pt_bus] else False + self.GEAR_ALT = True if 64 in fingerprints[pt_bus] else False + self.TPMS = True if 0x3a0 in fingerprints[pt_bus] else False + self.LOCAL_TIME = True if 1264 in fingerprints[pt_bus] else False + + self.cp_bsm = None + self.time_zone = "UTC" + + self.cp = None + self.cp_cam = None + self.cp_alt = None + self.controls_ready_count = 0 + + # trailer detection + self.trailer_connected = False + self.trailer_timeout_cnt = 0 + self.trailer_connected_prev = False + self.trailer_status = None + + def monitor_fingerprint(self, can_parsers, canfd): + if self.controls_ready_count <= READY_COUNT_OK: + if Params().get_bool("ControlsReady"): + self.controls_ready_count += 1 + + self.cp = can_parsers[Bus.pt] + self.cp_cam = can_parsers[Bus.cam] + self.cp_alt = can_parsers[Bus.alt] if Bus.alt in can_parsers else None + + def add_if_seen(parser, name, ignore_counter = False): + msg = parser.dbc.name_to_msg.get(name) + if not msg: + print(f"{name} not in DBC") + return + if msg.address not in parser.seen_addresses: + return + if msg.address in parser.addresses: + return + parser._add_message(name, ignore_counter = ignore_counter) # ← 이름으로 등록 + + def add_and_cache(parser, name: str, attr: str, ignore_counter: bool = False): + add_if_seen(parser, name, ignore_counter) + if name in parser.vl: # 등록 성공했을 때만 + setattr(self, attr, parser.vl[name]) + return True + return False + + if self.controls_ready_count == 50: + self.cp.controls_ready = self.cp_cam.controls_ready = True + if self.cp_alt is not None: + self.cp_alt.controls_ready = True + elif self.controls_ready_count == 100: + self.cp.enable_capture = self.cp_cam.enable_capture = False + if self.cp_alt is not None: + self.cp_alt.enable_capture = False + elif self.controls_ready_count == 101: + print("cp_cam.seen_addresses =", self.cp_cam.seen_addresses) + elif self.controls_ready_count == 102: + print("cp.seen_addresses =", self.cp.seen_addresses) + elif self.controls_ready_count == 103: + if self.cp_alt is not None: + print("cp_alt.seen_addresses =", self.cp_alt.seen_addresses) + else: + print("cp_alt.seen_addresses = None") + if not canfd: + if self.controls_ready_count == 104: + if not add_and_cache(self.cp_cam, "FCA11", "fca11"): + add_and_cache(self.cp, "FCA11", "fca11") + add_and_cache(self.cp_cam, "LKAS11", "lkas11") + add_and_cache(self.cp, "CLU11", "clu11") + elif self.controls_ready_count == 105: + cp_cruise = self.cp_cam if self.CP.flags & HyundaiFlags.CAMERA_SCC else self.cp + scc_messages_expected = not self.CP.openpilotLongitudinalControl or self.CP.flags & HyundaiFlags.CAMERA_SCC + if scc_messages_expected: + add_and_cache(cp_cruise, "SCC11", "scc11") + add_and_cache(cp_cruise, "SCC12", "scc12") + add_and_cache(cp_cruise, "SCC13", "scc13") + add_and_cache(cp_cruise, "SCC14", "scc14") + else: # canfd + if self.controls_ready_count == 120: + cp_cruise = self.cp_cam if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else self.cp + add_and_cache(cp_cruise, "SCC_CONTROL", "scc_control") + elif self.controls_ready_count == 121: + add_and_cache(self.cp, "TCS", "tcs") + add_and_cache(self.cp, "MDPS", "mdps") + add_and_cache(self.cp_cam, "LFA", "lfa") + add_and_cache(self.cp_cam, "LFA_ALT", "lfa_alt") + add_and_cache(self.cp_cam, "LFAHDA_CLUSTER", "lfahda_cluster") + elif self.controls_ready_count == 122: + add_and_cache(self.cp_cam, "ADRV_0x161", "adrv_0x161") + add_and_cache(self.cp_cam, "ADRV_0x200", "adrv_0x200") + add_and_cache(self.cp_cam, "ADRV_0x1ea", "adrv_0x1ea") + add_and_cache(self.cp_cam, "ADRV_0x160", "adrv_0x160") + add_and_cache(self.cp_cam, "CCNC_0x162", "ccnc_0x162") + elif self.controls_ready_count == 123: + add_and_cache(self.cp, "HDA_INFO_4A3", "hda_info_4a3") + add_and_cache(self.cp, "STEER_TOUCH_2AF", "steer_touch_2af") + elif self.controls_ready_count == 124: + add_and_cache(self.cp, self.cruise_btns_msg_canfd, "cruise_buttons_msg") + if not add_and_cache(self.cp_cam, "CAM_0x362", "cam_0x362") and self.cp_alt is not None: + add_and_cache(self.cp_alt, "CAM_0x362", "cam_0x362") + if not add_and_cache(self.cp_alt, "CAM_0x2a4", "cam_0x2a4") and self.cp_cam is not None: + add_and_cache(self.cp_cam, "CAM_0x2a4", "cam_0x2a4") + elif self.controls_ready_count == 125: + add_and_cache(self.cp, "MANUAL_SPEED_LIMIT_ASSIST", "manual_speed_limit_assist", ignore_counter = True) + if self.gear_msg_canfd == "ACCELERATOR": + add_and_cache(self.cp, "ACCELERATOR", "accelerator", ignore_counter = True) + add_and_cache(self.cp, "BLINKERS", "blinkers") + add_and_cache(self.cp, "BLINKERS_ALT", "blinkers_alt") + add_and_cache(self.cp, "DOORS_SEATBELTS", "doors_seatbelts") + elif self.controls_ready_count == 126: + add_and_cache(self.cp, "CRUISE_BUTTONS_ALT2", "cruise_buttons_alt2", ignore_counter = True) + add_and_cache(self.cp, "TRAILER_STATUS", "trailer_status", ignore_counter = True) + + - self.steer_fault_counter = 0 - def recent_button_interaction(self) -> bool: - # On some newer model years, the CANCEL button acts as a pause/resume button based on the PCM state - # To avoid re-engaging when openpilot cancels, check user engagement intention via buttons - # Main button also can trigger an engagement on these cars - return any(btn in ENABLE_BUTTONS for btn in self.cruise_buttons) or any(self.main_buttons) def update(self, can_parsers) -> tuple[structs.CarState, structs.IQCarState]: + self.monitor_fingerprint(can_parsers, self.CP.flags & HyundaiFlags.CANFD) cp = can_parsers[Bus.pt] cp_cam = can_parsers[Bus.cam] + cp_alt = can_parsers[Bus.alt] if Bus.alt in can_parsers else None if self.CP.flags & HyundaiFlags.CANFD: - return self.update_canfd(can_parsers) + return self.update_canfd(can_parsers), self.out_iq ret = structs.CarState() - ret_iq = structs.IQCarState() cp_cruise = cp_cam if self.CP.flags & HyundaiFlags.CAMERA_SCC else cp self.is_metric = cp.vl["CLU11"]["CF_Clu_SPEED_UNIT"] == 0 speed_conv = CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS @@ -97,13 +312,18 @@ class CarState(CarStateBase, EsccCarStateBase, AolCarState, CarStateExt): ret.seatbeltUnlatched = cp.vl["CGW1"]["CF_Gway_DrvSeatBeltSw"] == 0 - self.parse_wheel_speeds(ret, + if cp.ts_nanos["EMS21"]["SCR_UREA_LEVEL"] > 0: + ret.ureaGauge = float(np.clip(cp.vl["EMS21"]["SCR_UREA_LEVEL"] / 100.0, 0.0, 1.0)) + + ret.wheelSpeeds = self.get_wheel_speeds( cp.vl["WHL_SPD11"]["WHL_SPD_FL"], cp.vl["WHL_SPD11"]["WHL_SPD_FR"], cp.vl["WHL_SPD11"]["WHL_SPD_RL"], cp.vl["WHL_SPD11"]["WHL_SPD_RR"], ) - ret.standstill = cp.vl["WHL_SPD11"]["WHL_SPD_FL"] <= STANDSTILL_THRESHOLD and cp.vl["WHL_SPD11"]["WHL_SPD_RR"] <= STANDSTILL_THRESHOLD + ret.vEgoRaw = (ret.wheelSpeeds.fl + ret.wheelSpeeds.fr + ret.wheelSpeeds.rl + ret.wheelSpeeds.rr) / 4. + ret.vEgo, ret.aEgo = self.update_speed_kf(ret.vEgoRaw) + ret.standstill = ret.wheelSpeeds.fl <= STANDSTILL_THRESHOLD and ret.wheelSpeeds.rr <= STANDSTILL_THRESHOLD self.cluster_speed_counter += 1 if self.cluster_speed_counter > CLUSTER_SAMPLE_RATE: @@ -116,73 +336,109 @@ class CarState(CarStateBase, EsccCarStateBase, AolCarState, CarStateExt): if not self.is_metric and self.CP.carFingerprint not in (CAR.KIA_SORENTO,): self.cluster_speed = math.floor(self.cluster_speed * CV.KPH_TO_MPH + CV.KPH_TO_MPH) - ret.vEgoCluster = self.cluster_speed * speed_conv + #ret.vEgoCluster = self.cluster_speed * speed_conv ret.steeringAngleDeg = cp.vl["SAS11"]["SAS_Angle"] ret.steeringRateDeg = cp.vl["SAS11"]["SAS_Speed"] + ret.yawRate = cp.vl["ESP12"]["YAW_RATE"] ret.leftBlinker, ret.rightBlinker = self.update_blinker_from_lamp( 50, cp.vl["CGW1"]["CF_Gway_TurnSigLh"], cp.vl["CGW1"]["CF_Gway_TurnSigRh"]) ret.steeringTorque = cp.vl["MDPS12"]["CR_Mdps_StrColTq"] ret.steeringTorqueEps = cp.vl["MDPS12"]["CR_Mdps_OutTq"] ret.steeringPressed = self.update_steering_pressed(abs(ret.steeringTorque) > self.params.STEER_THRESHOLD, 5) - steer_fault_raw = cp.vl["MDPS12"]["CF_Mdps_ToiUnavail"] != 0 or cp.vl["MDPS12"]["CF_Mdps_ToiFlt"] != 0 - self.steer_fault_counter = self.steer_fault_counter + 1 if steer_fault_raw else 0 - ret.steerFaultTemporary = self.steer_fault_counter > 5 + ret.steerFaultTemporary = cp.vl["MDPS12"]["CF_Mdps_ToiUnavail"] != 0 or cp.vl["MDPS12"]["CF_Mdps_ToiFlt"] != 0 # cruise state if self.CP.openpilotLongitudinalControl: # These are not used for engage/disengage since openpilot keeps track of state using the buttons - ret.cruiseState.available = cp.vl["TCS13"]["ACCEnable"] == 0 + ret.cruiseState.available = self.main_enabled and self.controls_ready_count >= READY_COUNT_OK #cp.vl["TCS13"]["ACCEnable"] == 0 ret.cruiseState.enabled = cp.vl["TCS13"]["ACC_REQ"] == 1 ret.cruiseState.standstill = False ret.cruiseState.nonAdaptive = False - elif not self.CP_IQ.flags & HyundaiFlagsIQ.NON_SCC: - ret.cruiseState.available = cp_cruise.vl["SCC11"]["MainMode_ACC"] == 1 + elif not self.CP.flags & HyundaiFlags.CC_ONLY_CAR: + self.main_enabled = ret.cruiseState.available = cp_cruise.vl["SCC11"]["MainMode_ACC"] == 1 ret.cruiseState.enabled = cp_cruise.vl["SCC12"]["ACCMode"] != 0 ret.cruiseState.standstill = cp_cruise.vl["SCC11"]["SCCInfoDisplay"] == 4. ret.cruiseState.nonAdaptive = cp_cruise.vl["SCC11"]["SCCInfoDisplay"] == 2. # Shows 'Cruise Control' on dash ret.cruiseState.speed = cp_cruise.vl["SCC11"]["VSetDis"] * speed_conv + ret.pcmCruiseGap = cp_cruise.vl["SCC11"]["TauGapSet"] + # TODO: Find brake pressure ret.brake = 0 - ret.brakePressed = cp.vl["TCS13"]["DriverOverride"] == 2 # 2 includes regen braking by user on HEV/EV - ret.brakeHoldActive = cp.vl["TCS15"]["AVH_LAMP"] == 2 # 0 OFF, 1 ERROR, 2 ACTIVE, 3 READY - ret.parkingBrake = cp.vl["TCS13"]["PBRAKE_ACT"] == 1 - ret.espDisabled = cp.vl["TCS11"]["TCS_PAS"] == 1 - ret.espActive = cp.vl["TCS11"]["ABS_ACT"] == 1 - ret.accFaulted = cp.vl["TCS13"]["ACCEnable"] != 0 # 0 ACC CONTROL ENABLED, 1-3 ACC CONTROL DISABLED + if not self.CP.flags & HyundaiFlags.CC_ONLY_CAR: + ret.brakePressed = cp.vl["TCS13"]["DriverOverride"] == 2 # 2 includes regen braking by user on HEV/EV + ret.brakeHoldActive = cp.vl["TCS15"]["AVH_LAMP"] == 2 # 0 OFF, 1 ERROR, 2 ACTIVE, 3 READY + ret.parkingBrake = cp.vl["TCS13"]["PBRAKE_ACT"] == 1 + ret.espDisabled = cp.vl["TCS11"]["TCS_PAS"] == 1 + ret.espActive = cp.vl["TCS11"]["ABS_ACT"] == 1 + ret.accFaulted = cp.vl["TCS13"]["ACCEnable"] != 0 # 0 ACC CONTROL ENABLED, 1-3 ACC CONTROL DISABLED + ret.brakeLights = bool(cp.vl["TCS13"]["BrakeLight"] or ret.brakePressed) if self.CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV | HyundaiFlags.FCEV): if self.CP.flags & HyundaiFlags.FCEV: - ret.gasPressed = cp.vl["FCEV_ACCELERATOR"]["ACCELERATOR_PEDAL"] > 0 + ret.gas = cp.vl["FCEV_ACCELERATOR"]["ACCELERATOR_PEDAL"] / 254. elif self.CP.flags & HyundaiFlags.HYBRID: - ret.gasPressed = cp.vl["E_EMS11"]["CR_Vcu_AccPedDep_Pos"] > 0 + ret.gas = cp.vl["E_EMS11"]["CR_Vcu_AccPedDep_Pos"] / 254. else: - ret.gasPressed = cp.vl["E_EMS11"]["Accel_Pedal_Pos"] > 0 + ret.gas = cp.vl["E_EMS11"]["Accel_Pedal_Pos"] / 254. + ret.gasPressed = ret.gas > 0 else: + ret.gas = cp.vl["EMS12"]["PV_AV_CAN"] / 100. ret.gasPressed = bool(cp.vl["EMS16"]["CF_Ems_AclAct"]) # Gear Selection via Cluster - For those Kia/Hyundai which are not fully discovered, we can use the Cluster Indicator for Gear Selection, # as this seems to be standard over all cars, but is not the preferred method. if self.CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): gear = cp.vl["ELECT_GEAR"]["Elect_Gear_Shifter"] + ret.gearStep = cp.vl["ELECT_GEAR"]["Elect_Gear_Step"] + if self.CP.carFingerprint == CAR.HYUNDAI_CASPER_EV: + ret.gearStep = 0 elif self.CP.flags & HyundaiFlags.FCEV: gear = cp.vl["EMS20"]["HYDROGEN_GEAR_SHIFTER"] elif self.CP.flags & HyundaiFlags.CLUSTER_GEARS: gear = cp.vl["CLU15"]["CF_Clu_Gear"] + if self.CP.carFingerprint == CAR.KIA_K7: + ret.gearStep = cp.vl["LVR11"]["CF_Lvr_GearInf"] elif self.CP.flags & HyundaiFlags.TCU_GEARS: gear = cp.vl["TCU12"]["CUR_GR"] else: gear = cp.vl["LVR12"]["CF_Lvr_Gear"] + ret.gearStep = cp.vl["LVR11"]["CF_Lvr_GearInf"] - ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(gear)) + if not self.CP.carFingerprint in (CAR.HYUNDAI_NEXO): + ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(gear)) + else: + gear = cp.vl["ELECT_GEAR"]["Elect_Gear_Shifter"] + gear_disp = cp.vl["ELECT_GEAR"] - if (not self.CP.openpilotLongitudinalControl or self.CP.flags & HyundaiFlags.CAMERA_SCC) and not self.CP_IQ.flags & HyundaiFlagsIQ.NON_SCC: + gear_shifter = GearShifter.unknown + + if gear == 1546: # Thank you for Neokii # fix PolorBear 22.06.05 + gear_shifter = GearShifter.drive + elif gear == 2314: + gear_shifter = GearShifter.neutral + elif gear == 2569: + gear_shifter = GearShifter.park + elif gear == 2566: + gear_shifter = GearShifter.reverse + + if gear_shifter != GearShifter.unknown and self.gear_shifter != gear_shifter: + self.gear_shifter = gear_shifter + + ret.gearShifter = self.gear_shifter + + if not self.CP.flags & HyundaiFlags.CC_ONLY_CAR and (not self.CP.openpilotLongitudinalControl or self.CP.flags & HyundaiFlags.CAMERA_SCC): aeb_src = "FCA11" if self.CP.flags & HyundaiFlags.USE_FCA.value else "SCC12" aeb_sig = "FCA_CmdAct" if self.CP.flags & HyundaiFlags.USE_FCA.value else "AEB_CmdAct" aeb_warning = cp_cruise.vl[aeb_src]["CF_VSM_Warn"] != 0 scc_warning = cp_cruise.vl["SCC12"]["TakeOverReq"] == 1 # sometimes only SCC system shows an FCW aeb_braking = cp_cruise.vl[aeb_src]["CF_VSM_DecCmdAct"] != 0 or cp_cruise.vl[aeb_src][aeb_sig] != 0 + if self.CP.carFingerprint == CAR.HYUNDAI_CASPER_EV and aeb_src == "FCA11": + fca_fault = cp_cruise.vl["FCA11"]["FCA_Failinfo"] != 0 or cp_cruise.vl["FCA11"]["FCA_Status"] == 3 + if fca_fault: + aeb_warning = False + aeb_braking = False ret.stockFcw = (aeb_warning or scc_warning) and not aeb_braking ret.stockAeb = aeb_warning and aeb_braking @@ -190,157 +446,393 @@ class CarState(CarStateBase, EsccCarStateBase, AolCarState, CarStateExt): ret.leftBlindspot = cp.vl["LCA11"]["CF_Lca_IndLeft"] != 0 ret.rightBlindspot = cp.vl["LCA11"]["CF_Lca_IndRight"] != 0 - # save the entire LKAS11 and CLU11 - self.lkas11 = copy.copy(cp_cam.vl["LKAS11"]) - self.clu11 = copy.copy(cp.vl["CLU11"]) self.steer_state = cp.vl["MDPS12"]["CF_Mdps_ToiActive"] # 0 NOT ACTIVE, 1 ACTIVE prev_cruise_buttons = self.cruise_buttons[-1] + #self.cruise_buttons.extend(cp.vl_all["CLU11"]["CF_Clu_CruiseSwState"]) + #carrot {{ + #if self.CRUISE_BUTTON_ALT and cp.vl["CRUISE_BUTTON_ALT"]["SET_ME_1"] == 1: + # self.cruise_buttons_alt = True + + cruise_button = [Buttons.NONE] + if self.cruise_buttons_alt: + lfa_button = cp.vl["CRUISE_BUTTON_LFA"]["CruiseSwLfa"] + cruise_button = [Buttons.LFA_BUTTON] if lfa_button > 0 else [cp.vl["CRUISE_BUTTON_ALT"]["CruiseSwState"]] + elif self.HAS_LFA_BUTTON and cp.vl["BCM_PO_11"]["LFA_Pressed"] == 1: # for K5 + cruise_button = [Buttons.LFA_BUTTON] + else: + cruise_button = cp.vl_all["CLU11"]["CF_Clu_CruiseSwState"] + self.cruise_buttons.extend(cruise_button) + # }} carrot prev_main_buttons = self.main_buttons[-1] - prev_lda_button = self.lda_button - self.cruise_buttons.extend(cp.vl_all["CLU11"]["CF_Clu_CruiseSwState"]) - self.main_buttons.extend(cp.vl_all["CLU11"]["CF_Clu_CruiseSwMain"]) - if self.CP.flags & HyundaiFlags.HAS_LDA_BUTTON: - self.lda_button = cp.vl["BCM_PO_11"]["LDA_BTN"] + #self.cruise_buttons.extend(cp.vl_all["CLU11"]["CF_Clu_CruiseSwState"]) + if self.cruise_buttons_alt: + self.main_buttons.extend(cp.vl_all["CRUISE_BUTTON_ALT"]["CruiseSwMain"]) + else: + self.main_buttons.extend(cp.vl_all["CLU11"]["CF_Clu_CruiseSwMain"]) + self.mdps12 = copy.copy(cp.vl["MDPS12"]) ret.buttonEvents = [*create_button_events(self.cruise_buttons[-1], prev_cruise_buttons, BUTTONS_DICT), - *create_button_events(self.main_buttons[-1], prev_main_buttons, {1: ButtonType.mainCruise}), - *create_button_events(self.lda_button, prev_lda_button, {1: ButtonType.lkas})] + *create_button_events(self.main_buttons[-1], prev_main_buttons, {1: ButtonType.mainCruise})] - if self.CP.openpilotLongitudinalControl: - ret.cruiseState.available = self.get_main_cruise(ret) - CarStateExt.update(self, ret, ret_iq, can_parsers, speed_conv) + if not self.CP.flags & HyundaiFlags.CC_ONLY_CAR: + tpms_unit = cp.vl["TPMS11"]["UNIT"] * 0.725 if int(cp.vl["TPMS11"]["UNIT"]) > 0 else 1. + ret.tpms.fl = tpms_unit * cp.vl["TPMS11"]["PRESSURE_FL"] + ret.tpms.fr = tpms_unit * cp.vl["TPMS11"]["PRESSURE_FR"] + ret.tpms.rl = tpms_unit * cp.vl["TPMS11"]["PRESSURE_RL"] + ret.tpms.rr = tpms_unit * cp.vl["TPMS11"]["PRESSURE_RR"] - ret.blockPcmEnable = not self.recent_button_interaction() + cluSpeed = cp.vl["CLU11"]["CF_Clu_Vanz"] + decimal = cp.vl["CLU11"]["CF_Clu_VanzDecimal"] + if 0. < decimal < 0.5: + cluSpeed += decimal - # low speed steer alert hysteresis logic (only for cars with steer cut off above 10 m/s) - if ret.vEgo < (self.CP.minSteerSpeed + 2.) and self.CP.minSteerSpeed > 10.: - self.low_speed_alert = True - if ret.vEgo > (self.CP.minSteerSpeed + 4.): - self.low_speed_alert = False - ret.lowSpeedAlert = self.low_speed_alert + ret.vEgoCluster = cluSpeed * speed_conv + vEgoClu, aEgoClu = self.update_clu_speed_kf(ret.vEgoCluster) + ret.vCluRatio = (ret.vEgo / vEgoClu) if (vEgoClu > 3. and ret.vEgo > 3.) else 1.0 - return ret, ret_iq + if self.CP.extFlags & HyundaiExtFlags.NAVI_CLUSTER.value: + speedLimit = cp.vl["Navi_HU"]["SpeedLim_Nav_Clu"] + speedLimitCam = cp.vl["Navi_HU"]["SpeedLim_Nav_Cam"] + ret.speedLimit = speedLimit if speedLimit < 255 and speedLimitCam == 1 else 0 + speed_limit_cam = speedLimitCam == 1 + else: + ret.speedLimit = 0 + ret.speedLimitDistance = 0 + speed_limit_cam = False - def update_canfd(self, can_parsers) -> tuple[structs.CarState, structs.IQCarState]: + self.update_speed_limit(ret, speed_limit_cam) + + if prev_main_buttons == 0 and self.main_buttons[-1] != 0: + self.main_enabled = not self.main_enabled + + return ret, self.out_iq + + def update_speed_limit(self, ret, speed_limit_cam): + self.totalDistance += ret.vEgo * DT_CTRL + if ret.speedLimit > 0 and not ret.gasPressed and speed_limit_cam: + if self.speedLimitDistance <= self.totalDistance: + self.speedLimitDistance = self.totalDistance + ret.speedLimit * 6 + self.speedLimitDistance = max(self.totalDistance + 1, self.speedLimitDistance) + else: + self.speedLimitDistance = self.totalDistance + ret.speedLimitDistance = self.speedLimitDistance - self.totalDistance + + def update_canfd(self, can_parsers) -> structs.CarState: cp = can_parsers[Bus.pt] cp_cam = can_parsers[Bus.cam] + cp_alt = can_parsers[Bus.alt] if Bus.alt in can_parsers else None ret = structs.CarState() - ret_iq = structs.IQCarState() + + if self.CP.extFlags & HyundaiExtFlags.EV_MODE_STATUS_230: + ret.evModeActive, ret.evModeValid = _get_ev_mode_state(cp) self.is_metric = cp.vl["CRUISE_BUTTONS_ALT"]["DISTANCE_UNIT"] != 1 speed_factor = CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS if self.CP.flags & (HyundaiFlags.EV | HyundaiFlags.HYBRID): - ret.gasPressed = cp.vl[self.accelerator_msg_canfd]["ACCELERATOR_PEDAL"] > 1e-5 + offset = 255. if self.CP.flags & HyundaiFlags.EV else 1023. + ret.gas = cp.vl[self.accelerator_msg_canfd]["ACCELERATOR_PEDAL"] / offset if not self.use_accelerator else 0 if self.accelerator is None else self.accelerator["ACCELERATOR_PEDAL"] / offset + ret.gasPressed = ret.gas > 1e-5 else: - ret.gasPressed = bool(cp.vl[self.accelerator_msg_canfd]["ACCELERATOR_PEDAL_PRESSED"]) + ret.gasPressed = bool(cp.vl[self.accelerator_msg_canfd]["ACCELERATOR_PEDAL_PRESSED"]) if not self.use_accelerator else False if self.accelerator is None else bool(self.accelerator["ACCELERATOR_PEDAL_PRESSED"]) ret.brakePressed = cp.vl["TCS"]["DriverBraking"] == 1 + #print(cp.vl["TCS"], cp.vl_all["TCS"]["DriverBraking"][-10:]) - ret.doorOpen = cp.vl["DOORS_SEATBELTS"]["DRIVER_DOOR"] == 1 - ret.seatbeltUnlatched = cp.vl["DOORS_SEATBELTS"]["DRIVER_SEATBELT"] == 0 + if self.doors_seatbelts is not None: + ret.doorOpen = self.doors_seatbelts["DRIVER_DOOR"] == 1 + ret.seatbeltUnlatched = self.doors_seatbelts["DRIVER_SEATBELT"] == 0 - gear = cp.vl[self.gear_msg_canfd]["GEAR"] + gear = cp.vl[self.gear_msg_canfd]["GEAR"] if not self.use_accelerator else 0 if self.accelerator is None else self.accelerator["GEAR"] ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(gear)) + if self.TPMS: + tpms_unit = cp.vl["TPMS"]["UNIT"] * 0.725 if int(cp.vl["TPMS"]["UNIT"]) > 0 else 1. + ret.tpms.fl = tpms_unit * cp.vl["TPMS"]["PRESSURE_FL"] + ret.tpms.fr = tpms_unit * cp.vl["TPMS"]["PRESSURE_FR"] + ret.tpms.rl = tpms_unit * cp.vl["TPMS"]["PRESSURE_RL"] + ret.tpms.rr = tpms_unit * cp.vl["TPMS"]["PRESSURE_RR"] + # TODO: figure out positions - self.parse_wheel_speeds(ret, - cp.vl["WHEEL_SPEEDS"]["WHL_SpdFLVal"], - cp.vl["WHEEL_SPEEDS"]["WHL_SpdFRVal"], - cp.vl["WHEEL_SPEEDS"]["WHL_SpdRLVal"], - cp.vl["WHEEL_SPEEDS"]["WHL_SpdRRVal"], + ret.wheelSpeeds = self.get_wheel_speeds( + cp.vl["WHEEL_SPEEDS"]["WHEEL_SPEED_1"], + cp.vl["WHEEL_SPEEDS"]["WHEEL_SPEED_2"], + cp.vl["WHEEL_SPEEDS"]["WHEEL_SPEED_3"], + cp.vl["WHEEL_SPEEDS"]["WHEEL_SPEED_4"], ) - ret.standstill = cp.vl["WHEEL_SPEEDS"]["WHL_SpdFLVal"] <= STANDSTILL_THRESHOLD and cp.vl["WHEEL_SPEEDS"]["WHL_SpdFRVal"] <= STANDSTILL_THRESHOLD and \ - cp.vl["WHEEL_SPEEDS"]["WHL_SpdRLVal"] <= STANDSTILL_THRESHOLD and cp.vl["WHEEL_SPEEDS"]["WHL_SpdRRVal"] <= STANDSTILL_THRESHOLD + ret.vEgoRaw = (ret.wheelSpeeds.fl + ret.wheelSpeeds.fr + ret.wheelSpeeds.rl + ret.wheelSpeeds.rr) / 4. + ret.vEgo, ret.aEgo = self.update_speed_kf(ret.vEgoRaw) + ret.standstill = ret.wheelSpeeds.fl <= STANDSTILL_THRESHOLD and ret.wheelSpeeds.rr <= STANDSTILL_THRESHOLD + + ret.brakeLights = ret.brakePressed or cp.vl["TCS"]["BrakeLight"] == 1 or ret.aEgo < -0.5 ret.steeringRateDeg = cp.vl["STEERING_SENSORS"]["STEERING_RATE"] - ret.steeringAngleDeg = cp.vl["STEERING_SENSORS"]["STEERING_ANGLE"] + + # steering angle deg값이 이상함. mdps값이 더 신뢰가 가는듯.. torque steering 차량도 확인해야함. + #ret.steeringAngleDeg = cp.vl["STEERING_SENSORS"]["STEERING_ANGLE"] * -1 + #ret.steeringAngleDeg = cp.vl["MDPS"]["STEERING_ANGLE"] * -1 + if self.CP.flags & HyundaiFlags.ANGLE_CONTROL: + ret.steeringAngleDeg = cp.vl["MDPS"]["STEERING_ANGLE_2"] * -1 + else: + ret.steeringAngleDeg = cp.vl["STEERING_SENSORS"]["STEERING_ANGLE"] * -1 + + trailer_signal = self.trailer_status is not None and self.trailer_status["TRAILER_CONNECTED"] != 0 + if trailer_signal: + # Rising edge is immediate so trailer-specific behavior is preserved. + self.trailer_timeout_cnt = 0 + self.trailer_connected = True + elif self.trailer_connected: + # During ignition-off, the trailer bit can clear before the cluster shuts down. + # Keep suppression active through that transient, while still detecting a real + # disconnect after 5 seconds at the 100 Hz CarState update rate. + self.trailer_timeout_cnt += 1 + if self.trailer_timeout_cnt > TRAILER_DISCONNECT_GRACE_FRAMES: + self.trailer_connected = False + else: + self.trailer_timeout_cnt = 0 + + ret.trailerConnected = self.trailer_connected + + if self.trailer_connected != self.trailer_connected_prev: + print(f"[TRAILER_DEBUG] connected={self.trailer_connected} timeout={self.trailer_timeout_cnt}") + self.trailer_connected_prev = self.trailer_connected + ret.steeringTorque = cp.vl["MDPS"]["STEERING_COL_TORQUE"] ret.steeringTorqueEps = cp.vl["MDPS"]["STEERING_OUT_TORQUE"] ret.steeringPressed = self.update_steering_pressed(abs(ret.steeringTorque) > self.params.STEER_THRESHOLD, 5) - steer_fault_raw = cp.vl["MDPS"]["LKA_FAULT"] != 0 - self.steer_fault_counter = self.steer_fault_counter + 1 if steer_fault_raw else 0 - ret.steerFaultTemporary = self.steer_fault_counter > 5 + ret.steerFaultTemporary = cp.vl["MDPS"]["LKA_FAULT"] != 0 or cp.vl["MDPS"]["LFA2_FAULT"] != 0 + #ret.steerFaultTemporary = False + + blinkers_info = self.blinkers if self.blinkers is not None else self.blinkers_alt if self.blinkers_alt is not None else None + if blinkers_info is not None: + left_blinker_lamp = blinkers_info["LEFT_LAMP"] or blinkers_info["LEFT_LAMP_ALT"] + right_blinker_lamp = blinkers_info["RIGHT_LAMP"] or blinkers_info["RIGHT_LAMP_ALT"] + ret.leftBlinker, ret.rightBlinker = self.update_blinker_from_lamp(50, left_blinker_lamp, right_blinker_lamp) - # TODO: alt signal usage may be described by cp.vl['BLINKERS']['USE_ALT_LAMP'] - left_blinker_sig, right_blinker_sig = "LEFT_LAMP", "RIGHT_LAMP" - if self.CP.carFingerprint == CAR.HYUNDAI_KONA_EV_2ND_GEN: - left_blinker_sig, right_blinker_sig = "LEFT_LAMP_ALT", "RIGHT_LAMP_ALT" - ret.leftBlinker, ret.rightBlinker = self.update_blinker_from_lamp(50, cp.vl["BLINKERS"][left_blinker_sig], - cp.vl["BLINKERS"][right_blinker_sig]) if self.CP.enableBsm: - ret.leftBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["FL_INDICATOR"] != 0 - ret.rightBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["FR_INDICATOR"] != 0 + if self.cp_bsm is None: + if 442 in cp.seen_addresses: + self.cp_bsm = cp + print("######## BSM in ECAN") + elif 442 in cp_cam.seen_addresses: + self.cp_bsm = cp_cam + print("######## BSM in CAM") + else: + bsm_info = self.cp_bsm.vl["BLINDSPOTS_REAR_CORNERS"] + ret.leftBlindspot = (bsm_info["FL_INDICATOR"] + bsm_info["INDICATOR_LEFT_TWO"] + bsm_info["INDICATOR_LEFT_FOUR"]) > 0 + ret.rightBlindspot = (bsm_info["FR_INDICATOR"] + bsm_info["INDICATOR_RIGHT_TWO"] + bsm_info["INDICATOR_RIGHT_FOUR"]) > 0 # cruise state + if self.cruise_buttons_alt2 is not None: + cruise_button = self.cruise_buttons_alt2["CRUISE_BUTTONS"] + else: + cruise_button = cp.vl[self.cruise_btns_msg_canfd]["CRUISE_BUTTONS"] + if cruise_button in [Buttons.RES_ACCEL, Buttons.SET_DECEL] and self.CP.openpilotLongitudinalControl: + self.main_enabled = True # CAN FD cars enable on main button press, set available if no TCS faults preventing engagement - ret.cruiseState.available = cp.vl["TCS"]["ACCEnable"] == 0 + ret.cruiseState.available = self.main_enabled and self.controls_ready_count >= READY_COUNT_OK #cp.vl["TCS"]["ACCEnable"] == 0 + if self.CP.flags & HyundaiFlags.CAMERA_SCC.value: + self.MainMode_ACC = cp_cam.vl["SCC_CONTROL"]["MainMode_ACC"] == 1 + self.ACCMode = cp_cam.vl["SCC_CONTROL"]["ACCMode"] + self.LFA_ICON = cp_cam.vl["LFAHDA_CLUSTER"]["HDA_LFA_SymSta"] + if self.CP.openpilotLongitudinalControl: # These are not used for engage/disengage since openpilot keeps track of state using the buttons ret.cruiseState.enabled = cp.vl["TCS"]["ACC_REQ"] == 1 ret.cruiseState.standstill = False + if self.MainMode_ACC or self.main_enabled: + self.main_enabled = True else: cp_cruise_info = cp_cam if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else cp ret.cruiseState.enabled = cp_cruise_info.vl["SCC_CONTROL"]["ACCMode"] in (1, 2) - ret.cruiseState.standstill = cp_cruise_info.vl["SCC_CONTROL"]["CRUISE_STANDSTILL"] == 1 + if cp_cruise_info.vl["SCC_CONTROL"]["MainMode_ACC"] == 1: # carrot + ret.cruiseState.available = self.main_enabled = True + ret.pcmCruiseGap = int(np.clip(cp_cruise_info.vl["SCC_CONTROL"]["DISTANCE_SETTING"], 1, 4)) + ret.cruiseState.standstill = cp_cruise_info.vl["SCC_CONTROL"]["InfoDisplay"] >= 4 ret.cruiseState.speed = cp_cruise_info.vl["SCC_CONTROL"]["VSetDis"] * speed_factor - self.cruise_info = copy.copy(cp_cruise_info.vl["SCC_CONTROL"]) + ret.brakeHoldActive = cp.vl["ESP_STATUS"]["AUTO_HOLD"] == 1 and cp_cruise_info.vl["SCC_CONTROL"]["ACCMode"] not in (1, 2) + + speed_limit_cam = False + corner = False + corner_infos = [info for info in (self.adrv_0x1ea, self.ccnc_0x162) if info is not None] + if corner_infos: + def corner_max(signal): + return max(info[signal] for info in corner_infos) + + ret.leftLongDist = self.lf_distance = corner_max("LF_DETECT_DISTANCE") + ret.rightLongDist = self.rf_distance = corner_max("RF_DETECT_DISTANCE") + self.lr_distance = corner_max("LR_DETECT_DISTANCE") + self.rr_distance = corner_max("RR_DETECT_DISTANCE") + ret.leftLatDist = corner_max("LF_DETECT_LATERAL") + ret.rightLatDist = corner_max("RF_DETECT_LATERAL") + ret.leftRearLongDist = self.lr_distance + ret.rightRearLongDist = self.rr_distance + ret.leftRearLatDist = corner_max("LR_DETECT_LATERAL") + ret.rightRearLatDist = corner_max("RR_DETECT_LATERAL") + corner = True + if corner: + raw_corner_radar_enabled = ( + self.op_params.get_int("EnableCornerRadar") > 0 and + bool(self.CP.extFlags & (HyundaiExtFlags.CORNER_RADAR_OBJECTS_235.value | + HyundaiExtFlags.CORNER_RADAR_OBJECTS_180.value)) + ) + left_front_block = (not raw_corner_radar_enabled) and 0 < ret.leftLongDist < 7.0 + right_front_block = (not raw_corner_radar_enabled) and 0 < ret.rightLongDist < 7.0 + rear_block_dist = 5.0 if raw_corner_radar_enabled else 7.0 + left_rear_block = 0 < self.lr_distance < rear_block_dist + right_rear_block = 0 < self.rr_distance < rear_block_dist + left_block = left_front_block or left_rear_block + right_block = right_front_block or right_rear_block + if left_block: + ret.leftBlindspot = True + if right_block: + ret.rightBlindspot = True + + if self.hda_info_4a3 is not None: + speedLimit = self.hda_info_4a3["SPEED_LIMIT"] + if not self.is_metric: + speedLimit *= CV.MPH_TO_KPH + ret.speedLimit = speedLimit if speedLimit < 255 else 0 + if int(self.hda_info_4a3["MapSource"]) == 2: + speed_limit_cam = True + + if self.time_zone == "UTC": + country_code = int(self.hda_info_4a3["CountryCode"]) + self.time_zone = ZoneInfo(NUMERIC_TO_TZ.get(country_code, "UTC")) + + ret.gearStep = cp.vl["GEAR"]["GEAR_STEP"] if self.GEAR else 0 + if 1 <= ret.gearStep <= 8 and ret.gearShifter == GearShifter.unknown: + ret.gearShifter = GearShifter.drive + ret.gearStep = cp.vl["GEAR_ALT"]["GEAR_STEP"] if self.GEAR_ALT else ret.gearStep + + lane_info = self.cam_0x2a4 if self.cam_0x2a4 is not None else self.cam_0x362 + + if lane_info is not None: + left_lane_prob = lane_info["LEFT_LANE_PROB"] + right_lane_prob = lane_info["RIGHT_LANE_PROB"] + left_lane_type = lane_info["LEFT_LANE_TYPE"] # 0: dashed, 1: solid, 2: undecided, 3: road edge, 4: DLM Inner Solid, 5: DLM InnerDashed, 6:DLM Inner Undecided, 7: Botts Dots, 8: Barrier + right_lane_type = lane_info["RIGHT_LANE_TYPE"] + left_lane_color = lane_info["LEFT_LANE_COLOR"] # 0: none, 1: white, 2: yellow, 3: blue + right_lane_color = lane_info["RIGHT_LANE_COLOR"] + left_lane_info = left_lane_color * 10 + left_lane_type + right_lane_info = right_lane_color * 10 + right_lane_type + ret.leftLaneLine = left_lane_info + ret.rightLaneLine = right_lane_info # Manual Speed Limit Assist is a feature that replaces non-adaptive cruise control on EV CAN FD platforms. # It limits the vehicle speed, overridable by pressing the accelerator past a certain point. # The car will brake, but does not respect positive acceleration commands in this mode # TODO: find this message on ICE & HYBRID cars + cruise control signals (if exists) if self.CP.flags & HyundaiFlags.EV: - ret.cruiseState.nonAdaptive = cp.vl["MANUAL_SPEED_LIMIT_ASSIST"]["MSLA_ENABLED"] == 1 + if self.manual_speed_limit_assist is not None: + #ret.cruiseState.nonAdaptive = cp.vl["MANUAL_SPEED_LIMIT_ASSIST"]["MSLA_ENABLED"] == 1 + ret.cruiseState.nonAdaptive = self.manual_speed_limit_assist["MSLA_ENABLED"] == 1 + + if self.LOCAL_TIME and self.time_zone != "UTC": + lt = cp.vl["LOCAL_TIME"] + y, m, d, H, M, S = int(lt["YEAR"]) + 2000, int(lt["MONTH"]), int(lt["DATE"]), int(lt["HOURS"]), int(lt["MINUTES"]), int(lt["SECONDS"]) + try: + dt_local = datetime(y, m, d, H, M, S, tzinfo=self.time_zone) + ret.datetime = int(dt_local.timestamp() * 1000) + except: + #print(f"Error parsing local time: {y}-{m}-{d} {H}:{M}:{S} in {self.time_zone}") + pass prev_cruise_buttons = self.cruise_buttons[-1] + #self.cruise_buttons.extend(cp.vl_all[self.cruise_btns_msg_canfd]["CRUISE_BUTTONS"]) + #carrot {{ + + if self.cruise_buttons_alt2 is not None: + if int(self.cruise_buttons_alt2.get("LFA_BTN", 0)) == 1: + cruise_button = [Buttons.LFA_BUTTON] + else: + v = int(self.cruise_buttons_alt2.get("CRUISE_BUTTONS", 0)) + cruise_button = [v if v < 5 else Buttons.NONE] + elif cp.vl[self.cruise_btns_msg_canfd]["LFA_BTN"]: + cruise_button = [Buttons.LFA_BUTTON] + else: + cruise_button = cp.vl_all[self.cruise_btns_msg_canfd]["CRUISE_BUTTONS"] + + self.cruise_buttons.extend(cruise_button) + # }} carrot + + + #if self.cruise_btns_msg_canfd in cp.vl: + # self.cruise_buttons_msg = copy.copy(cp.vl[self.cruise_btns_msg_canfd]) + """ + if self.cruise_btns_msg_canfd in cp.vl: #carrot + if not cp.vl[self.cruise_btns_msg_canfd]["CRUISE_BUTTONS"]: + pass + #print("empty cruise btns...") + else: + self.cruise_buttons_msg = copy.copy(cp.vl[self.cruise_btns_msg_canfd]) + """ prev_main_buttons = self.main_buttons[-1] - prev_lda_button = self.lda_button - self.cruise_buttons.extend(cp.vl_all[self.cruise_btns_msg_canfd]["CRUISE_BUTTONS"]) - self.main_buttons.extend(cp.vl_all[self.cruise_btns_msg_canfd]["ADAPTIVE_CRUISE_MAIN_BTN"]) - self.lda_button = cp.vl[self.cruise_btns_msg_canfd]["LDA_BTN"] + #self.cruise_buttons.extend(cp.vl_all[self.cruise_btns_msg_canfd]["CRUISE_BUTTONS"]) + if self.cruise_buttons_alt2 is not None: + self.main_buttons.extend([1 if int(self.cruise_buttons_alt2.get("CRUISE_BUTTONS", 0)) == 8 else 0]) + else: + adaptive_main = cp.vl_all[self.cruise_btns_msg_canfd]["ADAPTIVE_CRUISE_MAIN_BTN"] + normal_main = cp.vl_all[self.cruise_btns_msg_canfd]["NORMAL_CRUISE_MAIN_BTN"] + self.main_buttons.extend(int(adaptive or normal) for adaptive, normal in zip(adaptive_main, normal_main, strict=True)) + if self.main_buttons[-1] != prev_main_buttons and not self.main_buttons[-1]: # and self.CP.openpilotLongitudinalControl: #carrot + self.main_enabled = not self.main_enabled + print("main_enabled = {}".format(self.main_enabled)) self.buttons_counter = cp.vl[self.cruise_btns_msg_canfd]["COUNTER"] ret.accFaulted = cp.vl["TCS"]["ACCEnable"] != 0 # 0 ACC CONTROL ENABLED, 1-3 ACC CONTROL DISABLED - if self.CP.flags & HyundaiFlags.CANFD_LKA_STEERING: - self.lfa_block_msg = copy.copy(cp_cam.vl["CAM_0x362"] if self.CP.flags & HyundaiFlags.CANFD_LKA_STEERING_ALT - else cp_cam.vl["CAM_0x2a4"]) + speed_conv = CV.KPH_TO_MS # if self.is_metric else CV.MPH_TO_MS + cluSpeed = cp.vl["CRUISE_BUTTONS_ALT"]["CLU_SPEED"] + ret.vEgoCluster = cluSpeed * speed_conv # MPH단위에서도 KPH로 나오는듯.. + vEgoClu, aEgoClu = self.update_clu_speed_kf(ret.vEgoCluster) + ret.vCluRatio = (ret.vEgo / vEgoClu) if (vEgoClu > 3. and ret.vEgo > 3.) else 1.0 - AolCarState.update_aol_canfd(self, ret, can_parsers) + self.update_speed_limit(ret, speed_limit_cam) + + paddle_button = self.paddle_button_prev + if self.cruise_btns_msg_canfd == "CRUISE_BUTTONS": + paddle_button = 1 if cp.vl["CRUISE_BUTTONS"]["LEFT_PADDLE"] == 1 else 2 if cp.vl["CRUISE_BUTTONS"]["RIGHT_PADDLE"] == 1 else 0 + elif self.gear_msg_canfd == "GEAR": + paddle_button = 1 if cp.vl["GEAR"]["LEFT_PADDLE"] == 1 else 2 if cp.vl["GEAR"]["RIGHT_PADDLE"] == 1 else 0 ret.buttonEvents = [*create_button_events(self.cruise_buttons[-1], prev_cruise_buttons, BUTTONS_DICT), - *create_button_events(self.main_buttons[-1], prev_main_buttons, {1: ButtonType.mainCruise}), - *create_button_events(self.lda_button, prev_lda_button, {1: ButtonType.lkas})] + *create_button_events(paddle_button, self.paddle_button_prev, {1: ButtonType.paddleLeft, 2: ButtonType.paddleRight}), + *create_button_events(self.main_buttons[-1], prev_main_buttons, {1: ButtonType.mainCruise})] - if self.CP.openpilotLongitudinalControl: - ret.cruiseState.available = self.get_main_cruise(ret) + self.paddle_button_prev = paddle_button - CarStateExt.update_canfd_ext(self, ret, ret_iq, can_parsers, speed_factor) + return ret - ret.blockPcmEnable = not self.recent_button_interaction() - - return ret, ret_iq - - def get_can_parsers_canfd(self, CP): + def get_can_parsers_canfd(self, CP, CP_IQ=None): msgs = [] if not (CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS): # TODO: this can be removed once we add dynamic support to vl_all msgs += [ - # this message is 50Hz but the ECU frequently stops transmitting for ~0.5s - ("CRUISE_BUTTONS", 1) + ("CRUISE_BUTTONS", 50) ] + + CAN = CanBus(CP) + pt_parser = CANParser(DBC[CP.carFingerprint][Bus.pt], msgs, CAN.ECAN) + if CP.extFlags & HyundaiExtFlags.EV_MODE_STATUS_230: + # Display-only while the signal is fleet-validated: checksum and freshness + # gate the value without making a counter/alive fault disable controls. + pt_parser._add_message(EV_MODE_STATUS_MSG, math.nan, ignore_counter=True) + return { - Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], msgs, CanBus(CP).ECAN), - Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], [], CanBus(CP).CAM), + Bus.pt: pt_parser, + Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], [], CAN.CAM), + Bus.alt: CANParser(DBC[CP.carFingerprint][Bus.pt], [], CAN.ACAN), } - def get_can_parsers(self, CP, CP_IQ): + def get_can_parsers(self, CP, CP_IQ=None): if CP.flags & HyundaiFlags.CANFD: return self.get_can_parsers_canfd(CP) return { - Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], [], 0), + # EMS21 carries SCR_UREA_LEVEL on diesel platforms. NaN frequency makes + # it optional, so gasoline/EV platforms do not fail CAN validity. + Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], [("EMS21", math.nan)], 0), Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], [], 2), } diff --git a/iqdbc_repo/iqdbc/car/hyundai/fingerprints.py b/iqdbc_repo/iqdbc/car/hyundai/fingerprints.py index b518a496e..602400202 100644 --- a/iqdbc_repo/iqdbc/car/hyundai/fingerprints.py +++ b/iqdbc_repo/iqdbc/car/hyundai/fingerprints.py @@ -1,10 +1,6 @@ -""" AUTO-FORMATTED USING iqdbc/car/debug/format_fingerprints.py, EDIT STRUCTURE THERE.""" from iqdbc.car.structs import CarParams from iqdbc.car.hyundai.values import CAR -from iqdbc.iqpilot.car.fingerprints_ext import merge_fw_versions -from iqdbc.iqpilot.car.hyundai.fingerprints_ext import FW_VERSIONS_EXT - Ecu = CarParams.Ecu # The existence of SCC or RDR in the fwdRadar FW usually determines the radar's function, @@ -12,6 +8,14 @@ Ecu = CarParams.Ecu FW_VERSIONS = { + CAR.HYUNDAI_AZERA_7TH_GEN: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00GN7_ RDR ----- 1.00 1.03 99110-N1000 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00GN7 MFC AT KOR LHD 1.00 1.03 99211-N1000 230322', + ], + }, CAR.HYUNDAI_AZERA_6TH_GEN: { (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00IG__ SCC F-CU- 1.00 1.00 99110-G8100 ', @@ -21,7 +25,6 @@ FW_VERSIONS = { ], (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00IG MFC AT MES LHD 1.00 1.04 99211-G8100 200511', - b'\xf1\x00IG MFC AT MES LHD 1.00 1.05 99211-G8100 210409', ], }, CAR.HYUNDAI_AZERA_HEV_6TH_GEN: { @@ -55,20 +58,13 @@ FW_VERSIONS = { ], (Ecu.eps, 0x7d4, None): [ b'\xf1\x00AE MDPS C 1.00 1.03 56310/G2300 4AEHC103', - b'\xf1\x00AE MDPS C 1.00 1.03 56310G2300\x00 4AEHC103', - b'\xf1\x00AE MDPS C 1.00 1.04 56310G2550\x00 4AEHC104', - b'\xf1\x00AE MDPS C 1.00 1.05 56310/G2500 4AEHC105', b'\xf1\x00AE MDPS C 1.00 1.05 56310/G2501 4AEHC105', b'\xf1\x00AE MDPS C 1.00 1.07 56310/G2301 4AEHC107', b'\xf1\x00AE MDPS C 1.00 1.07 56310/G2501 4AEHC107', - b'\xf1\x00AE MDPS C 1.00 1.07 56310/G2551 4AEHC107', ], (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00AEH MFC AT EUR LHD 1.00 1.00 95740-G2400 180222', b'\xf1\x00AEH MFC AT EUR LHD 1.00 1.00 95740-G7200 160418', - b'\xf1\x00AEH MFC AT EUR RHD 1.00 1.00 95740-G2200 161014', - b'\xf1\x00AEH MFC AT EUR RHD 1.00 1.00 95740-G2400 180222', - b'\xf1\x00AEH MFC AT USA LHD 1.00 1.00 95740-G2300 170703', b'\xf1\x00AEH MFC AT USA LHD 1.00 1.00 95740-G2400 180222', ], }, @@ -78,13 +74,11 @@ FW_VERSIONS = { b'\xf1\x00AEhe SCC H-CUP 1.01 1.01 96400-G2100 ', ], (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00AE MDPS C 1.00 1.07 56310/G2201 4AEHC107', b'\xf1\x00AE MDPS C 1.00 1.07 56310/G2501 4AEHC107', b'\xf1\x00AE MDPS C 1.00 1.07 56310/G2551 4AEHC107', ], (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00AEP MFC AT AUS RHD 1.00 1.00 95740-G2400 180222', - b'\xf1\x00AEP MFC AT EUR LHD 1.00 1.00 95740-G2400 180222', b'\xf1\x00AEP MFC AT USA LHD 1.00 1.00 95740-G2400 180222', ], }, @@ -154,12 +148,10 @@ FW_VERSIONS = { CAR.HYUNDAI_IONIQ_HEV_2022: { (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00AEhe SCC F-CUP 1.00 1.00 99110-G2600 ', - b'\xf1\x00AEhe SCC F-CUP 1.00 1.02 99110-G2100 ', b'\xf1\x00AEhe SCC FHCUP 1.00 1.00 99110-G2600 ', b'\xf1\x00AEhe SCC FHCUP 1.00 1.02 99110-G2100 ', ], (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00AE MDPS C 1.00 1.01 56310-XX000 4APHC101', b'\xf1\x00AE MDPS C 1.00 1.01 56310/G2510 4APHC101', b'\xf1\x00AE MDPS C 1.00 1.01 56310G2510\x00 4APHC101', ], @@ -173,7 +165,6 @@ FW_VERSIONS = { b'\xf1\x00DN8_ SCC F-CU- 1.00 1.00 99110-L0000 ', b'\xf1\x00DN8_ SCC F-CUP 1.00 1.00 99110-L0000 ', b'\xf1\x00DN8_ SCC F-CUP 1.00 1.02 99110-L1000 ', - b'\xf1\x00DN8_ SCC FHCU- 1.00 1.00 99110-L0000 ', b'\xf1\x00DN8_ SCC FHCUP 1.00 1.00 99110-L0000 ', b'\xf1\x00DN8_ SCC FHCUP 1.00 1.01 99110-L1000 ', b'\xf1\x00DN8_ SCC FHCUP 1.00 1.02 99110-L1000 ', @@ -232,6 +223,15 @@ FW_VERSIONS = { b'\xf1\x00LFF LKAS AT USA LHD 1.01 1.02 95740-C1000 E52', ], }, + CAR.HYUNDAI_SONATA_2024: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DN8_ RDR ----- 1.00 1.00 99110-L1800 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DN8 MFC AT KOR LHD 1.00 1.01 99211-L1800 230512', + b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.01 99211-L1800 230512', + ], + }, CAR.HYUNDAI_TUCSON: { (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00TL__ FCA F-CUP 1.00 1.01 99110-D3500 ', @@ -293,7 +293,6 @@ FW_VERSIONS = { b'\xf1\x00TM ESC \x04 101 \x08\x04 58910-S2GA0', b'\xf1\x00TM ESC \x04 102!\x04\x05 58910-S2GA0', b'\xf1\x00TM ESC \x04 103"\x07\x08 58910-S2GA0', - b'\xf1\x00TM ESC \x1b 102 \x08\x08 58910-S1DA0', b'\xf1\x00TM ESC \x1e 102 \x08\x08 58910-S1DA0', b'\xf1\x00TM ESC 103!\x030 58910-S1MA0', ], @@ -301,7 +300,6 @@ FW_VERSIONS = { b'\xf1\x00TM MDPS C 1.00 1.01 56310-S1AB0 4TSDC101', b'\xf1\x00TM MDPS C 1.00 1.01 56310-S1EB0 4TSDC101', b'\xf1\x00TM MDPS C 1.00 1.02 56370-S2AA0 0B19', - b'\xf1\x00TM MDPS R 1.00 1.05 57700-S1500 4TSDP105', ], (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00TM MFC AT EUR LHD 1.00 1.03 99211-S1500 210224', @@ -367,7 +365,6 @@ FW_VERSIONS = { }, CAR.KIA_STINGER: { (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00CK__ SCC FHCUP 1.00 1.02 96400-J5000 ', b'\xf1\x00CK__ SCC F_CUP 1.00 1.01 96400-J5000 ', b'\xf1\x00CK__ SCC F_CUP 1.00 1.01 96400-J5100 ', b'\xf1\x00CK__ SCC F_CUP 1.00 1.02 96400-J5100 ', @@ -383,7 +380,6 @@ FW_VERSIONS = { ], (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00CK MFC AT EUR LHD 1.00 1.03 95740-J5000 170822', - b'\xf1\x00CK MFC AT KOR LHD 1.00 1.04 95740-J5000 180504', b'\xf1\x00CK MFC AT USA LHD 1.00 1.03 95740-J5000 170822', b'\xf1\x00CK MFC AT USA LHD 1.00 1.04 95740-J5000 180504', ], @@ -400,7 +396,6 @@ FW_VERSIONS = { b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5320 4C2VL503', b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5380 4C2VR503', b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5520 4C4VL503', - b'\xf1\x00CK MDPS R 1.00 5.04 57700-J5320 4C2VL504', b'\xf1\x00CK MDPS R 1.00 5.04 57700-J5520 4C4VL504', ], (Ecu.fwdCamera, 0x7c4, None): [ @@ -442,7 +437,6 @@ FW_VERSIONS = { b'\xf1\x00LX ESC \x0b 104 \x10\x13 58910-S8330', b'\xf1\x00LX ESC \x0b 104 \x10\x16 58910-S8360', b'\xf1\x00ON ESC \x01 101\x19\t\x08 58910-S9360', - b'\xf1\x00ON ESC \x01 103$\x04\x08 58910-S9360', b'\xf1\x00ON ESC \x0b 100\x18\x12\x18 58910-S9360', b'\xf1\x00ON ESC \x0b 101\x19\t\x05 58910-S9320', b'\xf1\x00ON ESC \x0b 101\x19\t\x08 58910-S9360', @@ -648,6 +642,14 @@ FW_VERSIONS = { b'\xf1\x00DL3HMFC AT KOR LHD 1.00 1.04 99210-L2000 210527', ], }, + CAR.KIA_K5_DL3_24_HEV: { # (DL3) + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DL3HMFC AT KOR LHD 1.00 1.02 99210-L2500 230911' + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DL3_ RDR ----- 1.00 1.01 99110-L2500 ', + ], + }, CAR.HYUNDAI_KONA_EV: { (Ecu.abs, 0x7d1, None): [ b'\xf1\x00OS IEB \x01 212 \x11\x13 58520-K4000', @@ -703,7 +705,6 @@ FW_VERSIONS = { b'\xf1\x00OSP MDPS C 1.00 1.02 56310-K4271 4OEPC102', b'\xf1\x00OSP MDPS C 1.00 1.02 56310/K4271 4OEPC102', b'\xf1\x00OSP MDPS C 1.00 1.02 56310/K4970 4OEPC102', - b'\xf1\x00OSP MDPS C 1.00 1.02 56310/K4971 4OEPC102', b'\xf1\x00OSP MDPS C 1.00 1.02 56310K4260\x00 4OEPC102', b'\xf1\x00OSP MDPS C 1.00 1.02 56310K4261\x00 4OEPC102', b'\xf1\x00OSP MDPS C 1.00 1.02 56310K4971\x00 4OEPC102', @@ -720,6 +721,14 @@ FW_VERSIONS = { b'\xf1\x00SX2EMFC AT KOR LHD 1.00 1.00 99211-BF000 230410', ], }, + CAR.HYUNDAI_KONA_HEV_2ND_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00SX2HMFC AT EUR RHD 1.00 1.04 99211-BE000 231010', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00SX2_ RDR ----- 1.00 1.02 99110-BE500 ', + ], + }, CAR.KIA_NIRO_EV: { (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4000 ', @@ -737,14 +746,11 @@ FW_VERSIONS = { b'\xf1\x00DE MDPS C 1.00 1.04 56310Q4100\x00 4DEEC104', b'\xf1\x00DE MDPS C 1.00 1.05 56310Q4000\x00 4DEEC105', b'\xf1\x00DE MDPS C 1.00 1.05 56310Q4100\x00 4DEEC105', - b'\xf1\x00DE MDPS C 1.00 1.05 56310Q4150\x00 4DEEC105', - b'\xf1\x00DE MDPS C 1.00 1.05 56310Q4200\x00 4DEEC105', ], (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00DEE MFC AT EUR LHD 1.00 1.00 99211-Q4000 191211', b'\xf1\x00DEE MFC AT EUR LHD 1.00 1.00 99211-Q4100 200706', b'\xf1\x00DEE MFC AT EUR LHD 1.00 1.03 95740-Q4000 180821', - b'\xf1\x00DEE MFC AT EUR RHD 1.00 1.00 99211-Q4000 191211', b'\xf1\x00DEE MFC AT KOR LHD 1.00 1.02 95740-Q4000 180705', b'\xf1\x00DEE MFC AT KOR LHD 1.00 1.03 95740-Q4000 180821', b'\xf1\x00DEE MFC AT USA LHD 1.00 1.00 99211-Q4000 191211', @@ -756,13 +762,9 @@ FW_VERSIONS = { CAR.KIA_NIRO_EV_2ND_GEN: { (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00SG2_ RDR ----- 1.00 1.01 99110-AT000 ', - b'\xf1\x00SG__ RDR ----- 1.00 1.00 99110-AT200 ', ], (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00SG2EMFC AT EUR LHD 1.00 1.00 99211-AT200 240315', b'\xf1\x00SG2EMFC AT EUR LHD 1.01 1.09 99211-AT000 220801', - b'\xf1\x00SG2EMFC AT USA LHD 1.00 1.00 99211-AT100 230216', - b'\xf1\x00SG2EMFC AT USA LHD 1.00 1.00 99211-AT200 240401', b'\xf1\x00SG2EMFC AT USA LHD 1.01 1.09 99211-AT000 220801', ], }, @@ -866,11 +868,9 @@ FW_VERSIONS = { CAR.KIA_OPTIMA_H_G4_FL: { (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00JFhe SCC FHCUP 1.00 1.01 99110-A8500 ', - b'\xf1\x00JFhe SCC FHCUP 1.00 1.03 99110-A8500 ', ], (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00JFH MFC AT KOR LHD 1.00 1.01 95895-A8200 180323', - b'\xf1\x00JFH MFC AT KOR LHD 1.00 1.04 95895-A8200 181217', ], }, CAR.HYUNDAI_ELANTRA: { @@ -930,7 +930,6 @@ FW_VERSIONS = { b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.06 99210-AA000 220111', b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.07 99210-AA000 220426', b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.08 99210-AA000 220728', - b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.09 99210-AA000 221108', ], (Ecu.abs, 0x7d1, None): [ b'\xf1\x00CN ESC \t 101 \x10\x03 58910-AB800', @@ -998,7 +997,6 @@ FW_VERSIONS = { }, CAR.KIA_SORENTO: { (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00UMP LKAS AT AUS RHD 1.00 1.00 96400-C6550 S30', b'\xf1\x00UMP LKAS AT KOR LHD 1.00 1.00 95740-C5550 S30', b'\xf1\x00UMP LKAS AT USA LHD 1.00 1.00 95740-C6550 d00', b'\xf1\x00UMP LKAS AT USA LHD 1.01 1.01 95740-C6550 d01', @@ -1032,6 +1030,14 @@ FW_VERSIONS = { b'\xf1\x00CV1 MFC AT USA LHD 1.00 1.06 99210-CV000 220328', ], }, + CAR.KIA_EV6_PE: { # (CV1) + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00CV__ RDR ----- 1.00 1.01 99110-CV500 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00CV MFC AT KOR LHD 1.00 1.01 99210-CV500 240405', + ], + }, CAR.HYUNDAI_IONIQ_5: { (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00NE1_ RDR ----- 1.00 1.00 99110-GI000 ', @@ -1042,7 +1048,6 @@ FW_VERSIONS = { b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.00 99211-GI100 230915', b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.01 99211-GI010 211007', b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.01 99211-GI100 240110', - b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.02 99211-GI010 211206', b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.03 99211-GI010 220401', b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.06 99211-GI000 210813', b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.06 99211-GI010 230110', @@ -1056,13 +1061,29 @@ FW_VERSIONS = { b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.00 99211-GI020 230719', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.00 99211-GI100 230915', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.01 99211-GI010 211007', - b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.01 99211-GI100 240110', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.02 99211-GI010 211206', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.03 99211-GI010 220401', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.05 99211-GI010 220614', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.06 99211-GI010 230110', ], }, + CAR.HYUNDAI_IONIQ_5_PE: { # (NE1) + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00NE__ RDR ----- 1.00 1.00 99110-GI500 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00NE MFC AT KOR LHD 1.00 1.02 99211-GI500 240221', + ], + }, + CAR.HYUNDAI_IONIQ_5_N: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00NE1N RDR ----- 1.00 1.00 99110-NI000 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00NE1NMFC AT KOR LHD 1.00 1.04 99211-NI000 231219', + b'\xf1\x00NE1NMFC AT USA LHD 1.00 1.04 99211-NI000 231219', + ], + }, CAR.HYUNDAI_IONIQ_6: { (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00CE__ RDR ----- 1.00 1.01 99110-KL000 ', @@ -1076,9 +1097,16 @@ FW_VERSIONS = { b'\xf1\x00CE MFC AT USA LHD 1.00 1.06 99211-KL000 230915', ], }, + CAR.HYUNDAI_IONIQ_9: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00MEev RDR ----- 1.00 1.00 99110-GO000 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00ME MFC AT KOR LHD 1.00 1.00 99211-GO000 241007', + ], + }, CAR.HYUNDAI_TUCSON_4TH_GEN: { (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00NX4 FR_CMR AT CAN LHD 1.00 1.00 99211-N9220 14K', b'\xf1\x00NX4 FR_CMR AT CAN LHD 1.00 1.00 99211-N9260 14Y', b'\xf1\x00NX4 FR_CMR AT CAN LHD 1.00 1.01 99211-N9100 14A', b'\xf1\x00NX4 FR_CMR AT EUR LHD 1.00 1.00 99211-N9220 14K', @@ -1090,14 +1118,12 @@ FW_VERSIONS = { b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9260 14Y', b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.01 99211-N9100 14A', b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.01 99211-N9240 14T', - b'\xf1\x00NX4 FR_CMR AT EUR LHD 1.00 1.00 99211-N9240 14Q', ], (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00NX4__ 1.00 1.00 99110-N9100 ', b'\xf1\x00NX4__ 1.00 1.01 99110-N9000 ', b'\xf1\x00NX4__ 1.00 1.02 99110-N9000 ', b'\xf1\x00NX4__ 1.01 1.00 99110-N9100 ', - b'\xf1\x00NX4__ 1.01 1.02 99110-N9000 ', ], }, CAR.HYUNDAI_SANTA_CRUZ_1ST_GEN: { @@ -1115,13 +1141,11 @@ FW_VERSIONS = { (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00NQ5 FR_CMR AT AUS RHD 1.00 1.00 99211-P1040 663', b'\xf1\x00NQ5 FR_CMR AT EUR LHD 1.00 1.00 99211-P1040 663', - b'\xf1\x00NQ5 FR_CMR AT GEN LHD 1.00 1.00 99211-P1040 663', b'\xf1\x00NQ5 FR_CMR AT GEN LHD 1.00 1.00 99211-P1060 665', b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.00 99211-P1030 662', b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.00 99211-P1040 663', b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.00 99211-P1060 665', b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.00 99211-P1070 690', - b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.01 99211-P1060 680', ], (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00NQ5__ 1.00 1.02 99110-P1000 ', @@ -1134,14 +1158,11 @@ FW_VERSIONS = { CAR.GENESIS_GV70_1ST_GEN: { (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00JK1 MFC AT CAN LHD 1.00 1.02 99211-IY000 230627', - b'\xf1\x00JK1 MFC AT CAN LHD 1.00 1.04 99211-AR100 210204', b'\xf1\x00JK1 MFC AT USA LHD 1.00 1.01 99211-AR200 220125', b'\xf1\x00JK1 MFC AT USA LHD 1.00 1.01 99211-AR300 220125', - b'\xf1\x00JK1 MFC AT USA LHD 1.00 1.02 99211-IY000 230627', b'\xf1\x00JK1 MFC AT USA LHD 1.00 1.04 99211-AR000 210204', ], (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00JK1_ SCC ----- 1.00 1.02 99110-AR100 ', b'\xf1\x00JK1_ SCC FHCUP 1.00 1.00 99110-AR200 ', b'\xf1\x00JK1_ SCC FHCUP 1.00 1.00 99110-AR300 ', b'\xf1\x00JK1_ SCC FHCUP 1.00 1.00 99110-IY000 ', @@ -1158,6 +1179,24 @@ FW_VERSIONS = { b'\xf1\x00JKev SCC ----- 1.00 1.01 99110-DS000 ', ], }, + + CAR.HYUNDAI_NEXO_1ST_GEN: { + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00FE IEB \x01 312 \x11\x13 58520-M5000', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00FE MFC AT KOR LHD 1.00 1.00 99211-M5100 201218', + b'\xf1\x00FE MFC AT KOR LHD 1.00 1.02 99211-M5100 220405', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00FE MDPS C 1.00 1.05 56340-M5000 9903', + b'\xf1\x00FE MDPS C 1.00 1.06 56340-M5000 1625', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00FE__ SCC FHCUP 1.00 1.05 99110-M5000 ', + ], + }, + CAR.GENESIS_GV60_EV_1ST_GEN: { (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00JW1 MFC AT AUS RHD 1.00 1.03 99211-CU100 221118', @@ -1189,7 +1228,6 @@ FW_VERSIONS = { b'\xf1\x00MQ4HMFC AT KOR LHD 1.00 1.12 99210-P2000 230331', b'\xf1\x00MQ4HMFC AT USA LHD 1.00 1.10 99210-P2000 210406', b'\xf1\x00MQ4HMFC AT USA LHD 1.00 1.11 99210-P2000 211217', - b'\xf1\x00MQ4HMFC AT USA LHD 1.00 1.12 99210-P2000 230331', ], (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00MQhe SCC FHCUP 1.00 1.04 99110-P4000 ', @@ -1250,40 +1288,15 @@ FW_VERSIONS = { b'\xf1\x00US4_ RDR ----- 1.00 1.00 99110-CG000 ', ], }, - CAR.HYUNDAI_NEXO_1ST_GEN: { - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00FE IEB \x01 312 \x11\x13 58520-M5000', + CAR.KIA_EV9: { # (MV) + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00MV__ RDR ----- 1.00 1.02 99110-DO700 ', + b'\xf1\x00MV__ RDR ----- 1.00 1.02 99110-DO000 ' ], (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00FE MFC AT KOR LHD 1.00 1.00 99211-M5100 201218', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00FE MDPS C 1.00 1.05 56340-M5000 9903', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00FE__ SCC FHCUP 1.00 1.05 99110-M5000 ', - ], - }, - CAR.HYUNDAI_KONA_2022: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00OSP LKA AT CND LHD 1.00 1.04 99211-J9200 904', - b'\xf1\x00OSP LKA AT USA LHD 1.00 1.04 99211-J9200 904', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00OSP MDPS C 1.00 1.04 56310/J9290 4OPCC104', - b'\xf1\x00OSP MDPS C 1.00 1.04 56310/J9291 4OPCC104', - b'\xf1\x00OSP MDPS C 1.00 1.04 56310J9291\x00 4OPCC104', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00YB__ FCA ----- 1.00 1.01 99110-J9000 \x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00HT6WA280BLHT6VA650A1COS4N20NS1\x00\x00\x00\x00\x00\x00\x15\xf5\x87~', - b'\xf1\x00T01960BL T01E60A1 DOS2T16X4XE60NS4N\x90\xe6\xcb', - b'\xf1\x00T01G00BL T01I00A1 DOS2T16X2XI00NS0\x8c`\xff\xe7', - b'\xf1\x00T01G00BL T01I00A1 DOS2T16X4XI00NS0\x99L\xeeq', + b'\xf1\x00MV MFC AT KOR LHD 1.00 1.01 99211-DO000 230419', + b'\xf1\x00MV MFC AT USA LHD 1.00 1.02 99211-DO000 230616', + b'\xf1\x00MV MFC AT EUR LHD 1.00 1.02 99211-DO000 230616', ], }, } - -FW_VERSIONS = merge_fw_versions(FW_VERSIONS, FW_VERSIONS_EXT) diff --git a/iqdbc_repo/iqdbc/car/hyundai/hyundaican.py b/iqdbc_repo/iqdbc/car/hyundai/hyundaican.py index 2267e0c2b..f021118c5 100644 --- a/iqdbc_repo/iqdbc/car/hyundai/hyundaican.py +++ b/iqdbc_repo/iqdbc/car/hyundai/hyundaican.py @@ -1,21 +1,33 @@ +import copy import crcmod from iqdbc.car.hyundai.values import CAR, HyundaiFlags -from iqdbc.iqpilot.car.hyundai.escc import EnhancedSmartCruiseControl -from iqdbc.iqpilot.car.hyundai.lead_data_ext import CanLeadData - hyundai_checksum = crcmod.mkCrcFun(0x11D, initCrc=0xFD, rev=False, xorOut=0xdf) +def suppress_casper_ev_fca11_fault(values): + # CASPER EV can report transient FCA faults during camera-SCC handoff. + # Keep the copied FCA11 frame non-faulting without changing other cars. + fca_fault = values["FCA_Failinfo"] != 0 or values["FCA_Status"] == 3 + values["FCA_Failinfo"] = 0 -def _use_stock_scc_surrogates(CP) -> bool: - return CP.carFingerprint == CAR.HYUNDAI_PALISADE + if fca_fault: + values["FCA_Status"] = 2 + values["CF_VSM_Prefill"] = 0 + values["CF_VSM_HBACmd"] = 0 + values["CF_VSM_Warn"] = 0 + values["CF_VSM_BeltCmd"] = 0 + values["CR_VSM_DecCmd"] = 0 + values["FCA_CmdAct"] = 0 + values["FCA_StopReq"] = 0 + values["CF_VSM_DecCmdAct"] = 0 + return values def create_lkas11(packer, frame, CP, apply_torque, steer_req, torque_fault, lkas11, sys_warning, sys_state, enabled, left_lane, right_lane, - left_lane_depart, right_lane_depart, - lkas_icon): + left_lane_depart, right_lane_depart, is_ldws_car): + values = {s: lkas11[s] for s in [ "CF_Lkas_LdwsActivemode", "CF_Lkas_LdwsSysState", @@ -34,7 +46,7 @@ def create_lkas11(packer, frame, CP, apply_torque, steer_req, "CF_Lkas_LdwsOpt_USM", ]} values["CF_Lkas_LdwsSysState"] = sys_state - values["CF_Lkas_SysWarning"] = 3 if sys_warning else 0 + values["CF_Lkas_SysWarning"] = 0 # 3 if sys_warning else 0 values["CF_Lkas_LdwsLHWarning"] = left_lane_depart values["CF_Lkas_LdwsRHWarning"] = right_lane_depart values["CR_Lkas_StrToqReq"] = apply_torque @@ -42,16 +54,10 @@ def create_lkas11(packer, frame, CP, apply_torque, steer_req, values["CF_Lkas_ToiFlt"] = torque_fault # seems to allow actuation on CR_Lkas_StrToqReq values["CF_Lkas_MsgCount"] = frame % 0x10 - if CP.carFingerprint in (CAR.HYUNDAI_SONATA, CAR.HYUNDAI_PALISADE, CAR.KIA_NIRO_EV, CAR.KIA_NIRO_HEV_2021, CAR.KIA_NIRO_PHEV_2022, CAR.HYUNDAI_SANTA_FE, - CAR.HYUNDAI_IONIQ_EV_2020, CAR.HYUNDAI_IONIQ_PHEV, CAR.KIA_SELTOS, CAR.HYUNDAI_ELANTRA_2021, CAR.GENESIS_G70_2020, - CAR.HYUNDAI_ELANTRA_HEV_2021, CAR.HYUNDAI_SONATA_HYBRID, CAR.HYUNDAI_KONA_EV, CAR.HYUNDAI_KONA_HEV, CAR.HYUNDAI_KONA_EV_2022, - CAR.HYUNDAI_SANTA_FE_2022, CAR.KIA_K5_2021, CAR.HYUNDAI_IONIQ_HEV_2022, CAR.HYUNDAI_SANTA_FE_HEV_2022, - CAR.HYUNDAI_SANTA_FE_PHEV_2022, CAR.KIA_STINGER_2022, CAR.KIA_K5_HEV_2020, CAR.KIA_CEED, - CAR.HYUNDAI_AZERA_6TH_GEN, CAR.HYUNDAI_AZERA_HEV_6TH_GEN, CAR.HYUNDAI_CUSTIN_1ST_GEN, CAR.HYUNDAI_KONA_2022, - CAR.KIA_CEED_PHEV_2022_NON_SCC, CAR.HYUNDAI_KONA_EV_NON_SCC, CAR.HYUNDAI_ELANTRA_2022_NON_SCC, - CAR.GENESIS_G70_2021_NON_SCC, CAR.KIA_SELTOS_2023_NON_SCC, CAR.HYUNDAI_BAYON_1ST_GEN_NON_SCC): + + if CP.flags & HyundaiFlags.SEND_LFA.value or CP.carFingerprint in (CAR.HYUNDAI_SANTA_FE): values["CF_Lkas_LdwsActivemode"] = int(left_lane) + (int(right_lane) << 1) - values["CF_Lkas_LdwsOpt_USM"] = 2 + values["CF_Lkas_LdwsOpt_USM"] = 0 if CP.carFingerprint in (CAR.KIA_RAY_EV) else 2 # FcwOpt_USM 5 = Orange blinking car + lanes # FcwOpt_USM 4 = Orange car + lanes @@ -59,16 +65,16 @@ def create_lkas11(packer, frame, CP, apply_torque, steer_req, # FcwOpt_USM 2 = Green car + lanes # FcwOpt_USM 1 = White car + lanes # FcwOpt_USM 0 = No car + lanes - values["CF_Lkas_FcwOpt_USM"] = lkas_icon + values["CF_Lkas_FcwOpt_USM"] = 2 if enabled else 1 # SysWarning 4 = keep hands on wheel # SysWarning 5 = keep hands on wheel (red) # SysWarning 6 = keep hands on wheel (red) + beep # Note: the warning is hidden while the blinkers are on - values["CF_Lkas_SysWarning"] = 4 if sys_warning else 0 + values["CF_Lkas_SysWarning"] = 0 #4 if sys_warning else 0 # Likely cars lacking the ability to show individual lane lines in the dash - elif CP.carFingerprint in (CAR.KIA_OPTIMA_G4, CAR.KIA_OPTIMA_G4_FL, CAR.HYUNDAI_KONA_NON_SCC): + elif CP.carFingerprint in (CAR.KIA_OPTIMA_G4, CAR.KIA_OPTIMA_G4_FL): # SysWarning 4 = keep hands on wheel + beep values["CF_Lkas_SysWarning"] = 4 if sys_warning else 0 @@ -76,7 +82,7 @@ def create_lkas11(packer, frame, CP, apply_torque, steer_req, # SysState 1-2 = white car + lanes # SysState 3 = green car + lanes, green steering wheel # SysState 4 = green car + lanes - values["CF_Lkas_LdwsSysState"] = lkas_icon + values["CF_Lkas_LdwsSysState"] = 3 if enabled else 1 values["CF_Lkas_LdwsOpt_USM"] = 2 # non-2 changes above SysState definition # these have no effect @@ -88,6 +94,11 @@ def create_lkas11(packer, frame, CP, apply_torque, steer_req, # Genesis and Optima fault when forwarding while engaged values["CF_Lkas_LdwsActivemode"] = 2 + if is_ldws_car: + values["CF_Lkas_LdwsOpt_USM"] = 3 + + values["CF_Lkas_Chksum"] = 0 + dat = packer.make_can_msg("LKAS11", 0, values)[1] if CP.flags & HyundaiFlags.CHECKSUM_CRC8: @@ -128,152 +139,265 @@ def create_clu11(packer, frame, clu11, button, CP): return packer.make_can_msg("CLU11", bus, values) -def create_lfahda_mfc(packer, enabled, lfa_icon): +def create_lfahda_mfc(packer, CC, blinking_signal): + activeCarrot = CC.hudControl.activeCarrot values = { - "LFA_Icon_State": lfa_icon, + "LFA_Icon_State": 2 if CC.latActive else 1 if CC.enabled else 0, + #"HDA_Active": 1 if activeCarrot >= 2 else 0, + #"HDA_Icon_State": 2 if activeCarrot == 3 and blinking_signal else 2 if activeCarrot >= 2 else 0, + "HDA_Icon_State": 0 if activeCarrot == 3 and blinking_signal else 2 if activeCarrot >= 1 else 0, + "HDA_VSetReq": 0, #set_speed_in_units if activeCarrot >= 2 else 0, + "HDA_USM" : 2, + "HDA_Icon_Wheel" : 1 if CC.latActive else 0, + #"HDA_Chime" : 1 if CC.latActive else 0, # comment for K9 chime, } return packer.make_can_msg("LFAHDA_MFC", 0, values) +def create_acc_commands_scc(packer, enabled, accel, jerk, idx, hud_control, set_speed, stopping, long_override, suppress_casper_ev_fca, CS, soft_hold_mode): + from iqdbc.car.hyundai.carcontroller import HyundaiJerk + cruise_available = CS.out.cruiseState.available + if CS.paddle_button_prev > 0: + cruise_available = False + soft_hold_active = CS.softHoldActive + soft_hold_info = soft_hold_active > 1 and enabled + #soft_hold_mode = 2 ## some cars can't enable while braking + long_enabled = enabled or (soft_hold_active > 0 and soft_hold_mode == 2) + stop_req = 1 if stopping or (soft_hold_active > 0 and soft_hold_mode == 2) else 0 + d = hud_control.leadDistance + objGap = 0 if d == 0 else 2 if d < 25 else 3 if d < 40 else 4 if d < 70 else 5 + objGap2 = 0 if objGap == 0 else 2 if hud_control.leadRelSpeed < -0.2 else 1 + + if long_enabled: + if jerk.carrot_cruise == 1: + long_enabled = False + accel = -0.5 + elif jerk.carrot_cruise == 2: + accel = jerk.carrot_cruise_accel + + if long_enabled: + scc12_acc_mode = 2 if long_override else 1 + scc14_acc_mode = 2 if long_override else 1 + if CS.out.brakeHoldActive: + scc12_acc_mode = 0 + scc14_acc_mode = 4 + elif CS.out.brakePressed: + scc12_acc_mode = 1 + scc14_acc_mode = 1 + else: + scc12_acc_mode = 0 + scc14_acc_mode = 4 + + warning_front = False -def create_acc_commands(packer, enabled, accel, upper_jerk, idx, lead_data: CanLeadData, - hud_control, set_speed, stopping, long_override, use_fca, CP, - main_cruise_enabled, tuning, ESCC: EnhancedSmartCruiseControl | None = None): commands = [] + if CS.scc11 is not None: + values = copy.copy(CS.scc11) + values["MainMode_ACC"] = 1 if cruise_available else 0 + values["TauGapSet"] = hud_control.leadDistanceBars + values["VSetDis"] = set_speed if enabled else 0 + values["AliveCounterACC"] = idx % 0x10 + values["SCCInfoDisplay"] = 3 if warning_front else 4 if soft_hold_info else 0 if enabled else 0 #2: 크루즈 선택, 3: 전방상황주의, 4: 출발준비 + values["ObjValid"] = 1 if hud_control.leadVisible else 0 + values["ACC_ObjStatus"] = 1 if hud_control.leadVisible else 0 + values["ACC_ObjLatPos"] = 0 + values["ACC_ObjRelSpd"] = hud_control.leadRelSpeed + values["ACC_ObjDist"] = int(hud_control.leadDistance) + values["DriverAlertDisplay"] = 0 + commands.append(packer.make_can_msg("SCC11", 0, values)) - def get_scc11_values(): - values = { - "MainMode_ACC": 1 if main_cruise_enabled else 0, - "TauGapSet": hud_control.leadDistanceBars, - "VSetDis": set_speed if enabled else 0, - "AliveCounterACC": idx % 0x10, - "ObjValid": int(lead_data.lead_visible), # close lead makes controls tighter - "ACC_ObjStatus": int(lead_data.lead_visible), # close lead makes controls tighter - "ACC_ObjLatPos": 0, - "ACC_ObjRelSpd": lead_data.lead_rel_speed, - "ACC_ObjDist": int(lead_data.lead_distance), # close lead makes controls tighter - } - if _use_stock_scc_surrogates(CP): - values["ObjValid"] = 1 - values["ACC_ObjStatus"] = 1 - values["ACC_ObjDist"] = 1 - return values + if CS.scc12 is not None: + values = copy.copy(CS.scc12) + values["ACCMode"] = scc12_acc_mode #2 if enabled and long_override else 1 if long_enabled else 0 + values["StopReq"] = stop_req + values["aReqRaw"] = accel + values["aReqValue"] = accel + values["ACCFailInfo"] = 0 - def get_scc12_values(): - scc12_values = { - "ACCMode": 2 if enabled and long_override else 1 if enabled else 0, - "StopReq": 1 if tuning.stopping else 0, - "aReqRaw": tuning.desired_accel, - "aReqValue": tuning.actual_accel, # stock ramps up and down respecting jerk limit until it reaches aReqRaw - "CR_VSM_Alive": idx % 0xF, - } + #values["DESIRED_DIST"] = CS.out.vEgo * 1.0 + 4.0 # TF: 1.0 + STOPDISTANCE 4.0 m로 가정함. - # show AEB disabled indicator on dash with SCC12 if not sending FCA messages. - # these signals also prevent a TCS fault on non-FCA cars with alpha longitudinal - if not use_fca: - scc12_values["CF_VSM_ConfMode"] = 1 - scc12_values["AEB_Status"] = 1 # AEB disabled - - # Since we have ESCC available, we can update SCC12 with ESCC values. - if ESCC and ESCC.enabled: - ESCC.update_scc12(scc12_values) - - return scc12_values - - def calculate_scc12_checksum(values): + values["CR_VSM_ChkSum"] = 0 + values["CR_VSM_Alive"] = idx % 0xF scc12_dat = packer.make_can_msg("SCC12", 0, values)[1] values["CR_VSM_ChkSum"] = 0x10 - sum(sum(divmod(i, 16)) for i in scc12_dat) % 0x10 - return values - def get_scc14_values(): - values = { - "ComfortBandUpper": tuning.comfort_band_upper, # stock usually is 0 but sometimes uses higher values - "ComfortBandLower": tuning.comfort_band_lower, # stock usually is 0 but sometimes uses higher values - "JerkUpperLimit": tuning.jerk_upper, # stock usually is 1.0 but sometimes uses higher values - "JerkLowerLimit": tuning.jerk_lower, # stock usually is 0.5 but sometimes uses higher values - "ACCMode": 2 if enabled and long_override else 1 if enabled else 4, # stock will always be 4 instead of 0 after first disengage - "ObjGap": lead_data.object_gap, # 5: >30, m, 4: 25-30 m, 3: 20-25 m, 2: < 20 m, 0: no lead - } - if not _use_stock_scc_surrogates(CP): - values["ObjDistStat"] = lead_data.object_rel_gap - return values + commands.append(packer.make_can_msg("SCC12", 0, values)) - def get_fca11_values(): - return { + if CS.scc14 is not None: + values = copy.copy(CS.scc14) + values["ComfortBandUpper"] = jerk.cb_upper + values["ComfortBandLower"] = jerk.cb_lower + values["JerkUpperLimit"] = jerk.jerk_u + values["JerkLowerLimit"] = jerk.jerk_l if long_enabled else 0 # for KONA test + values["ACCMode"] = scc14_acc_mode #2 if enabled and long_override else 1 if long_enabled else 4 # stock will always be 4 instead of 0 after first disengage + values["ObjGap"] = objGap #2 if hud_control.leadVisible else 0 # 5: >30, m, 4: 25-30 m, 3: 20-25 m, 2: < 20 m, 0: no lead + values["ObjDistStat"] = objGap2 + commands.append(packer.make_can_msg("SCC14", 0, values)) + + if CS.fca11 is not None and suppress_casper_ev_fca: # CASPER_EV의 경우 FCA11에서 fail이 간헐적 발생함.. 그냥막자.. 원인불명.. + values = suppress_casper_ev_fca11_fault(copy.copy(CS.fca11)) + fca11_dat = packer.make_can_msg("FCA11", 0, values)[1] + values["CR_FCA_ChkSum"] = hyundai_checksum(fca11_dat[:7]) + commands.append(packer.make_can_msg("FCA11", 0, values)) + # Only send FCA11 on cars where it exists on the bus + if False: #use_fca: + # note that some vehicles most likely have an alternate checksum/counter definition + # https://github.com/commaai/iqdbc/commit/9ddcdb22c4929baf310295e832668e6e7fcfa602 + fca11_values = { "CR_FCA_Alive": idx % 0xF, "PAINT1_Status": 1, "FCA_DrvSetStatus": 1, - "FCA_Status": 1, + "FCA_Status": 1, # AEB disabled } - - def calculate_fca11_checksum(values): - fca11_dat = packer.make_can_msg("FCA11", 0, values)[1] - values["CR_FCA_ChkSum"] = hyundai_checksum(fca11_dat[:7]) - return values - - scc11_values = get_scc11_values() - commands.append(packer.make_can_msg("SCC11", 0, scc11_values)) - - scc12_values = get_scc12_values() - scc12_values = calculate_scc12_checksum(scc12_values) - commands.append(packer.make_can_msg("SCC12", 0, scc12_values)) - - scc14_values = get_scc14_values() - commands.append(packer.make_can_msg("SCC14", 0, scc14_values)) - - # Only send FCA11 on cars where it exists on the bus - # On Camera SCC cars, FCA11 is not disabled, so we forward stock FCA11 back to the car forward hooks - # If we don't use ESCC since ESCC does not block FCA11 from stock radar - if use_fca and not ((CP.flags & HyundaiFlags.CAMERA_SCC) or (ESCC and ESCC.enabled)): - # note that some vehicles most likely have an alternate checksum/counter definition - # https://github.com/commaai/iqdbc/commit/9ddcdb22c4929baf310295e832668e6e7fcfa602 - fca11_values = get_fca11_values() - fca11_values = calculate_fca11_checksum(fca11_values) + fca11_dat = packer.make_can_msg("FCA11", 0, fca11_values)[1] + fca11_values["CR_FCA_ChkSum"] = hyundai_checksum(fca11_dat[:7]) commands.append(packer.make_can_msg("FCA11", 0, fca11_values)) return commands +def create_acc_opt_copy(CS, packer): + values = copy.copy(CS.scc13) + if values["NEW_SIGNAL_1"] == 255: + values["NEW_SIGNAL_1"] = 218 + values["NEW_SIGNAL_2"] = 0 + return packer.make_can_msg("SCC13", 0, CS.scc13) -def create_acc_opt(packer, CP, ESCC: EnhancedSmartCruiseControl | None = None): - """ - Creates SCC13 and FCA12. If ESCC is enabled, it will only create SCC13 since ESCC does not block FCA12. - :param packer: - :param ESCC: - :return: - """ +def create_acc_commands(packer, enabled, accel, jerk, idx, hud_control, set_speed, stopping, long_override, use_fca, CP, CS, soft_hold_mode): + from iqdbc.car.hyundai.carcontroller import HyundaiJerk + cruise_available = CS.out.cruiseState.available + soft_hold_active = CS.softHoldActive + soft_hold_info = soft_hold_active > 1 and enabled + #soft_hold_mode = 2 ## some cars can't enable while braking + long_enabled = enabled or (soft_hold_active > 0 and soft_hold_mode == 2) + stop_req = 1 if stopping or (soft_hold_active > 0 and soft_hold_mode == 2) else 0 + d = hud_control.leadDistance + objGap = 0 if d == 0 else 2 if d < 25 else 3 if d < 40 else 4 if d < 70 else 5 + objGap2 = 0 if objGap == 0 else 2 if hud_control.leadRelSpeed < -0.2 else 1 - def get_scc13_values(): - return { - "SCCDrvModeRValue": 2, - "SCC_Equip": 1, - "Lead_Veh_Dep_Alert_USM": 2, - } + if long_enabled: + scc12_acc_mode = 2 if long_override else 1 + scc14_acc_mode = 2 if long_override else 1 + if CS.out.brakeHoldActive: + scc12_acc_mode = 0 + scc14_acc_mode = 4 + elif CS.out.brakePressed: + scc12_acc_mode = 1 + scc14_acc_mode = 1 + else: + scc12_acc_mode = 0 + scc14_acc_mode = 4 - def get_fca12_values(): - return { - "FCA_DrvSetState": 2, - "FCA_USM": 1, # AEB disabled - } + warning_front = False commands = [] - scc13_values = get_scc13_values() - commands.append(packer.make_can_msg("SCC13", 0, scc13_values)) + scc11_values = { + "MainMode_ACC": 1 if cruise_available else 0, + "TauGapSet": hud_control.leadDistanceBars, + "VSetDis": set_speed if enabled else 0, + "AliveCounterACC": idx % 0x10, + "SCCInfoDisplay": 3 if warning_front else 4 if soft_hold_info else 0 if enabled else 0, + "ObjValid": 1 if hud_control.leadVisible else 0, # close lead makes controls tighter + "ACC_ObjStatus": 1 if hud_control.leadVisible else 0, # close lead makes controls tighter + "ACC_ObjLatPos": 0, + "ACC_ObjRelSpd": hud_control.leadRelSpeed, + "ACC_ObjDist": int(hud_control.leadDistance), # close lead makes controls tighter + "DriverAlertDisplay": 0, + } + commands.append(packer.make_can_msg("SCC11", 0, scc11_values)) - # If ESCC is available and enabled, we skip FCA12, since ESCC does not block FCA12 - if ESCC and ESCC.enabled: - return commands + scc12_values = { + "ACCMode": scc12_acc_mode, + "StopReq": stop_req, + "aReqRaw": 0 if stop_req > 0 else accel, + "aReqValue": accel, # stock ramps up and down respecting jerk limit until it reaches aReqRaw + #"DESIRED_DIST": CS.out.vEgo * 1.0 + 4.0, + "CR_VSM_Alive": idx % 0xF, + } + + # show AEB disabled indicator on dash with SCC12 if not sending FCA messages. + # these signals also prevent a TCS fault on non-FCA cars with alpha longitudinal + if not use_fca: + scc12_values["CF_VSM_ConfMode"] = 1 + scc12_values["AEB_Status"] = 1 # AEB disabled + + scc12_dat = packer.make_can_msg("SCC12", 0, scc12_values)[1] + scc12_values["CR_VSM_ChkSum"] = 0x10 - sum(sum(divmod(i, 16)) for i in scc12_dat) % 0x10 + + commands.append(packer.make_can_msg("SCC12", 0, scc12_values)) + + scc14_values = { + "ComfortBandUpper": jerk.cb_upper, # stock usually is 0 but sometimes uses higher values + "ComfortBandLower": jerk.cb_lower, # stock usually is 0 but sometimes uses higher values + "JerkUpperLimit": jerk.jerk_u, # stock usually is 1.0 but sometimes uses higher values + "JerkLowerLimit": jerk.jerk_l, # stock usually is 0.5 but sometimes uses higher values + "ACCMode": scc14_acc_mode, # if enabled and long_override else 1 if enabled else 4, # stock will always be 4 instead of 0 after first disengage + "ObjGap": objGap, #2 if hud_control.leadVisible else 0, # 5: >30, m, 4: 25-30 m, 3: 20-25 m, 2: < 20 m, 0: no lead + "ObjDistStat": objGap2, + } + commands.append(packer.make_can_msg("SCC14", 0, scc14_values)) + + # Only send FCA11 on cars where it exists on the bus + # On Camera SCC cars, FCA11 is not disabled, so we forward stock FCA11 back to the car forward hooks + if use_fca and not (CP.flags & HyundaiFlags.CAMERA_SCC): + # note that some vehicles most likely have an alternate checksum/counter definition + # https://github.com/commaai/iqdbc/commit/9ddcdb22c4929baf310295e832668e6e7fcfa602 + fca11_values = { + "CR_FCA_Alive": idx % 0xF, + "PAINT1_Status": 1, + "FCA_DrvSetStatus": 1, + "FCA_Status": 1, # AEB disabled + } + fca11_dat = packer.make_can_msg("FCA11", 0, fca11_values)[1] + fca11_values["CR_FCA_ChkSum"] = hyundai_checksum(fca11_dat[:7]) + commands.append(packer.make_can_msg("FCA11", 0, fca11_values)) + + return commands + +def create_acc_opt(packer, CP): + commands = [] + + scc13_values = { + "SCCDrvModeRValue": 2, + "SCC_Equip": 1, + "Lead_Veh_Dep_Alert_USM": 2, + } + commands.append(packer.make_can_msg("SCC13", 0, scc13_values)) # TODO: this needs to be detected and conditionally sent on unsupported long cars # On Camera SCC cars, FCA12 is not disabled, so we forward stock FCA12 back to the car forward hooks if not (CP.flags & HyundaiFlags.CAMERA_SCC): - fca12_values = get_fca12_values() + fca12_values = { + "FCA_DrvSetState": 2, + "FCA_USM": 1, # AEB disabled + } commands.append(packer.make_can_msg("FCA12", 0, fca12_values)) return commands - def create_frt_radar_opt(packer): frt_radar11_values = { "CF_FCA_Equip_Front_Radar": 1, } return packer.make_can_msg("FRT_RADAR11", 0, frt_radar11_values) + +def create_clu11_button(packer, frame, clu11, button, CP): + values = clu11.copy() + values["CF_Clu_CruiseSwState"] = button + #values["CF_Clu_AliveCnt1"] = frame % 0x10 + values["CF_Clu_AliveCnt1"] = (values["CF_Clu_AliveCnt1"] + 1) % 0x10 + # send buttons to camera on camera-scc based cars + bus = 2 if CP.flags & HyundaiFlags.CAMERA_SCC else 0 + return packer.make_can_msg("CLU11", bus, values) + +def create_mdps12(packer, frame, mdps12): + values = mdps12 + values["CF_Mdps_ToiActive"] = 0 + values["CF_Mdps_ToiUnavail"] = 1 + values["CF_Mdps_MsgCount2"] = frame % 0x100 + values["CF_Mdps_Chksum2"] = 0 + + dat = packer.make_can_msg("MDPS12", 2, values)[1] + checksum = sum(dat) % 256 + values["CF_Mdps_Chksum2"] = checksum + + return packer.make_can_msg("MDPS12", 2, values) diff --git a/iqdbc_repo/iqdbc/car/hyundai/hyundaicanfd.py b/iqdbc_repo/iqdbc/car/hyundai/hyundaicanfd.py index bc8c10328..3d210f0cd 100644 --- a/iqdbc_repo/iqdbc/car/hyundai/hyundaicanfd.py +++ b/iqdbc_repo/iqdbc/car/hyundai/hyundaicanfd.py @@ -2,22 +2,42 @@ import copy import numpy as np from iqdbc.car import CanBusBase from iqdbc.car.crc import CRC16_XMODEM -from iqdbc.car.hyundai.values import HyundaiFlags -from iqdbc.iqpilot.car.hyundai.lead_data_ext import CanFdLeadData +from iqdbc.car.hyundai.values import HyundaiFlags, HyundaiExtFlags +from openpilot.common.params import Params +from iqdbc.car.common.conversions import Conversions as CV +from cereal import log +LaneChangeState = log.LaneChangeState +LaneChangeDirection = log.LaneChangeDirection +TurnDirection = log.Desire + + +def hyundai_crc8(data: bytes) -> int: + poly = 0x2F + crc = 0xFF + + for byte in data: + crc ^= byte + for _ in range(8): + if crc & 0x80: + crc = ((crc << 1) ^ poly) & 0xFF + else: + crc = (crc << 1) & 0xFF + + return crc ^ 0xFF class CanBus(CanBusBase): def __init__(self, CP, fingerprint=None, lka_steering=None) -> None: super().__init__(CP, fingerprint) if lka_steering is None: - lka_steering = CP.flags & HyundaiFlags.CANFD_LKA_STEERING.value if CP is not None else False + lka_steering = CP.flags & HyundaiFlags.CANFD_HDA2.value if CP is not None else False # On the CAN-FD platforms, the LKAS camera is on both A-CAN and E-CAN. LKA steering cars # have a different harness than the LFA steering variants in order to split # a different bus, since the steering is done by different ECUs. self._a, self._e = 1, 0 - if lka_steering: + if lka_steering and Params().get_int("HyundaiCameraSCC") == 0: #배선개조는 무조건 Bus0가 ECAN임. self._a, self._e = 0, 1 self._a += self.offset @@ -36,50 +56,190 @@ class CanBus(CanBusBase): def CAM(self): return self._cam +# CAN LIST (CAM) - 롱컨개조시... ADAS + CAM +# 160: ADRV_0x160 +# 1da: ADRV_0x1da +# 1ea: ADRV_0x1ea +# 200: ADRV_0x200 +# 345: ADRV_0x345 +# 1fa: CLUSTER_SPEED_LIMIT +# 12a: LFA +# 1e0: LFAHDA_CLUSTER +# 11a: +# 1b5: +# 1a0: SCC_CONTROL -def create_steering_messages(packer, CP, CAN, enabled, lat_active, apply_torque, lkas_icon): - common_values = { - "LKA_MODE": 2, - "LKA_ICON": lkas_icon, - "TORQUE_REQUEST": apply_torque, - "LKA_ASSIST": 0, - "STEER_REQ": 1 if lat_active else 0, - "STEER_MODE": 0, - "HAS_LANE_SAFETY": 0, # hide LKAS settings - "NEW_SIGNAL_2": 0, - "DAMP_FACTOR": 100, # can potentially tuned for better perf [3, 200] - } +# CAN LIST (ACAN) +# 160: ADRV_0x160 +# 51: ADRV_0x51 +# 180: CAM_0x180 +# ... +# 185: CAM_0x185 +# 1b6: CAM_0x1b6 +# ... +# 1b9: CAM_0x1b9 +# 1fb: CAM_0x1fb +# 2a2 - 2a4 +# 2bb - 2be +# LKAS +# 201 - 2a0 - lkas_values = copy.copy(common_values) - lkas_values["LKA_AVAILABLE"] = 0 - lfa_values = copy.copy(common_values) - lfa_values["NEW_SIGNAL_1"] = 0 + +def create_steering_messages_camera_scc(frame, packer, CP, CAN, CC, lat_active, apply_steer, CS, apply_angle, max_torque, angle_control): + + emergency_steering = False + if CS.adrv_0x161 is not None: + values = CS.adrv_0x161 + emergency_steering = values["ALERTS_1"] in [11, 12, 13, 14, 15, 21, 22, 23, 24, 25, 26] + ret = [] - if CP.flags & HyundaiFlags.CANFD_LKA_STEERING: - lkas_msg = "LKAS_ALT" if CP.flags & HyundaiFlags.CANFD_LKA_STEERING_ALT else "LKAS" - if CP.openpilotLongitudinalControl: - ret.append(packer.make_can_msg("LFA", CAN.ECAN, lfa_values)) - ret.append(packer.make_can_msg(lkas_msg, CAN.ACAN, lkas_values)) - else: - ret.append(packer.make_can_msg("LFA", CAN.ECAN, lfa_values)) + if CS.mdps is not None: + values = copy.copy(CS.mdps) + #rx_counter = values.pop("COUNTER", None) + if angle_control: + if CS.lfa_alt is not None: + values["LFA2_ACTIVE"] = CS.lfa_alt["LKAS_ANGLE_ACTIVE"] + else: + if CS.lfa is not None: + values["LKA_ACTIVE"] = 1 if CS.lfa["STEER_REQ"] == 1 else 0 + + if frame % 1000 < 40: + values["STEERING_COL_TORQUE"] += 220 + #ret.append(packer.make_can_msg("MDPS", CAN.CAM, values, rx_counter = rx_counter)) + ret.append(packer.make_can_msg("MDPS", CAN.CAM, values)) + + if frame % 10 == 0: + if CS.steer_touch_2af is not None: + values = copy.copy(CS.steer_touch_2af) + if frame % 1000 < 40: + values["TOUCH_DETECT"] = 3 + values["TOUCH1"] = 50 + values["TOUCH2"] = 50 + values["CHECKSUM_"] = 0 + dat = packer.make_can_msg("STEER_TOUCH_2AF", 0, values)[1] + values["CHECKSUM_"] = hyundai_crc8(dat[1:8]) + + ret.append(packer.make_can_msg("STEER_TOUCH_2AF", CAN.CAM, values)) + + if angle_control: + if CS.lfa_alt is not None: + values = copy.copy(CS.lfa_alt) + rx_counter = values.pop("COUNTER", None) + if emergency_steering: + pass + else: + #values = {} #CS.lfa_alt + values["LKAS_ANGLE_ACTIVE"] = 2 if CC.latActive else 1 + values["LKAS_ANGLE_CMD"] = -apply_angle + values["LKAS_ANGLE_MAX_TORQUE"] = max_torque if CC.latActive else 0 + ret.append(packer.make_can_msg("LFA_ALT", CAN.ECAN, values, rx_counter = rx_counter)) + + if CS.lfa is not None: + values = copy.copy(CS.lfa) + rx_counter = values.pop("COUNTER", None) + if not emergency_steering: + values["LKA_MODE"] = 0 + values["LKA_ICON"] = 2 if CC.latActive else 1 + values["TORQUE_REQUEST"] = -1024 # apply_steer, + values["VALUE63"] = 0 # LKA_ASSIST + values["STEER_REQ"] = 0 # 1 if lat_active else 0, + values["HAS_LANE_SAFETY"] = 0 # hide LKAS settings + values["LKA_ACTIVE"] = 3 if CC.latActive else 0 # this changes sometimes, 3 seems to indicate engaged + values["VALUE64"] = 0 #STEER_MODE, NEW_SIGNAL_2 + values["LKAS_ANGLE_CMD"] = -25.6 #-apply_angle, + values["LKAS_ANGLE_ACTIVE"] = 0 #2 if lat_active else 1, + values["LKAS_ANGLE_MAX_TORQUE"] = 0 #max_torque if lat_active else 0, + values["NEW_SIGNAL_1"] = 10 + ret.append(packer.make_can_msg("LFA", CAN.ECAN, values, rx_counter = rx_counter)) + + elif CS.lfa is not None: + values = {} + values["LKA_MODE"] = 2 + values["LKA_ICON"] = 2 if lat_active else 1 + values["TORQUE_REQUEST"] = apply_steer + values["STEER_REQ"] = 1 if lat_active else 0 + values["VALUE64"] = 0 # STEER_MODE, NEW_SIGNAL_2 + values["HAS_LANE_SAFETY"] = 0 + values["LKA_ACTIVE"] = 0 # NEW_SIGNAL_1 + + values["DampingGain"] = 0 if lat_active else 100 + #values["VALUE63"] = 0 + + #values["VALUE82_SET256"] = 0 + + ret.append(packer.make_can_msg("LFA", CAN.ECAN, values)) return ret +def create_steering_messages(packer, CP, CAN, enabled, lat_active, apply_steer, apply_angle, max_torque, angle_control): -def create_suppress_lfa(packer, CAN, lfa_block_msg, lka_steering_alt): - suppress_msg = "CAM_0x362" if lka_steering_alt else "CAM_0x2a4" - msg_bytes = 32 if lka_steering_alt else 24 + ret = [] + if angle_control: + values = { + "LKA_MODE": 0, + "LKA_ICON": 2 if enabled else 1, + "TORQUE_REQUEST": 0, # apply_steer, + "VALUE63": 0, # LKA_ASSIST + "STEER_REQ": 0, # 1 if lat_active else 0, + "HAS_LANE_SAFETY": 0, # hide LKAS settings + "LKA_ACTIVE": 3 if lat_active else 0, # this changes sometimes, 3 seems to indicate engaged + "VALUE64": 0, #STEER_MODE, NEW_SIGNAL_2 + "LKAS_ANGLE_CMD": -apply_angle, + "LKAS_ANGLE_ACTIVE": 2 if lat_active else 1, + "LKAS_ANGLE_MAX_TORQUE": max_torque if lat_active else 0, - values = {f"BYTE{i}": lfa_block_msg[f"BYTE{i}"] for i in range(3, msg_bytes) if i != 7} + # test for EV6PE + "NEW_SIGNAL_1": 10, #2, + "DampingGain": 9, + "VALUE231": 146, + "VALUE239": 1, + "VALUE247": 255, + "VALUE255": 255, + } + else: + values = { + "LKA_MODE": 2, + "LKA_ICON": 2 if enabled else 1, + "TORQUE_REQUEST": apply_steer, + "DampingGain": 100, #3 if enabled else 100, + "STEER_REQ": 1 if lat_active else 0, + #"STEER_MODE": 0, + "HAS_LANE_SAFETY": 0, # hide LKAS settings + "VALUE63": 0, + "VALUE64": 100, + } + + if CP.flags & HyundaiFlags.CANFD_HDA2: + lkas_msg = "LKAS_ALT" if CP.flags & HyundaiFlags.CANFD_HDA2_ALT_STEERING else "LKAS" + if CP.openpilotLongitudinalControl: + ret.append(packer.make_can_msg("LFA", CAN.ECAN, values)) + if not (CP.flags & HyundaiFlags.CAMERA_SCC.value): + ret.append(packer.make_can_msg(lkas_msg, CAN.ACAN, values)) + else: + ret.append(packer.make_can_msg("LFA", CAN.ECAN, values)) + + return ret + +def create_suppress_lfa(packer, CAN, CS): + if CS.cam_0x362 is not None: + suppress_msg = "CAM_0x362" + lfa_block_msg = CS.cam_0x362 + elif CS.cam_0x2a4 is not None: + suppress_msg = "CAM_0x2a4" + lfa_block_msg = CS.cam_0x2a4 + else: + return [] + + #values = {f"BYTE{i}": lfa_block_msg[f"BYTE{i}"] for i in range(3, msg_bytes) if i != 7} + values = copy.copy(lfa_block_msg) values["COUNTER"] = lfa_block_msg["COUNTER"] values["SET_ME_0"] = 0 values["SET_ME_0_2"] = 0 values["LEFT_LANE_LINE"] = 0 values["RIGHT_LANE_LINE"] = 0 - return packer.make_can_msg(suppress_msg, CAN.ACAN, values) - + return [packer.make_can_msg(suppress_msg, CAN.ACAN, values)] def create_buttons(packer, CP, CAN, cnt, btn): values = { @@ -88,14 +248,12 @@ def create_buttons(packer, CP, CAN, cnt, btn): "CRUISE_BUTTONS": btn, } - bus = CAN.ECAN if CP.flags & HyundaiFlags.CANFD_LKA_STEERING else CAN.CAM + #bus = CAN.ECAN if CP.flags & HyundaiFlags.CANFD_HDA2 else CAN.CAM + bus = CAN.ECAN return packer.make_can_msg("CRUISE_BUTTONS", bus, values) - def create_acc_cancel(packer, CP, CAN, cruise_info_copy): - # CAN FD camera-based SCC requires additional signals to be preserved - # verbatim from the previous SCC_CONTROL frame to avoid checksum or - # state validation faults. Classic CAN SCC only validates a subset. + # TODO: why do we copy different values here? if CP.flags & HyundaiFlags.CANFD_CAMERA_SCC.value: values = {s: cruise_info_copy[s] for s in [ "COUNTER", @@ -124,49 +282,169 @@ def create_acc_cancel(packer, CP, CAN, cruise_info_copy): }) return packer.make_can_msg("SCC_CONTROL", CAN.ECAN, values) - -def create_lfahda_cluster(packer, CAN, enabled, lfa_icon): - values = { - "HDA_ICON": 1 if enabled else 0, - "LFA_ICON": lfa_icon, - } - return packer.make_can_msg("LFAHDA_CLUSTER", CAN.ECAN, values) +def create_lfahda_cluster(packer, CS, CAN, long_active, lat_active): -def create_acc_control(packer, CAN, enabled, accel_last, accel, stopping, gas_override, set_speed, hud_control, - lead_data: CanFdLeadData, main_cruise_enabled, tuning): + if CS.lfahda_cluster is not None: + values = copy.copy(CS.lfahda_cluster) + rx_counter = values.pop("COUNTER", None) + else: + return [] + values = {} + rx_counter = None + values["LFA_OptUsmSta"] = 2 + values["HDA_OptUsmSta"] = 2 + values["HDA_CntrlModSta"] = 2 if long_active else 0 + values["HDA_LFA_SymSta"] = 2 if lat_active else 0 + return [packer.make_can_msg("LFAHDA_CLUSTER", CAN.ECAN, values, rx_counter=rx_counter)] + +def create_lfa_icon_non_camera_scc(packer, CS, CAN, CC): + ret = [] + if CS.adrv_0x161 is not None: + values = copy.copy(CS.adrv_0x161) + rx_counter = values.pop("COUNTER", None) + + lat_active = CC.latActive + lat_enabled = CS.out.latEnabled + + values["LFA_ICON"] = 2 if lat_active else 1 if lat_enabled else 0 + values["LKA_ICON"] = 4 if lat_active else 3 if lat_enabled else 0 + + if values["ALERTS_2"] in [1, 2, 5, 6, 10, 21, 22]: + values["ALERTS_2"] = 0 + values["DAW_ICON"] = 0 + + if values["ALERTS_1"] == 0: + values["SOUNDS_1"] = 0 + values["SOUNDS_2"] = 0 + values["SOUNDS_4"] = 0 + + if values["ALERTS_3"] in [3, 4, 11, 12, 13, 14, 17, 19, 26, 7, 8, 9, 10]: + values["ALERTS_3"] = 0 + values["SOUNDS_3"] = 0 + + if values["ALERTS_5"] in [1, 2, 3, 4, 5]: + values["ALERTS_5"] = 0 + + ret.append(packer.make_can_msg("ADRV_0x161", CAN.ECAN, values, rx_counter=rx_counter)) + return ret + +def create_acc_control_scc2(packer, CAN, enabled, accel_last, accel, stopping, gas_override, set_speed, hud_control, hyundai_jerk, CS): + + if CS.scc_control is None: + return None + enabled = (enabled or CS.softHoldActive > 0) and CS.paddle_button_prev == 0 + + acc_mode = 0 if not enabled else (2 if gas_override else 1) + + if hyundai_jerk.carrot_cruise == 1: + acc_mode = 4 if enabled else 0 + enabled = False + accel = accel_last = 0.5 + + elif hyundai_jerk.carrot_cruise == 2: + accel = accel_last = hyundai_jerk.carrot_cruise_accel + + jerk_u = hyundai_jerk.jerk_u + jerk_l = hyundai_jerk.jerk_l jerk = 5 jn = jerk / 50 if not enabled or gas_override: a_val, a_raw = 0, 0 else: - a_raw = accel # noqa: F841 - a_val = np.clip(accel, accel_last - jn, accel_last + jn) # noqa: F841 + a_raw = accel + a_val = accel #np.clip(accel, accel_last - jn, accel_last + jn) + + values = copy.copy(CS.scc_control) + rx_counter = values.pop("COUNTER", None) + values["ACCMode"] = acc_mode + values["MainMode_ACC"] = 1 + values["StopReq"] = 1 if stopping or CS.softHoldActive > 0 else 0 # 1: Stop control is required, 2: Not used, 3: Error Indicator + values["aReqValue"] = a_val + values["aReqRaw"] = a_raw + values["VSetDis"] = set_speed + #values["JerkLowerLimit"] = jerk if enabled else 1 + #values["JerkUpperLimit"] = 3.0 + values["JerkLowerLimit"] = jerk_l if enabled else 1 + values["JerkUpperLimit"] = 2.0 if stopping or CS.softHoldActive else jerk_u + values["DISTANCE_SETTING"] = hud_control.leadDistanceBars # + 5 + #values["DISTANCE_SETTING"] = hud_control.leadDistanceBars + 5 + + #values["ACC_ObjDist"] = 1 + #values["ObjValid"] = 0 + #values["OBJ_STATUS"] = 2 + #values["NSCCOper"] = 1 if enabled else 0 # 0: off, 1: Ready, 2: Act, 3: Error Indicator + #values["NSCCOnOff"] = 2 # 0: Default, 1: Off, 2: On, 3: Invalid + #values["SET_ME_3"] = 0x3 # objRelsped와 충돌 + #values["ACC_ObjLatPos"] = - hud_control.leadDPath + values["DriveMode"] = 0 # 0: Default, 1: Comfort Mode, 2:Normal mode, 3:Dynamic mode, reserved + + hud_lead_info = 0 + if hud_control.leadVisible: + hud_lead_info = 1 if values["ACC_ObjRelSpd"] > 0 else 2 + values["HUD_LEAD_INFO"] = hud_lead_info #1: in-path object detected(uncontrollable), 2: controllable long, 3: controllable long & lat, ... reserved + + values["DriverAlert"] = 0 # 1: SCC Disengaged, 2: No SCC Engage condition, 3: SCC Disenganed when the vehicle stops + + values["TARGET_DISTANCE"] = CS.out.vEgo * 1.0 + 4.0 + + soft_hold_info = 1 if CS.softHoldActive > 1 and enabled else 0 + + # 이거안하면 정지중 뒤로 밀리는 현상 발생하는듯.. (신호정지중에 뒤로 밀리는 경험함.. 시험해봐야) + if values["InfoDisplay"] != 5: #5: Front Car Departure Notice + values["InfoDisplay"] = 4 if stopping and CS.out.aEgo > -0.3 else 0 # 1: SCC Mode, 2: Convention Cruise Mode, 3: Object disappered at low speed, 4: Available to resume acceleration control, 5: Front vehicle departure notice, 6: Reserved, 7: Invalid + + values["TakeOverReq"] = 0 # 1: Takeover request, 2: Not used, 3: Error indicator , 이것이 켜지면 가속을 안하는듯함. + #values["NEW_SIGNAL_4"] = 9 if hud_control.leadVisible else 0 + # AccelLimitBandUpper, Lower + values["SysFailState"] = 0 # 1: Performance degredation, 2: system temporairy unavailble, 3: SCC Service required , 눈이 묻어 레이더오류시... 2가 됨. 이때 가속을 안함... + + values["AccelLimitBandUpper"] = 0.0 # 이값이 1.26일때 가속을 안하는 증상이 보임.. + values["AccelLimitBandLower"] = 0.0 + + values["ZEROS_7"] = 1 + + return packer.make_can_msg("SCC_CONTROL", CAN.ECAN, values) + +def create_acc_control(packer, CAN, enabled, accel_last, accel, stopping, gas_override, set_speed, hud_control, jerk_u, jerk_l, CS): + + enabled = enabled or CS.softHoldActive > 0 + jerk = 5 + jn = jerk / 50 + if not enabled or gas_override: + a_val, a_raw = 0, 0 + else: + a_raw = accel + a_val = np.clip(accel, accel_last - jn, accel_last + jn) values = { "ACCMode": 0 if not enabled else (2 if gas_override else 1), - "MainMode_ACC": 1 if main_cruise_enabled else 0, - "StopReq": 1 if tuning.stopping else 0, - "aReqValue": tuning.actual_accel, - "aReqRaw": tuning.actual_accel, + "MainMode_ACC": 1, + "StopReq": 1 if stopping or CS.softHoldActive > 0 else 0, + "aReqValue": a_val, + "aReqRaw": a_raw, "VSetDis": set_speed, - "JerkLowerLimit": tuning.jerk_lower, - "JerkUpperLimit": tuning.jerk_upper, + #"JerkLowerLimit": jerk if enabled else 1, + #"JerkUpperLimit": 3.0, + "JerkLowerLimit": jerk_l if enabled else 1, + "JerkUpperLimit": jerk_u, - "ACC_ObjDist": int(lead_data.lead_distance), - "ACC_ObjRelSpd": lead_data.lead_rel_speed, - "ObjValid": int(not lead_data.lead_visible), - "SCC_ObjSta": 0 if not (enabled and lead_data.lead_visible) else (1 if gas_override else 2), - "SET_ME_2": 0x4, - "SET_ME_3": 0x3, - "SET_ME_TMP_64": 0x64, - "DISTANCE_SETTING": hud_control.leadDistanceBars, + "ACC_ObjDist": 1, + #"ObjValid": 0, + #"OBJ_STATUS": 2, + "NSCCOper": 0, + "NSCCOnOff": 2, + "DriveMode": 0, + #"SET_ME_3": 0x3, + "ACC_ObjLatPos": 0x64, + "DISTANCE_SETTING": hud_control.leadDistanceBars, # + 5, + "InfoDisplay": 4 if stopping and CS.out.cruiseState.standstill else 0, } return packer.make_can_msg("SCC_CONTROL", CAN.ECAN, values) -def create_spas_messages(packer, CAN, left_blink, right_blink): +def create_spas_messages(packer, CAN, frame, left_blink, right_blink): ret = [] values = { @@ -186,8 +464,10 @@ def create_spas_messages(packer, CAN, left_blink, right_blink): return ret -def create_fca_warning_light(packer, CAN, frame): +def create_fca_warning_light(CP, packer, CAN, frame): ret = [] + if CP.flags & HyundaiFlags.CAMERA_SCC.value: + return ret if frame % 2 == 0: values = { @@ -196,53 +476,100 @@ def create_fca_warning_light(packer, CAN, frame): 'SET_ME_FF': 0xff, 'SET_ME_FC': 0xfc, 'SET_ME_9': 0x9, + #'DATA102': 1, } ret.append(packer.make_can_msg("ADRV_0x160", CAN.ECAN, values)) return ret +def create_tcs_messages(packer, CAN, CS): + ret = [] + if CS.tcs is not None: + values = copy.copy(CS.tcs) + #rx_counter = values.pop("COUNTER", None) + values["DriverBraking"] = 0 + values["NEW_SIGNAL_20"] = 0 + values["NEW_SIGNAL_11"] = 0 + values["DriverBrakingLowSens"] = 0 + #values["NEW_SIGNAL_1"] = 0 # accel과 관련.. 옆두부 꺼지는것과 관련? 확인필요 + #values["ACC_REQ"] = 1 # 옆두부 꺼지는것과 관련? 확인필요.. 항상 켜지게함.. + values["NEW_SIGNAL_1"] = 0 if values["ACC_REQ"] == 1 else 1 # 옆두부.. + #ret.append(packer.make_can_msg("TCS", CAN.CAM, values, rx_counter = rx_counter)) + ret.append(packer.make_can_msg("TCS", CAN.CAM, values)) + return ret -def create_adrv_messages(packer, CAN, frame): +def forward_button_message(packer, CAN, frame, CS, cruise_button, MainMode_ACC_trigger, LFA_trigger): + ret = [] + if frame % 2 == 0: + if CS.cruise_buttons_msg is not None: + values = copy.copy(CS.cruise_buttons_msg) + # A held MAIN is reported on this bit and switches some clusters to LIMIT mode. + values["NORMAL_CRUISE_MAIN_BTN"] = 0 + #rx_counter = values.pop("COUNTER", None) + cruise_button_driver = values["CRUISE_BUTTONS"] + if cruise_button_driver == 0: + values["CRUISE_BUTTONS"] = cruise_button + if MainMode_ACC_trigger > 0: + #values["ADAPTIVE_CRUISE_MAIN_BTN"] = 1 + pass + elif LFA_trigger > 0: + values["LFA_BTN"] = 1 + + #ret.append(packer.make_can_msg(CS.cruise_btns_msg_canfd, CAN.CAM, values, rx_counter = rx_counter)) + ret.append(packer.make_can_msg(CS.cruise_btns_msg_canfd, CAN.CAM, values)) + return ret + +def create_adrv_messages(CP, packer, CAN, frame): # messages needed to car happy after disabling # the ADAS Driving ECU to do longitudinal control ret = [] - values = { - } - ret.append(packer.make_can_msg("ADRV_0x51", CAN.ACAN, values)) + if not CP.flags & HyundaiFlags.CAMERA_SCC.value: + values = {} - ret.extend(create_fca_warning_light(packer, CAN, frame)) + ret.extend(create_fca_warning_light(CP, packer, CAN, frame)) + if frame % 5 == 0: + values = { + #'HDA_MODE1': 0x8, + 'HDA_MODE2': 0x1, + #'SET_ME_1C': 0x1c, + 'SET_ME_FF': 0xff, + #'SET_ME_TMP_F': 0xf, + #'SET_ME_TMP_F_2': 0xf, + #'DATA26': 1, #1 + #'DATA32': 5, #5 + } + ret.append(packer.make_can_msg("ADRV_0x1ea", CAN.ECAN, values)) - if frame % 5 == 0: - values = { - 'SET_ME_1C': 0x1c, - 'SET_ME_FF': 0xff, - 'SET_ME_TMP_F': 0xf, - 'SET_ME_TMP_F_2': 0xf, - } - ret.append(packer.make_can_msg("ADRV_0x1ea", CAN.ECAN, values)) + values = { + 'SET_ME_E1': 0xe1, + #'SET_ME_3A': 0x3a, + 'TauGapSet' : 1, + 'NEW_SIGNAL_2': 3, + } + ret.append(packer.make_can_msg("ADRV_0x200", CAN.ECAN, values)) - values = { - 'SET_ME_E1': 0xe1, - 'SET_ME_3A': 0x3a, - } - ret.append(packer.make_can_msg("ADRV_0x200", CAN.ECAN, values)) + if frame % 20 == 0: + values = { + 'SET_ME_15': 0x15, + } + ret.append(packer.make_can_msg("ADRV_0x345", CAN.ECAN, values)) - if frame % 20 == 0: - values = { - 'SET_ME_15': 0x15, - } - ret.append(packer.make_can_msg("ADRV_0x345", CAN.ECAN, values)) - - if frame % 100 == 0: - values = { - 'SET_ME_22': 0x22, - 'SET_ME_41': 0x41, - } - ret.append(packer.make_can_msg("ADRV_0x1da", CAN.ECAN, values)) + if frame % 100 == 0: + values = { + 'SET_ME_22': 0x22, + 'SET_ME_41': 0x41, + } + ret.append(packer.make_can_msg("ADRV_0x1da", CAN.ECAN, values)) return ret +## carrot +def alt_cruise_buttons(packer, CP, CAN, buttons, cruise_btns_msg, cnt): + cruise_btns_msg["CRUISE_BUTTONS"] = buttons + cruise_btns_msg["COUNTER"] = (cruise_btns_msg["COUNTER"] + 1 + cnt) % 256 + bus = CAN.ECAN if CP.flags & HyundaiFlags.CANFD_HDA2 else CAN.CAM + return packer.make_can_msg("CRUISE_BUTTONS_ALT", bus, cruise_btns_msg) def hkg_can_fd_checksum(address: int, sig, d: bytearray) -> int: crc = 0 @@ -259,3 +586,348 @@ def hkg_can_fd_checksum(address: int, sig, d: bytearray) -> int: elif len(d) == 32: crc ^= 0x9F5B return crc + + + + +def _clip_int(x, lo, hi): + return lo if x < lo else hi if x > hi else int(x) + +def _get_desire_and_lane_changing(md): + desire = 0 + lane_changing = 0 + if md is not None: + desire = md.meta.desire.raw + ds = md.meta.desireState + if len(ds) > 4: + if ds[1] > 0.9: lane_changing = 1 + if ds[2] > 0.9: lane_changing = 2 + if ds[3] > 0.9: lane_changing = 3 + if ds[4] > 0.9: lane_changing = 4 + return desire, lane_changing + +def _apply_lane_desire(values, desire): + #values['LANE_CHANGING'] = 0 + + if desire == 1: # 좌회전 + values['LANE_CHANGING'] = 1 + values["LANELINE_CURVATURE"] = 15 + values["LANELINE_CURVATURE_DIRECTION"] = 0 + + elif desire == 2: # 우회전 + values['LANE_CHANGING'] = 2 + values["LANELINE_CURVATURE"] = 15 + values["LANELINE_CURVATURE_DIRECTION"] = 1 + + elif desire == 3: # 좌차선변경 + values['LANE_CHANGING'] = 3 + + elif desire == 4: # 우차선변경 + values['LANE_CHANGING'] = 4 + +def _apply_radar_blink(values, radar_pairs, frame, *, + disp_dist=30.0, min_dist=14.0, + max_interval=100, t=1.0): + """ + 거리 > min_dist 일 때만 깜빡임. + 거리 멀수록 interval 커짐(느리게). + """ + for det_key, dist_key in radar_pairs: + dist = values[dist_key] + if dist <= min_dist: + continue + + d = min(dist, disp_dist) + interval = int((1 + (max_interval - 1) * (d / disp_dist)) * t) + interval = _clip_int(interval, 1, max_interval) + + blink = (frame // interval) & 1 + values[det_key] = 2 - blink + values[dist_key] = min_dist + +def _suppress_trailer_mode_warning(values, CS): + # Logs from IONIQ 9 show ALERTS_5=6 is the periodic + # "driver assistance limited in trailer mode" popup. + if CS.trailer_connected and values.get("ALERTS_5") == 6: + values["ALERTS_5"] = 0 + +def _make_ccnc_values(values, CS, lat_active, frame, hud_control, + lane_line=True, corner_radar=True, + desire=0, + blink_pairs=None, + blink_t=1.0): + if lane_line: + curvature = round(CS.out.steeringAngleDeg / 3) + mag = min(abs(curvature), 15) + curv = mag + (-1 if curvature < 0 else 0) + direction = 1 if curvature < 0 else 0 + values["LANELINE_CURVATURE"] = curv if lat_active else 0 + values["LANELINE_CURVATURE_DIRECTION"] = direction if lat_active else 0 + if desire: + _apply_lane_desire(values, desire) + + if corner_radar: + radar_all = [ + ('LF_DETECT', 'LF_DETECT_DISTANCE'), + ('RF_DETECT', 'RF_DETECT_DISTANCE'), + ('LR_DETECT', 'LR_DETECT_DISTANCE'), + ('RR_DETECT', 'RR_DETECT_DISTANCE'), + ] + for det_key, dist_key in radar_all: + if values[det_key] >= 4 and values[dist_key] != 0: + values[det_key] = 1 + + if blink_pairs: + _apply_radar_blink(values, blink_pairs, frame, t=blink_t) + +def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, + disp_angle, left_lane_warning, right_lane_warning, + enable_corner_radar, stopping, canfd_debug): + ret = [] + + md = CS.modelV2 + if not hasattr(create_ccnc_messages, '_lane_line_check') or frame % 100 == 0: + create_ccnc_messages._lane_line_check = Params().get_int("LaneLineCheck") + lane_line_check = create_ccnc_messages._lane_line_check + desire, lane_changing = _get_desire_and_lane_changing(md) + + if CP.flags & HyundaiFlags.CAMERA_SCC.value: + HDA_CntrlModSta = 0 + HDA_LFA_SymSta = 0 + if CS.lfahda_cluster is not None: + HDA_CntrlModSta = CS.lfahda_cluster["HDA_CntrlModSta"] + HDA_LFA_SymSta = CS.lfahda_cluster["HDA_LFA_SymSta"] + + if frame % 2 == 0: + #if CS.adrv_0x160 is not None: + # values = copy.copy(CS.adrv_0x160) + # ret.append(packer.make_can_msg("ADRV_0x160", CAN.ECAN, values)) + + if CS.cruise_buttons_msg is not None: + values = copy.copy(CS.cruise_buttons_msg) + # Keep the physical long press on ECAN for CarState, but don't forward it to CAM. + values["NORMAL_CRUISE_MAIN_BTN"] = 0 + + if HDA_LFA_SymSta == 0 and 0 < frame % 200 < 12: + values["LFA_BTN"] = 1 + + if CC.enabled: + if not CS.MainMode_ACC: + if 10 < frame % 200 <= 16 and CS.out.vEgo > 3.: + values["ADAPTIVE_CRUISE_MAIN_BTN"] = 1 + elif CS.ACCMode in [0, 4]: + if 10 < frame % 200 <= 16 and CS.out.vEgo > 3.: + values["CRUISE_BUTTONS"] = 2 + elif CS.scc_control is not None and CS.scc_control["InfoDisplay"] == 4: + if 10 < frame % 30 <= 16 and not stopping: + values["CRUISE_BUTTONS"] = 2 + else: + if CS.adrv_0x1ea is not None and CS.adrv_0x1ea["HDA_MODE2"] == 0: # if corner radar is disabled, send main btn + if 10 < frame % 1000 <= 16 and CS.out.vEgo > 3: + values["ADAPTIVE_CRUISE_MAIN_BTN"] = 1 + + ret.append(packer.make_can_msg(CS.cruise_btns_msg_canfd, CAN.CAM, values)) + + # --- 0x161/0x200/0x1ea/0x162 (frame%5) --- + if frame % 5 == 0: + lat_active = CC.latActive + + if CS.adrv_0x161 is not None: + main_enabled = CS.out.cruiseState.available + cruise_enabled = CC.enabled + lat_enabled = CS.out.latEnabled + nav_active = hud_control.activeCarrot > 1 + + # hdpuse carrot + hdp_use = int(Params().get("HDPuse")) + hdp_active = False + if hdp_use == 1: + hdp_active = cruise_enabled and nav_active + elif hdp_use == 2: + hdp_active = cruise_enabled + # hdpuse carrot + + values = copy.copy(CS.adrv_0x161) + rx_counter = values.pop("COUNTER", None) + values["SETSPEED"] = (6 if hdp_active else 3 if cruise_enabled else 1) if main_enabled else 0 + values["SETSPEED_HUD"] = (5 if hdp_active else 3 if cruise_enabled else 1) if main_enabled else 0 + + set_speed_in_units = hud_control.setSpeed * (CV.MS_TO_KPH if CS.is_metric else CV.MS_TO_MPH) + values["vSetDis"] = int(set_speed_in_units + 0.5) + + values["DISTANCE"] = 4 if hdp_active else hud_control.leadDistanceBars + values["DISTANCE_LEAD"] = 2 if cruise_enabled and hud_control.leadVisible else 1 if main_enabled and hud_control.leadVisible else 0 + values["DISTANCE_CAR"] = 3 if hdp_active else 2 if cruise_enabled else 1 if main_enabled else 0 + values["DISTANCE_SPACING"] = 5 if hdp_active else 1 if cruise_enabled else 0 + + values["TARGET"] = 1 if hud_control.leadVisible and cruise_enabled else 0 + values["TARGET_DISTANCE"] = int(hud_control.leadDistance) + + values["BACKGROUND"] = 6 if CS.paddle_button_prev > 0 else 1 if cruise_enabled else 3 if lat_active else 7 + values["CENTERLINE"] = 1 if HDA_CntrlModSta > 0 else 0 + values["CAR_CIRCLE"] = 2 if hdp_active else 1 if cruise_enabled else 0 + + values["NAV_ICON"] = 2 if nav_active and cruise_enabled else 1 if main_enabled and nav_active else 0 + values["HDA_ICON"] = 5 if hdp_active else 2 if cruise_enabled else 1 if main_enabled else 0 + values["LFA_ICON"] = 5 if hdp_active else 2 if lat_active else 1 if lat_enabled else 0 + values["LKA_ICON"] = 4 if lat_active else 3 if lat_enabled else 0 + values["FCA_ALT_ICON"] = 0 + + if values["ALERTS_2"] in [1, 2, 5, 6, 10, 21, 22]: + values["ALERTS_2"] = 0 + values["DAW_ICON"] = 0 + + if values["ALERTS_1"] == 0: # alerts가 있으면 사운드도 같이 나옴 + values["SOUNDS_1"] = 0 + values["SOUNDS_2"] = 0 + values["SOUNDS_4"] = 0 + + if values["ALERTS_3"] in [3, 4, 11, 12, 13, 14, 17, 19, 20, 26, 27, 28, 7, 8, 9, 10]: # hide gap distance msg.(11,12,13,14), lanechange(19,20,27, 28) + values["ALERTS_3"] = 0 + values["SOUNDS_3"] = 0 + + if values["ALERTS_5"] in [1, 2, 3, 4, 5]: + values["ALERTS_5"] = 0 + + if values["ALERTS_5"] in [11] and CS.softHoldActive == 0: + values["ALERTS_5"] = 0 + + # curvature 표시(0x161쪽 기존 로직 유지) + _suppress_trailer_mode_warning(values, CS) + + curvature = round(CS.out.steeringAngleDeg / 3) + values["LANELINE_CURVATURE"] = (min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) if lat_active else 0 + values["LANELINE_CURVATURE_DIRECTION"] = 1 if curvature < 0 and lat_active else 0 + + trailer_lane_change_blocked = CS.trailer_connected + if trailer_lane_change_blocked: + values["LANELINE_LEFT"] = 2 if hud_control.leftLaneVisible else 0 + values["LANELINE_RIGHT"] = 2 if hud_control.rightLaneVisible else 0 + else: + lane_color = 6 if md is not None and md.meta.laneChangeAvailableLeft else 2 + if lane_line_check >= 1: + lane_line_warn_left = CS.out.leftLaneLine % 10 not in (0, 5) + else: + lane_line_warn_left = CS.out.leftLaneLine // 10 == 2 + lane_color = 4 if lane_line_warn_left or CS.out.leftBlindspot else lane_color + if hud_control.leftLaneDepart: + values["LANELINE_LEFT"] = 4 if (frame // 50) % 2 == 0 else 1 + else: + values["LANELINE_LEFT"] = lane_color if hud_control.leftLaneVisible else 0 + + lane_color = 6 if md is not None and md.meta.laneChangeAvailableRight else 2 + if lane_line_check >= 1: + lane_line_warn_right = CS.out.rightLaneLine % 10 not in (0, 5) + else: + lane_line_warn_right = CS.out.rightLaneLine // 10 == 2 + lane_color = 4 if lane_line_warn_right or CS.out.rightBlindspot else lane_color + if hud_control.rightLaneDepart: + values["LANELINE_RIGHT"] = 4 if (frame // 50) % 2 == 0 else 1 + else: + values["LANELINE_RIGHT"] = lane_color if hud_control.rightLaneVisible else 0 + + values["LCA_LEFT_ARROW"] = 2 if CS.out.leftBlinker else 0 + values["LCA_RIGHT_ARROW"] = 2 if CS.out.rightBlinker else 0 + + if trailer_lane_change_blocked: + values["LCA_LEFT_ICON"] = 1 if lat_active else 0 + values["LCA_RIGHT_ICON"] = 1 if lat_active else 0 + else: + values["LCA_LEFT_ICON"] = (1 if CS.out.leftBlindspot else 2) if lat_active else 0 + values["LCA_RIGHT_ICON"] = (1 if CS.out.rightBlindspot else 2) if lat_active else 0 + + values["LANE_LEFT"] = 0 if trailer_lane_change_blocked else 1 if desire in (1, 3) else 0 + values["LANE_RIGHT"] = 0 if trailer_lane_change_blocked else 1 if desire in (2, 4) else 0 + + ret.append(packer.make_can_msg("ADRV_0x161", CAN.ECAN, values, rx_counter = rx_counter)) + + if CS.adrv_0x200 is not None: + values = copy.copy(CS.adrv_0x200) + rx_counter = values.pop("COUNTER", None) + values["TauGapSet"] = hud_control.leadDistanceBars + ret.append(packer.make_can_msg("ADRV_0x200", CAN.ECAN, values, rx_counter = rx_counter)) + + if CS.adrv_0x1ea is not None: + values = copy.copy(CS.adrv_0x1ea) + rx_counter = values.pop("COUNTER", None) + # blinker hold + values['LEFT_BLINK_HOLD'] = 1 if lane_changing == 3 else 0 + values['RIGHT_BLINK_HOLD'] = 1 if lane_changing == 4 else 0 + + _make_ccnc_values( + values, CS, lat_active, frame, hud_control, + lane_line=True, + corner_radar=True, + desire=desire, + # 기존대로 LR/RR만 깜빡임 + blink_pairs=[('LR_DETECT', 'LR_DETECT_DISTANCE'), + ('RR_DETECT', 'RR_DETECT_DISTANCE')], + blink_t=1.0 + ) + + ret.append(packer.make_can_msg("ADRV_0x1ea", CAN.ECAN, values, rx_counter = rx_counter)) + + if CS.ccnc_0x162 is not None: + values = copy.copy(CS.ccnc_0x162) + + if hud_control.leadDistance > 0: + values["FF_DISTANCE"] = hud_control.leadDistance + ff_type = 3 if hud_control.leadRadar == 1 else 13 + values["FF_DETECT"] = ff_type if hud_control.leadRelSpeed > -0.1 else ff_type + 1 + + _make_ccnc_values( + values, CS, lat_active, frame, hud_control, + lane_line=False, + corner_radar=True, + desire=0, + # 필요하면 162도 깜빡임 적용(원래 코드처럼 LR/RR만) + blink_pairs=[('LR_DETECT', 'LR_DETECT_DISTANCE'), + ('RR_DETECT', 'RR_DETECT_DISTANCE')], + blink_t=1.0 + ) + + if (left_lane_warning and not CS.out.leftBlinker) or (right_lane_warning and not CS.out.rightBlinker): + values["VIBRATE"] = 1 + + if canfd_debug > 0: + values["FAULT_LSS"] = 0 + values["FAULT_DAS"] = 0 + + ret.append(packer.make_can_msg("CCNC_0x162", CAN.ECAN, values)) + + # --- NEW_MSG_4B9 (corner radar keep-alive?) --- + if enable_corner_radar > 0: + if HDA_CntrlModSta == 0: + if frame % 500 in [10, 20, 30]: + values = { + 'BYTE_1': 0, + 'BYTE_2': 0, + 'BYTE_3': 0x80, + 'BYTE_4': 0x8A, + 'BYTE_5': 0x32, + 'BYTE_6': 0x30, + 'BYTE_7': 0x01, + 'BYTE_8': 0x00, + } + ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + elif frame % 500 in [40, 50, 60]: + values = { + 'BYTE_1': 0xff, + 'BYTE_2': 0xff, + 'BYTE_3': 0xff, + 'BYTE_4': 0xff, + 'BYTE_5': 0xff, + 'BYTE_6': 0xff, + 'BYTE_7': 0xff, + 'BYTE_8': 0xff, + } + ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + + if False: # canfd_debug > 1 and frame % 20 == 0: + if CS.hda_info_4a3 is not None: + values = copy.copy(CS.hda_info_4a3) + values["LinkClass"] = 1 + values["SPEED_LIMIT"] = 100 + ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) + + return ret diff --git a/iqdbc_repo/iqdbc/car/hyundai/interface.py b/iqdbc_repo/iqdbc/car/hyundai/interface.py index da5b78301..8dc5b9ab4 100644 --- a/iqdbc_repo/iqdbc/car/hyundai/interface.py +++ b/iqdbc_repo/iqdbc/car/hyundai/interface.py @@ -1,8 +1,10 @@ -from iqdbc.car import Bus, get_safety_config, structs, uds +from iqdbc.car import Bus, get_safety_config, structs from iqdbc.car.hyundai.hyundaicanfd import CanBus -from iqdbc.car.hyundai.values import HyundaiFlags, CAR, DBC, \ +from iqdbc.car.hyundai.values import HyundaiFlags, HyundaiFlagsIQ, CAR, DBC, CANFD_RADAR_SCC_CAR, \ CANFD_UNSUPPORTED_LONGITUDINAL_CAR, \ - UNSUPPORTED_LONGITUDINAL_CAR, HyundaiSafetyFlags + UNSUPPORTED_LONGITUDINAL_CAR, HyundaiSafetyFlags, HyundaiSafetyFlagsIQ, HyundaiExtFlags, \ + CANFD_HYBRID_STATUS_ADDR, CANFD_HYBRID_STATUS_DLC, \ + EV_MODE_STATUS_ADDR, EV_MODE_STATUS_DLC from iqdbc.car.hyundai.radar_interface import RADAR_START_ADDR from iqdbc.car.interfaces import CarInterfaceBase from iqdbc.car.disable_ecu import disable_ecu @@ -10,9 +12,7 @@ from iqdbc.car.hyundai.carcontroller import CarController from iqdbc.car.hyundai.carstate import CarState from iqdbc.car.hyundai.radar_interface import RadarInterface -from iqdbc.iqpilot.car.hyundai.escc import ESCC_MSG -from iqdbc.iqpilot.car.hyundai.longitudinal.helpers import get_longitudinal_tune -from iqdbc.iqpilot.car.hyundai.values import HyundaiFlagsIQ, HyundaiSafetyFlagsIQ +from openpilot.common.params import Params ButtonType = structs.CarState.ButtonEvent.Type Ecu = structs.CarParams.Ecu @@ -20,67 +20,125 @@ Ecu = structs.CarParams.Ecu # Cancel button can sometimes be ACC pause/resume button, main button can also enable on some cars ENABLE_BUTTONS = (ButtonType.accelCruise, ButtonType.decelCruise, ButtonType.cancel, ButtonType.mainCruise) +SteerControlType = structs.CarParams.SteerControlType + class CarInterface(CarInterfaceBase): CarState = CarState CarController = CarController RadarInterface = RadarInterface - DRIVABLE_GEARS = (structs.CarState.GearShifter.sport, structs.CarState.GearShifter.manumatic) - @staticmethod def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_long, is_release, docs) -> structs.CarParams: + + params = Params() + camera_scc = params.get_int("HyundaiCameraSCC") + if camera_scc > 0: + ret.flags |= HyundaiFlags.CAMERA_SCC.value + print("$$$CAMERA_SCC toggled...") + ret.brand = "hyundai" - # "LKA steering" if LKAS or LKAS_ALT messages are seen coming from the camera. - # Generally means our LKAS message is forwarded to another ECU (commonly ADAS ECU) - # that finally retransmits our steering command in LFA or LFA_ALT to the MDPS. - # "LFA steering" if camera directly sends LFA to the MDPS - cam_can = CanBus(None, fingerprint).CAM - lka_steering = 0x50 in fingerprint[cam_can] or 0x110 in fingerprint[cam_can] - CAN = CanBus(None, fingerprint, lka_steering) + if candidate == CAR.KIA_SORENTO: + ret.extFlags |= HyundaiExtFlags.RADAR_GROUP4.value + + cam_can = CanBus(None, fingerprint).CAM if camera_scc == 0 else 1 + hda2 = False #0x50 in fingerprint[cam_can] or 0x110 in fingerprint[cam_can] + hda2 = hda2 or params.get_int("CanfdHDA2") > 0 + CAN = CanBus(None, fingerprint, hda2) if ret.flags & HyundaiFlags.CANFD: # Shared configuration for CAN-FD cars - ret.alphaLongitudinalAvailable = candidate not in CANFD_UNSUPPORTED_LONGITUDINAL_CAR - if lka_steering and Ecu.adas not in [fw.ecu for fw in car_fw]: - # this needs to be figured out for cars without an ADAS ECU - ret.alphaLongitudinalAvailable = False + ret.alphaLongitudinalAvailable = True #candidate not in (CANFD_UNSUPPORTED_LONGITUDINAL_CAR | CANFD_RADAR_SCC_CAR) + #ret.enableBsm = 0x1e5 in fingerprint[CAN.ECAN] + ret.enableBsm = 0x1ba in fingerprint[CAN.ECAN] # BLINDSPOTS_REAR_CORNERS 0x1ba(442) - ret.enableBsm = 0x1e5 in fingerprint[CAN.ECAN] - - # Check if the car is hybrid. Only HEV/PHEV cars have 0xFA on E-CAN. - if 0xFA in fingerprint[CAN.ECAN]: + if 0x105 in fingerprint[CAN.ECAN]: ret.flags |= HyundaiFlags.HYBRID.value - if lka_steering: - # detect LKA steering - ret.flags |= HyundaiFlags.CANFD_LKA_STEERING.value - if 0x110 in fingerprint[CAN.CAM]: - ret.flags |= HyundaiFlags.CANFD_LKA_STEERING_ALT.value + # Keep drivetrain/safety classification unchanged: this capability is display-only and requires both exact ECAN frames. + has_ev_mode_status = fingerprint[CAN.ECAN].get(CANFD_HYBRID_STATUS_ADDR) == CANFD_HYBRID_STATUS_DLC and \ + fingerprint[CAN.ECAN].get(EV_MODE_STATUS_ADDR) == EV_MODE_STATUS_DLC + if has_ev_mode_status: + ret.extFlags |= HyundaiExtFlags.EV_MODE_STATUS_230.value + + if 203 in fingerprint[CAN.CAM]: # LFA_ALT + print("##### Anglecontrol detected (LFA_ALT)") + ret.flags |= HyundaiFlags.ANGLE_CONTROL.value + + print("ACAN=", fingerprint[CAN.ACAN]) + + if 0x210 in fingerprint[CAN.ACAN]: + print("##### Radar Group 1 detected (0x210)") + ret.extFlags |= HyundaiExtFlags.RADAR_GROUP1.value + elif 0x400 in fingerprint[CAN.ACAN] and 0x41D in fingerprint[CAN.ACAN]: + print("##### Radar Group 3 detected (0x400-0x41D)") + ret.extFlags |= HyundaiExtFlags.RADAR_GROUP3.value + if all(fingerprint[CAN.ACAN].get(addr) == 32 for addr in range(0x235, 0x249)): + ret.extFlags |= HyundaiExtFlags.CORNER_RADAR_OBJECTS_235.value + print("##### Corner radar objects 0x235 group detected") + if all(fingerprint[CAN.ACAN].get(addr) == 32 for addr in range(0x180, 0x185)): + ret.extFlags |= HyundaiExtFlags.CORNER_RADAR_OBJECTS_180.value + print("##### Corner radar objects 0x180 group detected") + if all(fingerprint[CAN.ACAN].get(addr) == 32 for addr in tuple(range(0x430, 0x438)) + tuple(range(0x440, 0x448))): + ret.extFlags |= HyundaiExtFlags.CORNER_RADAR_OBJECTS_430.value + print("##### Corner radar objects 0x430/0x440 group detected") + + # detect HDA2 with ADAS Driving ECU + if hda2: + print("$$$CANFD HDA2") + ret.flags |= HyundaiFlags.CANFD_HDA2.value + if camera_scc > 0: + if 0x110 in fingerprint[CAN.ACAN]: + ret.flags |= HyundaiFlags.CANFD_HDA2_ALT_STEERING.value + print("$$$CANFD ALT_STEERING1") + else: + if 0x110 in fingerprint[CAN.CAM]: # 0x110(272): LKAS_ALT + ret.flags |= HyundaiFlags.CANFD_HDA2_ALT_STEERING.value + print("$$$CANFD ALT_STEERING1") + ## carrot_todo: sorento: + if 0x2a4 not in fingerprint[CAN.CAM]: # 0x2a4(676): CAM_0x2a4 + ret.flags |= HyundaiFlags.CANFD_HDA2_ALT_STEERING.value + print("$$$CANFD ALT_STEERING2") + + ## carrot: canival 4th, no 0x1cf + if 0x1cf not in fingerprint[CAN.ECAN]: # 0x1cf(463): CRUISE_BUTTONS + ret.flags |= HyundaiFlags.CANFD_ALT_BUTTONS.value + print("$$$CANFD ALT_BUTTONS") else: - # no LKA steering + # non-HDA2 + print("$$$CANFD non HDA2") if 0x1cf not in fingerprint[CAN.ECAN]: ret.flags |= HyundaiFlags.CANFD_ALT_BUTTONS.value - if not ret.flags & HyundaiFlags.RADAR_SCC: - ret.flags |= HyundaiFlags.CANFD_CAMERA_SCC.value - - # Some LKA steering cars have alternative messages for gear checks + print("$$$CANFD ALT_BUTTONS") + #if not ret.flags & HyundaiFlags.RADAR_SCC: + # ret.flags |= HyundaiFlags.CANFD_CAMERA_SCC.value + # print("$$$CANFD CAMERA_SCC") + # Some HDA2 cars have alternative messages for gear checks # ICE cars do not have 0x130; GEARS message on 0x40 or 0x70 instead - if 0x130 not in fingerprint[CAN.ECAN]: - if 0x40 not in fingerprint[CAN.ECAN]: - ret.flags |= HyundaiFlags.CANFD_ALT_GEARS_2.value - else: - ret.flags |= HyundaiFlags.CANFD_ALT_GEARS.value + if 0x40 in fingerprint[CAN.ECAN]: # 0x40(64): GEAR_ALT + ret.flags |= HyundaiFlags.CANFD_ALT_GEARS.value + print("$$$CANFD ALT_GEARS") + elif 69 in fingerprint[CAN.ECAN]: # Special case + ret.extFlags |= HyundaiExtFlags.CANFD_GEARS_69.value + print("$$$CANFD GEARS_69") + elif 112 in fingerprint[CAN.ECAN]: # carrot: eGV70 + ret.flags |= HyundaiFlags.CANFD_ALT_GEARS_2.value + print("$$$CANFD ALT_GEARS_2") + elif 0x130 in fingerprint[CAN.ECAN]: # 0x130(304): GEAR_SHIFTER + print("$$$CANFD GEAR_SHIFTER present") + else: + ret.extFlags |= HyundaiExtFlags.CANFD_GEARS_NONE.value + print("$$$CANFD GEARS_NONE") cfgs = [get_safety_config(structs.CarParams.SafetyModel.hyundaiCanfd), ] if CAN.ECAN >= 4: cfgs.insert(0, get_safety_config(structs.CarParams.SafetyModel.noOutput)) ret.safetyConfigs = cfgs - if ret.flags & HyundaiFlags.CANFD_LKA_STEERING: + if ret.flags & HyundaiFlags.CANFD_HDA2: ret.safetyConfigs[-1].safetyParam |= HyundaiSafetyFlags.CANFD_LKA_STEERING.value - if ret.flags & HyundaiFlags.CANFD_LKA_STEERING_ALT: + if ret.flags & HyundaiFlags.CANFD_HDA2_ALT_STEERING: ret.safetyConfigs[-1].safetyParam |= HyundaiSafetyFlags.CANFD_LKA_STEERING_ALT.value if ret.flags & HyundaiFlags.CANFD_ALT_BUTTONS: ret.safetyConfigs[-1].safetyParam |= HyundaiSafetyFlags.CANFD_ALT_BUTTONS.value @@ -89,53 +147,93 @@ class CarInterface(CarInterfaceBase): else: # Shared configuration for non CAN-FD cars - ret.alphaLongitudinalAvailable = candidate not in UNSUPPORTED_LONGITUDINAL_CAR + ret.alphaLongitudinalAvailable = True #candidate not in (UNSUPPORTED_LONGITUDINAL_CAR | CAMERA_SCC_CAR) ret.enableBsm = 0x58b in fingerprint[0] + print(f"$$$ enableBsm = {ret.enableBsm}") # Send LFA message on cars with HDA if 0x485 in fingerprint[2]: ret.flags |= HyundaiFlags.SEND_LFA.value + print("$$$SEND_LFA") # These cars use the FCA11 message for the AEB and FCW signals, all others use SCC12 if 0x38d in fingerprint[0] or 0x38d in fingerprint[2]: ret.flags |= HyundaiFlags.USE_FCA.value + print("$$$USE_FCA") if ret.flags & HyundaiFlags.LEGACY: # these cars require a special panda safety mode due to missing counters and checksums in the messages ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.hyundaiLegacy)] + print("$$$Legacy Safety Model") else: ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.hyundai, 0)] if ret.flags & HyundaiFlags.CAMERA_SCC: ret.safetyConfigs[0].safetyParam |= HyundaiSafetyFlags.CAMERA_SCC.value - - # These cars have the LFA button on the steering wheel - if 0x391 in fingerprint[0]: - ret.flags |= HyundaiFlags.HAS_LDA_BUTTON.value + print("$$$CAMERA_SCC") # Common lateral control setup ret.centerToFront = ret.wheelbase * 0.4 ret.steerActuatorDelay = 0.1 ret.steerLimitTimer = 0.4 - CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) + if ret.flags & HyundaiFlags.ANGLE_CONTROL: + ret.steerControlType = SteerControlType.angle + else: + CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) if ret.flags & HyundaiFlags.ALT_LIMITS: ret.safetyConfigs[-1].safetyParam |= HyundaiSafetyFlags.ALT_LIMITS.value - if ret.flags & HyundaiFlags.ALT_LIMITS_2: - ret.safetyConfigs[-1].safetyParam |= HyundaiSafetyFlags.ALT_LIMITS_2.value - - # see https://github.com/commaai/iqdbc/pull/1137/ - ret.dashcamOnly = True - # Common longitudinal control setup ret.radarUnavailable = RADAR_START_ADDR not in fingerprint[1] or Bus.radar not in DBC[ret.carFingerprint] ret.openpilotLongitudinalControl = alpha_long and ret.alphaLongitudinalAvailable + + # carrot, if camera_scc enabled, enable openpilotLongitudinalControl + enable_radar_tracks = params.get_int("EnableRadarTracks") + if ret.flags & HyundaiFlags.CAMERA_SCC.value or enable_radar_tracks > 0 or enable_radar_tracks == -2: + ret.radarUnavailable = False + ret.openpilotLongitudinalControl = True if camera_scc < 3 else False + print(f"$$$OenpilotLongitudinalControl = True, CAMERA_SCC({ret.flags & HyundaiFlags.CAMERA_SCC.value}) or RadarTracks{enable_radar_tracks}") + else: + print(f"$$$OenpilotLongitudinalControl = {alpha_long}") + + #ret.radarUnavailable = False # TODO: canfd... carrot, hyundai cars have radar + + ret.radarTimeStep = 0.05 #if params.get_int("EnableRadarTracks") > 0 else 0.02 + ret.pcmCruise = not ret.openpilotLongitudinalControl + ret.startingState = False # True # carrot + ret.vEgoStarting = 0.1 + ret.startAccel = 1.0 ret.longitudinalActuatorDelay = 0.5 + ret.longitudinalTuning.kpBP = [0.] + ret.longitudinalTuning.kpV = [1.] + ret.longitudinalTuning.kf = 1.0 + + # *** feature detection *** + if ret.flags & HyundaiFlags.CANFD: + print(f"$$$$$ CanFD ECAN = {CAN.ECAN}") + if 0x1fa in fingerprint[CAN.ECAN]: + ret.extFlags |= HyundaiExtFlags.NAVI_CLUSTER.value + print("$$$$ NaviCluster = True") + else: + print("$$$$ NaviCluster = False") + + else: + if 1348 in fingerprint[0]: + ret.extFlags |= HyundaiExtFlags.NAVI_CLUSTER.value + print("$$$$ NaviCluster = True") + if 1157 in fingerprint[0] or 1157 in fingerprint[2]: + ret.extFlags |= HyundaiExtFlags.HAS_LFAHDA.value + print("$$$$ HasLFAHDA") + if 1007 in fingerprint[0]: + print("#### cruiseButtonAlt") + + print(f"$$$$ enableBsm = {ret.enableBsm}") + if ret.openpilotLongitudinalControl: ret.safetyConfigs[-1].safetyParam |= HyundaiSafetyFlags.LONG.value if ret.flags & HyundaiFlags.HYBRID: @@ -152,95 +250,64 @@ class CarInterface(CarInterfaceBase): # Dashcam cars are missing a test route, or otherwise need validation # TODO: Optima Hybrid 2017 uses a different SCC12 checksum - if candidate in (CAR.KIA_OPTIMA_H,): - ret.dashcamOnly = True + #ret.dashcamOnly = candidate in {CAR.KIA_OPTIMA_H, } return ret @staticmethod - def _get_params_iq(stock_cp: structs.CarParams, ret: structs.IQCarParams, candidate, fingerprint: dict[int, dict[int, int]], - car_fw: list[structs.CarParams.CarFw], alpha_long: bool, is_release_iq: bool, docs: bool) -> structs.IQCarParams: - # identical logic used in _get_params - # "LKA steering" if LKAS or LKAS_ALT messages are seen coming from the camera. - # Generally means our LKAS message is forwarded to another ECU (commonly ADAS ECU) - # that finally retransmits our steering command in LFA or LFA_ALT to the MDPS. - # "LFA steering" if camera directly sends LFA to the MDPS - cam_can = CanBus(None, fingerprint).CAM - lka_steering = 0x50 in fingerprint[cam_can] or 0x110 in fingerprint[cam_can] - CAN = CanBus(None, fingerprint, lka_steering) - - if not stock_cp.flags & HyundaiFlags.CANFD: - # TODO-IQ: add route with ESCC message for process replay - if ESCC_MSG in fingerprint[0]: - ret.flags |= HyundaiFlagsIQ.ENHANCED_SCC.value - - if ret.flags & HyundaiFlagsIQ.ENHANCED_SCC: - ret.iqSafetyFlags |= HyundaiSafetyFlagsIQ.ESCC - stock_cp.radarUnavailable = False - - if stock_cp.flags & HyundaiFlags.HAS_LDA_BUTTON: + def _get_params_iq(stock_cp, ret, candidate, fingerprint, car_fw, alpha_long, is_release_iq, docs): + del candidate, car_fw, alpha_long, is_release_iq, docs + if not stock_cp.flags & HyundaiFlags.CANFD and 0x391 in fingerprint[0]: + ret.flags |= HyundaiFlagsIQ.HAS_LFA_BUTTON ret.iqSafetyFlags |= HyundaiSafetyFlagsIQ.HAS_LDA_BUTTON - - if stock_cp.flags & (HyundaiFlags.CANFD_CAMERA_SCC | HyundaiFlags.CAMERA_SCC): - stock_cp.radarUnavailable = False - - if stock_cp.flags & HyundaiFlags.ALT_LIMITS_2: - stock_cp.dashcamOnly = False - - if ret.flags & HyundaiFlagsIQ.NON_SCC: - stock_cp.alphaLongitudinalAvailable = False - stock_cp.openpilotLongitudinalControl = False - stock_cp.pcmCruise = True - ret.iqSafetyFlags |= HyundaiSafetyFlagsIQ.NON_SCC - - # untested non-SCC platforms, need user validations - if stock_cp.carFingerprint in (CAR.HYUNDAI_BAYON_1ST_GEN_NON_SCC, CAR.KIA_FORTE_2021_NON_SCC, - CAR.KIA_SELTOS_2023_NON_SCC, CAR.GENESIS_G70_2021_NON_SCC): - stock_cp.dashcamOnly = True - - if stock_cp.flags & HyundaiFlags.CANFD: - if 0x1fa in fingerprint[CAN.ECAN]: - ret.flags |= HyundaiFlagsIQ.SPEED_LIMIT_AVAILABLE.value - else: - # Detect smartMDPS, which bypasses EPS low-speed lockout, allowing iqpilot to send steering commands down to 0 - if 0x2AA in fingerprint[0]: - stock_cp.minSteerSpeed = 0.0 - stock_cp.flags &= ~HyundaiFlags.MIN_STEER_32_MPH.value - - if 0x544 in fingerprint[0]: - ret.flags |= HyundaiFlagsIQ.SPEED_LIMIT_AVAILABLE.value - - if 0x53E in fingerprint[2]: - ret.flags |= HyundaiFlagsIQ.HAS_LKAS12.value - - return ret @staticmethod - def _get_longitudinal_tuning_iq(stock_cp: structs.CarParams, ret: structs.IQCarParams) -> structs.IQCarParams: - if ret.flags & (HyundaiFlagsIQ.LONG_TUNING_DYNAMIC | HyundaiFlagsIQ.LONG_TUNING_PREDICTIVE): - get_longitudinal_tune(stock_cp) + def init(CP, can_recv, can_send): - return ret + Params().put_int('LongitudinalPersonalityMax', 4) - @staticmethod - def init(CP, CP_IQ, can_recv, can_send, communication_control=None): - # 0x80 silences response - if communication_control is None: - communication_control = bytes([uds.SERVICE_TYPE.COMMUNICATION_CONTROL, 0x80 | uds.CONTROL_TYPE.DISABLE_RX_DISABLE_TX, uds.MESSAGE_TYPE.NORMAL]) - - if CP.openpilotLongitudinalControl and not ((CP.flags & (HyundaiFlags.CANFD_CAMERA_SCC | HyundaiFlags.CAMERA_SCC)) or - (CP_IQ.flags & HyundaiFlagsIQ.ENHANCED_SCC)): - addr, bus = 0x7d0, CanBus(CP).ECAN if CP.flags & HyundaiFlags.CANFD else 0 - if CP.flags & HyundaiFlags.CANFD_LKA_STEERING.value: + if CP.openpilotLongitudinalControl and not (CP.flags & HyundaiFlags.CANFD_CAMERA_SCC): + addr, bus = 0x7d0, 0 + if CP.flags & HyundaiFlags.CANFD_HDA2.value: addr, bus = 0x730, CanBus(CP).ECAN - disable_ecu(can_recv, can_send, bus=bus, addr=addr, com_cont_req=communication_control) + disable_ecu(can_recv, can_send, bus=bus, addr=addr, com_cont_req=b'\x28\x83\x01') + + params = Params() + if params.get_int("EnableRadarTracks") > 0 and not CP.flags & HyundaiFlags.CANFD: + result = enable_radar_tracks(CP, can_recv, can_send) + params.put_bool("EnableRadarTracksResult", result) # for blinkers if CP.flags & HyundaiFlags.ENABLE_BLINKERS: - disable_ecu(can_recv, can_send, bus=CanBus(CP).ECAN, addr=0x7B1, com_cont_req=communication_control) + disable_ecu(can_recv, can_send, bus=CanBus(CP).ECAN, addr=0x7B1, com_cont_req=b'\x28\x83\x01') - @staticmethod - def deinit(CP, can_recv, can_send): - communication_control = bytes([uds.SERVICE_TYPE.COMMUNICATION_CONTROL, 0x80 | uds.CONTROL_TYPE.ENABLE_RX_ENABLE_TX, uds.MESSAGE_TYPE.NORMAL]) - CarInterface.init(CP, can_recv, can_send, communication_control) +def enable_radar_tracks(CP, logcan, sendcan): + from iqdbc.car.isotp_parallel_query import IsoTpParallelQuery + print("################ Try To Enable Radar Tracks ####################") + + ret = False + sccBus = 2 if CP.flags & HyundaiFlags.CAMERA_SCC.value else 0 + rdr_fw = None + rdr_fw_address = 0x7d0 # + try: + try: + query = IsoTpParallelQuery(sendcan, logcan, sccBus, [rdr_fw_address], [b'\x10\x07'], [b'\x50\x07']) + for addr, dat in query.get_data(0.1).items(): # pylint: disable=unused-variable + print("ecu write data by id ...") + new_config = b"\x00\x00\x00\x01\x00\x01" + #new_config = b"\x00\x00\x00\x00\x00\x01" + dataId = b'\x01\x42' + WRITE_DAT_REQUEST = b'\x2e' + WRITE_DAT_RESPONSE = b'\x68' + query = IsoTpParallelQuery(sendcan, logcan, sccBus, [rdr_fw_address], [WRITE_DAT_REQUEST+dataId+new_config], [WRITE_DAT_RESPONSE]) + result = query.get_data(0) + print("result=", result) + ret = True + break + except Exception as e: + print(f"Failed : {e}") + except Exception as e: + print("############## Failed to enable tracks" + str(e)) + print("################ END Try to enable radar tracks") + return ret diff --git a/iqdbc_repo/iqdbc/car/hyundai/radar_interface.py b/iqdbc_repo/iqdbc/car/hyundai/radar_interface.py index c2ed03c9c..7aab9175a 100644 --- a/iqdbc_repo/iqdbc/car/hyundai/radar_interface.py +++ b/iqdbc_repo/iqdbc/car/hyundai/radar_interface.py @@ -1,86 +1,885 @@ import math +import os +from collections import deque +from iqdbc import DBC_PATH from iqdbc.can import CANParser from iqdbc.car import Bus, structs from iqdbc.car.interfaces import RadarInterfaceBase -from iqdbc.car.hyundai.values import DBC - -from iqdbc.iqpilot.car.hyundai.radar_interface_ext import RadarInterfaceExt +from iqdbc.car.hyundai.values import DBC, HyundaiFlags, HyundaiExtFlags +from openpilot.common.params import Params +from iqdbc.car.hyundai.hyundaicanfd import CanBus +from openpilot.common.filter_simple import MyMovingAverage +SCC_TID = 0 RADAR_START_ADDR = 0x500 RADAR_MSG_COUNT = 32 +RADAR_MSG_COUNT4 = 8 +RADAR_GROUP4_MAX_LONG_DIST = 325.0 +RADAR_GROUP4_MAX_YREL = 6.0 +RADAR_START_ADDR_CANFD1 = 0x210 +RADAR_MSG_COUNT1 = 16 +RADAR_START_ADDR_CANFD2 = 0x3A5 # Group 2, Group 1: 0x210 2개씩?어???단 보류. +RADAR_MSG_COUNT2 = 32 +RADAR_START_ADDR_CANFD3 = 0x400 +RADAR_MSG_COUNT3 = 30 +CORNER_OBJECT_235_START_ADDR = 0x235 +CORNER_OBJECT_235_MSG_COUNT = 20 +CORNER_OBJECT_235_TRACK_ID_OFFSET = 200 +CORNER_OBJECT_235_DBC = 'hyundai_canfd_corner_radar_235_generated' +CORNER_OBJECT_180_START_ADDR = 0x180 +CORNER_OBJECT_180_MSG_COUNT = 5 +CORNER_OBJECT_180_SLOTS_PER_MSG = 2 +CORNER_OBJECT_180_TRACK_ID_OFFSET = 240 +CORNER_OBJECT_180_DBC = 'hyundai_canfd_corner_radar_180_generated' +CORNER_OBJECT_430_LEFT_START_ADDR = 0x430 +CORNER_OBJECT_430_RIGHT_START_ADDR = 0x440 +CORNER_OBJECT_430_MSG_COUNT_PER_SIDE = 8 +CORNER_OBJECT_430_SLOTS_PER_MSG = 7 +CORNER_OBJECT_430_TRACK_ID_OFFSET = 300 +CORNER_OBJECT_430_DBC = 'hyundai_canfd_corner_radar_430_generated' +CORNER_OBJECT_430_EMPTY_RAW_VALUES = (0x010d1f40, 0x00010d1f) +CORNER_OBJECT_430_DEFAULT_DISTANCE_RAW_MIN = 2520 # 126.0 m +CORNER_OBJECT_430_DEFAULT_DISTANCE_RAW_MAX = 2600 # 130.0 m +CORNER_OBJECT_430_MAX_DREL = 120.0 +CORNER_OBJECT_430_MAX_TRACKS_PER_SIDE = 4 +CORNER_OBJECT_430_DT = 0.05 +CORNER_OBJECT_430_MAX_DREL_DELTA = 1.5 +CORNER_OBJECT_430_CANDIDATE_META_BYTE_3 = (2,) +CORNER_OBJECT_430_CANDIDATE_EXCLUDED_SLOTS = (1,) +CORNER_OBJECT_430_CANDIDATE_RAW_DELTA = 200 +CORNER_OBJECT_430_STRONG_META_BYTE_2 = (10,) +CORNER_OBJECT_430_WEAK_META_BYTE_2 = (5, 6, 7, 8, 9) +CORNER_OBJECT_430_STRONG_MIN_SUPPORT = 2 +CORNER_OBJECT_430_WEAK_MIN_SUPPORT = 3 +CORNER_OBJECT_430_CLUSTER_RAW_GAP = 200 +CORNER_OBJECT_430_TRACK_MATCH_MAX_DREL_DELTA = 3.0 +CORNER_OBJECT_430_MAX_ABS_VREL = 20.0 +CORNER_OBJECT_430_MAX_ABS_YVREL = 3.0 +CORNER_OBJECT_430_VREL_ALPHA = 0.35 +CORNER_OBJECT_430_YVREL_ALPHA = 0.35 +CORNER_OBJECT_430_LATERAL_CELL_MSG_WEIGHT = 0.35 +CORNER_OBJECT_430_LATERAL_CELL_SLOT_WEIGHT = 0.65 +CORNER_OBJECT_430_YREL_OFFSET = 5.8 +CORNER_OBJECT_430_YREL_SCALE = 1.1 +CORNER_OBJECT_430_RIGHT_CELL_MIRROR = 7.0 +CORNER_OBJECT_430_MIN_ABS_YREL = 0.8 +CORNER_OBJECT_430_MAX_ABS_YREL = 4.2 +CORNER_OBJECT_430_HISTORY_SIZE = 8 +CORNER_OBJECT_430_MIN_HISTORY = 5 +CORNER_OBJECT_430_MIN_INWARD_YREL_DELTA = 0.35 +CORNER_OBJECT_430_MIN_RECENT_INWARD_YREL_DELTA = 0.05 +CORNER_OBJECT_430_MIN_INWARD_RATIO = 0.65 +CORNER_OBJECT_430_INWARD_CENTER_ABS_YREL = 1.55 +CORNER_OBJECT_430_INWARD_KEEP_YVREL_ABS_YREL = 2.2 +CORNER_OBJECT_430_EARLY_INWARD_NONCENTER_FRAMES = 2 +CORNER_OBJECT_430_SIDE_KEEP_ABS_YREL = 2.0 +CORNER_OBJECT_STABLE_TRACK_ID_START = 1000 +CORNER_SIDE_OBJECT_MAX_DREL = 0.2 +CORNER_SIDE_OBJECT_MIN_ABS_YREL = 1.4 +CORNER_SIDE_OBJECT_MAX_ABS_YREL = 4.5 # POC for parsing corner radars: https://github.com/commaai/openpilot/pull/24221/ -def get_radar_can_parser(CP): - if Bus.radar not in DBC[CP.carFingerprint]: +class CornerObjectTrackIdManager: + def __init__(self): + self.next_track_id = CORNER_OBJECT_STABLE_TRACK_ID_START + self.objects: dict[tuple[str, int], tuple[int, int]] = {} + + def get_track_id(self, source: str, object_id: int, age: int) -> int: + key = (source, object_id) + previous = self.objects.get(key) + if previous is None or age < previous[1]: + track_id = self.next_track_id + self.next_track_id += 1 + else: + track_id = previous[0] + self.objects[key] = (track_id, age) + return track_id + + def clear_source(self, source: str): + self.objects = {key: value for key, value in self.objects.items() if key[0] != source} + + +def corner_object_position_valid(d_rel: float, y_rel: float) -> bool: + normal_object = 0.2 < d_rel < 180.0 + clipped_side_object = ( + 0.0 <= d_rel <= CORNER_SIDE_OBJECT_MAX_DREL and + CORNER_SIDE_OBJECT_MIN_ABS_YREL <= abs(y_rel) <= CORNER_SIDE_OBJECT_MAX_ABS_YREL + ) + return (normal_object or clipped_side_object) and abs(y_rel) < 40.0 + + +def get_radar_can_parser(CP, radar_tracks, msg_start_addr, msg_count, radar_group4=False): + if not radar_tracks: + return None + #if Bus.radar not in DBC[CP.carFingerprint]: + # return None + print("RadarInterface: RadarTracks...") + + if CP.flags & HyundaiFlags.CANFD: + CAN = CanBus(CP) + messages = [(f"RADAR_TRACK_{addr:x}", 20) for addr in range(msg_start_addr, msg_start_addr + msg_count)] + return CANParser('hyundai_canfd_radar_generated', messages, CAN.ACAN) + else: + messages = [(f"RADAR_TRACK_{addr:x}", 20) for addr in range(msg_start_addr, msg_start_addr + msg_count)] + #return CANParser(DBC[CP.carFingerprint][Bus.radar], messages, 1) + dbc_name = 'hyundai_kia_denso_front_radar_generated' if radar_group4 else 'hyundai_kia_mando_front_radar_generated' + return CANParser(dbc_name, messages, 1) + +def get_corner_object_can_parser(CP, enabled): + if not enabled or not (CP.flags & HyundaiFlags.CANFD): return None - messages = [(f"RADAR_TRACK_{addr:x}", 50) for addr in range(RADAR_START_ADDR, RADAR_START_ADDR + RADAR_MSG_COUNT)] - return CANParser(DBC[CP.carFingerprint][Bus.radar], messages, 1) + dbc_path = os.path.join(DBC_PATH, f"{CORNER_OBJECT_235_DBC}.dbc") + if not os.path.exists(dbc_path): + print(f"RadarInterface: missing {CORNER_OBJECT_235_DBC}.dbc, 0x235 corner radar disabled") + return None + CAN = CanBus(CP) + messages = [(f"CORNER_RADAR_235_OBJECTS_{addr:x}", 33) for addr in range(CORNER_OBJECT_235_START_ADDR, CORNER_OBJECT_235_START_ADDR + CORNER_OBJECT_235_MSG_COUNT)] + return CANParser(CORNER_OBJECT_235_DBC, messages, CAN.ACAN) -class RadarInterface(RadarInterfaceBase, RadarInterfaceExt): - def __init__(self, CP, CP_IQ): - RadarInterfaceBase.__init__(self, CP, CP_IQ) - RadarInterfaceExt.__init__(self, CP, CP_IQ) - self.updated_messages = set() - self.trigger_msg = RADAR_START_ADDR + RADAR_MSG_COUNT - 1 +def get_corner_object_180_can_parser(CP, enabled): + if not enabled or not (CP.flags & HyundaiFlags.CANFD): + return None + + dbc_path = os.path.join(DBC_PATH, f"{CORNER_OBJECT_180_DBC}.dbc") + if not os.path.exists(dbc_path): + print(f"RadarInterface: missing {CORNER_OBJECT_180_DBC}.dbc, 0x180 corner radar disabled") + return None + + CAN = CanBus(CP) + messages = [(f"CORNER_RADAR_180_OBJECTS_{addr:x}", 33) for addr in range(CORNER_OBJECT_180_START_ADDR, CORNER_OBJECT_180_START_ADDR + CORNER_OBJECT_180_MSG_COUNT)] + return CANParser(CORNER_OBJECT_180_DBC, messages, CAN.ACAN) + +def get_corner_object_430_can_parser(CP, enabled): + if not enabled or not (CP.flags & HyundaiFlags.CANFD): + return None + + dbc_path = os.path.join(DBC_PATH, f"{CORNER_OBJECT_430_DBC}.dbc") + if not os.path.exists(dbc_path): + print(f"RadarInterface: missing {CORNER_OBJECT_430_DBC}.dbc, 0x430/0x440 corner radar disabled") + return None + + CAN = CanBus(CP) + messages = [(f"CORNER_RADAR_430_OBJECTS_{addr:x}", 33) for addr in range(CORNER_OBJECT_430_LEFT_START_ADDR, CORNER_OBJECT_430_LEFT_START_ADDR + CORNER_OBJECT_430_MSG_COUNT_PER_SIDE)] + messages += [(f"CORNER_RADAR_430_OBJECTS_{addr:x}", 33) for addr in range(CORNER_OBJECT_430_RIGHT_START_ADDR, CORNER_OBJECT_430_RIGHT_START_ADDR + CORNER_OBJECT_430_MSG_COUNT_PER_SIDE)] + return CANParser(CORNER_OBJECT_430_DBC, messages, CAN.ACAN) + +def get_radar_can_parser_scc(CP): + CAN = CanBus(CP) + if CP.flags & HyundaiFlags.CANFD: + messages = [("SCC_CONTROL", 50)] + bus = CAN.ECAN + else: + messages = [("SCC11", 50)] + bus = CAN.ECAN + + print("$$$$$$$$ ECAN = ", CAN.ECAN) + bus = CAN.CAM if CP.flags & HyundaiFlags.CAMERA_SCC else bus + return CANParser(DBC[CP.carFingerprint][Bus.pt], messages, bus) + +class RadarInterface(RadarInterfaceBase): + def __init__(self, CP, CP_IQ=None): + super().__init__(CP, CP_IQ or structs.IQCarParams()) + self.v_ego = 0.0 + + self.canfd = True if CP.flags & HyundaiFlags.CANFD else False + self.radar_group1 = False + self.radar_group3 = False + self.radar_group4 = not self.canfd and bool(CP.extFlags & HyundaiExtFlags.RADAR_GROUP4.value) + if self.canfd: + if CP.extFlags & HyundaiExtFlags.RADAR_GROUP1.value: + self.radar_start_addr = RADAR_START_ADDR_CANFD1 + self.radar_msg_count = RADAR_MSG_COUNT1 + self.radar_group1 = True + elif CP.extFlags & HyundaiExtFlags.RADAR_GROUP3.value: + self.radar_start_addr = RADAR_START_ADDR_CANFD3 + self.radar_msg_count = RADAR_MSG_COUNT3 + self.radar_group3 = True + else: + self.radar_start_addr = RADAR_START_ADDR_CANFD2 + self.radar_msg_count = RADAR_MSG_COUNT2 + else: + self.radar_start_addr = RADAR_START_ADDR + self.radar_msg_count = RADAR_MSG_COUNT4 if self.radar_group4 else RADAR_MSG_COUNT + + self.params = Params() + self.radar_tracks = self.params.get_int("EnableRadarTracks") >= 1 + self.corner_object_tracks = bool(CP.extFlags & HyundaiExtFlags.CORNER_RADAR_OBJECTS_235.value) and self.params.get_int("EnableCornerRadar") > 0 + self.corner_object_180_tracks = bool(CP.extFlags & HyundaiExtFlags.CORNER_RADAR_OBJECTS_180.value) and self.params.get_int("EnableCornerRadar") > 0 + self.corner_object_430_tracks = bool(CP.extFlags & HyundaiExtFlags.CORNER_RADAR_OBJECTS_430.value) and self.params.get_int("EnableCornerRadar") > 0 + self.updated_tracks = set() + self.updated_scc = set() + self.updated_corner_objects = set() + self.updated_corner_objects_180 = set() + self.updated_corner_objects_430 = set() + self.corner_object_missed_updates = 0 + self.corner_object_180_missed_updates = 0 + self.corner_object_430_missed_updates = 0 + self.corner_object_track_ids = CornerObjectTrackIdManager() + self.rcp_tracks = get_radar_can_parser(CP, self.radar_tracks, self.radar_start_addr, self.radar_msg_count, self.radar_group4) + self.rcp_corner_objects = get_corner_object_can_parser(CP, self.corner_object_tracks) + self.rcp_corner_objects_180 = get_corner_object_180_can_parser(CP, self.corner_object_180_tracks) + self.rcp_corner_objects_430 = get_corner_object_430_can_parser(CP, self.corner_object_430_tracks) + # Enabling raw radar tracks on legacy CAN disables the stock SCC11 stream on + # some Hyundai/Kia platforms. Camera-SCC cars may still use SCC11. + use_scc_parser = not (self.radar_tracks and not self.canfd and not (CP.flags & HyundaiFlags.CAMERA_SCC)) + self.rcp_scc = get_radar_can_parser_scc(CP) if use_scc_parser else None + self.trigger_msg_scc = 416 if self.canfd else 0x420 + + self.trigger_msg_tracks = self.radar_start_addr + self.radar_msg_count - 1 + self.trigger_msg_corner_objects = CORNER_OBJECT_235_START_ADDR + CORNER_OBJECT_235_MSG_COUNT - 1 + self.trigger_msg_corner_objects_180 = CORNER_OBJECT_180_START_ADDR + CORNER_OBJECT_180_MSG_COUNT - 1 + self.trigger_msg_corner_objects_430 = CORNER_OBJECT_430_RIGHT_START_ADDR + CORNER_OBJECT_430_MSG_COUNT_PER_SIDE - 1 self.track_id = 0 - self.radar_off_can = CP.radarUnavailable - self.rcp = get_radar_can_parser(CP) + self.corner_objects_available = self.rcp_corner_objects is not None or self.rcp_corner_objects_180 is not None or self.rcp_corner_objects_430 is not None + self.radar_off_can = CP.radarUnavailable and not self.corner_objects_available + print( + "RadarInterface: " + f"radarUnavailable={CP.radarUnavailable} radarTracks={self.radar_tracks} " + f"group4={self.radar_group4} " + f"corner235={self.rcp_corner_objects is not None} corner180={self.rcp_corner_objects_180 is not None} " + f"corner430={self.rcp_corner_objects_430 is not None} " + f"radarOffCan={self.radar_off_can}" + ) + + self.vRel_last = 0 + self.dRel_last = 0 + self.corner_object_430_prev_d_rel = {} + self.corner_object_430_prev_v_rel = {} + self.corner_object_430_prev_y_rel = {} + self.corner_object_430_prev_yv_rel = {} + self.corner_object_430_prev_code = {} + self.corner_object_430_history = {} + self.corner_object_430_noncenter_inward_frames = {} + + # Initialize pts + if self.rcp_tracks is not None: + total_tracks = self.radar_msg_count * (2 if self.radar_group1 else 1) + for track_id in range(total_tracks): + t_id = track_id + 32 + self.pts[t_id] = structs.RadarData.RadarPoint() + self.pts[t_id].measured = False + self.pts[t_id].trackId = t_id + + if self.rcp_scc is not None: + self.pts[SCC_TID] = structs.RadarData.RadarPoint() + self.pts[SCC_TID].trackId = SCC_TID + self.pts[SCC_TID].radarSource = "scc" + if self.rcp_corner_objects is not None: + for slot in range(CORNER_OBJECT_235_MSG_COUNT): + t_id = CORNER_OBJECT_235_TRACK_ID_OFFSET + slot + self.pts[t_id] = structs.RadarData.RadarPoint() + self.pts[t_id].measured = False + self.pts[t_id].trackId = t_id + self.pts[t_id].radarSource = "corner235" + if self.rcp_corner_objects_180 is not None: + for slot in range(CORNER_OBJECT_180_MSG_COUNT * CORNER_OBJECT_180_SLOTS_PER_MSG): + t_id = CORNER_OBJECT_180_TRACK_ID_OFFSET + slot + self.pts[t_id] = structs.RadarData.RadarPoint() + self.pts[t_id].measured = False + self.pts[t_id].trackId = t_id + self.pts[t_id].radarSource = "corner180" + if self.rcp_corner_objects_430 is not None: + for slot in range(CORNER_OBJECT_430_MSG_COUNT_PER_SIDE * 2 * CORNER_OBJECT_430_SLOTS_PER_MSG): + t_id = CORNER_OBJECT_430_TRACK_ID_OFFSET + slot + self.pts[t_id] = structs.RadarData.RadarPoint() + self.pts[t_id].measured = False + self.pts[t_id].trackId = t_id + + self.frame = 0 - if self.rcp is None: - self.initialize_radar_ext(self.trigger_msg) def update(self, can_strings): - if self.radar_off_can or (self.rcp is None): + self.frame += 1 + if self.radar_off_can or (self.rcp_tracks is None and self.rcp_scc is None and self.rcp_corner_objects is None and self.rcp_corner_objects_180 is None and self.rcp_corner_objects_430 is None): return super().update(None) - vls = self.rcp.update(can_strings) - self.updated_messages.update(vls) + if self.rcp_scc is not None: + vls_s = self.rcp_scc.update(can_strings) + self.updated_scc.update(vls_s) - if self.trigger_msg not in self.updated_messages: + track_ready = False + if self.radar_tracks and self.rcp_tracks is not None: + vls_t = self.rcp_tracks.update(can_strings) + self.updated_tracks.update(vls_t) + track_ready = self.trigger_msg_tracks in self.updated_tracks + + corner_ready = False + if self.rcp_corner_objects is not None: + vls_c = self.rcp_corner_objects.update(can_strings) + self.updated_corner_objects.update(vls_c) + corner_ready = self.trigger_msg_corner_objects in self.updated_corner_objects + + corner_180_ready = False + if self.rcp_corner_objects_180 is not None: + vls_180 = self.rcp_corner_objects_180.update(can_strings) + self.updated_corner_objects_180.update(vls_180) + corner_180_ready = self.trigger_msg_corner_objects_180 in self.updated_corner_objects_180 + + corner_430_ready = False + if self.rcp_corner_objects_430 is not None: + vls_430 = self.rcp_corner_objects_430.update(can_strings) + self.updated_corner_objects_430.update(vls_430) + corner_430_ready = self.trigger_msg_corner_objects_430 in self.updated_corner_objects_430 + + scc_ready = not self.radar_tracks and self.frame % 5 == 0 and self.rcp_scc is not None + + if track_ready: + self._update(self.updated_tracks) + self.updated_tracks.clear() + + if corner_ready: + self._update_corner_objects(self.updated_corner_objects) + self.corner_object_missed_updates = 0 + self.updated_corner_objects.clear() + + if corner_180_ready: + self._update_corner_objects_180(self.updated_corner_objects_180) + self.corner_object_180_missed_updates = 0 + self.updated_corner_objects_180.clear() + + if corner_430_ready: + self._update_corner_objects_430(self.updated_corner_objects_430) + self.corner_object_430_missed_updates = 0 + self.updated_corner_objects_430.clear() + + # Corner radar runs at its own cadence. Do not let corner-only frames publish + # RadarData, since liveTracks uses a fixed radarTimeStep for aLead/jLead. + publish_ready = track_ready or scc_ready + if not publish_ready: return None - rr = self._update(self.updated_messages) - self.updated_messages.clear() + if self.rcp_scc is not None: + self._update_scc(self.updated_scc) + if self.rcp_corner_objects is not None: + if self.updated_corner_objects: + self._update_corner_objects(self.updated_corner_objects) + self.corner_object_missed_updates = 0 + else: + self.corner_object_missed_updates += 1 + if self.corner_object_missed_updates > 10: + self._clear_corner_objects() + if self.rcp_corner_objects_180 is not None: + if self.updated_corner_objects_180: + self._update_corner_objects_180(self.updated_corner_objects_180) + self.corner_object_180_missed_updates = 0 + else: + self.corner_object_180_missed_updates += 1 + if self.corner_object_180_missed_updates > 10: + self._clear_corner_objects_180() + if self.rcp_corner_objects_430 is not None: + if self.updated_corner_objects_430: + self._update_corner_objects_430(self.updated_corner_objects_430) + self.corner_object_430_missed_updates = 0 + else: + self.corner_object_430_missed_updates += 1 + if self.corner_object_430_missed_updates > 10: + self._clear_corner_objects_430() + self.updated_scc.clear() + self.updated_corner_objects.clear() + self.updated_corner_objects_180.clear() + self.updated_corner_objects_430.clear() - return rr + ret = structs.RadarData() + if ((self.rcp_tracks is not None and self.radar_tracks and not self.rcp_tracks.can_valid) or + (self.rcp_scc is not None and not self.corner_objects_available and not self.rcp_scc.can_valid) or + (self.rcp_corner_objects is not None and not self.rcp_corner_objects.can_valid) or + (self.rcp_corner_objects_180 is not None and not self.rcp_corner_objects_180.can_valid) or + (self.rcp_corner_objects_430 is not None and not self.rcp_corner_objects_430.can_valid)): + ret.errors.canError = True + ret.points = [point for point in self.pts.values() if point.measured] + return ret def _update(self, updated_messages): - ret = structs.RadarData() - if self.rcp is None: - return ret - if not self.rcp.can_valid: - ret.errors.canError = True + t_id = 32 + for addr in range(self.radar_start_addr, self.radar_start_addr + self.radar_msg_count): - if self.use_radar_interface_ext: - return self.update_ext(ret) - - for addr in range(RADAR_START_ADDR, RADAR_START_ADDR + RADAR_MSG_COUNT): - msg = self.rcp.vl[f"RADAR_TRACK_{addr:x}"] - - if addr not in self.pts: - self.pts[addr] = structs.RadarData.RadarPoint() - self.pts[addr].trackId = self.track_id - self.track_id += 1 - - valid = msg['STATE'] in (3, 4) - if valid: - azimuth = math.radians(msg['AZIMUTH']) - self.pts[addr].measured = True - self.pts[addr].dRel = math.cos(azimuth) * msg['LONG_DIST'] - self.pts[addr].yRel = 0.5 * -math.sin(azimuth) * msg['LONG_DIST'] - self.pts[addr].vRel = msg['REL_SPEED'] - self.pts[addr].aRel = msg['REL_ACCEL'] - self.pts[addr].yvRel = float('nan') + msg = self.rcp_tracks.vl[f"RADAR_TRACK_{addr:x}"] + if self.radar_group1: + valid = msg['VALID_CNT1'] > 10 + elif self.radar_group3: + # Group 3 marks an empty object slot with LONG_DIST raw 0x7ff (204.7 m). + valid = msg['LONG_DIST'] < 204.7 + elif self.canfd: + valid = msg['VALID_CNT'] > 10 + elif self.radar_group4: + # EN: DNMWR006 exposes eight stable tracked-object slots at 0x500-0x507. + # Messages from 0x508 onward are distance-sorted raw detections without + # stable IDs, so they are excluded. OBJECT_STATE 3 is a confirmed track; + # empty slots use LONG_DIST raw 0xfff8 (409.55 m). Driving logs reached + # 317.80 m, so 325 m preserves every observed confirmed track while + # retaining margin from the empty-slot sentinel. Keep the +/-6 m + # ego/adjacent-lane envelope to suppress farther roadside reflections. + # KO: DNMWR006의 안정적인 추적 객체 슬롯은 0x500~0x507의 8개임. + # 0x508 이후 메시지는 고정 ID가 없는 거리순 raw detection이므로 제외함. + # OBJECT_STATE 3은 확정 추적 객체이며, 빈 슬롯은 LONG_DIST raw + # 0xfff8(409.55m)을 사용함. 주행 로그의 최대값은 317.80m였으므로 + # 325m 상한으로 관측된 확정 트랙을 모두 보존하면서 빈 슬롯 값과 충분한 + # 여유를 확보함. 원거리 도로변 반사를 줄이기 위해 좌우 6m 범위를 유지함. + valid = (msg['OBJECT_STATE'] == 3 and 0.2 < msg['LONG_DIST'] < RADAR_GROUP4_MAX_LONG_DIST and + abs(msg['LAT_DIST']) <= RADAR_GROUP4_MAX_YREL) else: - del self.pts[addr] + valid = msg['STATE'] in (3, 4) - ret.points = list(self.pts.values()) - return ret + self.pts[t_id].measured = bool(valid) + if not valid: + self.pts[t_id].dRel = 0 + self.pts[t_id].yRel = 0 + self.pts[t_id].vRel = 0 + self.pts[t_id].vLead = self.pts[t_id].vRel + self.v_ego + self.pts[t_id].aRel = float('nan') + self.pts[t_id].yvRel = 0 + elif self.radar_group1: + self.pts[t_id].dRel = msg['LONG_DIST1'] + self.pts[t_id].yRel = msg['LAT_DIST1'] + self.pts[t_id].vRel = msg['REL_SPEED1'] + self.pts[t_id].vLead = self.pts[t_id].vRel + self.v_ego + self.pts[t_id].aRel = msg['REL_ACCEL1'] + self.pts[t_id].yvRel = msg['LAT_SPEED1'] + elif self.canfd: + if self.radar_group3: + # Group 3 reports the object's center. Convert it to the rear surface to match SCC/vision dRel. + self.pts[t_id].dRel = max(0.0, msg['LONG_DIST'] - msg['OBJECT_LENGTH'] * 0.5 - 0.1) + else: + self.pts[t_id].dRel = msg['LONG_DIST'] + self.pts[t_id].yRel = msg['LAT_DIST'] + self.pts[t_id].vRel = msg['REL_SPEED'] + self.pts[t_id].vLead = self.pts[t_id].vRel + self.v_ego + self.pts[t_id].aRel = float('nan') if self.radar_group3 else msg['REL_ACCEL'] + self.pts[t_id].yvRel = 0.0 if self.radar_group3 else msg['LAT_SPEED'] + elif self.radar_group4: + self.pts[t_id].dRel = msg['LONG_DIST'] + self.pts[t_id].yRel = -msg['LAT_DIST'] + self.pts[t_id].vRel = msg['REL_SPEED'] + self.pts[t_id].vLead = self.pts[t_id].vRel + self.v_ego + self.pts[t_id].aRel = float('nan') + self.pts[t_id].yvRel = 0.0 + else: + azimuth = math.radians(msg['AZIMUTH']) + self.pts[t_id].dRel = math.cos(azimuth) * msg['LONG_DIST'] + self.pts[t_id].yRel = 0.5 * -math.sin(azimuth) * msg['LONG_DIST'] + self.pts[t_id].vRel = msg['REL_SPEED'] + self.pts[t_id].vLead = self.pts[t_id].vRel + self.v_ego + self.pts[t_id].aRel = msg['REL_ACCEL'] + self.pts[t_id].yvRel = 0.0 + + t_id += 1 + # radar group1? ?나??msg??2개의 ?이?? ?어?음. + if self.radar_group1: + for addr in range(self.radar_start_addr, self.radar_start_addr + self.radar_msg_count): + msg = self.rcp_tracks.vl[f"RADAR_TRACK_{addr:x}"] + + valid = msg['VALID_CNT2'] > 10 + self.pts[t_id].measured = bool(valid) + if not valid: + self.pts[t_id].dRel = 0 + self.pts[t_id].yRel = 0 + self.pts[t_id].vRel = 0 + self.pts[t_id].vLead = self.pts[t_id].vRel + self.v_ego + self.pts[t_id].aRel = float('nan') + self.pts[t_id].yvRel = 0 + else: + self.pts[t_id].dRel = msg['LONG_DIST2'] + self.pts[t_id].yRel = msg['LAT_DIST2'] + self.pts[t_id].vRel = msg['REL_SPEED2'] + self.pts[t_id].vLead = self.pts[t_id].vRel + self.v_ego + self.pts[t_id].aRel = msg['REL_ACCEL2'] + self.pts[t_id].yvRel = msg['LAT_SPEED2'] + + t_id += 1 + + def _update_corner_objects(self, updated_messages): + if self.rcp_corner_objects is None: + return + + if not updated_messages: + self._clear_corner_objects() + return + + candidates = [] + for slot, addr in enumerate(range(CORNER_OBJECT_235_START_ADDR, CORNER_OBJECT_235_START_ADDR + CORNER_OBJECT_235_MSG_COUNT)): + t_id = CORNER_OBJECT_235_TRACK_ID_OFFSET + slot + msg = self.rcp_corner_objects.vl[f"CORNER_RADAR_235_OBJECTS_{addr:x}"] + + d_rel = msg["OBJ_REL_POS_X"] + y_rel = msg["OBJ_REL_POS_Y"] + v_rel = msg["OBJ_REL_VEL_X"] + yv_rel = msg["OBJ_REL_VEL_Y"] + a_rel = msg["OBJ_REL_ACCEL_X"] + # Side objects are clipped to x=0 by the corner radar. Quality, identity, + # and lateral motion still describe a real object, so keep them for + # corner-confirmed front-radar association in radard. + valid = msg["OBJ_QUAL_LEVEL"] > 0 and corner_object_position_valid(d_rel, y_rel) and v_rel > -99.0 + + if not valid: + continue + candidates.append((t_id, int(msg["OBJ_OBJECT_ID"]), int(msg["OBJ_AGE"]), int(msg["OBJ_QUAL_LEVEL"]), + d_rel, y_rel, v_rel, yv_rel, a_rel)) + + self._apply_corner_objects("corner235", candidates, + range(CORNER_OBJECT_235_TRACK_ID_OFFSET, + CORNER_OBJECT_235_TRACK_ID_OFFSET + CORNER_OBJECT_235_MSG_COUNT)) + + def _update_corner_objects_180(self, updated_messages): + if self.rcp_corner_objects_180 is None: + return + + if not updated_messages: + self._clear_corner_objects_180() + return + + candidates = [] + for msg_index, addr in enumerate(range(CORNER_OBJECT_180_START_ADDR, CORNER_OBJECT_180_START_ADDR + CORNER_OBJECT_180_MSG_COUNT)): + msg = self.rcp_corner_objects_180.vl[f"CORNER_RADAR_180_OBJECTS_{addr:x}"] + for slot_index in range(CORNER_OBJECT_180_SLOTS_PER_MSG): + t_id = CORNER_OBJECT_180_TRACK_ID_OFFSET + msg_index * CORNER_OBJECT_180_SLOTS_PER_MSG + slot_index + prefix = f"SLOT{slot_index + 1}_" + d_rel = msg[f"{prefix}REL_POS_X"] + y_rel = msg[f"{prefix}REL_POS_Y"] + v_rel = msg[f"{prefix}REL_VEL_X"] + yv_rel = msg[f"{prefix}REL_VEL_Y"] + a_rel = msg[f"{prefix}REL_ACCEL_X"] + valid = msg[f"{prefix}QUAL_LEVEL"] > 0 and corner_object_position_valid(d_rel, y_rel) and v_rel > -99.0 + + if not valid: + continue + candidates.append((t_id, int(msg[f"{prefix}OBJECT_ID"]), int(msg[f"{prefix}AGE"]), int(msg[f"{prefix}QUAL_LEVEL"]), + d_rel, y_rel, v_rel, yv_rel, a_rel)) + + self._apply_corner_objects("corner180", candidates, + range(CORNER_OBJECT_180_TRACK_ID_OFFSET, + CORNER_OBJECT_180_TRACK_ID_OFFSET + CORNER_OBJECT_180_MSG_COUNT * CORNER_OBJECT_180_SLOTS_PER_MSG)) + + def _apply_corner_objects(self, source, candidates, slot_ids): + for t_id in slot_ids: + self._clear_point(t_id) + + # The same object can occupy two CAN slots for one cycle during a slot handoff. + # Publish only the newest/highest-quality copy so trackId stays unique. + objects = {} + for candidate in candidates: + object_id = candidate[1] + previous = objects.get(object_id) + if previous is None or (candidate[2], candidate[3]) > (previous[2], previous[3]): + objects[object_id] = candidate + + for t_id, object_id, age, _, d_rel, y_rel, v_rel, yv_rel, a_rel in objects.values(): + point = self.pts[t_id] + point.measured = True + point.trackId = self.corner_object_track_ids.get_track_id(source, object_id, age) + point.radarSource = source + point.dRel = d_rel + point.yRel = y_rel + point.vRel = v_rel + point.vLead = v_rel + self.v_ego + point.aRel = a_rel + point.yvRel = yv_rel + + + def _update_corner_objects_430(self, updated_messages): + if self.rcp_corner_objects_430 is None: + return + + if not updated_messages: + self._clear_corner_objects_430() + return + + bank_defs = ( + (CORNER_OBJECT_430_LEFT_START_ADDR, 1.0, 0), + (CORNER_OBJECT_430_RIGHT_START_ADDR, -1.0, CORNER_OBJECT_430_MSG_COUNT_PER_SIDE * CORNER_OBJECT_430_SLOTS_PER_MSG), + ) + for start_addr, side_sign, track_base in bank_defs: + bins = [] + for msg_index, addr in enumerate(range(start_addr, start_addr + CORNER_OBJECT_430_MSG_COUNT_PER_SIDE)): + msg = self.rcp_corner_objects_430.vl[f"CORNER_RADAR_430_OBJECTS_{addr:x}"] + for slot_index in range(CORNER_OBJECT_430_SLOTS_PER_MSG): + prefix = f"SLOT{slot_index + 1}_" + distance_raw = int(msg[f"{prefix}DISTANCE_RAW"]) + raw = ( + distance_raw | + (int(msg[f"{prefix}META_13_15"]) << 13) | + (int(msg[f"{prefix}META_BYTE_2"]) << 16) | + (int(msg[f"{prefix}META_BYTE_3"]) << 24) + ) + code = ( + int(msg[f"{prefix}META_13_15"]), + int(msg[f"{prefix}META_BYTE_2"]), + int(msg[f"{prefix}META_BYTE_3"]), + ) + d_rel = distance_raw * 0.05 + default_distance = CORNER_OBJECT_430_DEFAULT_DISTANCE_RAW_MIN <= distance_raw <= CORNER_OBJECT_430_DEFAULT_DISTANCE_RAW_MAX + base_valid = ( + raw not in CORNER_OBJECT_430_EMPTY_RAW_VALUES and + distance_raw not in (0, 8000, 8191) and + not default_distance and + 0.2 < d_rel < CORNER_OBJECT_430_MAX_DREL + ) + candidate_valid = ( + base_valid and + slot_index + 1 not in CORNER_OBJECT_430_CANDIDATE_EXCLUDED_SLOTS and + code[2] in CORNER_OBJECT_430_CANDIDATE_META_BYTE_3 and + code[1] in CORNER_OBJECT_430_STRONG_META_BYTE_2 + CORNER_OBJECT_430_WEAK_META_BYTE_2 + ) + bins.append({ + "msg_index": msg_index, + "slot_index": slot_index, + "distance_raw": distance_raw, + "d_rel": d_rel, + "code": code, + "candidate_valid": candidate_valid, + }) + + supported_bins = [] + candidates = [b for b in bins if b["candidate_valid"]] + for b in candidates: + support = 1 + for other in candidates: + if other is b: + continue + if abs(other["msg_index"] - b["msg_index"]) > 1: + continue + if abs(other["slot_index"] - b["slot_index"]) > 2: + continue + if abs(other["distance_raw"] - b["distance_raw"]) > CORNER_OBJECT_430_CANDIDATE_RAW_DELTA: + continue + support += 1 + min_support = (CORNER_OBJECT_430_STRONG_MIN_SUPPORT if b["code"][1] in CORNER_OBJECT_430_STRONG_META_BYTE_2 + else CORNER_OBJECT_430_WEAK_MIN_SUPPORT) + if support >= min_support: + supported_bins.append({**b, "support": support}) + + clusters = [] + for b in sorted(supported_bins, key=lambda item: item["distance_raw"]): + if not clusters or b["distance_raw"] - clusters[-1][-1]["distance_raw"] > CORNER_OBJECT_430_CLUSTER_RAW_GAP: + clusters.append([b]) + else: + clusters[-1].append(b) + clusters = sorted(clusters, key=lambda cluster: sum(b["distance_raw"] for b in cluster) / len(cluster))[:CORNER_OBJECT_430_MAX_TRACKS_PER_SIDE] + + cluster_objects = [] + for cluster in clusters: + msg_index = sum(b["msg_index"] for b in cluster) / len(cluster) + slot = sum(b["slot_index"] + 1 for b in cluster) / len(cluster) + lateral_cell = (CORNER_OBJECT_430_LATERAL_CELL_MSG_WEIGHT * msg_index + + CORNER_OBJECT_430_LATERAL_CELL_SLOT_WEIGHT * slot) + mapped_cell = lateral_cell if side_sign > 0.0 else CORNER_OBJECT_430_RIGHT_CELL_MIRROR - lateral_cell + y_abs = max(CORNER_OBJECT_430_MIN_ABS_YREL, + min(CORNER_OBJECT_430_MAX_ABS_YREL, + CORNER_OBJECT_430_YREL_OFFSET - CORNER_OBJECT_430_YREL_SCALE * mapped_cell)) + cluster_objects.append({ + "d_rel": sum(b["d_rel"] for b in cluster) / len(cluster), + "y_rel": side_sign * y_abs, + "code": max((b["code"] for b in cluster), key=lambda code: sum(1 for item in cluster if item["code"] == code)), + }) + + active_t_ids = set() + side_track_ids = [ + CORNER_OBJECT_430_TRACK_ID_OFFSET + track_base + slot + for slot in range(CORNER_OBJECT_430_MAX_TRACKS_PER_SIDE) + ] + unmatched_track_ids = {t_id for t_id in side_track_ids if t_id in self.corner_object_430_prev_d_rel} + unused_track_ids = [t_id for t_id in side_track_ids if t_id not in unmatched_track_ids] + + for cluster in cluster_objects: + d_rel = cluster["d_rel"] + code = cluster["code"] + matched_t_id = None + if unmatched_track_ids: + nearest_t_id = min(unmatched_track_ids, key=lambda t_id: abs(d_rel - self.corner_object_430_prev_d_rel[t_id])) + if abs(d_rel - self.corner_object_430_prev_d_rel[nearest_t_id]) <= CORNER_OBJECT_430_TRACK_MATCH_MAX_DREL_DELTA: + matched_t_id = nearest_t_id + unmatched_track_ids.remove(matched_t_id) + if matched_t_id is None and unused_track_ids: + matched_t_id = unused_track_ids.pop(0) + if matched_t_id is None: + continue + + t_id = matched_t_id + active_t_ids.add(t_id) + prev_d_rel = self.corner_object_430_prev_d_rel.get(t_id) + prev_code = self.corner_object_430_prev_code.get(t_id) + self.corner_object_430_prev_d_rel[t_id] = d_rel + self.corner_object_430_prev_y_rel[t_id] = cluster["y_rel"] + self.corner_object_430_prev_code[t_id] = code + reset_track = prev_d_rel is None or code != prev_code or abs(d_rel - prev_d_rel) > CORNER_OBJECT_430_MAX_DREL_DELTA + if reset_track: + self.corner_object_430_prev_v_rel.pop(t_id, None) + self.corner_object_430_prev_yv_rel.pop(t_id, None) + self.corner_object_430_history.pop(t_id, None) + self.corner_object_430_noncenter_inward_frames.pop(t_id, None) + + history = self.corner_object_430_history.setdefault(t_id, deque(maxlen=CORNER_OBJECT_430_HISTORY_SIZE)) + history.append((d_rel, cluster["y_rel"])) + if len(history) < CORNER_OBJECT_430_MIN_HISTORY: + self._clear_point(t_id) + continue + + window_dt = CORNER_OBJECT_430_DT * (len(history) - 1) + first_d_rel, first_y_rel = history[0] + hist_v_rel = (d_rel - first_d_rel) / window_dt + if abs(hist_v_rel) > CORNER_OBJECT_430_MAX_ABS_VREL: + self.corner_object_430_prev_v_rel.pop(t_id, None) + self.corner_object_430_prev_yv_rel.pop(t_id, None) + self.corner_object_430_history.pop(t_id, None) + self.corner_object_430_noncenter_inward_frames.pop(t_id, None) + self._clear_point(t_id) + continue + prev_v_rel = self.corner_object_430_prev_v_rel.get(t_id, hist_v_rel) + v_rel = (1.0 - CORNER_OBJECT_430_VREL_ALPHA) * prev_v_rel + CORNER_OBJECT_430_VREL_ALPHA * hist_v_rel + self.corner_object_430_prev_v_rel[t_id] = v_rel + + inward_steps = 0 + usable_steps = 0 + prev_abs_y = abs(history[0][1]) + for _, y_rel in list(history)[1:]: + abs_y = abs(y_rel) + delta = prev_abs_y - abs_y + if abs(delta) > 1e-3: + usable_steps += 1 + if delta > 0.0: + inward_steps += 1 + prev_abs_y = abs_y + net_inward_y = abs(first_y_rel) - abs(cluster["y_rel"]) + inward_ratio = inward_steps / usable_steps if usable_steps > 0 else 0.0 + hist_yv_rel = (cluster["y_rel"] - first_y_rel) / window_dt + recent_inward_y = abs(history[-3][1]) - abs(cluster["y_rel"]) if len(history) >= 3 else net_inward_y + if (net_inward_y < CORNER_OBJECT_430_MIN_INWARD_YREL_DELTA or + recent_inward_y < CORNER_OBJECT_430_MIN_RECENT_INWARD_YREL_DELTA or + inward_ratio < CORNER_OBJECT_430_MIN_INWARD_RATIO or + abs(hist_yv_rel) > CORNER_OBJECT_430_MAX_ABS_YVREL): + hist_yv_rel = 0.0 + inward_motion_candidate = hist_yv_rel != 0.0 and abs(cluster["y_rel"]) <= CORNER_OBJECT_430_INWARD_KEEP_YVREL_ABS_YREL + inward_center_candidate = inward_motion_candidate and abs(cluster["y_rel"]) <= CORNER_OBJECT_430_INWARD_CENTER_ABS_YREL + y_rel = cluster["y_rel"] + if inward_motion_candidate: + if inward_center_candidate: + self.corner_object_430_noncenter_inward_frames[t_id] = 0 + prev_yv_rel = self.corner_object_430_prev_yv_rel.get(t_id, hist_yv_rel) + yv_rel = (1.0 - CORNER_OBJECT_430_YVREL_ALPHA) * prev_yv_rel + CORNER_OBJECT_430_YVREL_ALPHA * hist_yv_rel + else: + noncenter_frames = self.corner_object_430_noncenter_inward_frames.get(t_id, 0) + 1 + self.corner_object_430_noncenter_inward_frames[t_id] = noncenter_frames + if noncenter_frames <= CORNER_OBJECT_430_EARLY_INWARD_NONCENTER_FRAMES: + prev_yv_rel = self.corner_object_430_prev_yv_rel.get(t_id, hist_yv_rel) + yv_rel = (1.0 - CORNER_OBJECT_430_YVREL_ALPHA) * prev_yv_rel + CORNER_OBJECT_430_YVREL_ALPHA * hist_yv_rel + else: + yv_rel = 0.0 + if not inward_center_candidate and abs(y_rel) < CORNER_OBJECT_430_SIDE_KEEP_ABS_YREL: + y_rel = math.copysign(CORNER_OBJECT_430_SIDE_KEEP_ABS_YREL, y_rel) + else: + hist_yv_rel = 0.0 + yv_rel = 0.0 + self.corner_object_430_noncenter_inward_frames[t_id] = 0 + if abs(y_rel) < CORNER_OBJECT_430_SIDE_KEEP_ABS_YREL: + y_rel = math.copysign(CORNER_OBJECT_430_SIDE_KEEP_ABS_YREL, y_rel) + self.corner_object_430_prev_yv_rel[t_id] = yv_rel + + self.pts[t_id].measured = True + self.pts[t_id].trackId = t_id + self.pts[t_id].dRel = d_rel + self.pts[t_id].yRel = y_rel + self.pts[t_id].vRel = v_rel + self.pts[t_id].vLead = v_rel + self.v_ego + self.pts[t_id].aRel = float('nan') + self.pts[t_id].yvRel = yv_rel + + side_track_count = CORNER_OBJECT_430_MSG_COUNT_PER_SIDE * CORNER_OBJECT_430_SLOTS_PER_MSG + for slot in range(side_track_count): + t_id = CORNER_OBJECT_430_TRACK_ID_OFFSET + track_base + slot + if t_id in active_t_ids: + continue + self.corner_object_430_prev_d_rel.pop(t_id, None) + self.corner_object_430_prev_v_rel.pop(t_id, None) + self.corner_object_430_prev_y_rel.pop(t_id, None) + self.corner_object_430_prev_yv_rel.pop(t_id, None) + self.corner_object_430_prev_code.pop(t_id, None) + self.corner_object_430_history.pop(t_id, None) + self.corner_object_430_noncenter_inward_frames.pop(t_id, None) + self._clear_point(t_id) + + + def _clear_point(self, t_id): + self.pts[t_id].measured = False + self.pts[t_id].dRel = 0 + self.pts[t_id].yRel = 0 + self.pts[t_id].vRel = 0 + self.pts[t_id].vLead = self.v_ego + self.pts[t_id].aRel = float('nan') + self.pts[t_id].yvRel = 0 + + def _clear_corner_objects(self): + for slot in range(CORNER_OBJECT_235_MSG_COUNT): + self._clear_point(CORNER_OBJECT_235_TRACK_ID_OFFSET + slot) + self.corner_object_track_ids.clear_source("corner235") + + def _clear_corner_objects_180(self): + for slot in range(CORNER_OBJECT_180_MSG_COUNT * CORNER_OBJECT_180_SLOTS_PER_MSG): + self._clear_point(CORNER_OBJECT_180_TRACK_ID_OFFSET + slot) + self.corner_object_track_ids.clear_source("corner180") + + def _clear_corner_objects_430(self): + self.corner_object_430_prev_d_rel.clear() + self.corner_object_430_prev_v_rel.clear() + self.corner_object_430_prev_y_rel.clear() + self.corner_object_430_prev_yv_rel.clear() + self.corner_object_430_prev_code.clear() + self.corner_object_430_history.clear() + self.corner_object_430_noncenter_inward_frames.clear() + for slot in range(CORNER_OBJECT_430_MSG_COUNT_PER_SIDE * 2 * CORNER_OBJECT_430_SLOTS_PER_MSG): + self._clear_point(CORNER_OBJECT_430_TRACK_ID_OFFSET + slot) + + def _update_scc(self, updated_messages): + cpt = self.rcp_scc.vl + t_id = SCC_TID + if self.canfd: + dRel = cpt["SCC_CONTROL"]['ACC_ObjDist'] + vRel = cpt["SCC_CONTROL"]['ACC_ObjRelSpd'] + new_pts = abs(dRel - self.dRel_last) > 3 or abs(vRel - self.vRel_last) > 1 + vLead = vRel + self.v_ego + valid = 0 < dRel < 150 and not new_pts #cpt["SCC_CONTROL"]['OBJ_STATUS'] and dRel < 150 + self.pts[t_id].measured = bool(valid) + if not valid: + self.pts[t_id].dRel = 0 + self.pts[t_id].yRel = 0 + self.pts[t_id].vRel = 0 + self.pts[t_id].vLead = self.pts[t_id].vRel + self.v_ego + self.pts[t_id].aRel = float('nan') + self.pts[t_id].yvRel = 0 + else: + self.pts[t_id].dRel = dRel + self.pts[t_id].yRel = 0 + self.pts[t_id].vRel = vRel + self.pts[t_id].vLead = vLead + self.pts[t_id].aRel = float('nan') + self.pts[t_id].yvRel = 0 #float('nan') + else: + dRel = cpt["SCC11"]['ACC_ObjDist'] + vRel = cpt["SCC11"]['ACC_ObjRelSpd'] + new_pts = abs(dRel - self.dRel_last) > 3 or abs(vRel - self.vRel_last) > 1 + vLead = vRel + self.v_ego + valid = cpt["SCC11"]['ACC_ObjStatus'] and dRel < 150 and not new_pts + self.pts[t_id].measured = bool(valid) + if not valid: + self.pts[t_id].dRel = 0 + self.pts[t_id].yRel = 0 + self.pts[t_id].vRel = 0 + self.pts[t_id].vLead = self.pts[t_id].vRel + self.v_ego + self.pts[t_id].aRel = float('nan') + self.pts[t_id].yvRel = 0 + else: + self.pts[t_id].dRel = dRel + self.pts[t_id].yRel = -cpt["SCC11"]['ACC_ObjLatPos'] # in car frame's y axis, left is negative + self.pts[t_id].vRel = vRel + self.pts[t_id].vLead = vLead + self.pts[t_id].aRel = float('nan') + self.pts[t_id].yvRel = 0 #float('nan') + + self.dRel_last = dRel + self.vRel_last = vRel diff --git a/iqdbc_repo/iqdbc/car/hyundai/tests/print_platform_codes.py b/iqdbc_repo/iqdbc/car/hyundai/tests/print_platform_codes.py old mode 100755 new mode 100644 diff --git a/iqdbc_repo/iqdbc/car/hyundai/tests/test_ev_mode.py b/iqdbc_repo/iqdbc/car/hyundai/tests/test_ev_mode.py new file mode 100644 index 000000000..7338d7e6e --- /dev/null +++ b/iqdbc_repo/iqdbc/car/hyundai/tests/test_ev_mode.py @@ -0,0 +1,194 @@ +import math + +import pytest + +from iqdbc.can import CANPacker, CANParser +from iqdbc.car import Bus, gen_empty_fingerprint, structs +from iqdbc.car.hyundai.carstate import CarState, EV_MODE_STATUS_TIMEOUT_NS, _get_ev_mode_state +from iqdbc.car.hyundai.interface import CarInterface +from iqdbc.car.hyundai.values import CANFD_HYBRID_STATUS_ADDR, CANFD_HYBRID_STATUS_DLC, CAR, DBC, EV_MODE_ACTIVE_VALUES, \ + EV_MODE_STATUS_ADDR, EV_MODE_STATUS_DLC, EV_MODE_STATUS_MSG, EV_MODE_STATUS_SIGNAL, \ + HyundaiExtFlags, HyundaiFlags +from openpilot.common.params import Params + + +def get_params(candidate, *, hybrid=True, hybrid_bus=0, hybrid_status=None, hybrid_status_bus=0, + hybrid_status_dlc=CANFD_HYBRID_STATUS_DLC, status_bus=0, status_dlc=EV_MODE_STATUS_DLC): + Params().put_int("HyundaiCameraSCC", 1) + Params().put_int("CanfdHDA2", 1) + + fingerprint = gen_empty_fingerprint() + if hybrid: + fingerprint[hybrid_bus][0x105] = 32 + if hybrid_status is None: + hybrid_status = hybrid + if hybrid_status: + fingerprint[hybrid_status_bus][CANFD_HYBRID_STATUS_ADDR] = hybrid_status_dlc + if status_bus is not None: + fingerprint[status_bus][EV_MODE_STATUS_ADDR] = status_dlc + return CarInterface.get_params(candidate, fingerprint, [], False, False, False) + + +@pytest.mark.parametrize(("candidate", "hybrid", "status_bus", "status_dlc", "expected"), ( + (CAR.HYUNDAI_SANTAFE_MX5_HEV, True, 0, 32, True), + (CAR.HYUNDAI_SANTAFE_MX5_HEV, False, 0, 32, False), + (CAR.HYUNDAI_SANTAFE_MX5_HEV, True, None, 32, False), + (CAR.HYUNDAI_SANTAFE_MX5_HEV, True, 1, 32, False), + (CAR.HYUNDAI_SANTAFE_MX5_HEV, True, 0, 16, False), + (CAR.KIA_SORENTO_4TH_GEN, False, None, 32, False), + # Shared ICE/HEV/PHEV candidates rely on the observed ECAN capability frames, not their model name. + (CAR.HYUNDAI_TUCSON_4TH_GEN, True, 0, 32, True), + (CAR.HYUNDAI_TUCSON_4TH_GEN, False, 0, 32, False), + (CAR.KIA_SORENTO_HEV_4TH_GEN, True, 0, 32, True), + (CAR.HYUNDAI_KONA_HEV_2ND_GEN, True, 0, 32, True), + (CAR.HYUNDAI_KONA_HEV_2ND_GEN, False, 0, 32, False), + (CAR.HYUNDAI_ELANTRA_HEV_2021, True, 0, 32, False), +)) +def test_ev_mode_capability(candidate, hybrid, status_bus, status_dlc, expected): + CP = get_params(candidate, hybrid=hybrid, status_bus=status_bus, status_dlc=status_dlc) + assert bool(CP.extFlags & HyundaiExtFlags.EV_MODE_STATUS_230) == expected + + +@pytest.mark.parametrize(("hybrid_status_bus", "hybrid_status_dlc"), ( + (1, CANFD_HYBRID_STATUS_DLC), + (0, 16), +)) +def test_ev_mode_capability_requires_ecan_hybrid_status_dlc32(hybrid_status_bus, hybrid_status_dlc): + CP = get_params(CAR.HYUNDAI_SANTAFE_MX5_HEV, hybrid_status_bus=hybrid_status_bus, + hybrid_status_dlc=hybrid_status_dlc) + + assert not bool(CP.extFlags & HyundaiExtFlags.EV_MODE_STATUS_230) + + +def test_0x105_and_ev_status_without_0xfa_do_not_enable_ev_mode(): + CP = get_params(CAR.HYUNDAI_TUCSON_4TH_GEN, hybrid=True, hybrid_status=False) + + assert bool(CP.flags & HyundaiFlags.HYBRID) + assert not bool(CP.extFlags & HyundaiExtFlags.EV_MODE_STATUS_230) + + +def test_ev_mode_display_capability_does_not_change_hybrid_safety_classification(): + CP = get_params(CAR.HYUNDAI_TUCSON_4TH_GEN, hybrid=False, hybrid_status=True) + + assert not bool(CP.flags & HyundaiFlags.HYBRID) + assert bool(CP.extFlags & HyundaiExtFlags.EV_MODE_STATUS_230) + + +def test_ev_mode_capability_uses_the_detected_ecan_offset(): + CP = get_params(CAR.KIA_SORENTO_HEV_4TH_GEN, hybrid_bus=4, hybrid_status_bus=4, status_bus=4) + + assert bool(CP.extFlags & HyundaiExtFlags.EV_MODE_STATUS_230) + + +def test_ev_mode_parser_registration_is_capability_gated(): + supported = get_params(CAR.HYUNDAI_SANTAFE_MX5_HEV) + unsupported = get_params(CAR.KIA_SORENTO_4TH_GEN, hybrid=False, status_bus=1, status_dlc=16) + + supported_parser = CarState.get_can_parsers_canfd(None, supported)[Bus.pt] + unsupported_parser = CarState.get_can_parsers_canfd(None, unsupported)[Bus.pt] + + assert EV_MODE_STATUS_ADDR in supported_parser.addresses + assert supported_parser.message_states[EV_MODE_STATUS_ADDR].ignore_alive + assert supported_parser.message_states[EV_MODE_STATUS_ADDR].ignore_counter + assert EV_MODE_STATUS_ADDR not in unsupported_parser.addresses + + +def test_sorento_ice_corner_radar_status_does_not_enable_ev_mode(): + Params().put_int("HyundaiCameraSCC", 1) + Params().put_int("CanfdHDA2", 1) + + fingerprint = gen_empty_fingerprint() + fingerprint[1][0x230] = 16 # Actual Sorento ICE ACAN corner-radar status frame. + CP = CarInterface.get_params(CAR.KIA_SORENTO_4TH_GEN, fingerprint, [], False, False, False) + parser = CarState.get_can_parsers_canfd(None, CP)[Bus.pt] + + assert not bool(CP.extFlags & HyundaiExtFlags.EV_MODE_STATUS_230) + assert EV_MODE_STATUS_ADDR not in parser.addresses + + +def test_ev_mode_state_requires_a_fresh_dlc32_frame(): + CP = get_params(CAR.HYUNDAI_SANTAFE_MX5_HEV) + parser = CarState.get_can_parsers_canfd(None, CP)[Bus.pt] + packer = CANPacker(DBC[CP.carFingerprint][Bus.pt]) + + assert _get_ev_mode_state(parser) == (False, False) + + timestamp = 1_000_000_000 + wrong_bus_short_status = (EV_MODE_STATUS_ADDR, b"\x00" * 16, 1) + parser.update([timestamp, [wrong_bus_short_status]]) + assert _get_ev_mode_state(parser) == (False, False) + + ev_active = packer.make_can_msg(EV_MODE_STATUS_MSG, parser.bus, {"COUNTER": 1, EV_MODE_STATUS_SIGNAL: 6}) + parser.update([timestamp + 100_000_000, [ev_active]]) + assert _get_ev_mode_state(parser) == (True, True) + + ev_inactive = packer.make_can_msg(EV_MODE_STATUS_MSG, parser.bus, {"COUNTER": 2, EV_MODE_STATUS_SIGNAL: 3}) + parser.update([timestamp + 200_000_000, [ev_inactive]]) + assert _get_ev_mode_state(parser) == (False, True) + + parser.dat[EV_MODE_STATUS_ADDR] = b"\x00" * 16 + assert _get_ev_mode_state(parser) == (False, False) + + parser.dat[EV_MODE_STATUS_ADDR] = ev_inactive[1] + parser.update([timestamp + 200_000_000 + EV_MODE_STATUS_TIMEOUT_NS + 1, []]) + assert not parser.bus_timeout + assert _get_ev_mode_state(parser) == (False, False) + + +@pytest.mark.parametrize("mode", range(16)) +def test_ev_mode_enum_mapping(mode): + CP = get_params(CAR.HYUNDAI_SANTAFE_MX5_HEV) + parser = CarState.get_can_parsers_canfd(None, CP)[Bus.pt] + packer = CANPacker(DBC[CP.carFingerprint][Bus.pt]) + msg = packer.make_can_msg(EV_MODE_STATUS_MSG, parser.bus, {"COUNTER": mode, EV_MODE_STATUS_SIGNAL: mode}) + + parser.update([1_000_000_000, [msg]]) + + assert int(parser.vl[EV_MODE_STATUS_MSG][EV_MODE_STATUS_SIGNAL]) == mode + assert _get_ev_mode_state(parser) == (mode in EV_MODE_ACTIVE_VALUES, True) + + +@pytest.mark.parametrize(("payload", "expected_mode", "expected_active"), ( + ("758139048402000000000000000000000000d3009805001c24000000c05dc80f", 1, True), + ("4d466f048402000000000000000000000000bf007408001c24000000c05dc80f", 2, True), + ("32206e048402000000000000000000000000c9007418001c24000000c05dc80f", 6, True), + # Route 455 mode 3 was a false positive with the old single-bit 0x230 interpretation. + ("4f935e0484020000000000000000000000004400640d001c10000000c05dc40f", 3, False), + ("066558048402000000000000000000000000c4003020001c24000000c05dc80f", 8, False), + ("059683048402000000000000000000000000a1008425001c24000000c05dc80f", 9, False), + ("011305048402000000000000000000000000d600a829001c24000000c05dc80f", 10, False), +)) +def test_ev_mode_dbc_decodes_real_mx5_frames(payload, expected_mode, expected_active): + parser = CANParser("hyundai_canfd_generated", [(EV_MODE_STATUS_MSG, math.nan)], 0) + updated = parser.update([1_000_000_000, [(EV_MODE_STATUS_ADDR, bytes.fromhex(payload), 0)]]) + + assert updated == {EV_MODE_STATUS_ADDR} + assert int(parser.vl[EV_MODE_STATUS_MSG][EV_MODE_STATUS_SIGNAL]) == expected_mode + assert _get_ev_mode_state(parser) == (expected_active, True) + + +def test_ev_mode_rejects_checksum_corruption(): + CP = get_params(CAR.HYUNDAI_SANTAFE_MX5_HEV) + parser = CarState.get_can_parsers_canfd(None, CP)[Bus.pt] + payload = bytearray.fromhex("32206e048402000000000000000000000000c9007418001c24000000c05dc80f") + payload[-1] ^= 1 + + parser.update([1_000_000_000, [(EV_MODE_STATUS_ADDR, bytes(payload), parser.bus)]]) + + assert EV_MODE_STATUS_ADDR not in parser.dat + assert _get_ev_mode_state(parser) == (False, False) + + +def test_ev_mode_fields_default_invalid(): + state = structs.CarState() + assert not state.evModeActive + assert not state.evModeValid + + +def test_ev_mode_parser_is_optional_for_can_validity(): + CP = get_params(CAR.HYUNDAI_SANTAFE_MX5_HEV) + parser = CarState.get_can_parsers_canfd(None, CP)[Bus.pt] + state = parser.message_states[EV_MODE_STATUS_ADDR] + + assert state.ignore_alive + assert state.ignore_counter diff --git a/iqdbc_repo/iqdbc/car/hyundai/tests/test_hyundai.py b/iqdbc_repo/iqdbc/car/hyundai/tests/test_hyundai.py index fdbc35761..edf1f7365 100644 --- a/iqdbc_repo/iqdbc/car/hyundai/tests/test_hyundai.py +++ b/iqdbc_repo/iqdbc/car/hyundai/tests/test_hyundai.py @@ -6,13 +6,11 @@ from iqdbc.car import gen_empty_fingerprint from iqdbc.car.structs import CarParams from iqdbc.car.fw_versions import build_fw_dict from iqdbc.car.hyundai.interface import CarInterface -from iqdbc.car.hyundai.hyundaicanfd import CanBus from iqdbc.car.hyundai.radar_interface import RADAR_START_ADDR -from iqdbc.car.hyundai.values import CAMERA_SCC_CAR, CANFD_CAR, CAN_GEARS, CAR, CHECKSUM, DATE_FW_ECUS, \ - HYBRID_CAR, EV_CAR, FW_QUERY_CONFIG, LEGACY_SAFETY_MODE_CAR, CANFD_FUZZY_WHITELIST, \ - UNSUPPORTED_LONGITUDINAL_CAR, PLATFORM_CODE_ECUS, HYUNDAI_VERSION_REQUEST_LONG, \ - HyundaiFlags, get_platform_codes, HyundaiSafetyFlags, \ - NON_SCC_CAR +from iqdbc.car.hyundai.values import CANFD_CAR, CAN_GEARS, CAR, CHECKSUM, DATE_FW_ECUS, \ + HYBRID_CAR, EV_CAR, FW_QUERY_CONFIG, LEGACY_SAFETY_MODE_CAR, \ + PLATFORM_CODE_ECUS, HYUNDAI_VERSION_REQUEST_LONG, \ + HyundaiFlags, get_platform_codes, HyundaiSafetyFlags from iqdbc.car.hyundai.fingerprints import FW_VERSIONS Ecu = CarParams.Ecu @@ -45,16 +43,8 @@ CANFD_EXPECTED_ECUS = {Ecu.fwdCamera, Ecu.fwdRadar} class TestHyundaiFingerprint: - def test_feature_detection(self): - # LKA steering - for lka_steering in (True, False): - fingerprint = gen_empty_fingerprint() - if lka_steering: - cam_can = CanBus(None, fingerprint).CAM - fingerprint[cam_can] = [0x50, 0x110] # LKA steering messages - CP = CarInterface.get_params(CAR.KIA_EV6, fingerprint, [], False, False, False) - assert bool(CP.flags & HyundaiFlags.CANFD_LKA_STEERING) == lka_steering - + def test_feature_detection(self, monkeypatch, tmp_path): + monkeypatch.setenv("PARAMS_ROOT", str(tmp_path)) # radar available for radar in (True, False): fingerprint = gen_empty_fingerprint() @@ -74,19 +64,20 @@ class TestHyundaiFingerprint: # Test no EV/HEV in any gear lists (should all use ELECT_GEAR) assert set.union(*CAN_GEARS.values()) & (HYBRID_CAR | EV_CAR) == set() - # Test CAN FD car not in CAN feature lists - can_specific_feature_list = set.union(*CAN_GEARS.values(), *CHECKSUM.values(), LEGACY_SAFETY_MODE_CAR, UNSUPPORTED_LONGITUDINAL_CAR, CAMERA_SCC_CAR) + # Test CAN FD cars are not classified with classic-CAN-only parsing or safety modes. + can_specific_feature_list = set.union(*CAN_GEARS.values(), *CHECKSUM.values(), LEGACY_SAFETY_MODE_CAR) for car_model in CANFD_CAR: assert car_model not in can_specific_feature_list, "CAN FD car unexpectedly found in a CAN feature list" def test_hybrid_ev_sets(self): assert HYBRID_CAR & EV_CAR == set(), "Shared cars between hybrid and EV" - assert CANFD_CAR & HYBRID_CAR == set(), "Hard coding CAN FD cars as hybrid is no longer supported" + assert HYBRID_CAR <= set(CAR) + assert EV_CAR <= set(CAR) def test_canfd_ecu_whitelist(self): # Asserts only expected Ecus can exist in database for CAN-FD cars for car_model in CANFD_CAR: - ecus = {fw[0] for fw in FW_VERSIONS[car_model].keys()} + ecus = {fw[0] for fw in FW_VERSIONS.get(car_model, {}).keys()} ecus_not_in_whitelist = ecus - CANFD_EXPECTED_ECUS ecu_strings = ", ".join([f"Ecu.{ecu}" for ecu in ecus_not_in_whitelist]) assert len(ecus_not_in_whitelist) == 0, \ @@ -158,8 +149,6 @@ class TestHyundaiFingerprint: continue if platform_code_ecu == Ecu.eps and car_model in no_eps_platforms: continue - if car_model in NON_SCC_CAR: - continue assert platform_code_ecu in [e[0] for e in ecus] def test_fw_format(self, subtests): @@ -174,9 +163,6 @@ class TestHyundaiFingerprint: if ecu[0] not in PLATFORM_CODE_ECUS: continue - if car_model in NON_SCC_CAR: - continue - codes = set() for fw in fws: result = get_platform_codes([fw]) @@ -225,15 +211,6 @@ class TestHyundaiFingerprint: (b"ON-S9100", b"190405"), (b"ON-S9100", b"190720")} def test_fuzzy_excluded_platforms(self): - # Asserts a list of platforms that will not fuzzy fingerprint with platform codes due to them being shared. - # This list can be shrunk as we combine platforms and detect features - excluded_platforms = { - CAR.GENESIS_G70, # shared platform code, part number, and date - CAR.GENESIS_G70_2020, - } - excluded_platforms |= CANFD_CAR - EV_CAR - CANFD_FUZZY_WHITELIST # shared platform codes - excluded_platforms |= NO_DATES_PLATFORMS # date codes are required to match - platforms_with_shared_codes = set() for platform, fw_by_addr in FW_VERSIONS.items(): car_fw = [] @@ -243,9 +220,6 @@ class TestHyundaiFingerprint: car_fw.append(CarParams.CarFw(ecu=ecu_name, fwVersion=fw, address=addr, subAddress=0 if sub_addr is None else sub_addr)) - if platform in NON_SCC_CAR: - continue - CP = CarParams(carFw=car_fw) matches = FW_QUERY_CONFIG.match_fw_to_car_fuzzy(build_fw_dict(CP.carFw), CP.carVin, FW_VERSIONS) if len(matches) == 1: @@ -253,4 +227,6 @@ class TestHyundaiFingerprint: else: platforms_with_shared_codes.add(platform) - assert platforms_with_shared_codes == excluded_platforms + # A unique fuzzy match must always resolve back to the platform that supplied the firmware. + # Ambiguity is expected for shared platform codes and for platforms without parseable dates. + assert {CAR.GENESIS_G70, CAR.GENESIS_G70_2020} <= platforms_with_shared_codes diff --git a/iqdbc_repo/iqdbc/car/hyundai/tests/test_hyundaican.py b/iqdbc_repo/iqdbc/car/hyundai/tests/test_hyundaican.py deleted file mode 100644 index 2cd7ce39b..000000000 --- a/iqdbc_repo/iqdbc/car/hyundai/tests/test_hyundaican.py +++ /dev/null @@ -1,61 +0,0 @@ -from iqdbc.can import CANParser, CANPacker -from iqdbc.car import Bus -from iqdbc.car.hyundai import hyundaican -from iqdbc.car.hyundai.values import CAR, DBC - - -class DummyHudControl: - leadDistanceBars = 3 - leadVisible = True - - -class DummyLeadData: - lead_visible = False - lead_rel_speed = -7 - lead_distance = 42 - object_gap = 5 - object_rel_gap = 2 - - -class DummyTuning: - comfort_band_upper = 0.2 - comfort_band_lower = 0.3 - jerk_upper = 1.7 - jerk_lower = 1.2 - desired_accel = 0.4 - actual_accel = 0.3 - stopping = False - - -class DummyCP: - carFingerprint = CAR.HYUNDAI_PALISADE - flags = 0 - - -def _decode(msg_name: str, addr: int, dat: bytes): - cp = CANParser(DBC[CAR.HYUNDAI_PALISADE][Bus.pt], [(msg_name, 0)], 0) - cp.update([(0, [(addr, dat, 0)])]) - return cp.vl[msg_name] - - -def test_palisade_uses_stock_scc_surrogates(): - packer = CANPacker(DBC[CAR.HYUNDAI_PALISADE][Bus.pt]) - cp = DummyCP() - hud = DummyHudControl() - tuning = DummyTuning() - lead = DummyLeadData() - - scc11 = hyundaican.create_acc_commands( - packer, True, 0.5, 3.0, 1, lead, hud, 72, False, False, True, cp, False, tuning - )[0] - scc14 = hyundaican.create_acc_commands( - packer, True, 0.5, 3.0, 1, lead, hud, 72, False, False, True, cp, False, tuning - )[2] - - scc11_vals = _decode("SCC11", scc11[0], scc11[1]) - assert scc11_vals["ObjValid"] == 1 - assert scc11_vals["ACC_ObjStatus"] == 1 - assert scc11_vals["ACC_ObjDist"] == 1 - - scc14_vals = _decode("SCC14", scc14[0], scc14[1]) - assert "ObjDistStat" not in scc14_vals or scc14_vals["ObjDistStat"] == 0 diff --git a/iqdbc_repo/iqdbc/car/hyundai/tests/test_integration.py b/iqdbc_repo/iqdbc/car/hyundai/tests/test_integration.py new file mode 100644 index 000000000..5dfb818a6 --- /dev/null +++ b/iqdbc_repo/iqdbc/car/hyundai/tests/test_integration.py @@ -0,0 +1,53 @@ +import pytest + +from iqdbc.car import gen_empty_fingerprint, structs +from iqdbc.car.hyundai.interface import CarInterface +from iqdbc.car.hyundai.values import CAR, HyundaiFlagsIQ, HyundaiSafetyFlagsIQ + + +@pytest.mark.parametrize("candidate", list(CAR), ids=lambda candidate: candidate.value) +@pytest.mark.parametrize("alpha_long", (False, True), ids=("stock_long", "openpilot_long")) +def test_all_platform_state_controller_and_radar(candidate, alpha_long, monkeypatch, tmp_path): + """Every declared HKG platform must initialize and execute one complete interface cycle.""" + monkeypatch.setenv("PARAMS_ROOT", str(tmp_path / candidate.value)) + fingerprint = gen_empty_fingerprint() + + cp = CarInterface.get_params(candidate, fingerprint, [], alpha_long, False, False) + cp_iq = CarInterface.get_params_iq(cp, candidate, fingerprint, [], alpha_long, False, False) + interface = CarInterface(cp, cp_iq) + + state, state_iq = interface.update([]) + actuators, can_sends = interface.apply(structs.CarControl().as_reader(), structs.IQCarControl()) + radar = interface.RadarInterface(cp, cp_iq) + radar_result = radar.update([]) + + assert state.vEgo == 0.0 + assert state_iq is not None + assert actuators is not None + assert isinstance(can_sends, list) + assert radar_result is None + + +def test_parameter_defaults_do_not_require_persisted_fingerprint(monkeypatch, tmp_path): + """A clean installation must not crash when carrotpilot-specific Params have not been written yet.""" + monkeypatch.setenv("PARAMS_ROOT", str(tmp_path)) + fingerprint = gen_empty_fingerprint() + + cp = CarInterface.get_params(CAR.HYUNDAI_SONATA, fingerprint, [], False, False, False) + cp_iq = CarInterface.get_params_iq(cp, CAR.HYUNDAI_SONATA, fingerprint, [], False, False, False) + interface = CarInterface(cp, cp_iq) + + state, _ = interface.update([]) + assert state.vEgo == 0.0 + + +def test_classic_lfa_button_capability_survives_iq_module_removal(monkeypatch, tmp_path): + monkeypatch.setenv("PARAMS_ROOT", str(tmp_path)) + fingerprint = gen_empty_fingerprint() + fingerprint[0][0x391] = 8 + + cp = CarInterface.get_params(CAR.HYUNDAI_SONATA, fingerprint, [], False, False, False) + cp_iq = CarInterface.get_params_iq(cp, CAR.HYUNDAI_SONATA, fingerprint, [], False, False, False) + + assert cp_iq.flags & HyundaiFlagsIQ.HAS_LFA_BUTTON + assert cp_iq.iqSafetyFlags & HyundaiSafetyFlagsIQ.HAS_LDA_BUTTON diff --git a/iqdbc_repo/iqdbc/car/hyundai/tests/test_radar.py b/iqdbc_repo/iqdbc/car/hyundai/tests/test_radar.py new file mode 100644 index 000000000..ceace1ff9 --- /dev/null +++ b/iqdbc_repo/iqdbc/car/hyundai/tests/test_radar.py @@ -0,0 +1,326 @@ +import math + +import pytest + +from iqdbc.can import CANParser +from iqdbc.car import Bus, structs +import iqdbc.car.hyundai.hyundaicanfd as hyundaicanfd +import iqdbc.car.hyundai.radar_interface as radar_interface_module +from iqdbc.car.hyundai.radar_interface import ( + CORNER_OBJECT_STABLE_TRACK_ID_START, + RADAR_MSG_COUNT3, + RADAR_MSG_COUNT4, + RADAR_START_ADDR_CANFD3, + CornerObjectTrackIdManager, + RadarInterface, + corner_object_position_valid, +) +from iqdbc.car.hyundai.values import CAR, HyundaiExtFlags, HyundaiFlags + + +class TestDensoRadar: + @staticmethod + def parse(addr, dat): + name = f"RADAR_TRACK_{addr:x}" + parser = CANParser("hyundai_kia_denso_front_radar_generated", [(name, 20)], 1) + parser.update([0, [(addr, bytes.fromhex(dat), 1)]]) + return parser.vl[name] + + def test_active_track_signals(self): + # Person walking toward the parked car, left of the camera center. + track = self.parse(0x503, "bc047efcc1fe8b00") + + assert track["LONG_DIST"] == pytest.approx(7.1875) + assert track["LAT_DIST"] == pytest.approx(-1.625) + assert track["REL_SPEED"] == pytest.approx(-0.734375) + assert track["OBJECT_STATE"] == 3 + + def test_empty_track(self): + track = self.parse(0x507, "53fff80000000081") + + assert track["LONG_DIST"] == pytest.approx(409.55) + assert track["LAT_DIST"] == 0 + assert track["REL_SPEED"] == 0 + assert track["OBJECT_STATE"] == 0 + + def test_long_range_lateral_distance(self): + # Real driving sample: treating the signed field as -12 degrees would put + # this target about 34 m sideways at 161 m. It is instead -3.0 m lateral. + track = self.parse(0x506, "b664eafa00cd230b") + + assert track["LONG_DIST"] == pytest.approx(161.4625) + assert track["LAT_DIST"] == pytest.approx(-3.0) + assert track["OBJECT_STATE"] == 3 + + def test_parser_selection_and_point_conversion(self, monkeypatch): + class FakeParams: + def get_int(self, key): + return 1 if key == "EnableRadarTracks" else 0 + + monkeypatch.setattr(radar_interface_module, "Params", FakeParams) + cp = structs.CarParams() + cp.carFingerprint = CAR.KIA_SORENTO + cp.flags = 0 + cp.extFlags = HyundaiExtFlags.RADAR_GROUP4.value + cp.radarUnavailable = False + cp.safetyConfigs = [structs.CarParams.SafetyConfig()] + + radar_interface = RadarInterface(cp) + + assert radar_interface.radar_group4 + assert RADAR_MSG_COUNT4 == 8 + assert radar_interface.radar_msg_count == RADAR_MSG_COUNT4 + assert radar_interface.trigger_msg_tracks == 0x507 + + active_dat = bytes.fromhex("bc047efcc1fe8b00") + empty_dat = bytes.fromhex("bcfff80000000081") + packets = [(addr, active_dat if addr == 0x503 else empty_dat, 1) for addr in range(0x500, 0x508)] + radar_data = radar_interface.update([0, packets]) + point = next(point for point in radar_data.points if point.trackId == 35) + + assert point.measured + assert point.dRel == pytest.approx(7.1875) + assert point.yRel == pytest.approx(1.625) + assert point.vRel == pytest.approx(-0.734375) + assert math.isnan(point.aRel) + + # EN: Confirm that the long-range sample survives the filter and converts + # radar-left-negative to openpilot-left-positive coordinates. + # KO: 장거리 샘플의 필터 통과와 레이더 좌측 음수 좌표가 openpilot 좌측 + # 양수 좌표로 변환되는지 확인함. + long_range_dat = bytes.fromhex("b664eafa00cd230b") + packets = [(addr, long_range_dat if addr == 0x506 else empty_dat, 1) for addr in range(0x500, 0x508)] + radar_data = radar_interface.update([0, packets]) + point = next(point for point in radar_data.points if point.trackId == 38) + + assert point.dRel == pytest.approx(161.4625) + assert point.yRel == pytest.approx(3.0) + + # EN: A state-0 raw detection must not enter a stable tracked-object slot. + # KO: 상태 0인 raw detection이 안정적인 추적 객체 슬롯에 들어오지 않음을 확인함. + raw_detection = bytes.fromhex("d702f4fc200000e4") + packets = [(addr, raw_detection if addr == 0x503 else empty_dat, 1) for addr in range(0x500, 0x508)] + radar_data = radar_interface.update([0, packets]) + assert not radar_data.points + + # EN: A real confirmed track beyond the former 205 m limit remains valid. + # KO: 기존 205m 상한을 넘는 실제 확정 트랙도 유효하게 유지됨. + confirmed_213m_track = bytes.fromhex("35854c0780f163e0") + packets = [(addr, confirmed_213m_track if addr == 0x503 else empty_dat, 1) for addr in range(0x500, 0x508)] + radar_data = radar_interface.update([0, packets]) + point = next(point for point in radar_data.points if point.trackId == 35) + assert point.dRel == pytest.approx(213.275) + assert point.yRel == pytest.approx(-3.75) + + # EN: The 325 m boundary is rejected, leaving ample separation from the + # 409.55 m empty-slot sentinel. + # KO: 325m 경계값을 제외해 409.55m 빈 슬롯 값과 충분한 간격을 확보함. + boundary_track = bytes.fromhex("bccb200000000300") + packets = [(addr, boundary_track if addr == 0x503 else empty_dat, 1) for addr in range(0x500, 0x508)] + radar_data = radar_interface.update([0, packets]) + assert not radar_data.points + + # EN: The wider profile keeps a real stable track at 4.875 m, covering more + # of the outer adjacent lane than the conservative 4.5 m profile. + # KO: 넓어진 필터에서 4.875m의 실제 안정 트랙을 유지해 보수적인 4.5m + # 설정보다 바깥쪽 인접 차선을 더 넓게 포함함. + outer_lane_track = bytes.fromhex("d80b66f640000300") + packets = [(addr, outer_lane_track if addr == 0x503 else empty_dat, 1) for addr in range(0x500, 0x508)] + radar_data = radar_interface.update([0, packets]) + point = next(point for point in radar_data.points if point.trackId == 35) + assert point.yRel == pytest.approx(4.875) + + # EN: Tracks beyond the widened envelope are rejected as roadside clutter; + # this payload differs only in lateral distance (-7.0 m). + # KO: 넓어진 범위를 벗어난 트랙은 도로변 잡음으로 제외함. 이 payload는 + # 횡방향 거리(-7.0m)만 다름. + far_side_reflection = bytes.fromhex("d80b66f200000300") + packets = [(addr, far_side_reflection if addr == 0x503 else empty_dat, 1) for addr in range(0x500, 0x508)] + radar_data = radar_interface.update([0, packets]) + assert not radar_data.points + + +class TestRadarGroup3: + @staticmethod + def parse(addr, dat): + name = f"RADAR_TRACK_{addr:x}" + parser = CANParser("hyundai_canfd_radar_generated", [(name, 20)], 1) + parser.update([0, [(addr, bytes.fromhex(dat), 1)]]) + return parser.vl[name] + + def test_group3_active_track(self): + track = self.parse(0x406, "e1043b0f02590e692a227e16f80fe00f28fcc753a20a0000") + + assert track["OBJECT_LENGTH"] == pytest.approx(4.4) + assert track["LONG_DIST"] == pytest.approx(55.4) + assert track["LAT_DIST"] == pytest.approx(-3.0) + assert track["REL_SPEED"] == pytest.approx(4.4) + + def test_group3_empty_track(self): + track = self.parse(0x407, "c03d3b0000000000ff0700000000000000d0020000000000") + + assert track["OBJECT_LENGTH"] == 0 + assert track["LONG_DIST"] == pytest.approx(204.7) + assert track["LAT_DIST"] == 0 + assert track["REL_SPEED"] == 0 + + def test_group3_parser_selection(self, monkeypatch): + class FakeParams: + def get_int(self, key): + return 1 if key == "EnableRadarTracks" else 0 + + monkeypatch.setattr(radar_interface_module, "Params", FakeParams) + monkeypatch.setattr(hyundaicanfd, "Params", FakeParams) + cp = structs.CarParams() + cp.carFingerprint = next(car for car, dbc in radar_interface_module.DBC.items() if "hyundai_canfd" in dbc[Bus.pt]) + cp.flags = HyundaiFlags.CANFD.value + cp.extFlags = HyundaiExtFlags.RADAR_GROUP3.value + cp.radarUnavailable = False + cp.safetyConfigs = [structs.CarParams.SafetyConfig()] + + radar_interface = RadarInterface(cp) + + assert radar_interface.radar_group3 + assert radar_interface.radar_start_addr == RADAR_START_ADDR_CANFD3 + assert radar_interface.radar_msg_count == RADAR_MSG_COUNT3 + assert radar_interface.trigger_msg_tracks == 0x41D + + active_dat = bytes.fromhex("e1043b0f02590e692a227e16f80fe00f28fcc753a20a0000") + empty_dat = bytes.fromhex("c03d3b0000000000ff0700000000000000d0020000000000") + packets = [(addr, active_dat if addr == 0x406 else empty_dat, 1) for addr in range(0x400, 0x41E)] + radar_data = radar_interface.update([0, packets]) + point = next(point for point in radar_data.points if point.trackId == 38) + + assert point.measured + assert point.dRel == pytest.approx(53.1) + assert point.yRel == pytest.approx(-3.0) + assert point.vRel == pytest.approx(4.4) + + +class TestCornerRadarObjectIdentity: + @staticmethod + def set_bits(data, start, size, value): + for offset in range(size): + bit = start + offset + data[bit // 8] |= ((value >> offset) & 1) << (bit % 8) + + @pytest.mark.parametrize( + "dbc,msg_name,addr,age_signal,id_signal,age_start,id_start", + ( + ("hyundai_canfd_corner_radar_180_generated", "CORNER_RADAR_180_OBJECTS_180", 0x180, + "SLOT1_AGE", "SLOT1_OBJECT_ID", 32, 44), + ("hyundai_canfd_corner_radar_235_generated", "CORNER_RADAR_235_OBJECTS_235", 0x235, + "OBJ_AGE", "OBJ_OBJECT_ID", 32, 44), + ), + ) + def test_object_identity_signals(self, dbc, msg_name, addr, age_signal, id_signal, age_start, id_start): + data = bytearray(32) + self.set_bits(data, age_start, 8, 23) + self.set_bits(data, id_start, 7, 46) + parser = CANParser(dbc, [(msg_name, 33)], 1) + parser.update([0, [(addr, bytes(data), 1)]]) + + assert parser.vl[msg_name][age_signal] == 23 + assert parser.vl[msg_name][id_signal] == 46 + + def test_track_id_survives_slot_move_and_resets_with_age(self): + manager = CornerObjectTrackIdManager() + first_id = manager.get_track_id("corner180", object_id=108, age=240) + + assert first_id == CORNER_OBJECT_STABLE_TRACK_ID_START + assert manager.get_track_id("corner180", object_id=108, age=241) == first_id + assert manager.get_track_id("corner235", object_id=108, age=241) != first_id + assert manager.get_track_id("corner180", object_id=108, age=2) != first_id + + def test_clipped_side_object_position_is_valid(self): + assert corner_object_position_valid(0.0, 2.8) + assert corner_object_position_valid(25.0, 0.2) + assert not corner_object_position_valid(0.0, 0.0) + assert not corner_object_position_valid(0.0, 5.0) + + +class TestCornerRadar430CandidateFilter: + @staticmethod + def slot_word(distance_raw, meta13=0, b2=10, b3=2): + return distance_raw | (meta13 << 13) | (b2 << 16) | (b3 << 24) + + @classmethod + def message(cls, slots): + words = [0x010d1f40] * 7 + for slot, word in slots.items(): + words[slot - 1] = word + + dat = bytearray(32) + for idx, word in enumerate(words): + dat[4 + idx * 4:8 + idx * 4] = int(word).to_bytes(4, "little") + return bytes(dat) + + @staticmethod + def build_interface(monkeypatch): + class FakeParams: + def get_int(self, key): + return 1 if key == "EnableCornerRadar" else 0 + + monkeypatch.setattr(radar_interface_module, "Params", FakeParams) + monkeypatch.setattr(hyundaicanfd, "Params", FakeParams) + cp = structs.CarParams() + cp.carFingerprint = next(car for car, dbc in radar_interface_module.DBC.items() if "hyundai_canfd" in dbc[Bus.pt]) + cp.flags = HyundaiFlags.CANFD.value + cp.extFlags = HyundaiExtFlags.CORNER_RADAR_OBJECTS_430.value + cp.radarUnavailable = True + cp.safetyConfigs = [structs.CarParams.SafetyConfig()] + return RadarInterface(cp) + + @staticmethod + def update_frames(radar_interface, packets, frames=5): + radar_data = None + for _ in range(frames): + radar_data = radar_interface.update([0, packets]) + return radar_data + + def test_430_promotes_supported_neighbor_bins(self, monkeypatch): + radar_interface = self.build_interface(monkeypatch) + empty = self.message({}) + supported_bins = self.message({ + 6: self.slot_word(1000), + 7: self.slot_word(1004), + }) + packets = [(addr, supported_bins if addr == 0x436 else empty, 1) for addr in range(0x430, 0x438)] + packets += [(addr, empty, 1) for addr in range(0x440, 0x448)] + + radar_data = self.update_frames(radar_interface, packets) + points = {point.trackId: point for point in radar_data.points} + + assert points[300].measured + assert points[300].dRel == pytest.approx(50.1) + assert points[300].yRel == pytest.approx(2.0) + assert points[300].yvRel == 0.0 + + def test_430_expires_noncenter_inward_yvrel(self, monkeypatch): + radar_interface = self.build_interface(monkeypatch) + empty = self.message({}) + frame_defs = ( + (0x431, 4, 5), + (0x433, 3, 4), + (0x435, 2, 3), + (0x430, 5, 6), + (0x432, 4, 5), + (0x434, 3, 4), + (0x436, 2, 3), + ) + + radar_data = None + for addr, first_slot, second_slot in frame_defs: + msg = self.message({ + first_slot: self.slot_word(1000), + second_slot: self.slot_word(1004), + }) + packets = [(a, msg if a == addr else empty, 1) for a in range(0x430, 0x438)] + packets += [(a, empty, 1) for a in range(0x440, 0x448)] + radar_data = radar_interface.update([0, packets]) + radar_data = self.update_frames(radar_interface, packets, frames=3) + points = {point.trackId: point for point in radar_data.points} + + assert points[300].measured + assert points[300].yRel == pytest.approx(2.0) + assert points[300].yvRel == 0.0 diff --git a/iqdbc_repo/iqdbc/car/hyundai/values.py b/iqdbc_repo/iqdbc/car/hyundai/values.py index a67aae501..3fd7310fe 100644 --- a/iqdbc_repo/iqdbc/car/hyundai/values.py +++ b/iqdbc_repo/iqdbc/car/hyundai/values.py @@ -1,21 +1,37 @@ import re from dataclasses import dataclass, field -from enum import IntFlag +from enum import Enum, IntFlag from iqdbc.car import Bus, CarSpecs, DbcDict, PlatformConfig, Platforms, uds +from iqdbc.car.lateral import AngleSteeringLimits from iqdbc.car.common.conversions import Conversions as CV from iqdbc.car.structs import CarParams -from iqdbc.car.docs_definitions import CarHarness, CarDocs, CarParts, SupportType +from iqdbc.car.docs_definitions import CarFootnote, CarHarness, CarDocs, CarParts, Column from iqdbc.car.fw_query_definitions import FwQueryConfig, Request, p16 -from iqdbc.iqpilot.car.hyundai.values import HyundaiFlagsIQ - Ecu = CarParams.Ecu class CarControllerParams: - ACCEL_MIN = -3.5 # m/s - ACCEL_MAX = 2.0 # m/s + ACCEL_MIN = -4.0 # m/s + ACCEL_MAX = 2.5 # m/s + ANGLE_LIMITS: AngleSteeringLimits = AngleSteeringLimits( + # LKAS angle command is unlimited, but LFA is limited to 176.7 deg (but does not fault if requesting above) + 175, # deg + # stock comma's + #([0, 9, 16, 25], [1.4, 0.6, 0.4, 0.1]), + #([0, 9, 16, 25], [1.4, 0.7, 0.5, 0.1]), + ([0, 9, 16, 25], [1.8, 1.6, 1.3, 0.8]), + ([0, 9, 16, 25], [2.4, 2.0, 1.6, 1.0]), + #([0, 9, 16, 25], [1.6, 1.0, 0.6, 0.15]), + #([0, 9, 16, 25], [2.0, 1.2, 0.8, 0.28]), + ) + # Stock LFA system is seen sending 250 max, but for LKAS events it's 175 max. + # 250 can at least achieve 4 m/s^2, 80 corresponds to ~2.5 m/s^2 + ANGLE_MAX_TORQUE = 200 # The maximum amount of torque that will be allowed + ANGLE_MIN_TORQUE = 25 # equivalent to ~0.8 m/s^2 of torque (based on ANGLE_MAX_TORQUE) when overriding + ANGLE_TORQUE_UP_RATE = 8 #2 # Indicates how fast the torque ramps up after user intervention. + ANGLE_TORQUE_DOWN_RATE = 12 #4 Indicates how fast the torque ramps down during user intervention (handing off). def __init__(self, CP): self.STEER_DELTA_UP = 3 @@ -41,20 +57,17 @@ class CarControllerParams: CAR.KIA_OPTIMA_H, CAR.KIA_OPTIMA_H_G4_FL, CAR.KIA_SORENTO): self.STEER_MAX = 255 + elif CP.carFingerprint in (CAR.HYUNDAI_SANTA_FE_PHEV_2022): + self.STEER_MAX = 409 # these cars have significantly more torque than most HKG; limit to 70% of max elif CP.flags & HyundaiFlags.ALT_LIMITS: - self.STEER_MAX = 270 - self.STEER_DELTA_UP = 2 - self.STEER_DELTA_DOWN = 3 - - elif CP.flags & HyundaiFlags.ALT_LIMITS_2: - self.STEER_MAX = 170 + self.STEER_MAX = 384 self.STEER_DELTA_UP = 2 self.STEER_DELTA_DOWN = 3 # Default for most HKG else: - self.STEER_MAX = 384 + self.STEER_MAX = 409 class HyundaiSafetyFlags(IntFlag): @@ -70,14 +83,31 @@ class HyundaiSafetyFlags(IntFlag): ALT_LIMITS_2 = 512 +class HyundaiSafetyFlagsIQ: + DEFAULT = 0 + ESCC = 16 + MAIN_BTN_LONG_TOGGLE = 32 + HAS_LDA_BUTTON = 64 + NON_SCC = 128 + + +class HyundaiFlagsIQ(IntFlag): + ENHANCED_SCC = 1 + HAS_LFA_BUTTON = 2 + MAIN_BTN_LONG_TOGGLE = 2 ** 2 + ENABLE_RADAR_TRACKS_DEPRECATED = 2 ** 3 + LONG_TUNING_DYNAMIC = 2 ** 4 + LONG_TUNING_PREDICTIVE = 2 ** 5 + NON_SCC = 2 ** 6 + NON_SCC_RADAR_FCA = 2 ** 7 + NON_SCC_NO_FCA = 2 ** 8 + SPEED_LIMIT_AVAILABLE = 2 ** 9 + HAS_LKAS12 = 2 ** 10 + + class HyundaiFlags(IntFlag): # Dynamic Flags - - # Default assumption: all cars use LFA (ADAS) steering from the camera. - # CANFD_LKA_STEERING/CANFD_LKA_STEERING_ALT cars typically have both LKA (camera) and LFA (ADAS) steering messages, - # with LKA commands forwarded to the ADAS DRV ECU. - # Most HDA2 trims are assumed to be equipped with the ADAS DRV ECU, though some variants may not be equipped with one. - CANFD_LKA_STEERING = 1 + CANFD_HDA2 = 1 CANFD_ALT_BUTTONS = 2 CANFD_ALT_GEARS = 2 ** 2 CANFD_CAMERA_SCC = 2 ** 3 @@ -87,7 +117,7 @@ class HyundaiFlags(IntFlag): CANFD_ALT_GEARS_2 = 2 ** 6 SEND_LFA = 2 ** 7 USE_FCA = 2 ** 8 - CANFD_LKA_STEERING_ALT = 2 ** 9 + CANFD_HDA2_ALT_STEERING = 2 ** 9 # these cars use a different gas signal HYBRID = 2 ** 10 @@ -103,7 +133,7 @@ class HyundaiFlags(IntFlag): # The radar does SCC on these cars when HDA I, rather than the camera RADAR_SCC = 2 ** 14 # The camera does SCC on these cars, rather than the radar - CAMERA_SCC = 2 ** 15 + CAMERA_SCC = CANFD_CAMERA_SCC #2 ** 15 CHECKSUM_CRC8 = 2 ** 16 CHECKSUM_6B = 2 ** 17 @@ -122,23 +152,41 @@ class HyundaiFlags(IntFlag): MIN_STEER_32_MPH = 2 ** 23 - HAS_LDA_BUTTON = 2 ** 24 + ANGLE_CONTROL = 2 ** 24 FCEV = 2 ** 25 ALT_LIMITS_2 = 2 ** 26 + CC_ONLY_CAR = 2 ** 31 + +class HyundaiExtFlags(IntFlag): + NAVI_CLUSTER = 2 ** 2 + HAS_LFAHDA = 2 ** 4 + CANFD_GEARS_NONE = 2 ** 6 + RADAR_GROUP1 = 2 ** 7 # 0x210 radar group 1, 0x3A5 radar group 2 + CANFD_GEARS_69 = 2 ** 10 + RADAR_GROUP3 = 2 ** 11 # 0x400-0x41D radar object group + CORNER_RADAR_OBJECTS_235 = 2 ** 12 # 0x230 status + 0x235-0x248 raw corner radar objects + CORNER_RADAR_OBJECTS_180 = 2 ** 13 # 0x180-0x184 bus 1 two-slot raw corner/front radar objects + CORNER_RADAR_OBJECTS_430 = 2 ** 14 # 0x430-0x437 left + 0x440-0x447 right IONIQ 9 corner radar bins + RADAR_GROUP4 = 2 ** 15 # 0x500-0x507 Denso DNMWR006 stable radar tracks + EV_MODE_STATUS_230 = 2 ** 16 # ECAN 0x230/DLC32 exposes the hybrid power-flow mode used for the EV indicator + +class Footnote(Enum): + CANFD = CarFootnote( + "Requires a CAN FD panda kit if not using " + + "comma 3X for this CAN FD car.", + Column.MODEL) + @dataclass class HyundaiCarDocs(CarDocs): package: str = "Smart Cruise Control (SCC)" - -@dataclass -class HyundaiNonSccCarDocs(CarDocs): - package: str = "No Smart Cruise Control (Non-SCC)" - support_type: SupportType = SupportType.COMMUNITY - support_link: str = "community" + def init_make(self, CP: CarParams): + if CP.flags & HyundaiFlags.CANFD: + self.footnotes.insert(0, Footnote.CANFD) @dataclass @@ -153,20 +201,9 @@ class HyundaiPlatformConfig(PlatformConfig): self.specs = self.specs.override(minSteerSpeed=32 * CV.MPH_TO_MS) -@dataclass -class HyundaiNonSccPlatformConfig(PlatformConfig): - dbc_dict: DbcDict = field(default_factory=lambda: {Bus.pt: "hyundai_kia_generic"}) - - def init(self): - self.iq_flags |= HyundaiFlagsIQ.NON_SCC - - if self.flags & HyundaiFlags.MIN_STEER_32_MPH: - self.specs = self.specs.override(minSteerSpeed=32 * CV.MPH_TO_MS) - - @dataclass class HyundaiCanFDPlatformConfig(PlatformConfig): - dbc_dict: DbcDict = field(default_factory=lambda: {Bus.pt: "hyundai_canfd_generated"}) + dbc_dict: DbcDict = field(default_factory=lambda: {Bus.pt: "hyundai_canfd_generated", Bus.radar: 'hyundai_canfd_radar_generated'}) def init(self): self.flags |= HyundaiFlags.CANFD @@ -174,6 +211,10 @@ class HyundaiCanFDPlatformConfig(PlatformConfig): class CAR(Platforms): # Hyundai + HYUNDAI_AZERA_7TH_GEN = HyundaiCanFDPlatformConfig( + [HyundaiCarDocs("Hyundai Azera 2023-2024", "All", car_parts=CarParts.common([CarHarness.hyundai_a]))], + CarSpecs(mass=1700, wheelbase=2.895, steerRatio=16.5), + ) HYUNDAI_AZERA_6TH_GEN = HyundaiPlatformConfig( [HyundaiCarDocs("Hyundai Azera 2022", "All", car_parts=CarParts.common([CarHarness.hyundai_k]))], CarSpecs(mass=1600, wheelbase=2.885, steerRatio=14.5), @@ -260,9 +301,9 @@ class CAR(Platforms): flags=HyundaiFlags.CLUSTER_GEARS | HyundaiFlags.ALT_LIMITS, ) HYUNDAI_KONA_2022 = HyundaiPlatformConfig( - [HyundaiCarDocs("Hyundai Kona 2022-23", car_parts=CarParts.common([CarHarness.hyundai_o]))], + [HyundaiCarDocs("Hyundai Kona 2022", car_parts=CarParts.common([CarHarness.hyundai_o]))], CarSpecs(mass=1491, wheelbase=2.6, steerRatio=13.42, tireStiffnessFactor=0.385), - flags=HyundaiFlags.CAMERA_SCC | HyundaiFlags.ALT_LIMITS_2, + flags=HyundaiFlags.CAMERA_SCC, ) HYUNDAI_KONA_EV = HyundaiPlatformConfig( [HyundaiCarDocs("Hyundai Kona Electric 2018-21", car_parts=CarParts.common([CarHarness.hyundai_g]))], @@ -285,6 +326,11 @@ class CAR(Platforms): CarSpecs(mass=1425, wheelbase=2.6, steerRatio=13.42, tireStiffnessFactor=0.385), flags=HyundaiFlags.HYBRID | HyundaiFlags.ALT_LIMITS, ) + HYUNDAI_KONA_HEV_2ND_GEN = HyundaiCanFDPlatformConfig( + [HyundaiCarDocs("Hyundai Kona Hybrid 2024", car_parts=CarParts.common([CarHarness.hyundai_l]))], + CarSpecs(mass=1590, wheelbase=2.66, steerRatio=13.6, tireStiffnessFactor=0.385), + flags=HyundaiFlags.HYBRID, + ) HYUNDAI_NEXO_1ST_GEN = HyundaiPlatformConfig( [HyundaiCarDocs("Hyundai Nexo 2021", "All", car_parts=CarParts.common([CarHarness.hyundai_h]))], CarSpecs(mass=3990 * CV.LB_TO_KG, wheelbase=2.79, steerRatio=14.19), # https://www.hyundainews.com/assets/documents/original/42768-2021NEXOProductGuideSpecs.pdf @@ -300,17 +346,17 @@ class CAR(Platforms): [HyundaiCarDocs("Hyundai Santa Fe 2021-23", "All", video="https://youtu.be/VnHzSTygTS4", car_parts=CarParts.common([CarHarness.hyundai_l]))], HYUNDAI_SANTA_FE.specs, - flags=HyundaiFlags.MANDO_RADAR | HyundaiFlags.CHECKSUM_CRC8, + flags=HyundaiFlags.CHECKSUM_CRC8, ) HYUNDAI_SANTA_FE_HEV_2022 = HyundaiPlatformConfig( [HyundaiCarDocs("Hyundai Santa Fe Hybrid 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_l]))], HYUNDAI_SANTA_FE.specs, - flags=HyundaiFlags.MANDO_RADAR | HyundaiFlags.CHECKSUM_CRC8 | HyundaiFlags.HYBRID, + flags=HyundaiFlags.CHECKSUM_CRC8 | HyundaiFlags.HYBRID, ) HYUNDAI_SANTA_FE_PHEV_2022 = HyundaiPlatformConfig( [HyundaiCarDocs("Hyundai Santa Fe Plug-in Hybrid 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_l]))], HYUNDAI_SANTA_FE.specs, - flags=HyundaiFlags.MANDO_RADAR | HyundaiFlags.CHECKSUM_CRC8 | HyundaiFlags.HYBRID, + flags=HyundaiFlags.CHECKSUM_CRC8 | HyundaiFlags.HYBRID, ) HYUNDAI_SONATA = HyundaiPlatformConfig( [HyundaiCarDocs("Hyundai Sonata 2020-23", "All", video="https://www.youtube.com/watch?v=ix63r9kE3Fw", @@ -321,8 +367,14 @@ class CAR(Platforms): HYUNDAI_SONATA_LF = HyundaiPlatformConfig( [HyundaiCarDocs("Hyundai Sonata 2018-19", car_parts=CarParts.common([CarHarness.hyundai_e]))], CarSpecs(mass=1536, wheelbase=2.804, steerRatio=13.27 * 1.15), # 15% higher at the center seems reasonable + flags=HyundaiFlags.UNSUPPORTED_LONGITUDINAL | HyundaiFlags.TCU_GEARS, ) + HYUNDAI_SONATA_2024 = HyundaiCanFDPlatformConfig( + [HyundaiCarDocs("Hyundai Sonata 2024-25", "All", car_parts=CarParts.common([CarHarness.hyundai_a]))], + CarSpecs(mass=1556, wheelbase=2.84, steerRatio=12.81), + flags=HyundaiFlags.CAMERA_SCC, + ) HYUNDAI_STARIA_4TH_GEN = HyundaiCanFDPlatformConfig( [HyundaiCarDocs("Hyundai Staria 2023", "All", car_parts=CarParts.common([CarHarness.hyundai_k]))], CarSpecs(mass=2205, wheelbase=3.273, steerRatio=11.94), # https://www.hyundai.com/content/dam/hyundai/au/en/models/staria-load/premium-pip-update-2023/spec-sheet/STARIA_Load_Spec-Table_March_2023_v3.1.pdf @@ -362,11 +414,32 @@ class CAR(Platforms): CarSpecs(mass=1948, wheelbase=2.97, steerRatio=14.26, tireStiffnessFactor=0.65), flags=HyundaiFlags.EV, ) + HYUNDAI_IONIQ_5_PE = HyundaiCanFDPlatformConfig( + [ + HyundaiCarDocs("Hyundai IONIQ 5 PE (NE1)", car_parts=CarParts.common([CarHarness.hyundai_q])), + HyundaiCarDocs("Hyundai Ioniq 5 PE (with HDA II) 2024", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_q])), + ], + #CarSpecs(mass=2012, wheelbase=3.0, steerRatio=14.26, tireStiffnessFactor=0.65), + CarSpecs(mass=2012, wheelbase=3.0, steerRatio=14.26, tireStiffnessFactor=1.0), + flags=HyundaiFlags.EV | HyundaiFlags.ANGLE_CONTROL, + ) + HYUNDAI_IONIQ_5_N = HyundaiCanFDPlatformConfig( + [HyundaiCarDocs("Hyundai Ioniq 5 N (with HDA II) 2024", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_m]))], + CarSpecs(mass=2200, wheelbase=3.00, steerRatio=12.54), + flags=HyundaiFlags.EV, + ) HYUNDAI_IONIQ_6 = HyundaiCanFDPlatformConfig( [HyundaiCarDocs("Hyundai Ioniq 6 (with HDA II) 2023-24", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_p]))], HYUNDAI_IONIQ_5.specs, flags=HyundaiFlags.EV | HyundaiFlags.CANFD_NO_RADAR_DISABLE, ) + HYUNDAI_IONIQ_9 = HyundaiCanFDPlatformConfig( + [ + HyundaiCarDocs("Hyundai Ioniq 9", "All", car_parts=CarParts.common([CarHarness.hyundai_m])), + ], + CarSpecs(mass=2505, wheelbase=3.13, steerRatio=16.02), + flags=HyundaiFlags.EV | HyundaiFlags.ANGLE_CONTROL, + ) HYUNDAI_TUCSON_4TH_GEN = HyundaiCanFDPlatformConfig( [ HyundaiCarDocs("Hyundai Tucson 2022", car_parts=CarParts.common([CarHarness.hyundai_n])), @@ -386,6 +459,36 @@ class CAR(Platforms): CarSpecs(mass=1690, wheelbase=3.055, steerRatio=17), # mass: from https://www.hyundai-motor.com.tw/clicktobuy/custin#spec_0, steerRatio: from learner flags=HyundaiFlags.CHECKSUM_CRC8, ) + HYUNDAI_CASPER = HyundaiPlatformConfig( + [HyundaiCarDocs("Hyundai Casper 2023", "All", car_parts=CarParts.common([CarHarness.hyundai_k]))], + CarSpecs(mass=1060, wheelbase=2.4, steerRatio=14.3), # mass: from https://www.hyundai-motor.com.tw/clicktobuy/custin#spec_0, steerRatio: from learner + flags=HyundaiFlags.CAMERA_SCC | HyundaiFlags.CHECKSUM_CRC8, + ) + + HYUNDAI_CASPER_EV = HyundaiPlatformConfig( + [HyundaiCarDocs("Hyundai Casper EV 2024", "All", car_parts=CarParts.common([CarHarness.hyundai_k]))], + CarSpecs(mass=1355, wheelbase=2.58, steerRatio=14.3), # mass: from https://www.hyundai-motor.com.tw/clicktobuy/custin#spec_0, steerRatio: from learner + flags=HyundaiFlags.CAMERA_SCC | HyundaiFlags.CHECKSUM_CRC8 | HyundaiFlags.EV + ) + HYUNDAI_PORTER_II_EV = HyundaiPlatformConfig( + [HyundaiCarDocs("Hyundai Porter II EV 2024", car_parts=CarParts.common([CarHarness.hyundai_h]))], + CarSpecs(mass=1970, wheelbase=2.64, steerRatio=14.5), + flags=HyundaiFlags.EV | HyundaiFlags.CC_ONLY_CAR, + ) + HYUNDAI_SANTAFE_MX5 = HyundaiCanFDPlatformConfig( + [ + HyundaiCarDocs("Hyundai SANTAFE (MX5)", car_parts=CarParts.common([CarHarness.hyundai_k])), + ], + CarSpecs(mass=1910, wheelbase=2.76, steerRatio=15.8, tireStiffnessFactor=0.82), + flags=HyundaiFlags.ANGLE_CONTROL, + ) + HYUNDAI_SANTAFE_MX5_HEV = HyundaiCanFDPlatformConfig( + [ + HyundaiCarDocs("Hyundai SANTAFE HYBRID (MX5)", car_parts=CarParts.common([CarHarness.hyundai_k])), + ], + HYUNDAI_SANTAFE_MX5.specs, + flags=HyundaiFlags.ANGLE_CONTROL, + ) # Kia KIA_FORTE = HyundaiPlatformConfig( @@ -405,6 +508,18 @@ class CAR(Platforms): KIA_K5_2021.specs, flags=HyundaiFlags.MANDO_RADAR | HyundaiFlags.CHECKSUM_CRC8 | HyundaiFlags.HYBRID, ) + KIA_K5_DL3_24 = HyundaiCanFDPlatformConfig( + [ + HyundaiCarDocs("Kia K5 2024", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_k])), + ], + CarSpecs(mass=1553, wheelbase=2.85, steerRatio=13.27, tireStiffnessFactor=0.5), + ) + KIA_K5_DL3_24_HEV = HyundaiCanFDPlatformConfig( + [ + HyundaiCarDocs("Kia K5 Hybrid 2024", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_k])), + ], + CarSpecs(mass=1553, wheelbase=2.85, steerRatio=13.27, tireStiffnessFactor=0.5), + ) KIA_K8_HEV_1ST_GEN = HyundaiCanFDPlatformConfig( [HyundaiCarDocs("Kia K8 Hybrid (with HDA II) 2023", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_q]))], # mass: https://carprices.ae/brands/kia/2023/k8/1.6-turbo-hybrid, steerRatio: guesstimate from K5 platform @@ -421,16 +536,13 @@ class CAR(Platforms): flags=HyundaiFlags.MANDO_RADAR | HyundaiFlags.EV, ) KIA_NIRO_EV_2ND_GEN = HyundaiCanFDPlatformConfig( - [ - HyundaiCarDocs("Kia Niro EV (without HDA II) 2023-25", "All", car_parts=CarParts.common([CarHarness.hyundai_a])), - HyundaiCarDocs("Kia Niro EV (with HDA II) 2025", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_r])), - ], + [HyundaiCarDocs("Kia Niro EV 2023", "All", car_parts=CarParts.common([CarHarness.hyundai_a]))], KIA_NIRO_EV.specs, flags=HyundaiFlags.EV, ) KIA_NIRO_PHEV = HyundaiPlatformConfig( [ - HyundaiCarDocs("Kia Niro Hybrid 2018", min_enable_speed=10. * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_c])), + HyundaiCarDocs("Kia Niro Hybrid 2018", "All", min_enable_speed=10. * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_c])), HyundaiCarDocs("Kia Niro Plug-in Hybrid 2018-19", "All", min_enable_speed=10. * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_c])), HyundaiCarDocs("Kia Niro Plug-in Hybrid 2020", car_parts=CarParts.common([CarHarness.hyundai_d])), ], @@ -471,7 +583,7 @@ class CAR(Platforms): # TODO: may support adjacent years. may have a non-zero minimum steering speed KIA_OPTIMA_H = HyundaiPlatformConfig( [HyundaiCarDocs("Kia Optima Hybrid 2017", "Advanced Smart Cruise Control", car_parts=CarParts.common([CarHarness.hyundai_c]))], - CarSpecs(mass=3558 * CV.LB_TO_KG, wheelbase=2.8, steerRatio=13.75, tireStiffnessFactor=0.5), + CarSpecs(mass=3758 * CV.LB_TO_KG, wheelbase=2.8, steerRatio=13.75, tireStiffnessFactor=0.5), flags=HyundaiFlags.HYBRID | HyundaiFlags.LEGACY, ) KIA_OPTIMA_H_G4_FL = HyundaiPlatformConfig( @@ -499,6 +611,7 @@ class CAR(Platforms): HyundaiCarDocs("Kia Sorento 2019", video="https://www.youtube.com/watch?v=Fkh3s6WHJz8", car_parts=CarParts.common([CarHarness.hyundai_e])), ], CarSpecs(mass=1985, wheelbase=2.78, steerRatio=14.4 * 1.1), # 10% higher at the center seems reasonable + dbc_dict={Bus.pt: "hyundai_kia_generic", Bus.radar: "hyundai_kia_denso_front_radar_generated"}, flags=HyundaiFlags.CHECKSUM_6B | HyundaiFlags.UNSUPPORTED_LONGITUDINAL, ) KIA_SORENTO_4TH_GEN = HyundaiCanFDPlatformConfig( @@ -528,6 +641,11 @@ class CAR(Platforms): CarSpecs(mass=1450, wheelbase=2.65, steerRatio=13.75, tireStiffnessFactor=0.5), flags=HyundaiFlags.LEGACY, ) + KIA_EV4 = HyundaiCanFDPlatformConfig( + [HyundaiCarDocs("Kia EV4 2025", "All", car_parts=CarParts.common([CarHarness.hyundai_q]))], + CarSpecs(mass=1710, wheelbase=2.83, steerRatio=14.5, tireStiffnessFactor=0.65), + flags=HyundaiFlags.EV, + ) KIA_EV6 = HyundaiCanFDPlatformConfig( [ HyundaiCarDocs("Kia EV6 (Southeast Asia only) 2022-24", "All", car_parts=CarParts.common([CarHarness.hyundai_p])), @@ -537,6 +655,14 @@ class CAR(Platforms): CarSpecs(mass=2055, wheelbase=2.9, steerRatio=16, tireStiffnessFactor=0.65), flags=HyundaiFlags.EV, ) + KIA_EV6_PE = HyundaiCanFDPlatformConfig( + [ + HyundaiCarDocs("Kia EV6 PE (CV1)", car_parts=CarParts.common([CarHarness.hyundai_p])), + HyundaiCarDocs("Kia EV6 PE (with HDA II) 2025", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_p])) + ], + CarSpecs(mass=2055, wheelbase=2.9, steerRatio=16, tireStiffnessFactor=0.65), + flags=HyundaiFlags.EV | HyundaiFlags.ANGLE_CONTROL, + ) KIA_CARNIVAL_4TH_GEN = HyundaiCanFDPlatformConfig( [ HyundaiCarDocs("Kia Carnival 2022-24", car_parts=CarParts.common([CarHarness.hyundai_a])), @@ -605,54 +731,116 @@ class CAR(Platforms): CarSpecs(mass=2258, wheelbase=2.95, steerRatio=14.14), flags=HyundaiFlags.RADAR_SCC, ) - - # port extensions - HYUNDAI_BAYON_1ST_GEN_NON_SCC = HyundaiNonSccPlatformConfig( - [HyundaiNonSccCarDocs("Hyundai Bayon Non-SCC 2021", car_parts=CarParts.common([CarHarness.hyundai_n]))], - CarSpecs(mass=1150, wheelbase=2.58, steerRatio=13.27 * 1.15), - flags=HyundaiFlags.CHECKSUM_CRC8, + GENESIS_GV70_EV_1ST_GEN = HyundaiCanFDPlatformConfig( + [HyundaiCarDocs("Genesis GV70 EV 2020-2023", "All", car_parts=CarParts.common([CarHarness.hyundai_m]))], + CarSpecs(mass=2230, wheelbase=2.87, steerRatio=14.6), + flags=HyundaiFlags.EV | HyundaiFlags.RADAR_SCC, ) - HYUNDAI_ELANTRA_2022_NON_SCC = HyundaiNonSccPlatformConfig( - [HyundaiNonSccCarDocs("Hyundai Elantra Non-SCC 2022", car_parts=CarParts.common([CarHarness.hyundai_k]))], - HYUNDAI_ELANTRA_2021.specs, - flags=HyundaiFlags.CHECKSUM_CRC8, + HYUNDAI_GRANDEUR_IG = HyundaiPlatformConfig( + [HyundaiCarDocs("Hyundai Grandeur 2018-19", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=1570, wheelbase=2.845, steerRatio=16., tireStiffnessFactor=0.7), + flags=HyundaiFlags.LEGACY | HyundaiFlags.CLUSTER_GEARS, ) - HYUNDAI_KONA_NON_SCC = HyundaiNonSccPlatformConfig( - [HyundaiNonSccCarDocs("Hyundai Kona Non-SCC 2019", car_parts=CarParts.common([CarHarness.hyundai_b]))], - HYUNDAI_KONA.specs, - flags=HyundaiFlags.ALT_LIMITS, + HYUNDAI_GRANDEUR_IG_HEV = HyundaiPlatformConfig( + [HyundaiCarDocs("Hyundai Grandeur HEV 2018-19", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=1570, wheelbase=2.845, steerRatio=16., tireStiffnessFactor=0.7), + flags=HyundaiFlags.HYBRID | HyundaiFlags.LEGACY, ) - HYUNDAI_KONA_EV_NON_SCC = HyundaiNonSccPlatformConfig( - [HyundaiNonSccCarDocs("Hyundai Kona Electric Non-SCC 2019", car_parts=CarParts.common([CarHarness.hyundai_g]))], - HYUNDAI_KONA_EV.specs, - flags=HyundaiFlags.EV | HyundaiFlags.ALT_LIMITS, + GENESIS_EQ900 = HyundaiPlatformConfig( + [HyundaiCarDocs("Genesis EQ900 2017", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=2200, wheelbase=3.15, steerRatio=16., tireStiffnessFactor=0.7), + flags=HyundaiFlags.LEGACY, ) - KIA_CEED_PHEV_2022_NON_SCC = HyundaiNonSccPlatformConfig( - [HyundaiNonSccCarDocs("Kia Ceed Plug-in Hybrid Non-SCC 2022", car_parts=CarParts.common([CarHarness.hyundai_i]))], - CarSpecs(mass=1650, wheelbase=2.65, steerRatio=13.75, tireStiffnessFactor=0.5), + GENESIS_EQ900_L = HyundaiPlatformConfig( + [HyundaiCarDocs("Genesis EQ900 LIMOUSINE", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=2290, wheelbase=3.45, steerRatio=16., tireStiffnessFactor=0.7), + flags=HyundaiFlags.LEGACY, + ) + GENESIS_G90_2019 = HyundaiPlatformConfig( + [HyundaiCarDocs("Genesis G90 2019", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=2150, wheelbase=3.16, steerRatio=16., tireStiffnessFactor=0.7), + flags=HyundaiFlags.LEGACY, + ) + HYUNDAI_NEXO = HyundaiPlatformConfig( + [HyundaiCarDocs("Hyundai Nexo", "All", car_parts=CarParts.common([CarHarness.hyundai_a]))], + CarSpecs(mass=1885, wheelbase=2.79, steerRatio=15.3, tireStiffnessFactor=0.385), + flags=HyundaiFlags.EV, + ) + KIA_MOHAVE = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia Mohave 2019", "All", car_parts=CarParts.common([CarHarness.hyundai_k]))], + CarSpecs(mass=2285, wheelbase=2.895, steerRatio=16., tireStiffnessFactor=0.7), + flags=HyundaiFlags.LEGACY, + ) + KIA_K5 = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia K5 2019 & 2016", "All", car_parts=CarParts.common([CarHarness.hyundai_b]))], + CarSpecs(mass=1515, wheelbase=2.80, steerRatio=15.5, tireStiffnessFactor=0.7), + flags=HyundaiFlags.LEGACY | HyundaiFlags.TCU_GEARS, + ) + KIA_K5_HEV = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia K5 Hybrid 2017", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=1705, wheelbase=2.80, steerRatio=15.5, tireStiffnessFactor=0.7), + flags=HyundaiFlags.HYBRID | HyundaiFlags.LEGACY, + ) + KIA_K5_HEV_2022 = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia K5 Hybrid 2022", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=1515, wheelbase=2.85, steerRatio=15.5, tireStiffnessFactor=0.7), + flags=HyundaiFlags.HYBRID | HyundaiFlags.LEGACY, + ) + KIA_K7 = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia K7 2016-2019", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=1850, wheelbase=2.855, steerRatio=15.5, tireStiffnessFactor=0.7), + flags=HyundaiFlags.LEGACY | HyundaiFlags.CLUSTER_GEARS, + ) + KIA_K7_HEV = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia K7 Hybrid 2016-2019", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=1515, wheelbase=2.855, steerRatio=15.5, tireStiffnessFactor=0.7), + flags=HyundaiFlags.HYBRID | HyundaiFlags.LEGACY, + ) + KIA_K7_PE = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia K7 2020", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=1850, wheelbase=2.855, steerRatio=15.5, tireStiffnessFactor=0.7), + ) + KIA_K7_HEV_PE = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia K7 Hybrid 2020", "All", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=1515, wheelbase=2.855, steerRatio=15.5, tireStiffnessFactor=0.7), flags=HyundaiFlags.HYBRID, ) - KIA_FORTE_2019_NON_SCC = HyundaiNonSccPlatformConfig( - [HyundaiNonSccCarDocs("Kia Forte Non-SCC 2019", car_parts=CarParts.common([CarHarness.hyundai_g]))], - KIA_FORTE.specs, - iq_flags=HyundaiFlagsIQ.NON_SCC_NO_FCA, + KIA_K9 = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia K9 2016-2019", "All", car_parts=CarParts.common([CarHarness.hyundai_h]))], + CarSpecs(mass=2075, wheelbase=3.15, steerRatio=14.5, tireStiffnessFactor=0.7), + flags=HyundaiFlags.LEGACY, ) - KIA_FORTE_2021_NON_SCC = HyundaiNonSccPlatformConfig( - [HyundaiNonSccCarDocs("Kia Forte Non-SCC 2021", car_parts=CarParts.common([CarHarness.hyundai_g]))], - KIA_FORTE.specs, + KIA_EV_SK3 = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia Soul EV 2019", car_parts=CarParts.common([CarHarness.hyundai_c]))], + CarSpecs(mass=1695, wheelbase=2.6, steerRatio=13.75), + flags=HyundaiFlags.CHECKSUM_CRC8 | HyundaiFlags.EV, ) - KIA_SELTOS_2023_NON_SCC = HyundaiNonSccPlatformConfig( - [HyundaiNonSccCarDocs("Kia Seltos Non-SCC 2023-24", car_parts=CarParts.common([CarHarness.hyundai_l]))], - KIA_SELTOS.specs, - flags=HyundaiFlags.CHECKSUM_CRC8, + KIA_EV9 = HyundaiCanFDPlatformConfig( + [ + HyundaiCarDocs("Kia EV9 (MV)", car_parts=CarParts.common([CarHarness.hyundai_k])), + ], + CarSpecs(mass=2625, wheelbase=3.1, steerRatio=16.02), + flags=HyundaiFlags.EV | HyundaiFlags.ANGLE_CONTROL, ) - GENESIS_G70_2021_NON_SCC = HyundaiNonSccPlatformConfig( - [HyundaiNonSccCarDocs("Genesis G70 Non-SCC 2021", car_parts=CarParts.common([CarHarness.hyundai_f]))], - GENESIS_G70_2020.specs, - flags=HyundaiFlags.CHECKSUM_CRC8, - iq_flags=HyundaiFlagsIQ.NON_SCC_RADAR_FCA, + KIA_EV3 = HyundaiCanFDPlatformConfig( + [ + HyundaiCarDocs("Kia EV3 (SV1)", car_parts=CarParts.common([CarHarness.hyundai_n])), + ], + CarSpecs(mass=2055, wheelbase=2.90, steerRatio=16.0, tireStiffnessFactor=0.65), + flags=HyundaiFlags.EV, + ) + KIA_PV5 = HyundaiCanFDPlatformConfig( + [ + HyundaiCarDocs("Kia PV5 (SW1)", car_parts=CarParts.common([CarHarness.hyundai_n])), + ], + CarSpecs(mass=2600, wheelbase=2.995, steerRatio=16.0, tireStiffnessFactor=0.65), + flags=HyundaiFlags.EV, + ) + KIA_RAY_EV = HyundaiPlatformConfig( + [HyundaiCarDocs("Kia Ray EV", car_parts=CarParts.common([CarHarness.hyundai_h]))], + CarSpecs(mass=1295, wheelbase=2.520, steerRatio=14.5), + flags=HyundaiFlags.EV | HyundaiFlags.CC_ONLY_CAR | HyundaiFlags.CHECKSUM_CRC8, ) - class Buttons: NONE = 0 @@ -660,6 +848,7 @@ class Buttons: SET_DECEL = 2 GAP_DIST = 3 CANCEL = 4 # on newer models, this is a pause/resume button + LFA_BUTTON = 5 def get_platform_codes(fw_versions: list[bytes]) -> set[tuple[bytes, bytes | None]]: @@ -840,11 +1029,21 @@ CAN_GEARS = { # which message has the gear. hybrid and EV use ELECT_GEAR "use_cluster_gears": CAR.with_flags(HyundaiFlags.CLUSTER_GEARS), "use_tcu_gears": CAR.with_flags(HyundaiFlags.TCU_GEARS), + "send_mdps12": {CAR.GENESIS_G90, CAR.GENESIS_G90_2019, CAR.KIA_K9, CAR.KIA_K7}, } CANFD_CAR = CAR.with_flags(HyundaiFlags.CANFD) CANFD_RADAR_SCC_CAR = CAR.with_flags(HyundaiFlags.RADAR_SCC) # TODO: merge with UNSUPPORTED_LONGITUDINAL_CAR +CANFD_HYBRID_STATUS_ADDR = 0xFA +CANFD_HYBRID_STATUS_DLC = 32 + +EV_MODE_STATUS_ADDR = 0x230 +EV_MODE_STATUS_DLC = 32 +EV_MODE_STATUS_MSG = "HCU_STATUS_230" +EV_MODE_STATUS_SIGNAL = "HYBRID_POWER_FLOW_MODE" +EV_MODE_ACTIVE_VALUES = frozenset((1, 2, 6)) + CANFD_UNSUPPORTED_LONGITUDINAL_CAR = CAR.with_flags(HyundaiFlags.CANFD_NO_RADAR_DISABLE) # TODO: merge with UNSUPPORTED_LONGITUDINAL_CAR CAMERA_SCC_CAR = CAR.with_flags(HyundaiFlags.CAMERA_SCC) @@ -859,7 +1058,13 @@ LEGACY_SAFETY_MODE_CAR = CAR.with_flags(HyundaiFlags.LEGACY) # HyundaiFlags.CANFD_RADAR_SCC | HyundaiFlags.CANFD_NO_RADAR_DISABLE | ) UNSUPPORTED_LONGITUDINAL_CAR = CAR.with_flags(HyundaiFlags.LEGACY) | CAR.with_flags(HyundaiFlags.UNSUPPORTED_LONGITUDINAL) -# port extensions -NON_SCC_CAR = CAR.with_iq_flags(HyundaiFlagsIQ.NON_SCC) - DBC = CAR.create_dbc_map() + +if __name__ == "__main__": + cars = [] + for platform in CAR: + for doc in platform.config.car_docs: + cars.append(doc.name) + cars.sort() + for c in cars: + print(c) diff --git a/iqdbc_repo/iqdbc/car/interfaces.py b/iqdbc_repo/iqdbc/car/interfaces.py index 79feab49c..7f68e4079 100644 --- a/iqdbc_repo/iqdbc/car/interfaces.py +++ b/iqdbc_repo/iqdbc/car/interfaces.py @@ -18,7 +18,7 @@ from iqdbc.car.values import PLATFORMS from iqdbc.can import CANParser from iqdbc.car.carlog import carlog -from iqdbc.iqpilot.car.interfaces import CarInterfaceBaseIQ +from iqdbc.lvbs.car.interfaces import CarInterfaceBaseIQ GearShifter = structs.CarState.GearShifter ButtonType = structs.CarState.ButtonEvent.Type @@ -332,6 +332,12 @@ class CarStateBase(ABC): x0=[[0.0], [0.0]] K = get_kalman_gain(DT_CTRL, np.array(A), np.array(C), np.array(Q), R) self.v_ego_kf = KF1D(x0=x0, A=A, C=C[0], K=K) + self.v_ego_clu_kf = KF1D(x0=x0, A=A, C=C[0], K=K) + + self.softHoldActive = 0 + self.is_metric = True + self.lkas_enabled = False + self.modelV2 = None @abstractmethod def update(self, can_parsers) -> tuple[structs.CarState, structs.IQCarState]: @@ -348,6 +354,22 @@ class CarStateBase(ABC): v_ego_x = self.v_ego_kf.update(v_ego_raw) return float(v_ego_x[0]), float(v_ego_x[1]) + def update_clu_speed_kf(self, v_ego_raw): + if abs(v_ego_raw - self.v_ego_clu_kf.x[0][0]) > 2.0: + self.v_ego_clu_kf.set_x([[v_ego_raw], [0.0]]) + + v_ego_x = self.v_ego_clu_kf.update(v_ego_raw) + return float(v_ego_x[0]), float(v_ego_x[1]) + + def get_wheel_speeds(self, fl, fr, rl, rr, unit=CV.KPH_TO_MS): + factor = unit * self.CP.wheelSpeedFactor + wheel_speeds = structs.CarState.WheelSpeeds() + wheel_speeds.fl = fl * factor + wheel_speeds.fr = fr * factor + wheel_speeds.rl = rl * factor + wheel_speeds.rr = rr * factor + return wheel_speeds + def update_blinker_from_lamp(self, blinker_time: int, left_blinker_lamp: bool, right_blinker_lamp: bool): """Update blinkers from lights. Enable output when light was seen within the last `blinker_time` iterations""" diff --git a/iqdbc_repo/iqdbc/car/nissan/carstate.py b/iqdbc_repo/iqdbc/car/nissan/carstate.py index 517c31423..d5394b8d7 100644 --- a/iqdbc_repo/iqdbc/car/nissan/carstate.py +++ b/iqdbc_repo/iqdbc/car/nissan/carstate.py @@ -5,17 +5,18 @@ from iqdbc.car import Bus, create_button_events, structs from iqdbc.car.common.conversions import Conversions as CV from iqdbc.car.interfaces import CarStateBase from iqdbc.car.nissan.values import CAR, DBC, CarControllerParams -from iqdbc.iqpilot.car.nissan.carstate_ext import CarStateExt + +from iqdbc.lvbs.car.nissan.iq_carstate import IQCarState ButtonType = structs.CarState.ButtonEvent.Type TORQUE_SAMPLES = 12 -class CarState(CarStateBase, CarStateExt): +class CarState(CarStateBase, IQCarState): def __init__(self, CP, CP_IQ): CarStateBase.__init__(self, CP, CP_IQ) - CarStateExt.__init__(self, CP, CP_IQ) + IQCarState.__init__(self, CP, CP_IQ) can_define = CANDefine(DBC[CP.carFingerprint][Bus.pt]) self.lkas_hud_msg = {} @@ -129,7 +130,7 @@ class CarState(CarStateBase, CarStateExt): self.lkas_hud_msg = copy.copy(cp_adas.vl["PROPILOT_HUD"]) self.lkas_hud_info_msg = copy.copy(cp_adas.vl["PROPILOT_HUD_INFO_MSG"]) - CarStateExt.update(self, ret, ret_iq, can_parsers) + IQCarState.update(self, ret, ret_iq, can_parsers) ret.buttonEvents = [ *create_button_events(self.distance_button, prev_distance_button, {1: ButtonType.gapAdjustCruise}), diff --git a/iqdbc_repo/iqdbc/car/nissan/interface.py b/iqdbc_repo/iqdbc/car/nissan/interface.py index d06218e86..a7b680a02 100644 --- a/iqdbc_repo/iqdbc/car/nissan/interface.py +++ b/iqdbc_repo/iqdbc/car/nissan/interface.py @@ -3,7 +3,7 @@ from iqdbc.car.interfaces import CarInterfaceBase from iqdbc.car.nissan.carcontroller import CarController from iqdbc.car.nissan.carstate import CarState from iqdbc.car.nissan.values import CAR, NissanSafetyFlags -from iqdbc.iqpilot.car.nissan.values import NissanSafetyFlagsIQ +from iqdbc.lvbs.car.nissan.values import NissanSafetyFlagsIQ class CarInterface(CarInterfaceBase): CarState = CarState diff --git a/iqdbc_repo/iqdbc/car/rivian/carcontroller.py b/iqdbc_repo/iqdbc/car/rivian/carcontroller.py index 81f39546a..5b9638b9c 100644 --- a/iqdbc_repo/iqdbc/car/rivian/carcontroller.py +++ b/iqdbc_repo/iqdbc/car/rivian/carcontroller.py @@ -6,7 +6,7 @@ from iqdbc.car.interfaces import CarControllerBase from iqdbc.car.rivian.riviancan import create_lka_steering, create_longitudinal, create_wheel_touch, create_adas_status from iqdbc.car.rivian.values import CarControllerParams -from iqdbc.iqpilot.car.rivian.aol import AolCarController +from iqdbc.lvbs.car.rivian.aol import AolCarController class CarController(CarControllerBase, AolCarController): diff --git a/iqdbc_repo/iqdbc/car/rivian/carstate.py b/iqdbc_repo/iqdbc/car/rivian/carstate.py index d5c247172..1901913df 100644 --- a/iqdbc_repo/iqdbc/car/rivian/carstate.py +++ b/iqdbc_repo/iqdbc/car/rivian/carstate.py @@ -4,15 +4,15 @@ from iqdbc.car import Bus, structs from iqdbc.car.interfaces import CarStateBase from iqdbc.car.rivian.values import DBC, GEAR_MAP from iqdbc.car.common.conversions import Conversions as CV -from iqdbc.iqpilot.car.rivian.carstate_ext import CarStateExt +from iqdbc.lvbs.car.rivian.iq_carstate import IQCarState GearShifter = structs.CarState.GearShifter -class CarState(CarStateBase, CarStateExt): +class CarState(CarStateBase, IQCarState): def __init__(self, CP, CP_IQ): CarStateBase.__init__(self, CP, CP_IQ) - CarStateExt.__init__(self, CP, CP_IQ) + IQCarState.__init__(self, CP, CP_IQ) self.last_speed = 30 self.acm_lka_hba_cmd = None @@ -95,7 +95,7 @@ class CarState(CarStateBase, CarStateExt): self.sccm_wheel_touch = copy.copy(cp.vl["SCCM_WheelTouch"]) self.vdm_adas_status = copy.copy(cp.vl["VDM_AdasSts"]) - CarStateExt.update(self, ret, can_parsers) + IQCarState.update(self, ret, can_parsers) return ret, ret_iq @@ -105,5 +105,5 @@ class CarState(CarStateBase, CarStateExt): Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], [], 0), Bus.adas: CANParser(DBC[CP.carFingerprint][Bus.pt], [], 1), Bus.cam: CANParser(DBC[CP.carFingerprint][Bus.pt], [], 2), - **CarStateExt.get_parser(CP, CP_IQ), + **IQCarState.get_parser(CP, CP_IQ), } diff --git a/iqdbc_repo/iqdbc/car/rivian/interface.py b/iqdbc_repo/iqdbc/car/rivian/interface.py index 2730e8088..a211a98f4 100644 --- a/iqdbc_repo/iqdbc/car/rivian/interface.py +++ b/iqdbc_repo/iqdbc/car/rivian/interface.py @@ -4,7 +4,7 @@ from iqdbc.car.rivian.carcontroller import CarController from iqdbc.car.rivian.carstate import CarState from iqdbc.car.rivian.radar_interface import RadarInterface from iqdbc.car.rivian.values import RivianSafetyFlags -from iqdbc.iqpilot.car.rivian.values import RivianFlagsIQ +from iqdbc.lvbs.car.rivian.values import RivianFlagsIQ class CarInterface(CarInterfaceBase): @@ -39,6 +39,8 @@ class CarInterface(CarInterfaceBase): @staticmethod def _get_params_iq(stock_cp: structs.CarParams, ret: structs.IQCarParams, candidate, fingerprint: dict[int, dict[int, int]], car_fw: list[structs.CarParams.CarFw], alpha_long: bool, is_release_iq: bool, docs: bool) -> structs.IQCarParams: + # Longitudinal harness upgrade advertises msg 0x31a on bus 5; when present it + # unlocks radar, blind-spot and openpilot longitudinal on Rivian. if 0x31a in fingerprint[5]: ret.flags |= RivianFlagsIQ.LONGITUDINAL_HARNESS_UPGRADE.value stock_cp.radarUnavailable = False diff --git a/iqdbc_repo/iqdbc/car/subaru/carcontroller.py b/iqdbc_repo/iqdbc/car/subaru/carcontroller.py index 3a78a1750..18ba9e51b 100644 --- a/iqdbc_repo/iqdbc/car/subaru/carcontroller.py +++ b/iqdbc_repo/iqdbc/car/subaru/carcontroller.py @@ -6,7 +6,7 @@ from iqdbc.car.interfaces import CarControllerBase from iqdbc.car.subaru import subarucan from iqdbc.car.subaru.values import DBC, GLOBAL_ES_ADDR, CanBus, CarControllerParams, SubaruFlags -from iqdbc.iqpilot.car.subaru.stop_and_go import SnGCarController +from iqdbc.lvbs.car.subaru.stop_and_go import IQStopAndGoController # FIXME: These limits aren't exact. The real limit is more than likely over a larger time period and # involves the total steering angle change rather than rate, but these limits work well for now @@ -14,10 +14,10 @@ MAX_STEER_RATE = 25 # deg/s MAX_STEER_RATE_FRAMES = 7 # tx control frames needed before torque can be cut -class CarController(CarControllerBase, SnGCarController): +class CarController(CarControllerBase, IQStopAndGoController): def __init__(self, dbc_names, CP, CP_IQ): CarControllerBase.__init__(self, dbc_names, CP, CP_IQ) - SnGCarController.__init__(self, CP, CP_IQ) + IQStopAndGoController.__init__(self, CP, CP_IQ) self.apply_torque_last = 0 self.cruise_button_prev = 0 @@ -139,7 +139,7 @@ class CarController(CarControllerBase, SnGCarController): if self.frame % 2 == 0: can_sends.append(subarucan.create_es_static_2(self.packer)) - can_sends.extend(SnGCarController.create_stop_and_go(self, self.packer, CC, CS, self.frame)) + can_sends.extend(IQStopAndGoController.create_stop_and_go(self, self.packer, CC, CS, self.frame)) new_actuators = actuators.as_builder() new_actuators.torque = self.apply_torque_last / self.p.STEER_MAX diff --git a/iqdbc_repo/iqdbc/car/subaru/carstate.py b/iqdbc_repo/iqdbc/car/subaru/carstate.py index a69c05fb6..5fbfc876c 100644 --- a/iqdbc_repo/iqdbc/car/subaru/carstate.py +++ b/iqdbc_repo/iqdbc/car/subaru/carstate.py @@ -6,15 +6,15 @@ from iqdbc.car.interfaces import CarStateBase from iqdbc.car.subaru.values import DBC, CanBus, SubaruFlags from iqdbc.car import CanSignalRateCalculator -from iqdbc.iqpilot.car.subaru.aol import AolCarState -from iqdbc.iqpilot.car.subaru.stop_and_go import SnGCarState +from iqdbc.lvbs.car.subaru.aol import AolCarState +from iqdbc.lvbs.car.subaru.stop_and_go import IQStopAndGoState -class CarState(CarStateBase, AolCarState, SnGCarState): +class CarState(CarStateBase, AolCarState, IQStopAndGoState): def __init__(self, CP, CP_IQ): CarStateBase.__init__(self, CP, CP_IQ) AolCarState.__init__(self, CP, CP_IQ) - SnGCarState.__init__(self, CP, CP_IQ) + IQStopAndGoState.__init__(self, CP, CP_IQ) can_define = CANDefine(DBC[CP.carFingerprint][Bus.pt]) self.shifter_values = can_define.dv["Transmission"]["Gear"] @@ -144,7 +144,7 @@ class CarState(CarStateBase, AolCarState, SnGCarState): self.es_infotainment_msg = copy.copy(cp_cam.vl["ES_Infotainment"]) AolCarState.update_aol(self, ret, can_parsers) - SnGCarState.update(self, ret, can_parsers) + IQStopAndGoState.update(self, ret, can_parsers) return ret, ret_iq diff --git a/iqdbc_repo/iqdbc/car/tesla/carcontroller.py b/iqdbc_repo/iqdbc/car/tesla/carcontroller.py index a2a04fbd6..216a18198 100644 --- a/iqdbc_repo/iqdbc/car/tesla/carcontroller.py +++ b/iqdbc_repo/iqdbc/car/tesla/carcontroller.py @@ -8,8 +8,8 @@ from iqdbc.car.tesla.teslacan import TeslaCAN from iqdbc.car.tesla.values import CarControllerParams from iqdbc.car.vehicle_model import VehicleModel from openpilot.iqpilot.selfdrive.car.enhanced_stock_longitudinal_control import get_set_speed_kph_from_params -from iqdbc.iqpilot.car.tesla.coop_steering import CoopSteeringCarController -from iqdbc.iqpilot.car.tesla.values import TeslaFlagsIQ +from iqdbc.lvbs.car.tesla.coop_steering import CoopSteeringCarController +from iqdbc.lvbs.car.tesla.values import TeslaFlagsIQ def get_safety_CP(): diff --git a/iqdbc_repo/iqdbc/car/tesla/carstate.py b/iqdbc_repo/iqdbc/car/tesla/carstate.py index a75c3cc35..44aa90acf 100644 --- a/iqdbc_repo/iqdbc/car/tesla/carstate.py +++ b/iqdbc_repo/iqdbc/car/tesla/carstate.py @@ -6,16 +6,20 @@ from iqdbc.car.interfaces import CarStateBase from iqdbc.car.tesla import TESLA_BLINKERS from iqdbc.car.tesla.values import DBC, CANBUS, GEAR_MAP, STEER_THRESHOLD, TeslaFlags -from iqdbc.iqpilot.car.tesla.carstate_ext import CarStateExt -from iqdbc.iqpilot.car.tesla.values import TeslaFlagsIQ +from iqdbc.lvbs.car.tesla.iq_carstate import IQCarState +from iqdbc.lvbs.car.tesla.values import TeslaFlagsIQ +from openpilot.common.params import Params +from openpilot.system.proprietary_runtime._verified_import import import_verified_module + +vehicle_state = import_verified_module("iqpilot_alc_private", "iqpilot_private.konn3kt.iqlvbs.vehicle_state") ButtonType = structs.CarState.ButtonEvent.Type -class CarState(CarStateBase, CarStateExt): +class CarState(CarStateBase, IQCarState): def __init__(self, CP, CP_IQ): CarStateBase.__init__(self, CP, CP_IQ) - CarStateExt.__init__(self, CP, CP_IQ) + IQCarState.__init__(self, CP, CP_IQ) self.can_define = CANDefine(DBC[CP.carFingerprint][Bus.party]) self.shifter_values = self.can_define.dv["DI_systemStatus"]["DI_gear"] @@ -27,6 +31,7 @@ class CarState(CarStateBase, CarStateExt): self.acc_state_last = 0 self.das_control = None self.das_body_controls_dat = b"" + self._odometer_store = vehicle_state.VehicleOdometerStore(CP, Params()) self.cruise_override = False def update_summon_state(self, summon_state: str, cruise_enabled: bool): @@ -154,7 +159,9 @@ class CarState(CarStateBase, CarStateExt): if TESLA_BLINKERS and Bus.cam in can_parsers: self.das_body_controls_dat = bytes(can_parsers[Bus.cam].dat.get(0x3E9, b"")) - CarStateExt.update(self, ret, ret_iq, can_parsers) + IQCarState.update(self, ret, ret_iq, can_parsers) + if ret.odometer > 0.0: + ret.odometer = self._odometer_store.record(ret.odometer) or 0.0 return ret, ret_iq @@ -163,7 +170,7 @@ class CarState(CarStateBase, CarStateExt): parsers = { Bus.party: CANParser(DBC[CP.carFingerprint][Bus.party], [], CANBUS.party), Bus.ap_party: CANParser(DBC[CP.carFingerprint][Bus.party], [], CANBUS.autopilot_party), - **CarStateExt.get_parser(CP, CP_IQ), + **IQCarState.get_parser(CP, CP_IQ), } # Stock DAS_bodyControls from the AP bus (bus 2) for the nav blinker. if TESLA_BLINKERS and CP_IQ.flags & TeslaFlagsIQ.HAS_VEHICLE_BUS and Bus.adas in DBC[CP.carFingerprint]: diff --git a/iqdbc_repo/iqdbc/car/tesla/interface.py b/iqdbc_repo/iqdbc/car/tesla/interface.py index e2c2a086e..1f292c5c9 100644 --- a/iqdbc_repo/iqdbc/car/tesla/interface.py +++ b/iqdbc_repo/iqdbc/car/tesla/interface.py @@ -5,7 +5,7 @@ from iqdbc.car.tesla.carstate import CarState from iqdbc.car.tesla.values import TeslaSafetyFlags, TeslaFlags, CANBUS, CAR, DBC, LEGACY_DAS_STEERING_FW, Ecu from iqdbc.car.tesla.radar_interface import RadarInterface, RADAR_START_ADDR -from iqdbc.iqpilot.car.tesla.values import TeslaFlagsIQ, TeslaSafetyFlagsIQ +from iqdbc.lvbs.car.tesla.values import TeslaFlagsIQ, TeslaSafetyFlagsIQ class CarInterface(CarInterfaceBase): @@ -59,7 +59,10 @@ class CarInterface(CarInterfaceBase): if candidate == CAR.TESLA_MODEL_X: stock_cp.dashcamOnly = False - if 0x3DF in fingerprint[1]: + # Vehicle-bus messages can be slow enough to miss the initial capture window. + # Accept either the established 0x3DF marker or the absolute odometer frame. + vehicle_bus_seen = any(0x3DF in bus or 0x3B6 in bus for bus in fingerprint.values()) + if vehicle_bus_seen: ret.flags |= TeslaFlagsIQ.HAS_VEHICLE_BUS.value ret.iqSafetyFlags |= TeslaSafetyFlagsIQ.HAS_VEHICLE_BUS diff --git a/iqdbc_repo/iqdbc/car/tesla/tests/test_tesla.py b/iqdbc_repo/iqdbc/car/tesla/tests/test_tesla.py index b36db0dea..c9bb75fe9 100644 --- a/iqdbc_repo/iqdbc/car/tesla/tests/test_tesla.py +++ b/iqdbc_repo/iqdbc/car/tesla/tests/test_tesla.py @@ -4,6 +4,7 @@ from iqdbc.car.tesla.teslacan import TeslaCAN from iqdbc.car.tesla.radar_interface import RADAR_START_ADDR from iqdbc.car.tesla.carcontroller import CarController from iqdbc.car.tesla.values import CAR +from iqdbc.can import CANPacker, CANParser class TestTeslaFingerprint: @@ -31,6 +32,19 @@ class TestTeslaCan: def make_can_msg(self, name, bus, values): return name, bus, values + def test_vehicle_bus_odometer_decodes_kilometers(self): + packer = CANPacker("tesla_model3_vehicle") + parser = CANParser("tesla_model3_vehicle", [("ID3B6UI_odometer", 1)], 1) + + message = packer.make_can_msg("ID3B6UI_odometer", 1, { + "UI_odometer": 29150.377, + "UI_odometerCounter": 1, + "UI_odometerChecksum": 0, + }) + parser.update([1_000_000_000, [message]]) + + assert parser.vl["ID3B6UI_odometer"]["UI_odometer"] == 29150.377 + def test_longitudinal_command_does_not_reference_missing_jerk_attr(self): CP = CarInterface.get_non_essential_params(CAR.TESLA_MODEL_3) tesla_can = TeslaCAN(CP, self.DummyPacker()) diff --git a/iqdbc_repo/iqdbc/car/torque_data/override.toml b/iqdbc_repo/iqdbc/car/torque_data/override.toml index cbd80dea0..e7b2cfeac 100644 --- a/iqdbc_repo/iqdbc/car/torque_data/override.toml +++ b/iqdbc_repo/iqdbc/car/torque_data/override.toml @@ -7,9 +7,6 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "NISSAN_LEAF" = [nan, 1.5, nan] "NISSAN_ROGUE" = [nan, 1.5, nan] -# PSA angle based controllers -"PSA_PEUGEOT_208" = [nan, 2.0, nan] - # New subarus angle based controllers "SUBARU_FORESTER_2022" = [nan, 3.0, nan] "SUBARU_OUTBACK_2023" = [nan, 3.0, nan] @@ -21,14 +18,11 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] # Tesla angle based controllers "TESLA_MODEL_3" = [nan, 2.5, nan] "TESLA_MODEL_Y" = [nan, 2.5, nan] -"TESLA_MODEL_X" = [nan, 2.5, nan] # Guess "FORD_BRONCO_SPORT_MK1" = [nan, 1.5, nan] "FORD_ESCAPE_MK4" = [nan, 1.5, nan] -"FORD_ESCAPE_MK4_5" = [nan, 1.5, nan] "FORD_EXPLORER_MK6" = [nan, 1.5, nan] -"FORD_EXPEDITION_MK4" = [nan, 1.5, nan] "FORD_F_150_MK14" = [nan, 1.5, nan] "FORD_FOCUS_MK4" = [nan, 1.5, nan] "FORD_MAVERICK_MK1" = [nan, 1.5, nan] @@ -44,30 +38,23 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "RAM_1500_5TH_GEN" = [2.0, 2.0, 0.05] "RAM_HD_5TH_GEN" = [1.4, 1.4, 0.05] "SUBARU_OUTBACK" = [2.0, 1.5, 0.2] +"BUICK_BABYENCLAVE" = [1.45, 1.6, 0.2] "CADILLAC_ESCALADE" = [1.899999976158142, 1.842270016670227, 0.1120000034570694] "CADILLAC_ESCALADE_ESV_2019" = [1.15, 1.3, 0.2] "CADILLAC_XT4" = [1.45, 1.6, 0.2] -"CHEVROLET_BOLT_EUV" = [1.0, 2.0, 0.175] +"CHEVROLET_BOLT_EUV" = [2.0, 2.0, 0.05] +"CHEVROLET_MALIBU_CC" = [1.85, 1.85, 0.075] "CHEVROLET_SILVERADO" = [1.9, 1.9, 0.112] "CHEVROLET_TRAILBLAZER" = [1.33, 1.9, 0.16] "CHEVROLET_TRAVERSE" = [1.33, 1.33, 0.18] "CHEVROLET_EQUINOX" = [2.5, 2.5, 0.05] "CHEVROLET_VOLT_2019" = [1.4, 1.4, 0.16] -"VOLKSWAGEN_GOLF_MK8" = [nan, 2.5, nan] -"CUPRA_BORN_MK1" = [nan, 2.5, nan] -"VOLKSWAGEN_ID3_MK1" = [nan, 2.5, nan] -"VOLKSWAGEN_ID3_MK2" = [nan, 2.5, nan] -"VOLKSWAGEN_ID4_MK1" = [nan, 2.5, nan] -"VOLKSWAGEN_ID4_MK2" = [nan, 2.5, nan] -"AUDI_Q4_MK1" = [nan, 2.5, nan] -"AUDI_Q4_MK2" = [nan, 2.5, nan] -"SEAT_LEON_MK4" = [nan, 2.5, nan] -"SKODA_ENYAQ_MK1" = [nan, 2.5, nan] -"SKODA_ENYAQ_MK2" = [nan, 2.5, nan] +"CHEVROLET_TRAX" = [1.33, 1.9, 0.16] +"VOLKSWAGEN_ID4_MK1" = [2.0, 2.0, 0.1] +"VOLKSWAGEN_ID4_MK2" = [2.0, 2.0, 0.1] "VOLKSWAGEN_CADDY_MK3" = [1.2, 1.2, 0.1] "VOLKSWAGEN_PASSAT_NMS" = [2.5, 2.5, 0.1] "VOLKSWAGEN_SHARAN_MK2" = [2.5, 2.5, 0.1] -"SEAT_ALHAMBRA_MK1" = [2.5, 2.5, 0.1] "HYUNDAI_SANTA_CRUZ_1ST_GEN" = [2.7, 2.7, 0.1] "KIA_SPORTAGE_5TH_GEN" = [2.6, 2.6, 0.1] "GENESIS_GV70_1ST_GEN" = [2.42, 2.42, 0.1] @@ -82,33 +69,22 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "GMC_ACADIA" = [1.6, 1.6, 0.2] "LEXUS_IS_TSS2" = [2.0, 2.0, 0.1] "HYUNDAI_KONA_EV_2ND_GEN" = [2.5, 2.5, 0.1] +"HYUNDAI_KONA_HEV_2ND_GEN" = [2.5, 2.5, 0.1] "HYUNDAI_IONIQ_6" = [2.5, 2.5, 0.005] +"HYUNDAI_IONIQ_9" = [1.75, 1.75, 0.15] +"HYUNDAI_AZERA_7TH_GEN" = [1.8, 1.8, 0.1] "HYUNDAI_AZERA_6TH_GEN" = [1.8, 1.8, 0.1] "HYUNDAI_AZERA_HEV_6TH_GEN" = [1.8, 1.8, 0.1] "KIA_K8_HEV_1ST_GEN" = [2.5, 2.5, 0.1] "HYUNDAI_CUSTIN_1ST_GEN" = [2.5, 2.5, 0.1] "LEXUS_GS_F" = [2.5, 2.5, 0.08] "HYUNDAI_STARIA_4TH_GEN" = [1.8, 2.0, 0.15] +"HYUNDAI_PORTER_II_EV" = [1.8, 2.0, 0.15] +"KIA_RAY_EV" = [1.8, 2.0, 0.15] "GENESIS_GV70_ELECTRIFIED_1ST_GEN" = [1.9, 1.9, 0.09] "GENESIS_G80_2ND_GEN_FL" = [2.5819356441497803, 2.5, 0.11244568973779678] -# Note that some Rivians achieve significantly less lateral acceleration than this "RIVIAN_R1_GEN1" = [2.8, 2.5, 0.07] "HYUNDAI_NEXO_1ST_GEN" = [2.5, 2.5, 0.1] -"HONDA_ACCORD_11G" = [1.35, 1.35, 0.17] -"HONDA_PILOT_4G" = [1.25, 1.25, 0.21] -"HONDA_PASSPORT_4G" = [1.2, 1.2, 0.16] -"ACURA_MDX_4G_MMR" = [1.25, 1.25, 0.15] -"HONDA_CRV_6G" = [1.3, 1.3, 0.2] -"HONDA_CITY_7G" = [1.2, 1.2, 0.23] -"HONDA_ODYSSEY_5G_MMR" = [0.9, 0.9, 0.2] -"HONDA_NBOX_2G" = [1.2, 1.2, 0.2] -"ACURA_TLX_2G" = [1.2, 1.2, 0.15] -"ACURA_TLX_2G_MMR" = [1.7, 1.7, 0.16] -"PORSCHE_MACAN_MK1" = [2.0, 2.0, 0.2] -"AUDI_Q5_MK1" = [1.8, 1.8, 0.18] -"LEXUS_LS" = [1.35, 1.7, 0.17] -"TOYOTA_RAV4_PRIME" = [1.7, 2.0, 0.14] -"TOYOTA_RAV4_TSS2_2022" = [1.9, 1.9304407208090029, 0.112174] # Dashcam or fallback configured as ideal car "MOCK" = [10.0, 10, 0.0] @@ -117,6 +93,46 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "HONDA_CIVIC_2022" = [2.5, 1.2, 0.15] "HONDA_HRV_3G" = [2.5, 1.2, 0.2] -# port extensions -"HONDA_CLARITY" = [0.96, 0.4018518740819229, 0.19] -"CHEVROLET_MALIBU_NON_ACC_9TH_GEN" = [1.85, 1.85, 0.075] +# Community +"HYUNDAI_GRANDEUR_IG" = [2.3, 2.3, 0.1] +"HYUNDAI_GRANDEUR_IG_HEV" = [2.3, 2.3, 0.1] +"GENESIS_EQ900" = [2.3, 2.3, 0.1] +"GENESIS_EQ900_L" = [2.3, 2.3, 0.1] +"GENESIS_G90_2019" = [2.3, 2.3, 0.1] +"KIA_MOHAVE" = [2.3, 2.3, 0.1] +"KIA_K5" = [2.3, 2.3, 0.1] +"KIA_K5_HEV" = [2.3, 2.3, 0.1] +"KIA_K5_HEV_2022" = [2.3, 2.3, 0.1] +"KIA_K7" = [2.3, 2.3, 0.1] +"KIA_K7_HEV" = [2.3, 2.3, 0.1] +"KIA_K7_PE" = [2.3, 2.3, 0.1] +"KIA_K7_HEV_PE" = [2.3, 2.3, 0.1] +"KIA_K9" = [2.3, 2.3, 0.1] +"GENESIS_GV70_EV_1ST_GEN" = [2.42, 2.42, 0.1] +"HYUNDAI_NEXO" = [2.7, 2.7, 0.1] +"KIA_EV_SK3" = [2.5, 2.5, 0.1] +"HYUNDAI_CASPER"= [2.5, 2.5, 0.1] +"HYUNDAI_CASPER_EV"= [2.5, 2.5, 0.1] +"HYUNDAI_IONIQ_5_N" = [3.17, 2.71, 0.097] +"HYUNDAI_IONIQ_5_PE" = [1.75, 1.75, 0.15] + +# Synced verbatim from comma opendbc torque_data/override.toml — these platforms +# exist upstream and were simply never carried over when iqdbc forked. +ACURA_MDX_4G_MMR = [1.25, 1.25, 0.15] +ACURA_TLX_2G = [1.2, 1.2, 0.15] +ACURA_TLX_2G_MMR = [1.7, 1.7, 0.16] +AUDI_Q5_MK1 = [1.8, 1.8, 0.18] +CUPRA_BORN_MK1 = [nan, 2.5, nan] +FORD_ESCAPE_MK4_5 = [nan, 1.5, nan] +FORD_EXPEDITION_MK4 = [nan, 1.5, nan] +HONDA_ACCORD_11G = [1.35, 1.35, 0.17] +HONDA_CITY_7G = [1.2, 1.2, 0.23] +HONDA_CRV_6G = [1.3, 1.3, 0.2] +HONDA_NBOX_2G = [1.2, 1.2, 0.2] +HONDA_ODYSSEY_5G_MMR = [0.9, 0.9, 0.2] +HONDA_PASSPORT_4G = [1.2, 1.2, 0.16] +HONDA_PILOT_4G = [1.25, 1.25, 0.21] +LEXUS_LS = [1.35, 1.7, 0.17] +PORSCHE_MACAN_MK1 = [2.0, 2.0, 0.2] +PSA_PEUGEOT_208 = [nan, 2.0, nan] +TESLA_MODEL_X = [nan, 2.5, nan] diff --git a/iqdbc_repo/iqdbc/car/torque_data/params.toml b/iqdbc_repo/iqdbc/car/torque_data/params.toml index 1fbabf6f7..1f563755b 100644 --- a/iqdbc_repo/iqdbc/car/torque_data/params.toml +++ b/iqdbc_repo/iqdbc/car/torque_data/params.toml @@ -37,13 +37,21 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "HYUNDAI_SONATA" = [2.9638737459977467, 2.1259108157250735, 0.07813665616927593] "HYUNDAI_SONATA_HYBRID" = [2.8990264092395734, 2.061410192222139, 0.0899805488717382] "HYUNDAI_TUCSON_4TH_GEN" = [2.960174, 2.860284, 0.108745] +"HYUNDAI_SANTAFE_MX5" = [3.2, 3.0, 0.05] +"HYUNDAI_SANTAFE_MX5_HEV" = [3.2, 3.0, 0.05] "JEEP_GRAND_CHEROKEE_2019" = [2.30972, 1.289689569171081, 0.117048] "JEEP_GRAND_CHEROKEE" = [2.27116, 1.4057367824262523, 0.11725947414922003] "KIA_EV6" = [3.2, 2.093457, 0.005] +"KIA_EV6_PE" = [3.2, 2.093457, 0.005] "KIA_K5_2021" = [2.405339728085138, 1.460032270828705, 0.11650989850813716] +"KIA_K5_DL3_24" = [2.5, 2.5, 0.1] +"KIA_K5_DL3_24_HEV" = [2.5, 2.5, 0.1] "KIA_NIRO_EV" = [2.9215954981365337, 2.1500583840260044, 0.09236802474810267] "KIA_SORENTO" = [2.464854685101844, 1.5335274218367956, 0.12056170567599558] "KIA_STINGER" = [2.7499043387418967, 1.849652021986449, 0.12048334239559202] +"KIA_EV9" = [1.75, 1.75, 0.15] +"KIA_EV3" = [3.2, 2.093457, 0.005] +"KIA_PV5" = [3.2, 2.093457, 0.005] "LEXUS_ES_TSS2" = [2.0357564999999997, 1.999082295195227, 0.101533] "LEXUS_NX" = [2.3525924753753613, 1.9731412277641067, 0.15168101064205927] "LEXUS_NX_TSS2" = [2.4331999786982936, 2.1045680431705414, 0.14099899317761067] @@ -69,8 +77,9 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "TOYOTA_PRIUS" = [1.60, 1.5023147650693636, 0.151515] "TOYOTA_PRIUS_TSS2" = [1.972600, 1.9104337425537743, 0.170968] "TOYOTA_RAV4" = [2.085695074355425, 2.2142832316984733, 0.13339165270103975] -"TOYOTA_RAV4_TSS2" = [1.9557514786720276, 2.087101966779332, 0.12075843289494514] +"TOYOTA_RAV4_TSS2" = [2.279239424615458, 2.087101966779332, 0.13682208413446817] "TOYOTA_RAV4H" = [1.9796257271652042, 1.7503987331707576, 0.14628860048885406] +"TOYOTA_RAV4_TSS2_2022" = [2.241883248393209, 1.9304407208090029, 0.112174] "TOYOTA_SIENNA" = [1.689726, 1.3208264576110418, 0.140456] "TOYOTA_YARIS" = [2.22984, 1.86145, 0.168189] "VOLKSWAGEN_ARTEON_MK1" = [1.45136518053819, 1.3639364049316804, 0.23806361745695032] diff --git a/iqdbc_repo/iqdbc/car/torque_data/substitute.toml b/iqdbc_repo/iqdbc/car/torque_data/substitute.toml index 4070b8484..a5f5c301f 100644 --- a/iqdbc_repo/iqdbc/car/torque_data/substitute.toml +++ b/iqdbc_repo/iqdbc/car/torque_data/substitute.toml @@ -9,12 +9,12 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "TOYOTA_ALPHARD_TSS2" = "TOYOTA_SIENNA" "TOYOTA_PRIUS_V" = "TOYOTA_PRIUS" -"TOYOTA_SIENNA_4TH_GEN" = "TOYOTA_RAV4_PRIME" +"TOYOTA_RAV4_PRIME" = "TOYOTA_RAV4_TSS2" +"TOYOTA_SIENNA_4TH_GEN" = "TOYOTA_RAV4_TSS2" "LEXUS_IS" = "LEXUS_NX" "LEXUS_CTH" = "LEXUS_NX" "LEXUS_ES" = "TOYOTA_CAMRY" "LEXUS_RC" = "LEXUS_NX_TSS2" -"LEXUS_RC_TSS2" = "LEXUS_NX_TSS2" "LEXUS_LC_TSS2" = "LEXUS_NX_TSS2" "KIA_OPTIMA_G4" = "HYUNDAI_SONATA" @@ -25,6 +25,7 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "KIA_CEED" = "HYUNDAI_SONATA" "KIA_SELTOS" = "HYUNDAI_SONATA" "KIA_NIRO_PHEV" = "KIA_NIRO_EV" +"KIA_EV4" = "KIA_EV6" "KIA_NIRO_PHEV_2022" = "KIA_NIRO_EV" "KIA_NIRO_HEV_2021" = "KIA_NIRO_EV" "HYUNDAI_VELOSTER" = "HYUNDAI_SONATA_LF" @@ -45,12 +46,13 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "GENESIS_G90" = "GENESIS_G70" "GENESIS_G80" = "GENESIS_G70" "GENESIS_G70_2020" = "HYUNDAI_SONATA" +"HYUNDAI_SONATA_2024" = "HYUNDAI_SONATA" "HONDA_FREED" = "HONDA_ODYSSEY" "HONDA_CRV_EU" = "HONDA_CRV" "HONDA_CIVIC_BOSCH_DIESEL" = "HONDA_CIVIC_BOSCH" "HONDA_E" = "HONDA_CIVIC_BOSCH" -"HONDA_ODYSSEY_TWN" = "HONDA_ODYSSEY" +"HONDA_ODYSSEY_CHN" = "HONDA_ODYSSEY" "BUICK_LACROSSE" = "CHEVROLET_VOLT" "BUICK_REGAL" = "CHEVROLET_VOLT" @@ -58,6 +60,18 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "CADILLAC_ATS" = "CHEVROLET_VOLT" "CHEVROLET_MALIBU" = "CHEVROLET_VOLT" "HOLDEN_ASTRA" = "CHEVROLET_VOLT" +"CHEVROLET_VOLT_CC" = "CHEVROLET_VOLT" +"CHEVROLET_BOLT_CC" = "CHEVROLET_BOLT_EUV" +"CHEVROLET_BOLT_2017" = "CHEVROLET_BOLT_EUV" +"CHEVROLET_BOLT_2018" = "CHEVROLET_BOLT_EUV" +"CHEVROLET_EQUINOX_CC" = "CHEVROLET_EQUINOX" +"CHEVROLET_SUBURBAN" = "CHEVROLET_SILVERADO" +"CHEVROLET_SUBURBAN_CC" = "CHEVROLET_SILVERADO" +"CHEVROLET_TRAX_2024" = "CHEVROLET_VOLT" +"CADILLAC_CT6_CC" = "CHEVROLET_VOLT" +"CADILLAC_CT6_ACC" = "CHEVROLET_VOLT" +"CHEVROLET_TRAILBLAZER_CC" = "CHEVROLET_TRAILBLAZER" +"CADILLAC_XT5_CC" = "GMC_ACADIA" "SKODA_FABIA_MK4" = "VOLKSWAGEN_GOLF_MK7" "SKODA_OCTAVIA_MK3" = "SKODA_SUPERB_MK3" @@ -74,9 +88,6 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "VOLKSWAGEN_POLO_MK6" = "VOLKSWAGEN_GOLF_MK7" "SEAT_ATECA_MK1" = "VOLKSWAGEN_GOLF_MK7" "VOLKSWAGEN_JETTA_MK6" = "VOLKSWAGEN_PASSAT_NMS" -"VOLKSWAGEN_PASSAT_MK7" = "VOLKSWAGEN_PASSAT_NMS" -"VOLKSWAGEN_PASSAT_NMS_PLUS" = "VOLKSWAGEN_PASSAT_NMS" -"VOLKSWAGEN_PASSAT_B7" = "VOLKSWAGEN_PASSAT_NMS" "SUBARU_CROSSTREK_HYBRID" = "SUBARU_IMPREZA_2020" "SUBARU_FORESTER_HYBRID" = "SUBARU_IMPREZA_2020" @@ -89,21 +100,34 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "SUBARU_LEGACY_PREGLOBAL" = "SUBARU_IMPREZA" "SUBARU_ASCENT" = "SUBARU_FORESTER" -# port extensions -"KIA_CEED_PHEV_2022_NON_SCC" = "HYUNDAI_SONATA" -"HYUNDAI_KONA_EV_NON_SCC" = "HYUNDAI_KONA_EV" -"KIA_FORTE_2019_NON_SCC" = "HYUNDAI_SONATA" -"KIA_FORTE_2021_NON_SCC" = "HYUNDAI_SONATA" -"KIA_SELTOS_2023_NON_SCC" = "HYUNDAI_SONATA" -"HYUNDAI_KONA_NON_SCC" = "HYUNDAI_KONA_EV" -"HYUNDAI_ELANTRA_2022_NON_SCC" = "HYUNDAI_ELANTRA_2021" -"GENESIS_G70_2021_NON_SCC" = "HYUNDAI_SONATA" -"HYUNDAI_BAYON_1ST_GEN_NON_SCC" = "HYUNDAI_SONATA" -"CHEVROLET_BOLT_NON_ACC_2ND_GEN" = "CHEVROLET_BOLT_EUV" +# IQ.Pilot GM Non-ACC ports borrow their base platform's lateral tune "CHEVROLET_BOLT_NON_ACC" = "CHEVROLET_BOLT_EUV" "CHEVROLET_BOLT_NON_ACC_1ST_GEN" = "CHEVROLET_BOLT_EUV" +"CHEVROLET_BOLT_NON_ACC_2ND_GEN" = "CHEVROLET_BOLT_EUV" "CHEVROLET_EQUINOX_NON_ACC_3RD_GEN" = "CHEVROLET_EQUINOX" "CHEVROLET_SUBURBAN_NON_ACC_11TH_GEN" = "CHEVROLET_SILVERADO" "CADILLAC_CT6_NON_ACC_1ST_GEN" = "CHEVROLET_VOLT" "CHEVROLET_TRAILBLAZER_NON_ACC_2ND_GEN" = "CHEVROLET_TRAILBLAZER" -"CADILLAC_XT5_NON_ACC_1ST_GEN" = "GMC_ACADIA" +"CHEVROLET_MALIBU_NON_ACC_9TH_GEN" = "CHEVROLET_VOLT" +"CADILLAC_XT5_NON_ACC_1ST_GEN" = "CADILLAC_XT4" + +# Synced verbatim from comma opendbc torque_data/substitute.toml +"HONDA_ODYSSEY_TWN" = "HONDA_ODYSSEY" +"LEXUS_RC_TSS2" = "LEXUS_NX_TSS2" + +# Platform-sibling substitutes: comma has never shipped torque data for these, +# so rather than invent lateral-accel figures they borrow the tune of the closest +# platform twin. REVIEW: replace with measured values when available. +"SEAT_ALHAMBRA_MK1" = "VOLKSWAGEN_SHARAN_MK2" +"VOLKSWAGEN_PASSAT_NMS_PLUS" = "VOLKSWAGEN_PASSAT_NMS" +"VOLKSWAGEN_ID3_MK1" = "VOLKSWAGEN_ID4_MK1" +"VOLKSWAGEN_ID3_MK2" = "VOLKSWAGEN_ID4_MK2" +"SKODA_ENYAQ_MK1" = "VOLKSWAGEN_ID4_MK1" +"SKODA_ENYAQ_MK2" = "VOLKSWAGEN_ID4_MK2" +"AUDI_Q4_MK1" = "VOLKSWAGEN_ID4_MK1" +"AUDI_Q4_MK2" = "VOLKSWAGEN_ID4_MK2" +"VOLKSWAGEN_GOLF_MK8" = "VOLKSWAGEN_GOLF_MK7" +"SEAT_LEON_MK4" = "VOLKSWAGEN_GOLF_MK7" +"VOLKSWAGEN_PASSAT_MK7" = "VOLKSWAGEN_PASSAT_NMS" +"VOLKSWAGEN_PASSAT_B7" = "VOLKSWAGEN_PASSAT_NMS" +"HONDA_CLARITY" = "HONDA_ACCORD" diff --git a/iqdbc_repo/iqdbc/car/toyota/carcontroller.py b/iqdbc_repo/iqdbc/car/toyota/carcontroller.py index cf0205d57..04fb4dbcc 100644 --- a/iqdbc_repo/iqdbc/car/toyota/carcontroller.py +++ b/iqdbc_repo/iqdbc/car/toyota/carcontroller.py @@ -13,8 +13,8 @@ from iqdbc.car.toyota.values import CAR, NO_STOP_TIMER_CAR, TSS2_CAR, \ UNSUPPORTED_DSU_CAR from iqdbc.can import CANPacker -from iqdbc.iqpilot.car.toyota.gas_interceptor import GasInterceptorCarController -from iqdbc.iqpilot.car.toyota.values import ToyotaFlagsIQ +from iqdbc.lvbs.car.toyota.gas_interceptor import GasInterceptorCarController +from iqdbc.lvbs.car.toyota.values import ToyotaFlagsIQ Ecu = structs.CarParams.Ecu LongCtrlState = structs.CarControl.Actuators.LongControlState diff --git a/iqdbc_repo/iqdbc/car/toyota/carstate.py b/iqdbc_repo/iqdbc/car/toyota/carstate.py index fc95f41fe..8300e29ba 100644 --- a/iqdbc_repo/iqdbc/car/toyota/carstate.py +++ b/iqdbc_repo/iqdbc/car/toyota/carstate.py @@ -8,8 +8,8 @@ from iqdbc.car.interfaces import CarStateBase from iqdbc.car.toyota.values import ToyotaFlags, CAR, DBC, STEER_THRESHOLD, NO_STOP_TIMER_CAR, \ TSS2_CAR, RADAR_ACC_CAR, EPS_SCALE, UNSUPPORTED_DSU_CAR, \ SECOC_CAR -from iqdbc.iqpilot.car.toyota.carstate_ext import CarStateExt -from iqdbc.iqpilot.car.toyota.values import ToyotaFlagsIQ +from iqdbc.lvbs.car.toyota.iq_carstate import IQCarState +from iqdbc.lvbs.car.toyota.values import ToyotaFlagsIQ ButtonType = structs.CarState.ButtonEvent.Type SteerControlType = structs.CarParams.SteerControlType @@ -26,10 +26,10 @@ TEMP_STEER_FAULTS = (0, 9, 11, 21, 25) PERM_STEER_FAULTS = (3, 17) -class CarState(CarStateBase, CarStateExt): +class CarState(CarStateBase, IQCarState): def __init__(self, CP, CP_IQ): CarStateBase.__init__(self, CP, CP_IQ) - CarStateExt.__init__(self, CP, CP_IQ) + IQCarState.__init__(self, CP, CP_IQ) can_define = CANDefine(DBC[CP.carFingerprint][Bus.pt]) self.eps_torque_scale = EPS_SCALE[CP.carFingerprint] / 100. self.cluster_speed_hyst_gap = CV.KPH_TO_MS / 2. @@ -210,7 +210,7 @@ class CarState(CarStateBase, CarStateExt): ret.buttonEvents = buttonEvents - CarStateExt.update(self, ret, ret_iq, can_parsers) + IQCarState.update(self, ret, ret_iq, can_parsers) return ret, ret_iq diff --git a/iqdbc_repo/iqdbc/car/toyota/fingerprints.py b/iqdbc_repo/iqdbc/car/toyota/fingerprints.py index 3f1348a9b..582f31427 100644 --- a/iqdbc_repo/iqdbc/car/toyota/fingerprints.py +++ b/iqdbc_repo/iqdbc/car/toyota/fingerprints.py @@ -2,8 +2,8 @@ from iqdbc.car.structs import CarParams from iqdbc.car.toyota.values import CAR -from iqdbc.iqpilot.car.fingerprints_ext import merge_fw_versions -from iqdbc.iqpilot.car.toyota.fingerprints_ext import FW_VERSIONS_EXT +from iqdbc.lvbs.car.iq_fingerprints import extend_fw_versions +from iqdbc.lvbs.car.toyota.iq_fingerprints import FW_VERSIONS_EXT Ecu = CarParams.Ecu @@ -1889,4 +1889,4 @@ FW_VERSIONS = { }, } -FW_VERSIONS = merge_fw_versions(FW_VERSIONS, FW_VERSIONS_EXT) +FW_VERSIONS = extend_fw_versions(FW_VERSIONS, FW_VERSIONS_EXT) diff --git a/iqdbc_repo/iqdbc/car/toyota/interface.py b/iqdbc_repo/iqdbc/car/toyota/interface.py index 4f067adf4..865de2f70 100644 --- a/iqdbc_repo/iqdbc/car/toyota/interface.py +++ b/iqdbc_repo/iqdbc/car/toyota/interface.py @@ -7,7 +7,7 @@ from iqdbc.car.toyota.values import Ecu, CAR, DBC, ToyotaFlags, CarControllerPar ToyotaSafetyFlags, UNSUPPORTED_DSU_CAR from iqdbc.car.disable_ecu import disable_ecu from iqdbc.car.interfaces import CarInterfaceBase -from iqdbc.iqpilot.car.toyota.values import ToyotaFlagsIQ, ToyotaSafetyFlagsIQ +from iqdbc.lvbs.car.toyota.values import ToyotaFlagsIQ, ToyotaSafetyFlagsIQ SteerControlType = structs.CarParams.SteerControlType diff --git a/iqdbc_repo/iqdbc/car/toyota/tests/test_toyota_iq.py b/iqdbc_repo/iqdbc/car/toyota/tests/test_toyota_iq.py index 2c2156aa1..1004a9d70 100644 --- a/iqdbc_repo/iqdbc/car/toyota/tests/test_toyota_iq.py +++ b/iqdbc_repo/iqdbc/car/toyota/tests/test_toyota_iq.py @@ -1,7 +1,7 @@ from iqdbc.car import gen_empty_fingerprint, structs from iqdbc.car.toyota.interface import CarInterface from iqdbc.car.toyota.values import CAR, ToyotaFlags -from iqdbc.iqpilot.car.toyota.values import ToyotaFlagsIQ +from iqdbc.lvbs.car.toyota.values import ToyotaFlagsIQ def test_secoc_toyota_not_dashcam_on_release(): diff --git a/iqdbc_repo/iqdbc/car/volkswagen/carstate.py b/iqdbc_repo/iqdbc/car/volkswagen/carstate.py index f702af736..fff79573d 100644 --- a/iqdbc_repo/iqdbc/car/volkswagen/carstate.py +++ b/iqdbc_repo/iqdbc/car/volkswagen/carstate.py @@ -15,6 +15,7 @@ from iqdbc.car.volkswagen.speed_limit_manager import SpeedLimitManager from openpilot.system.proprietary_runtime._verified_import import import_verified_module iq_lvbs_alc = import_verified_module("iqpilot_alc_private", "iqpilot_private.konn3kt.iqlvbs.alc") +vehicle_state = import_verified_module("iqpilot_alc_private", "iqpilot_private.konn3kt.iqlvbs.vehicle_state") iqpilot_path = os.path.join(os.path.dirname(__file__), '..', '..', '..') sys.path.insert(0, iqpilot_path) @@ -100,8 +101,15 @@ class CarState(CarStateBase): self.cruise_main_switch = False self.motor3_stock = {} self.motor1_stock = {} - self.motor1_frame = 0 self.motor3_frame = 0 + self.motor1_frame = 0 + self._odometer_store = vehicle_state.VehicleOdometerStore(CP, self._params) + + def _update_odometer(self, ret: structs.CarState, raw_km: float) -> None: + """Publish the cluster value while proprietary Konn3kt code owns persistence.""" + odometer_km = self._odometer_store.record(raw_km) + if odometer_km is not None: + ret.odometer = odometer_km def _apply_iq_private_flags(self, ret_iq: structs.IQCarState) -> None: ret_iq.alcOverrideAlert = bool(self.alcOverrideAlert) @@ -285,6 +293,7 @@ class CarState(CarStateBase): ret.fuelGauge = pt_cp.vl["Kombi_02"]["KBI_Inhalt_Tank"] / 55.0 ret.fuelTankLevelL = pt_cp.vl["Kombi_02"]["KBI_Inhalt_Tank"] # raw liters for konn3kt + self._update_odometer(ret, pt_cp.vl["Kombi_02"]["KBI_Kilometerstand"]) self.cruise_faulted = ret.accFaulted self._apply_iq_private_flags(ret_iq) @@ -400,6 +409,7 @@ class CarState(CarStateBase): psd_06_values = main_cp.vl["PSD_06"] if self.CP.flags & VolkswagenFlags.STOCK_PSD_PRESENT else {} psd_06_values = pt_cp.vl["PSD_06"] if not psd_06_values and self.CP.flags & VolkswagenFlags.STOCK_PSD_06_PRESENT else psd_06_values diagnose_01_values = pt_cp.vl["Diagnose_01"] if self.CP.flags & VolkswagenFlags.STOCK_DIAGNOSE_01_PRESENT else {} + self._update_odometer(ret, pt_cp.vl["Diagnose_01"]["KBI_Kilometerstand"]) if self.enable_speed_limit_predicative and not self.enable_predicative_speed_limit: self.enable_predicative_speed_limit = True @@ -494,7 +504,7 @@ class CarState(CarStateBase): ret.gasPressed = pt_cp.vl["Motor_3"]["MO3_Pedalwert"] > 0 ret.brake = pt_cp.vl["Bremse_5"]["BR5_Bremsdruck"] / 250.0 # FIXME: this is pressure in Bar, not sure what OP expects ret.brakePressed = bool(pt_cp.vl["Motor_2"]["MO2_BLS"]) - ret.parkingBrake = False # bool(pt_cp.vl["Kombi_1"]["Bremsinfo"]) + ret.parkingBrake = bool(pt_cp.vl["Kombi_1"]["Bremsinfo"]) # Update gear and/or clutch position data. if self.CP.transmissionType == TransmissionType.automatic: @@ -629,8 +639,10 @@ class CarState(CarStateBase): ret.lowSpeedAlert = self.update_low_speed_alert(ret.vEgo) - ret.fuelGauge = 0 # pt_cp.vl["Kombi_1"]["Tankinhalt"] / 55.0 - ret.fuelTankLevelL = 0 # pt_cp.vl["Kombi_1"]["Tankinhalt"] # raw liters for konn3kt + ret.fuelGauge = pt_cp.vl["Kombi_1"]["Tankinhalt"] / 55.0 + ret.fuelTankLevelL = pt_cp.vl["Kombi_1"]["Tankinhalt"] # raw liters for konn3kt + if aux_cp is not None: + self._update_odometer(ret, aux_cp.vl["Kombi_3"]["Kilometerstand"]) if self.CP.flags & VolkswagenFlagsIQ.IQ_PQ_ACC_FTS_EPB: ret.cruiseState.standstill = self.CP.pcmCruise and bool(pt_cp.vl["Bremse_5"]["BR5_Stillstand"]) and ret.cruiseState.enabled @@ -706,6 +718,7 @@ class CarState(CarStateBase): ret.fuelGauge = br_cp.vl["Kombi_02"]["KBI_Inhalt_Tank"] / 55.0 ret.fuelTankLevelL = br_cp.vl["Kombi_02"]["KBI_Inhalt_Tank"] # raw liters for konn3kt + self._update_odometer(ret, br_cp.vl["Kombi_02"]["KBI_Kilometerstand"]) ret.buttonEvents = self.create_button_events(pt_cp, self.CCP.BUTTONS) @@ -794,8 +807,11 @@ class CarState(CarStateBase): ] if CP.flags & VolkswagenFlags.MLB: pt_messages += [ - ("Blinkmodi_01", math.nan) # From J519 BCM (is inactive when no lights active, 50Hz when active) + ("Blinkmodi_01", math.nan), # From J519 BCM (is inactive when no lights active, 50Hz when active) + ("Kombi_02", math.nan), # Auxiliary-bus cluster odometer ] + else: + pt_messages += [("Kombi_02", math.nan)] # Auxiliary-bus cluster odometer if CP.flags & VolkswagenFlags.STOCK_HCA_PRESENT: cam_messages += [ ("HCA_01", 1), # From R242 Driver assistance camera, 50Hz if steering/1Hz if not @@ -809,7 +825,7 @@ class CarState(CarStateBase): @staticmethod def get_can_parsers_pq(CP): - aux_messages = [] + aux_messages = [("Kombi_3", math.nan)] # Bus 1 cluster odometer if CP.flags & VolkswagenFlagsIQ.IQ_PQ_ACC_FTS_EPB: aux_messages.append(("Motor_3", 0)) return { @@ -826,6 +842,7 @@ class CarState(CarStateBase): # TA_01 lives on bus 0 (car ECU / OP-generated when long is active). # math.nan → ignore_alive=True so it never contributes to can_valid. ("TA_01", math.nan), + ("Diagnose_01", math.nan), # Bus 0 cluster odometer ] if CP.networkLocation == NetworkLocation.fwdCamera: pt_messages.append(("AWV_03", 1)) diff --git a/iqdbc_repo/iqdbc/car/volkswagen/interface.py b/iqdbc_repo/iqdbc/car/volkswagen/interface.py index 637f1b10c..85a4a9b10 100644 --- a/iqdbc_repo/iqdbc/car/volkswagen/interface.py +++ b/iqdbc_repo/iqdbc/car/volkswagen/interface.py @@ -171,7 +171,7 @@ class CarInterface(CarInterfaceBase): ret.steerLimitTimer = 0.4 if ret.flags & VolkswagenFlags.PQ: ret.steerActuatorDelay = 0.2 - ret.longitudinalTuning.kfDEPRECATED = 1.2 + ret.longitudinalTuning.kf = 1.2 ret.longitudinalTuning.kpBP = [0.] ret.longitudinalTuning.kpV = [.45] ret.longitudinalTuning.kiBP = [0.] diff --git a/iqdbc_repo/iqdbc/car/volkswagen/tests/test_stopping.py b/iqdbc_repo/iqdbc/car/volkswagen/tests/test_stopping.py index 1c21653fc..9a07a21cb 100644 --- a/iqdbc_repo/iqdbc/car/volkswagen/tests/test_stopping.py +++ b/iqdbc_repo/iqdbc/car/volkswagen/tests/test_stopping.py @@ -1,5 +1,6 @@ import pytest +from iqdbc.car.volkswagen.interface import CarInterface from iqdbc.car.volkswagen.values import ( CAR, PASSAT_B7_STOP_ACCEL, PASSAT_B7_STOPPING_SPEED, PQ_STOPPING_SPEED, VolkswagenFlags, apply_pq_stopping_accel, get_longitudinal_stopping_speed_override, @@ -20,3 +21,13 @@ def test_passat_b7_stop_accel_is_exact(): assert apply_pq_stopping_accel(CAR.VOLKSWAGEN_PASSAT_B7, -0.2, True) == PASSAT_B7_STOP_ACCEL == -0.55 assert apply_pq_stopping_accel(CAR.VOLKSWAGEN_PASSAT_B7, -0.2, False) == -0.2 assert apply_pq_stopping_accel(CAR.VOLKSWAGEN_JETTA_MK6, -0.2, True) == -0.2 + + +@pytest.mark.parametrize("candidate", [ + CAR.VOLKSWAGEN_JETTA_MK6, + CAR.VOLKSWAGEN_PASSAT_NMS, +]) +def test_pq_longitudinal_feedforward_uses_active_schema_field(candidate): + fingerprint = {bus: {} for bus in range(8)} + cp = CarInterface.get_params(candidate, fingerprint, [], alpha_long=True, is_release=False, docs=False) + assert cp.longitudinalTuning.kf == pytest.approx(1.2) diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/.gitignore b/iqdbc_repo/iqdbc/dbc/generator/hyundai/.gitignore index 81f73f355..9f93c9250 100644 --- a/iqdbc_repo/iqdbc/dbc/generator/hyundai/.gitignore +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/.gitignore @@ -1,2 +1,3 @@ hyundai_kia_mando_front_radar.dbc +hyundai_kia_denso_front_radar.dbc hyundai_kia_mando_corner_radar.dbc diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/_hyundai_canfd_common.dbc b/iqdbc_repo/iqdbc/dbc/generator/hyundai/_hyundai_common.dbc similarity index 94% rename from iqdbc_repo/iqdbc/dbc/generator/hyundai/_hyundai_canfd_common.dbc rename to iqdbc_repo/iqdbc/dbc/generator/hyundai/_hyundai_common.dbc index 19751557b..52a06931f 100644 --- a/iqdbc_repo/iqdbc/dbc/generator/hyundai/_hyundai_canfd_common.dbc +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/_hyundai_common.dbc @@ -40,18 +40,21 @@ BO_ 80 LKAS: 16 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ LKA_MODE : 24|3@1+ (1,0) [0|7] "" XXX - SG_ LKA_AVAILABLE : 27|2@1+ (1,0) [0|255] "" XXX + SG_ LKA_ACTIVE : 27|2@1+ (1,0) [0|255] "" XXX SG_ LKA_WARNING : 32|1@1+ (1,0) [0|1] "" XXX SG_ LKA_ICON : 38|2@1+ (1,0) [0|255] "" XXX SG_ FCA_SYSWARN : 40|1@0+ (1,0) [0|1] "" XXX SG_ TORQUE_REQUEST : 41|11@1+ (1,-1024) [0|4095] "" XXX SG_ STEER_REQ : 52|1@1+ (1,0) [0|1] "" XXX SG_ LFA_BUTTON : 56|1@1+ (1,0) [0|255] "" XXX - SG_ LKA_ASSIST : 62|1@1+ (1,0) [0|1] "" XXX - SG_ STEER_MODE : 65|3@1+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_2 : 70|2@0+ (1,0) [0|3] "" XXX + SG_ VALUE63 : 63|4@0+ (1,0) [0|15] "" XXX + SG_ VALUE64 : 64|8@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 75|4@0+ (1,0) [0|15] "" XXX + SG_ LKAS_ANGLE_ACTIVE : 77|2@0+ (1,0) [0|3] "" XXX SG_ HAS_LANE_SAFETY : 80|1@0+ (1,0) [0|1] "" XXX - SG_ DAMP_FACTOR : 64|8@1+ (1,0) [0|255] "" XXX + SG_ LKAS_ANGLE_CMD : 82|14@1- (-0.1,0) [0|511] "" XXX + SG_ LKAS_ANGLE_MAX_TORQUE : 96|8@1+ (1,0) [0|255] "" XXX + SG_ VALUE104 : 104|8@1+ (1,0) [0|255] "" XXX BO_ 81 ADRV_0x51: 32 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd.dbc b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd.dbc index e97cb97ba..26aa743d4 100644 --- a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -1,4 +1,40 @@ -CM_ "IMPORT _hyundai_canfd_common.dbc"; +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: XXX CAMERA FRONT_RADAR ADRV APRK + BO_ 53 ACCELERATOR: 32 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -10,22 +46,56 @@ BO_ 64 GEAR_ALT: 32 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ GEAR : 32|3@1+ (1,0) [0|7] "" XXX + SG_ GEAR_STEP : 67|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_4 : 68|4@1+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_1 : 75|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_3 : 76|4@1+ (1,0) [0|15] "" XXX BO_ 69 GEAR: 24 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ GEAR : 44|3@1+ (1,0) [0|7] "" XXX + SG_ RIGHT_PADDLE : 57|1@0+ (1,0) [0|1] "" XXX + SG_ LEFT_PADDLE : 58|1@0+ (1,0) [0|1] "" XXX + SG_ GEAR_STEP : 146|5@1+ (1,0) [0|31] "" XXX + SG_ GEAR_STEP1 : 154|5@1+ (1,0) [0|31] "" XXX + +BO_ 80 LKAS: 16 XXX + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ LKA_MODE : 24|3@1+ (1,0) [0|7] "" XXX + SG_ LKA_ACTIVE : 27|2@1+ (1,0) [0|255] "" XXX + SG_ LKA_WARNING : 32|1@1+ (1,0) [0|1] "" XXX + SG_ LKA_ICON : 38|2@1+ (1,0) [0|255] "" XXX + SG_ FCA_SYSWARN : 40|1@0+ (1,0) [0|1] "" XXX + SG_ TORQUE_REQUEST : 41|11@1+ (1,-1024) [0|4095] "" XXX + SG_ STEER_REQ : 52|1@1+ (1,0) [0|1] "" XXX + SG_ LFA_BUTTON : 56|1@1+ (1,0) [0|255] "" XXX + SG_ VALUE63 : 63|4@0+ (1,0) [0|15] "" XXX + SG_ VALUE64 : 64|8@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 75|4@0+ (1,0) [0|15] "" XXX + SG_ LKAS_ANGLE_ACTIVE : 77|2@0+ (1,0) [0|3] "" XXX + SG_ HAS_LANE_SAFETY : 80|1@0+ (1,0) [0|1] "" XXX + SG_ LKAS_ANGLE_CMD : 82|14@1- (-0.1,0) [0|511] "" XXX + SG_ LKAS_ANGLE_MAX_TORQUE : 96|8@1+ (1,0) [0|255] "" XXX + SG_ DampingGain : 104|8@1+ (1,0) [0|255] "" XXX + +BO_ 81 ADRV_0x51: 32 ADRV + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX BO_ 96 ESP_STATUS: 32 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ TRACTION_AND_STABILITY_CONTROL : 42|3@1+ (1,0) [0|63] "" XXX - SG_ BRAKE_PRESSURE : 128|10@1+ (1,0) [0|65535] "" XXX + SG_ BRAKE_PRESSURE : 128|11@1+ (1,0) [0|2047] "" XXX SG_ BRAKE_PRESSED : 148|1@1+ (1,0) [0|3] "" XXX + SG_ AUTO_HOLD : 192|1@0+ (1,0) [0|1] "" XXX BO_ 101 BRAKE: 32 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ BRAKE_LIGHT : 29|1@0+ (1,0) [0|1] "" XXX SG_ BRAKE_POSITION : 40|16@1- (1,0) [0|65535] "" XXX SG_ BRAKE_PRESSED : 57|1@1+ (1,0) [0|3] "" XXX @@ -41,32 +111,35 @@ BO_ 160 WHEEL_SPEEDS: 24 XXX SG_ MOVING_BACKWARD : 57|1@0+ (1,0) [0|1] "" XXX SG_ MOVING_FORWARD2 : 58|1@0+ (1,0) [0|1] "" XXX SG_ MOVING_BACKWARD2 : 59|1@0+ (1,0) [0|1] "" XXX - SG_ WHL_SpdFLVal : 64|14@1+ (0.03125,0) [0|0] "km^h" XXX - SG_ WHL_SpdFRVal : 80|14@1+ (0.03125,0) [0|0] "km^h" XXX - SG_ WHL_SpdRLVal : 96|14@1+ (0.03125,0) [0|0] "km^h" XXX - SG_ WHL_SpdRRVal : 112|14@1+ (0.03125,0) [0|0] "km^h" XXX + SG_ WHEEL_SPEED_1 : 64|16@1+ (0.03125,0) [0|65535] "kph" XXX + SG_ WHEEL_SPEED_2 : 80|16@1+ (0.03125,0) [0|65535] "kph" XXX + SG_ WHEEL_SPEED_3 : 96|16@1+ (0.03125,0) [0|65535] "kph" XXX + SG_ WHEEL_SPEED_4 : 112|16@1+ (0.03125,0) [0|65535] "kph" XXX -BO_ 203 ADAS_CMD_35_10ms: 24 CGW_CCU - SG_ CHECKSUM : 0|16@1+ (1,0) [0|0] "0" FCU_C,GW_RGW,MDPS,SFA - SG_ COUNTER : 16|8@1+ (1,0) [0|0] "0" FCU_C,GW_RGW,MDPS,SFA - SG_ ADAS_ActvACISta : 24|4@1+ (1,0) [0|0] "" GW_RGW,MDPS,SFA - SG_ ADAS_ActvACILvl2Sta : 28|4@1+ (1,0) [0|0] "" ESC,FCU_C,GW_RGW,MDPS,SFA,VPC_C - SG_ ADAS_StrAnglReqVal : 32|14@1- (0.1,0) [0|119.9] "Deg" GW_RGW,MDPS,SFA - SG_ ADAS_ACIAnglTqRedcGainVal : 48|8@1+ (0.004,0) [0|1] "" GW_RGW,MDPS,SFA - SG_ FCA_ESA_ActvSta : 56|2@1+ (1,0) [0|0] "" GW_RGW,MDPS,SFA - SG_ FCA_ESA_TqBstGainVal : 64|8@1+ (0.004,0) [0|0] "" GW_RGW,MDPS,SFA +BO_ 203 LFA_ALT: 24 ADRV + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ LKAS_ANGLE_ACTIVE : 29|2@0+ (1,0) [0|3] "" XXX + SG_ LKAS_ANGLE_CMD : 32|14@1- (-0.1,0) [0|511] "" XXX + SG_ LKAS_ANGLE_MAX_TORQUE : 55|8@0+ (1,0) [0|255] "" XXX BO_ 234 MDPS: 24 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 47|8@0+ (1,0) [0|255] "" XXX SG_ LKA_ACTIVE : 48|1@0+ (1,0) [0|16777215] "" XXX SG_ LKA_FAULT : 54|1@0+ (1,0) [0|1] "" XXX SG_ STEERING_OUT_TORQUE : 64|12@1+ (0.1,-204.8) [0|65535] "" XXX SG_ STEERING_COL_TORQUE : 80|13@1+ (1,-4095) [0|4095] "" XXX - SG_ STEERING_ANGLE : 96|16@1- (0.1,0) [0|255] "deg" XXX - SG_ STEERING_ANGLE_2 : 128|16@1- (0.1,0) [0|65535] "deg" XXX - SG_ LKA_ANGLE_ACTIVE : 145|2@0+ (1,0) [0|3] "" XXX - SG_ LKA_ANGLE_FAULT : 149|1@0+ (1,0) [0|1] "" XXX + SG_ STEERING_ANGLE : 96|16@1- (-0.1,0) [0|255] "deg" XXX + SG_ STEERING_ANGLE_2 : 128|16@1- (-0.1,0) [0|65535] "deg" XXX + SG_ LFA2_ACTIVE : 145|2@0+ (1,0) [0|3] "" XXX + SG_ LFA2_FAULT : 149|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_4 : 159|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_5 : 167|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_6 : 175|8@0+ (1,0) [0|255] "" XXX BO_ 256 ACCELERATOR_BRAKE_ALT: 32 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -79,73 +152,63 @@ BO_ 261 ACCELERATOR_ALT: 32 XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ ACCELERATOR_PEDAL : 103|10@1+ (0.25,0) [0|1022] "" XXX +BO_ 267 CRUISE_BUTTONS_ALT2: 16 XXX + SG_ CRUISE_BUTTONS : 83|4@0+ (1,0) [0|15] "" XXX + SG_ LFA_BTN : 87|1@0+ (1,0) [0|1] "" XXX + BO_ 272 LKAS_ALT: 32 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ LKA_MODE : 24|3@1+ (1,0) [0|7] "" XXX - SG_ LKA_AVAILABLE : 27|2@1+ (1,0) [0|255] "" XXX + SG_ LKA_ACTIVE : 27|2@1+ (1,0) [0|3] "" XXX SG_ LKA_WARNING : 32|1@1+ (1,0) [0|1] "" XXX - SG_ LKA_ICON : 38|2@1+ (1,0) [0|255] "" XXX + SG_ LKA_ICON : 38|2@1+ (1,0) [0|3] "" XXX SG_ FCA_SYSWARN : 40|1@0+ (1,0) [0|1] "" XXX SG_ TORQUE_REQUEST : 41|11@1+ (1,-1024) [0|4095] "" XXX SG_ STEER_REQ : 52|1@1+ (1,0) [0|1] "" XXX - SG_ LFA_BUTTON : 56|1@1+ (1,0) [0|255] "" XXX - SG_ LKA_ASSIST : 62|1@1+ (1,0) [0|1] "" XXX - SG_ STEER_MODE : 65|3@1+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_2 : 70|2@0+ (1,0) [0|3] "" XXX + SG_ LFA_BUTTON : 56|1@1+ (1,0) [0|1] "" XXX + SG_ VALUE63 : 63|4@0+ (1,0) [0|15] "" XXX + SG_ VALUE64 : 64|8@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 75|4@0+ (1,0) [0|15] "" XXX SG_ LKAS_ANGLE_ACTIVE : 77|2@0+ (1,0) [0|3] "" XXX SG_ HAS_LANE_SAFETY : 80|1@0+ (1,0) [0|1] "" XXX - SG_ ADAS_StrAnglReqVal : 82|14@1- (0.1,0) [0|176.7] "Deg" GW_RGW,MDPS,SFA - SG_ ADAS_ACIAnglTqRedcGainVal : 96|8@1+ (0.004,0) [0|1] "" GW_RGW,MDPS,SFA - SG_ DAMP_FACTOR : 64|8@1+ (1,0) [0|255] "" XXX - -BO_ 282 FR_CMR_01_10ms: 16 FR_CMR - SG_ FR_CMR_Crc1Val : 0|16@1+ (1,0) [0|0] "" Dummy,IBU_HS,vBDM - SG_ FR_CMR_AlvCnt1Val : 16|8@1+ (1,0) [0|0] "" CLU,IBU_HS,vBDM - SG_ HBA_SysOptSta : 24|2@1+ (1,0) [0|3] "" CLU,IBU_HS,vBDM - SG_ HBA_SysSta : 26|3@1+ (1,0) [0|7] "" CLU,IBU_HS,vBDM - SG_ HBA_IndLmpReq : 29|2@1+ (1,0) [0|3] "" CLU,vBDM - SG_ iHBAref_VehLftSta : 31|2@1+ (1,0) [0|3] "" IBU_HS,ICU,vBDM - SG_ iHBAref_VehCtrSta : 33|2@1+ (1,0) [0|3] "" IBU_HS,ICU,vBDM - SG_ iHBAref_VehRtSta : 35|2@1+ (1,0) [0|3] "" IBU_HS,ICU,vBDM - SG_ iHBAref_ILLAmbtSta : 37|2@1+ (1,0) [0|3] "" IBU_HS,ICU,vBDM - SG_ FCA_Equip_MFC : 39|3@1+ (1,0) [0|0] "" ADAS_DRV,RR_C_RDR,vBDM - SG_ HBA_OptUsmSta : 42|2@1+ (1,0) [0|3] "" CLU,H_U_MM - SG_ FCAref_FusSta : 45|3@1+ (1,0) [0|0] "" vBDM - SG_ DAW_LVDA_PUDis : 48|2@1+ (1,0) [0|0] "" CLU,vBDM - SG_ DAW_LVDA_OptUsmSta : 50|2@1+ (1,0) [0|3] "" CLU,H_U_MM,vBDM - SG_ DAW_OptUsmSta : 52|3@1+ (1,0) [0|0] "" CLU,H_U_MM - SG_ DAW_SysSta : 55|4@1+ (1,0) [0|0] "" CLU - SG_ DAW_WrnMsgSta : 59|3@1+ (1,0) [0|0] "" CLU - SG_ DAW_TimeRstReq : 62|2@1+ (1,0) [0|0] "" CLU - SG_ DAW_SnstvtyModRetVal : 64|3@1+ (1,0) [0|0] "" CLU,H_U_MMz - SG_ FR_CMR_SCCEquipSta : 85|2@1+ (1,0) [0|3] "" CGW - SG_ FR_CMR_ReqADASMapMsgVal : 96|16@1+ (1,0) [0|65535] "" CGW - SG_ FR_CMR_SwVer1Val : 112|4@1+ (1,0) [0|15] "" CGW - SG_ FR_CMR_SwVer2Val : 120|8@1+ (1,0) [0|255] "" CGW + SG_ LKAS_ANGLE_CMD : 82|14@1- (-0.1,0) [0|511] "" XXX + SG_ LKAS_ANGLE_MAX_TORQUE : 96|8@1+ (1,0) [0|255] "" XXX + SG_ DampingGain : 104|8@1+ (1,0) [0|255] "" XXX + SG_ VALUE231 : 231|8@0+ (1,0) [0|255] "" XXX + SG_ VALUE239 : 239|8@0+ (1,0) [0|255] "" XXX + SG_ VALUE247 : 247|8@0+ (1,0) [0|255] "" XXX + SG_ VALUE255 : 255|8@0+ (1,0) [0|255] "" XXX BO_ 293 STEERING_SENSORS: 16 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX - SG_ STEERING_ANGLE : 24|16@1- (0.1,0) [0|255] "deg" XXX + SG_ STEERING_ANGLE : 24|16@1- (-0.1,0) [0|255] "deg" XXX SG_ STEERING_RATE : 40|8@1+ (4,0) [0|1016] "deg/s" XXX BO_ 298 LFA: 16 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ LKA_MODE : 24|3@1+ (1,0) [0|7] "" XXX - SG_ NEW_SIGNAL_1 : 27|2@1+ (1,0) [0|255] "" XXX + SG_ LKA_ACTIVE : 27|2@1+ (1,0) [0|3] "" XXX SG_ LKA_WARNING : 32|1@1+ (1,0) [0|1] "" XXX - SG_ LKA_ICON : 38|2@1+ (1,0) [0|255] "" XXX + SG_ LKA_ICON : 38|2@1+ (1,0) [0|3] "" XXX + SG_ FCA_SYSWARN : 40|1@0+ (1,0) [0|1] "" XXX SG_ TORQUE_REQUEST : 41|11@1+ (1,-1024) [0|4095] "" XXX SG_ STEER_REQ : 52|1@1+ (1,0) [0|1] "" XXX - SG_ LFA_BUTTON : 56|1@1+ (1,0) [0|255] "" XXX - SG_ LKA_ASSIST : 62|1@1+ (1,0) [0|1] "" XXX - SG_ STEER_MODE : 65|3@1+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_2 : 70|2@0+ (1,0) [0|3] "" XXX - SG_ NEW_SIGNAL_4 : 72|4@1+ (1,0) [0|15] "" XXX + SG_ LFA_BUTTON : 56|1@1+ (1,0) [0|1] "" XXX + SG_ VALUE63 : 63|4@0+ (1,0) [0|15] "" XXX + SG_ VALUE64 : 64|8@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 75|4@0+ (1,0) [0|15] "" XXX + SG_ LKAS_ANGLE_ACTIVE : 77|2@0+ (1,0) [0|3] "" XXX SG_ HAS_LANE_SAFETY : 80|1@0+ (1,0) [0|1] "" XXX - SG_ DAMP_FACTOR : 104|8@1+ (1,0) [0|255] "" XXX + SG_ LKAS_ANGLE_CMD : 82|14@1- (-0.1,0) [0|511] "" XXX + SG_ LKAS_ANGLE_MAX_TORQUE : 96|8@1+ (1,0) [0|255] "" XXX + SG_ DampingGain : 104|8@1+ (1,0) [0|255] "" XXX + SG_ VALUE231 : 231|8@0+ (1,0) [0|255] "" XXX + SG_ VALUE239 : 239|8@0+ (1,0) [0|255] "" XXX + SG_ VALUE247 : 247|8@0+ (1,0) [0|255] "" XXX + SG_ VALUE255 : 255|8@0+ (1,0) [0|255] "" XXX BO_ 304 GEAR_SHIFTER: 16 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -154,75 +217,77 @@ BO_ 304 GEAR_SHIFTER: 16 XXX SG_ KNOB_POSITION : 40|3@1+ (1,0) [0|3] "" XXX SG_ GEAR : 64|3@1+ (1,0) [0|7] "" XXX +BO_ 1079 TRAILER_STATUS: 8 XXX + SG_ TRAILER_CONNECTED : 0|1@1+ (1,0) [0|1] "" XXX + BO_ 352 ADRV_0x160: 16 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ AEB_SETTING : 24|2@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_1 : 30|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_4 : 31|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 55|8@0+ (1,0) [0|255] "" XXX SG_ SET_ME_2 : 56|8@1+ (1,0) [0|1] "" XXX SG_ SET_ME_FF : 64|8@1+ (1,0) [0|255] "" XXX SG_ SET_ME_FC : 72|8@1+ (1,0) [0|255] "" XXX SG_ SET_ME_9 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 95|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 102|1@0+ (1,0) [0|1] "" XXX -BO_ 353 CCNC_0x161: 32 CCNC +BO_ 353 ADRV_0x161: 32 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ FCA_ICON : 24|3@1+ (1,0) [0|7] "" XXX SG_ FCA_ALT_ICON : 27|3@1+ (1,0) [0|7] "" XXX SG_ LKA_ICON : 30|3@1+ (1,0) [0|3] "" XXX SG_ HBA_ICON : 33|3@1+ (1,0) [0|7] "" XXX - SG_ ZEROS_1 : 36|4@1+ (1,0) [0|15] "" XXX - SG_ ZEROS_2 : 40|2@1+ (1,0) [0|3] "" XXX SG_ FCA_IMAGE : 42|3@1+ (1,0) [0|7] "" XXX - SG_ ZEROS_3 : 45|3@1+ (1,0) [0|7] "" XXX - SG_ ZEROS_4 : 48|3@1+ (1,0) [0|7] "" XXX SG_ BCA_LEFT : 51|3@1+ (1,0) [0|7] "" XXX SG_ BCA_RIGHT : 54|3@1+ (1,0) [0|7] "" XXX SG_ LCA_LEFT_ARROW : 57|3@1+ (1,0) [0|7] "" XXX SG_ LCA_RIGHT_ARROW : 60|3@1+ (1,0) [0|7] "" XXX - SG_ ZEROS_5 : 63|1@0+ (1,0) [0|1] "" XXX SG_ CENTERLINE : 64|2@1+ (1,0) [0|3] "" XXX SG_ TARGET : 66|3@1+ (1,0) [0|7] "" XXX SG_ TARGET_DISTANCE : 69|11@1+ (0.1,0) [0|204.7] "m" XXX SG_ LANELINE_LEFT : 80|4@1+ (1,0) [0|15] "" XXX SG_ LANELINE_LEFT_POSITION : 84|6@1+ (1,0) [0|15] "" XXX SG_ LANELINE_RIGHT : 90|4@1+ (1,0) [0|15] "" XXX - SG_ LANELINE_RIGHT_POSITION : 94|6@1+ (1,0) [0|3] "" XXX - SG_ LANELINE_CURVATURE : 100|5@1- (1,15) [0|31] "" XXX + SG_ LANELINE_RIGHT_POSITION : 94|6@1+ (1,0) [0|15] "" XXX + SG_ LANELINE_CURVATURE : 100|4@1+ (1,0) [0|31] "" XXX + SG_ LANELINE_CURVATURE_DIRECTION : 104|1@0+ (1,0) [0|1] "" XXX SG_ LANE_HIGHLIGHT : 105|4@1+ (1,0) [0|15] "" XXX SG_ LANE_HIGHLIGHT_DISTANCE : 109|11@1+ (0.1,0) [0|204.7] "m" XXX SG_ LANE_LEFT : 120|3@1+ (1,0) [0|7] "" XXX SG_ LANE_RIGHT : 123|3@1+ (1,0) [0|7] "" XXX SG_ LANE_ZOOM : 126|2@1+ (1,0) [0|3] "" XXX SG_ ALERTS_1 : 128|6@1+ (1,0) [0|63] "" XXX - SG_ ALERTS_2 : 134|5@1+ (1,0) [0|3] "" XXX - SG_ ALERTS_3 : 139|5@1+ (1,0) [0|15] "" XXX - SG_ ALERTS_4 : 144|8@1+ (1,0) [0|511] "" XXX - SG_ ALERTS_5 : 152|5@1+ (1,0) [0|7] "" XXX + SG_ ALERTS_2 : 134|5@1+ (1,0) [0|31] "" XXX + SG_ ALERTS_3 : 139|5@1+ (1,0) [0|31] "" XXX + SG_ ALERTS_4 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ ALERTS_5 : 152|5@1+ (1,0) [0|31] "" XXX SG_ MUTE : 157|3@1+ (1,0) [0|7] "" XXX SG_ SOUNDS_1 : 160|4@1+ (1,0) [0|3] "" XXX SG_ SOUNDS_2 : 164|4@1+ (1,0) [0|3] "" XXX SG_ SOUNDS_3 : 168|4@1+ (1,0) [0|15] "" XXX SG_ SOUNDS_4 : 172|3@1+ (1,0) [0|7] "" XXX - SG_ ZEROS_6 : 175|1@0+ (1,0) [0|1] "" XXX - SG_ ZEROS_7 : 176|5@1+ (1,0) [0|31] "" XXX - SG_ SETSPEED_HUD : 181|3@1+ (1,0) [0|3] "" XXX + SG_ SETSPEED_HUD : 181|3@1+ (1,0) [0|7] "" XXX SG_ DISTANCE_LEAD : 184|5@1+ (1,0) [0|31] "" XXX SG_ DISTANCE_CAR : 189|3@1+ (1,0) [0|7] "" XXX SG_ DISTANCE_SPACING : 192|4@1+ (1,0) [0|15] "" XXX SG_ DISTANCE : 196|4@1+ (1,0) [0|7] "" XXX - SG_ SETSPEED_SPEED : 200|8@1+ (1,0) [0|255] "" XXX - SG_ SETSPEED : 208|4@1+ (1,0) [0|3] "" XXX - SG_ HDA_ICON : 212|4@1+ (1,0) [0|3] "" XXX + SG_ vSetDis : 200|8@1+ (1,0) [0|255] "" XXX + SG_ SETSPEED : 208|4@1+ (1,0) [0|7] "" XXX + SG_ HDA_ICON : 212|3@1+ (1,0) [0|7] "" XXX SG_ SLA_ICON : 216|4@1+ (1,0) [0|15] "" XXX - SG_ NAV_ICON : 220|4@1+ (1,0) [0|3] "" XXX - SG_ LFA_ICON : 224|4@1+ (1,0) [0|3] "" XXX - SG_ LCA_LEFT_ICON : 228|4@1+ (1,0) [0|15] "" XXX - SG_ LCA_RIGHT_ICON : 232|4@1+ (1,0) [0|15] "" XXX + SG_ NAV_ICON : 220|3@1+ (1,0) [0|7] "" XXX + SG_ LFA_ICON : 224|3@1+ (1,0) [0|7] "" XXX + SG_ LCA_LEFT_ICON : 228|3@1+ (1,0) [0|7] "" XXX + SG_ LCA_RIGHT_ICON : 232|3@1+ (1,0) [0|7] "" XXX SG_ BACKGROUND : 236|4@1+ (1,0) [0|15] "" XXX SG_ DAW_ICON : 240|3@1+ (1,0) [0|7] "" XXX SG_ CAR_CIRCLE : 243|3@1+ (1,0) [0|7] "" XXX - SG_ ZEROS_8 : 246|2@1+ (1,0) [0|3] "" XXX - SG_ ZEROS_9 : 248|8@1+ (1,0) [0|255] "" XXX BO_ 354 CCNC_0x162: 32 CCNC SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -232,35 +297,25 @@ BO_ 354 CCNC_0x162: 32 CCNC SG_ SPEEDLIMIT : 32|8@1+ (1,0) [0|255] "" XXX SG_ SIGNS : 40|8@1+ (1,0) [0|15] "" XXX SG_ SPEEDLIMIT_WEATHER : 48|4@1+ (1,0) [0|15] "" XXX - SG_ VIBRATE : 52|3@1+ (1,0) [0|7] "" XXX - SG_ ZEROS_1 : 55|1@0+ (1,0) [0|1] "" XXX - SG_ ZEROS_2 : 56|8@1+ (1,0) [0|255] "" XXX - SG_ LEAD : 64|5@1+ (1,0) [0|31] "" XXX - SG_ LEAD_DISTANCE : 69|11@1+ (0.1,0) [0|204.7] "m" XXX - SG_ LEAD_LATERAL : 80|7@1+ (0.1,0) [0|127] "m" XXX - SG_ ZEROS_3 : 87|1@0+ (1,0) [0|1] "" XXX - SG_ LEAD_ALT : 88|5@1+ (1,0) [0|31] "" XXX - SG_ LEAD_ALT_DISTANCE : 93|11@1+ (0.1,0) [0|204.7] "m" XXX - SG_ LEAD_ALT_LATERAL : 104|7@1+ (0.1,0) [0|127] "m" XXX - SG_ ZEROS_4 : 111|1@0+ (1,0) [0|1] "" XXX - SG_ LEAD_LEFT : 112|5@1+ (1,0) [0|31] "" XXX - SG_ LEAD_LEFT_DISTANCE : 117|11@1+ (0.1,0) [0|204.7] "m" XXX - SG_ LEAD_LEFT_LATERAL : 128|7@1+ (0.1,0) [0|127] "m" XXX - SG_ ZEROS_5 : 135|1@0+ (1,0) [0|1] "" XXX - SG_ LEAD_RIGHT : 136|5@1+ (1,0) [0|31] "" XXX - SG_ LEAD_RIGHT_DISTANCE : 141|11@1+ (0.1,0) [0|204.7] "m" XXX - SG_ LEAD_RIGHT_LATERAL : 152|7@1+ (0.1,0) [0|127] "m" XXX - SG_ ZEROS_6 : 159|1@0+ (1,0) [0|1] "" XXX - SG_ ZEROS_7 : 162|3@0+ (1,0) [0|7] "" XXX - SG_ LEAD_LEFT_REAR_STATUS : 167|5@0+ (1,0) [0|31] "" XXX - SG_ LEAD_LEFT_REAR_DISTANCE : 175|8@0+ (0.1,0) [0|255] "m" XXX - SG_ LEAD_LEFT_REAR_LATERAL : 182|7@0+ (0.1,0) [0|127] "m" XXX - SG_ ZEROS_8 : 183|1@0+ (1,0) [0|1] "" XXX - SG_ ZEROS_9 : 191|8@0+ (1,0) [0|255] "" XXX - SG_ LEAD_RIGHT_REAR_STATUS : 196|5@0+ (1,0) [0|31] "" XXX - SG_ LEAD_RIGHT_REAR_DISTANCE : 197|8@1+ (0.1,0) [0|255] "m" XXX - SG_ LEAD_RIGHT_REAR_LATERAL : 205|7@1+ (0.1,0) [0|127] "m" XXX - SG_ ZEROS_10 : 212|1@0+ (1,0) [0|1] "" XXX + SG_ VIBRATE : 52|1@0+ (1,0) [0|1] "" XXX + SG_ FF_DETECT : 64|5@1+ (1,0) [0|31] "" XXX + SG_ FF_DISTANCE : 69|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ FF_LATERAL : 80|7@1+ (0.1,0) [0|127] "m" XXX + SG_ FF_DETECT_ALT : 88|5@1+ (1,0) [0|31] "" XXX + SG_ FF_DISTANCE_ALT : 93|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ FF_LATERAL_ALT : 104|7@1+ (0.1,0) [0|127] "m" XXX + SG_ LF_DETECT : 112|5@1+ (1,0) [0|31] "" XXX + SG_ LF_DETECT_DISTANCE : 117|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LF_DETECT_LATERAL : 128|7@1+ (0.1,0) [0|127] "m" XXX + SG_ RF_DETECT : 136|5@1+ (1,0) [0|31] "" XXX + SG_ RF_DETECT_DISTANCE : 141|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ RF_DETECT_LATERAL : 152|7@1+ (0.1,0) [0|127] "m" XXX + SG_ LR_DETECT : 163|5@1+ (1,0) [0|31] "" XXX + SG_ LR_DETECT_DISTANCE : 175|8@0+ (0.1,0) [0|255] "" XXX + SG_ LR_DETECT_LATERAL : 176|7@1+ (0.1,0) [0|127] "" XXX + SG_ RR_DETECT : 192|5@1+ (1,0) [0|31] "" XXX + SG_ RR_DETECT_DISTANCE : 197|8@1+ (0.1,0) [0|255] "" XXX + SG_ RR_DETECT_LATERAL : 205|7@1+ (0.1,0) [0|127] "" XXX SG_ FAULT_FSS : 213|3@1+ (1,0) [0|7] "" XXX SG_ FAULT_FCA : 216|3@1+ (1,0) [0|7] "" XXX SG_ FAULT_LSS : 219|3@1+ (1,0) [0|7] "" XXX @@ -274,7 +329,6 @@ BO_ 354 CCNC_0x162: 32 CCNC SG_ FAULT_HDP : 243|3@1+ (1,0) [0|7] "" XXX SG_ FAULT_DAS : 246|3@1+ (1,0) [0|7] "" XXX SG_ FAULT_ESS : 249|3@1+ (1,0) [0|7] "" XXX - SG_ ZEROS_11 : 252|4@1+ (1,0) [0|15] "" XXX BO_ 357 SPAS1: 24 APRK SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -291,56 +345,95 @@ BO_ 373 TCS: 24 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ NEW_SIGNAL_4 : 24|7@1+ (1,0) [0|127] "" XXX + SG_ NEW_SIGNAL_9 : 31|1@0+ (1,0) [0|1] "" XXX SG_ aBasis : 32|11@1+ (0.01,-10.23) [0|7] "m/s^2" XXX + SG_ NEW_SIGNAL_1 : 47|5@0+ (1,0) [0|31] "" XXX SG_ ACCEL_REF_ACC : 48|11@1- (1,0) [0|1023] "" XXX - SG_ EQUIP_MAYBE : 64|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 63|5@0+ (1,0) [0|31] "" XXX + SG_ SCC_OptTyp : 64|2@1+ (1,0) [0|0] "" AWD,EMS,FR_CMR,HCU,H_U_MM,TCU,VCU,vBDM SG_ ACCEnable : 67|2@0+ (1,0) [0|3] "" XXX SG_ ACC_REQ : 68|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_5 : 72|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_2 : 74|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_3 : 76|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_1 : 80|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 69|1@0+ (1,0) [0|1] "" XXX + SG_ SCC_ReqLimSta : 70|2@1+ (1,0) [0|0] "" ADAS_DRV,AWD,Dummy,EMS,FR_CMR,H_U_MM,TCU,vBDM + SG_ ESC_StdStillVal : 72|2@1+ (1,0) [0|3] "" ADAS_DRV,AWD,Dummy,EMS,FR_CMR,H_U_MM,TCU,vBDM + SG_ BrakeLight : 74|2@1+ (1,0) [0|3] "" XXX + SG_ ESC_DclEnblReq : 76|2@1+ (1,0) [0|3] "" AWD,Dummy,EMS,FR_CMR,H_U_MM,TCU,vBDM + SG_ NEW_SIGNAL_5 : 79|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 80|1@0+ (1,0) [0|1] "" XXX SG_ DriverBraking : 81|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_20 : 82|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_11 : 83|1@0+ (1,0) [0|1] "" XXX SG_ DriverBrakingLowSens : 84|1@1+ (1,0) [0|1] "" XXX - SG_ AEB_EQUIP_MAYBE : 96|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_10 : 85|1@0+ (1,0) [0|1] "" XXX + SG_ ESC_PrkBrkActvSta : 86|2@1+ (1,0) [0|3] "" ADAS_DRV,AWD,Dummy,EMS,FR_CMR,H_U_MM,RR_C_RDR,TCU,vBDM + SG_ NEW_SIGNAL_12 : 95|8@0+ (1,0) [0|255] "" XXX + SG_ FCA_EquipSta : 96|2@1+ (1,0) [0|3] "" ADAS_DRV,FR_CMR,H_U_MM,vBDM + SG_ FCA_AvlblSta : 98|2@1+ (1,0) [0|3] "" ADAS_DRV,AFCU_DRV,CLU,Dummy,FR_CMR,H_U_MM,vBDM + SG_ NEW_SIGNAL_13 : 103|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 111|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 119|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_16 : 127|8@0+ (1,0) [0|255] "" XXX SG_ NEW_SIGNAL_6 : 128|4@1+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_17 : 133|2@0+ (1,0) [0|3] "" XXX SG_ NEW_SIGNAL_7 : 135|2@0+ (1,0) [0|3] "" XXX SG_ PROBABLY_EQUIP : 136|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_18 : 143|6@0+ (1,0) [0|63] "" XXX + SG_ NEW_SIGNAL_19 : 151|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_8 : 183|16@0+ (1,0) [0|65535] "" XXX + +BO_ 384 CAM_0x180: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 385 CAM_0x181: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 386 CAM_0x182: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 387 CAM_0x183: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 388 CAM_0x184: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 389 CAM_0x185: 8 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX BO_ 416 SCC_CONTROL: 32 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ ACC_ObjDist : 24|11@1+ (0.1,0) [0|204.7] "m" XXX - SG_ ACC_ObjRelSpd : 35|9@1+ (0.1,-16.4) [-16.4|34.7] "m/s" XXX - SG_ SET_ME_3 : 45|2@0+ (1,0) [0|3] "" XXX - SG_ ObjValid : 46|1@0+ (1,0) [0|3] "" XXX - SG_ SET_ME_TMP_64 : 55|8@0+ (1,0) [0|63] "" XXX + SG_ ACC_ObjRelSpd : 35|12@1+ (0.1,-170) [-16.4|34.7] "m/s" XXX + SG_ ACC_ObjLatPos : 47|9@1- (0.1,-20) [0|511] "" XXX SG_ ZEROS_7 : 63|8@0+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_1 : 64|2@1+ (1,0) [0|3] "" XXX + SG_ SysFailState : 64|2@1+ (1,0) [0|3] "" XXX SG_ MainMode_ACC : 66|1@1+ (1,0) [0|1] "" XXX SG_ ACCMode : 68|3@1+ (1,0) [0|7] "" XXX - SG_ ZEROS_9 : 71|5@1+ (1,0) [0|15] "" XXX - SG_ CRUISE_STANDSTILL : 76|1@1+ (1,0) [0|1] "" XXX - SG_ ZEROS_5 : 77|11@1+ (1,0) [0|2047] "" XXX - SG_ DISTANCE_SETTING : 88|3@1+ (1,0) [0|3] "" XXX - SG_ ZEROS_8 : 95|5@0+ (1,0) [0|31] "" XXX + SG_ TakeOverReq : 73|2@0+ (1,0) [0|3] "" XXX + SG_ InfoDisplay : 74|3@1+ (1,0) [0|7] "" XXX + SG_ DriverAlert : 77|2@1+ (1,0) [0|3] "" XXX + SG_ ObjDistLevel : 80|8@1+ (1,0) [0|255] "" XXX + SG_ DISTANCE_SETTING : 88|4@1+ (1,0) [0|15] "" XXX SG_ VSetDis : 103|8@0+ (1,0) [0|255] "km/h or mph" XXX - SG_ NEW_SIGNAL_6 : 104|1@0+ (1,0) [0|1] "" XXX - SG_ SET_ME_2 : 105|3@1+ (1,0) [0|7] "" XXX - SG_ SCC_ObjSta : 108|3@1+ (1,0) [0|7] "" CLU,CGW - SG_ ZEROS_10 : 111|2@0+ (1,0) [0|3] "" XXX - SG_ ZEROS_6 : 119|16@0+ (1,0) [0|65535] "" XXX + SG_ NSCCOper : 104|2@1+ (1,0) [0|3] "" XXX + SG_ NSCCOnOff : 106|2@1+ (1,0) [0|3] "" XXX + SG_ HUD_LEAD_INFO : 108|3@1+ (1,0) [0|7] "" XXX + SG_ DriveMode : 112|3@1+ (1,0) [0|7] "" XXX SG_ aReqValue : 128|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" XXX SG_ aReqRaw : 140|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" XXX SG_ JerkUpperLimit : 158|7@0+ (0.1,0) [0|0] "" XXX SG_ JerkLowerLimit : 166|7@0+ (0.1,0) [0|12.7] "m/s^3" XXX - SG_ NEW_SIGNAL_2 : 168|2@1+ (1,0) [0|3] "" XXX - SG_ NEW_SIGNAL_8 : 170|4@1+ (1,0) [0|15] "" XXX - SG_ OBJ_STATUS : 176|3@1+ (1,0) [0|7] "" XXX - SG_ ZEROS_4 : 183|4@0+ (1,0) [0|63] "" XXX - SG_ StopReq : 184|1@0+ (1,0) [0|1] "" XXX - SG_ ZEROS_3 : 191|7@0+ (1,0) [0|127] "" XXX - SG_ NEW_SIGNAL_15 : 192|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ AccelLimitBandUpper : 173|6@0+ (0.02,0) [0|63] "" XXX + SG_ AccelLimitBandLower : 181|6@0+ (0.02,0) [0|63] "" XXX + SG_ StopReq : 185|2@0+ (1,0) [0|3] "" XXX + SG_ CRUSE_INFO_SET_2 : 189|2@0+ (1,0) [0|3] "" XXX + SG_ TARGET_DISTANCE : 192|11@1+ (0.1,0) [0|204.7] "m" XXX SG_ ZEROS_2 : 207|5@0+ (1,0) [0|63] "" XXX SG_ ZEROS : 215|48@0+ (1,0) [0|281474976710655] "" XXX @@ -354,7 +447,7 @@ BO_ 426 CRUISE_BUTTONS_ALT: 16 XXX SG_ ADAPTIVE_CRUISE_MAIN_BTN : 34|1@1+ (1,0) [0|1] "" XXX SG_ NEW_SIGNAL_3 : 35|1@1+ (1,0) [0|1] "" XXX SG_ CRUISE_BUTTONS : 36|3@1+ (1,0) [0|4] "" XXX - SG_ LDA_BTN : 39|1@1+ (1,0) [0|1] "" XXX + SG_ LFA_BTN : 39|1@1+ (1,0) [0|1] "" XXX SG_ NEW_SIGNAL_4 : 40|1@1+ (1,0) [0|1] "" XXX SG_ NORMAL_CRUISE_MAIN_BTN : 41|1@1+ (1,0) [0|1] "" XXX SG_ NEW_SIGNAL_5 : 42|2@1+ (1,0) [0|3] "" XXX @@ -362,7 +455,7 @@ BO_ 426 CRUISE_BUTTONS_ALT: 16 XXX SG_ NEW_SIGNAL_6 : 47|1@1+ (1,0) [0|1] "" XXX SG_ BYTE6 : 48|8@1+ (1,0) [0|255] "" XXX SG_ BYTE7 : 56|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE8 : 64|8@1+ (1,0) [0|255] "" XXX + SG_ CLU_SPEED : 64|8@1+ (1,0) [0|255] "" XXX SG_ BYTE9 : 72|8@1+ (1,0) [0|255] "" XXX SG_ BYTE10 : 80|8@1+ (1,0) [0|255] "" XXX SG_ BYTE11 : 88|8@1+ (1,0) [0|255] "" XXX @@ -371,38 +464,55 @@ BO_ 426 CRUISE_BUTTONS_ALT: 16 XXX SG_ BYTE14 : 112|8@1+ (1,0) [0|255] "" XXX SG_ BYTE15 : 120|8@1+ (1,0) [0|255] "" XXX -BO_ 437 FR_CMR_03_50ms: 32 FR_CMR - SG_ FR_CMR_Crc3Val : 0|16@1+ (1,0) [0|65535] "" RR_C_RDR,CGW - SG_ FR_CMR_AlvCnt3Val : 16|8@1+ (1,0) [0|255] "" RR_C_RDR,CGW - SG_ Info_LftLnQualSta : 24|3@1+ (1,0) [0|7] "" RR_C_RDR,CGW - SG_ Info_LftLnDptSta : 27|2@1+ (1,0) [0|3] "" RR_C_RDR,CGW - SG_ Info_LftLnPosVal : 29|14@1- (0.0039625,0) [-32.4608|32.4568375] "m" RR_C_RDR,CGW - SG_ Info_LftLnHdingAnglVal : 43|10@1- (0.000976563,0) [-0.500000256|0.499023693] "rad" RR_C_RDR,CGW - SG_ Info_LftLnCvtrVal : 64|16@1- (1e-06,0) [-0.032768|0.032767] "1/m" CGW - SG_ Info_LftLnCrvtrDrvtvVal : 80|16@1- (4e-09,0) [-0.000131072|0.000131068] "1/m2" CGW - SG_ Info_RtLnQualSta : 96|3@1+ (1,0) [0|7] "" RR_C_RDR,CGW - SG_ Info_RtLnDptSta : 99|2@1+ (1,0) [0|3] "" RR_C_RDR,CGW - SG_ Info_RtLnPosVal : 101|14@1- (0.0039625,0) [-32.4608|32.4568375] "m" RR_C_RDR,CGW - SG_ Info_RtLnHdingAnglVal : 115|10@1- (0.000976563,0) [-0.500000256|0.499023693] "rad" RR_C_RDR,CGW - SG_ Info_RtLnCvtrVal : 128|16@1- (1e-06,0) [-0.032768|0.032767] "1/m" CGW - SG_ Info_RtLnCrvtrDrvtvVal : 144|16@1- (4e-09,0) [-0.000131072|0.000131068] "1/m2" CGW - SG_ ID_CIPV : 192|8@1+ (1,0) [0|255] "" XXX - SG_ Relative_Velocity : 200|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX - SG_ Longitudinal_Distance : 212|12@1+ (0.05,0) [0|204.75] "m" XXX +BO_ 437 CCNC_0x1B5: 32 CCNC + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ LEFT_QUAL : 24|3@1+ (1,0) [0|7] "" XXX + SG_ LEFT_LDW : 27|2@1+ (1,0) [0|3] "" XXX + SG_ LEFT_POSITION : 29|14@1- (0.0039625,0) [-32.4608|32.4568375] "m" XXX + SG_ LEFT_HEADING : 43|10@1- (0.000976563,0) [-0.500000256|0.499023693] "rad" XXX + SG_ LEFT_CURVATURE : 64|16@1- (1e-06,0) [-0.032768|0.032767] "1/m" XXX + SG_ LEFT_CURVATURE_DERIVATIVE : 80|16@1- (4e-09,0) [-0.000131072|0.000131068] "1/m2" XXX + SG_ RIGHT_QUAL : 96|3@1+ (1,0) [0|7] "" XXX + SG_ RIGHT_LDW : 99|2@1+ (1,0) [0|3] "" XXX + SG_ RIGHT_POSITION : 101|14@1- (0.0039625,0) [-32.4608|32.4568375] "m" XXX + SG_ RIGHT_HEADING : 115|10@1- (0.000976563,0) [-0.500000256|0.499023693] "rad" XXX + SG_ RIGHT_CURVATURE : 128|16@1- (1e-06,0) [-0.032768|0.032767] "1/m" XXX + SG_ RIGHT_CURVATURE_DERIVATIVE : 144|16@1- (4e-09,0) [-0.000131072|0.000131068] "1/m2" XXX + SG_ LEAD : 192|7@1+ (1,0) [0|127] "" XXX + SG_ LEAD_SPEED : 200|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ LEAD_DISTANCE : 212|12@1+ (0.05,0) [0|204.75] "m" XXX + +BO_ 438 CAM_0x1b6: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 439 CAM_0x1b7: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 440 CAM_0x1b8: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 441 CAM_0x1b9: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX BO_ 442 BLINDSPOTS_REAR_CORNERS: 24 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ LEFT_BLOCKED : 24|1@0+ (1,0) [0|1] "" XXX - SG_ LEFT_MB : 30|1@0+ (1,0) [0|3] "" XXX - SG_ MORE_LEFT_PROB : 32|1@1+ (1,0) [0|3] "" XXX + SG_ INDICATOR_LEFT_TWO : 30|1@0+ (1,0) [0|3] "" XXX + SG_ INDICATOR_RIGHT_TWO : 32|1@1+ (1,0) [0|3] "" XXX SG_ FL_INDICATOR : 46|6@0+ (1,0) [0|1] "" XXX SG_ FR_INDICATOR : 54|6@0+ (1,0) [0|63] "" XXX SG_ RIGHT_BLOCKED : 64|1@0+ (1,0) [0|1] "" XXX SG_ COLLISION_AVOIDANCE_ACTIVE : 68|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_2 : 96|1@0+ (1,0) [0|1] "" XXX - SG_ FL_INDICATOR_ALT : 138|1@0+ (1,0) [0|1] "" XXX - SG_ FR_INDICATOR_ALT : 141|1@0+ (1,0) [0|1] "" XXX + SG_ INDICATOR_LEFT_THREE : 128|1@0+ (1,0) [0|1] "" XXX + SG_ INDICATOR_RIGHT_THREE : 130|1@0+ (1,0) [0|1] "" XXX + SG_ INDICATOR_LEFT_FOUR : 138|1@0+ (1,0) [0|1] "" XXX + SG_ INDICATOR_RIGHT_FOUR : 141|1@0+ (1,0) [0|1] "" XXX BO_ 463 CRUISE_BUTTONS: 8 XXX SG_ _CHECKSUM : 0|8@1+ (1,0) [0|65535] "" XXX @@ -410,10 +520,11 @@ BO_ 463 CRUISE_BUTTONS: 8 XXX SG_ CRUISE_BUTTONS : 16|3@1+ (1,0) [0|3] "" XXX SG_ ADAPTIVE_CRUISE_MAIN_BTN : 19|1@1+ (1,0) [0|1] "" XXX SG_ NORMAL_CRUISE_MAIN_BTN : 21|1@1+ (1,0) [0|1] "" XXX - SG_ LDA_BTN : 23|1@1+ (1,0) [0|1] "" XXX + SG_ LFA_BTN : 23|1@1+ (1,0) [0|1] "" XXX SG_ RIGHT_PADDLE : 25|1@1+ (1,0) [0|1] "" XXX SG_ LEFT_PADDLE : 27|1@1+ (1,0) [0|1] "" XXX SG_ SET_ME_1 : 29|1@1+ (1,0) [0|1] "" XXX + SG_ SET_ME_1_ : 40|1@0+ (1,0) [0|1] "" XXX BO_ 474 ADRV_0x1da: 32 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -421,16 +532,20 @@ BO_ 474 ADRV_0x1da: 32 ADRV SG_ SET_ME_22 : 31|8@0+ (1,0) [0|255] "" XXX SG_ SET_ME_41 : 47|8@0+ (1,0) [0|255] "" XXX -BO_ 480 LFAHDA_CLUSTER: 16 ADRV +BO_ 480 LFAHDA_CLUSTER: 16 FR_CMR SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_4 : 24|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_5 : 25|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_2 : 30|1@0+ (1,0) [0|1] "" XXX - SG_ HDA_ICON : 31|1@1+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_1 : 32|3@1+ (1,0) [0|7] "" XXX - SG_ LFA_ICON : 47|2@1+ (1,0) [0|3] "" XXX - SG_ NEW_SIGNAL_3 : 49|1@0+ (1,0) [0|1] "" XXX + SG_ HDA_OptUsmSta : 24|3@1+ (1,0) [0|0] "" CGW + SG_ LFA_OptUsmSta : 27|3@1+ (1,0) [0|0] "" CGW + SG_ HDA_CntrlModSta : 30|2@1+ (1,0) [0|0] "" CGW + SG_ HDA_InfoPUDis : 32|3@1+ (1,0) [0|0] "" CGW + SG_ HDA_AutoSetSpdSta : 35|2@1+ (1,0) [0|0] "" CGW + SG_ HDA_AutoSetSpdUpdtSta : 37|2@1+ (1,0) [0|0] "" CGW + SG_ HDA_AutoSetSpdVal : 39|8@1+ (1,0) [0|0] "km/h" CGW + SG_ HDA_LFA_SymSta : 47|2@1+ (1,0) [0|0] "" CGW + SG_ HDA_LFA_WrnSnd : 49|2@1+ (1,0) [0|0] "" Dummy + SG_ HDA_InfoPUDis1 : 51|3@1+ (1,0) [0|7] "" CLU,CGW + SG_ HDA_TDMRMDclReq : 54|2@1+ (1,0) [0|3] "" Dummy BO_ 485 BLINDSPOTS_FRONT_CORNER_1: 16 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -448,61 +563,55 @@ BO_ 485 BLINDSPOTS_FRONT_CORNER_1: 16 XXX BO_ 490 ADRV_0x1ea: 32 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX - SG_ SET_ME_1C : 31|8@0+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_1 : 32|2@1+ (1,0) [0|3] "" XXX - SG_ NEW_SIGNAL_2 : 47|2@0+ (1,0) [0|3] "" XXX - SG_ NEW_SIGNAL_3 : 55|8@0+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_4 : 64|6@1+ (1,0) [0|31] "" XXX - SG_ NEW_SIGNAL_5 : 72|2@1+ (1,0) [0|3] "" XXX - SG_ NEW_SIGNAL_6 : 75|5@1+ (1,0) [0|31] "" XXX - SG_ NEW_SIGNAL_7 : 80|5@1+ (1,0) [0|31] "" XXX - SG_ NEW_SIGNAL_8 : 88|7@1+ (1,0) [0|127] "" XXX - SG_ NEW_SIGNAL_9 : 96|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_4 : 25|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_3 : 26|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 27|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_1 : 28|1@0+ (1,0) [0|1] "" XXX + SG_ LEFT_BLINK_HOLD : 29|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT_BLINK_HOLD : 30|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_5 : 31|1@0+ (1,0) [0|1] "" XXX + SG_ HDA_MODE2 : 32|3@1+ (1,0) [0|3] "" XXX + SG_ LANE_LEFT : 36|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_6 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ LANE_RIGHT : 41|2@0+ (1,0) [0|3] "" XXX + SG_ LANE_CHANGING : 45|3@0+ (1,0) [0|1] "" XXX + SG_ LF_DETECT_DISTANCE : 46|11@1+ (0.1,0) [0|2047] "" XXX + SG_ LF_DETECT_LATERAL : 70|7@0+ (0.1,0) [0|127] "" XXX + SG_ LF_DETECT : 74|3@0+ (1,0) [0|7] "" XXX + SG_ RF_DETECT_DISTANCE : 75|11@1+ (0.1,0) [0|2047] "" XXX + SG_ RF_DETECT_LATERAL : 94|7@0+ (0.1,0) [0|127] "" XXX + SG_ RF_DETECT : 98|3@0+ (1,0) [0|7] "" XXX SG_ SET_ME_FF : 120|8@1+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_10 : 143|5@0+ (1,0) [0|31] "" XXX - SG_ NEW_SIGNAL_11 : 144|3@1+ (1,0) [0|7] "" XXX - SG_ NEW_SIGNAL_12 : 152|6@1+ (1,0) [0|63] "" XXX - SG_ NEW_SIGNAL_13 : 160|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_14 : 163|5@1+ (1,0) [0|31] "" XXX - SG_ NEW_SIGNAL_16 : 168|3@1+ (1,0) [0|7] "" XXX - SG_ NEW_SIGNAL_15 : 175|4@0+ (1,0) [0|63] "" XXX - SG_ NEW_SIGNAL_17 : 176|2@1+ (1,0) [0|3] "" XXX - SG_ NEW_SIGNAL_18 : 184|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_19 : 208|3@1+ (1,0) [0|7] "" XXX - SG_ NEW_SIGNAL_20 : 212|1@0+ (1,0) [0|1] "" XXX - SG_ SET_ME_TMP_F : 232|5@1+ (1,0) [0|31] "" XXX - SG_ SET_ME_TMP_F_2 : 240|5@1+ (1,0) [0|31] "" XXX + SG_ LR_DETECT_DISTANCE : 139|8@1+ (0.1,0) [0|511] "m" XXX + SG_ LR_DETECT_LATERAL : 152|6@1+ (0.1,0) [0|63] "" XXX + SG_ LR_DETECT : 162|3@0+ (1,0) [0|1] "" XXX + SG_ RR_DETECT_DISTANCE : 163|8@1+ (0.1,0) [0|511] "m" XXX + SG_ RR_DETECT_LATERAL : 172|6@1+ (0.1,0) [0|63] "" XXX + SG_ RR_DETECT : 186|3@0+ (1,0) [0|1] "" XXX + SG_ AUTOLANECHANGE_MSG : 207|4@0+ (1,0) [0|3] "" XXX + SG_ LANELINE_CURVATURE : 208|4@1+ (1,0) [0|31] "" XXX + SG_ LANELINE_CURVATURE_DIRECTION : 212|1@0+ (1,0) [0|1] "" XXX + SG_ LANELINE_LEFT_POSITION : 239|8@0+ (1,0) [0|255] "" XXX + SG_ LANELINE_RIGHT_POSITION : 247|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 248|1@0+ (1,0) [0|1] "" XXX -BO_ 506 FR_CMR_02_100ms: 32 FR_CMR - SG_ FR_CMR_Crc2Val : 0|16@1+ (1,0) [0|65535] "" CGW - SG_ FR_CMR_AlvCnt2Val : 16|8@1+ (1,0) [0|255] "" CGW - SG_ ISLW_OptUsmSta : 24|2@1+ (1,0) [0|3] "" CLU,CGW - SG_ ISLW_SysSta : 26|2@1+ (1,0) [0|3] "" CLU,CGW - SG_ ISLW_NoPassingInfoDis : 28|3@1+ (1,0) [0|7] "" CLU,CGW - SG_ ISLW_OvrlpSignDis : 31|2@1+ (1,0) [0|3] "" CLU,CGW - SG_ ISLW_SpdCluMainDis : 33|8@1+ (1,0) [0|255] "" CLU,CGW - SG_ ISLW_SpdNaviMainDis : 41|8@1+ (1,0) [0|255] "" CGW - SG_ ISLW_SubCondinfoSta1 : 49|4@1+ (1,0) [0|15] "" CLU,CGW - SG_ ISLW_SubCondinfoSta2 : 53|4@1+ (1,0) [0|15] "" CLU,CGW - SG_ ISLW_SpdCluSubMainDis : 64|8@1+ (1,0) [0|255] "" CLU - SG_ ISLW_SpdCluDisSubCond1 : 72|8@1+ (1,0) [0|255] "" CLU,CGW - SG_ ISLW_SpdCluDisSubCond2 : 80|8@1+ (1,0) [0|255] "" CLU,CGW - SG_ ISLW_SpdNaviSubMainDis : 88|8@1+ (1,0) [0|255] "" CLU - SG_ ISLW_SpdNaviDisSubCond1 : 96|8@1+ (1,0) [0|255] "" CLU,CGW - SG_ ISLW_SpdNaviDisSubCond2 : 104|8@1+ (1,0) [0|255] "" CLU,CGW - SG_ ISLA_SpdwOffst : 112|8@1+ (1,0) [0|255] "" CLU,CGW - SG_ ISLA_SwIgnoreReq : 120|2@1+ (1,0) [0|3] "" CGW - SG_ ISLA_SpdChgReq : 122|2@1+ (1,0) [0|3] "" CGW - SG_ ISLA_SpdWrn : 124|2@1+ (1,0) [0|3] "" CLU,CGW - SG_ ISLA_IcyWrn : 126|2@1+ (1,0) [0|3] "" CLU,CGW - SG_ ISLA_SymFlashMod : 128|3@1+ (1,0) [0|7] "" CLU,CGW - SG_ ISLA_Popup : 131|3@1+ (1,0) [0|7] "" CLU - SG_ ISLA_OptUsmSta : 136|3@1+ (1,0) [0|7] "" CLU,CGW - SG_ ISLA_OffstUsmSta : 139|3@1+ (1,0) [0|7] "" CLU,CGW - SG_ ISLA_AutoUsmSta : 142|2@1+ (1,0) [0|3] "" CLU,CGW - SG_ ISLA_Cntry : 144|4@1+ (1,0) [0|15] "" CLU,CGW - SG_ ISLA_AddtnlSign : 149|5@1+ (1,0) [0|31] "" CLU,CGW - SG_ ISLA_SchoolZone : 154|2@1+ (1,0) [0|3] "" CLU,CGW +BO_ 506 CLUSTER_SPEED_LIMIT: 32 CAM + SG_ SPEED_LIMIT_1 : 39|7@0+ (1,0) [0|255] "" XXX + SG_ SPEED_LIMIT_2 : 47|7@0+ (1,0) [0|255] "" XXX + SG_ SECONDARY_LIMIT_1 : 79|8@0+ (1,0) [0|127] "" XXX + SG_ SECONDARY_LIMIT_2 : 103|8@0+ (1,0) [0|127] "" XXX + SG_ SPEED_LIMIT_3 : 119|8@0+ (1,0) [0|255] "" XXX + SG_ ARROW_DOWN : 120|1@0+ (1,0) [0|1] "" XXX + SG_ ARROW_UP : 121|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 122|3@1+ (1,0) [0|7] "" XXX + SG_ SPEED_CHANGE_BLINKING : 129|1@1+ (1,0) [0|3] "" XXX + SG_ CHIME_1 : 133|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_4 : 143|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 146|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_1 : 147|7@1+ (1,0) [0|127] "" XXX + SG_ SCHOOL_ZONE : 155|1@0+ (1,0) [0|1] "" XXX + SG_ SPEED_LIMIT_4 : 215|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_5 : 223|8@0+ (1,0) [0|255] "" XXX BO_ 507 CAM_0x1fb: 32 CAMERA SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -512,54 +621,158 @@ BO_ 512 ADRV_0x200: 8 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ SET_ME_E1 : 24|8@1+ (1,0) [0|255] "" XXX - SG_ SET_ME_3A : 32|8@1+ (1,0) [0|255] "" XXX + SG_ TauGapSet : 32|3@1+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_2 : 35|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_1 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ TauGapSet_ : 42|3@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_3 : 47|5@0+ (1,0) [0|31] "" XXX + +BO_ 513 RADAR_0x201: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 528 RADAR_0x210: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 529 RADAR_0x211: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 530 RADAR_0x212: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 531 RADAR_0x213: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 532 RADAR_0x214: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 533 RADAR_0x215: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 534 RADAR_0x216: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 535 RADAR_0x217: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 536 RADAR_0x218: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 537 RADAR_0x219: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 538 RADAR_0x21a: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 539 RADAR_0x21b: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 540 RADAR_0x21c: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 541 RADAR_0x21d: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 542 RADAR_0x21e: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 543 RADAR_0x21f: 32 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 560 HCU_STATUS_230: 32 XXX + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HYBRID_POWER_FLOW_MODE : 170|4@1+ (1,0) [0|15] "" XXX + +CM_ BO_ 560 "Hyundai/Kia CAN-FD hybrid power-flow status observed on ECAN at 10 Hz; ACAN 0x230/DLC16 is an unrelated radar frame."; +CM_ SG_ 560 HYBRID_POWER_FLOW_MODE "Reverse-engineered enum; observed values 1, 2, and 6 correspond to the OEM EV indicator being on."; + +BO_ 576 RADAR_0x240: 16 FRONT_RADAR + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX BO_ 593 RADAR_0x251: 16 FRONT_RADAR SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX -BO_ 687 HOD_FD_01_100ms: 8 XXX - SG_ HOD_Dir_Status : 18|3@0+ (1,0) [0|7] "" XXX - SG_ NEW_SIGNAL_2 : 32|8@1+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_3 : 40|8@1+ (1,0) [0|255] "" XXX - SG_ HOD_Option : 48|2@1+ (1,0) [0|255] "" XXX +BO_ 674 CAM_0x2a2: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX -BO_ 698 FR_CMR_04_40ms: 32 FR_CMR - SG_ FR_CMR_Crc4Val : 0|16@1+ (1,0) [0|65535] "" Dummy - SG_ FR_CMR_AlvCnt4Val : 16|8@1+ (1,0) [0|255] "" Dummy - SG_ IFSref_FR_CMR_Sta : 24|2@1+ (1,0) [0|3] "" CGW - SG_ IFSref_VehNumVal : 26|4@1+ (1,0) [0|15] "" CGW - SG_ IFSref_ILLAmbtSta : 30|2@1+ (0.1,0) [0|0.3] "" CGW - SG_ IFSref_VehLftAngl1Val : 32|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehRtAngl1Val : 41|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehLftAngl2Val : 50|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehDst1Val : 59|4@1+ (1,0) [0|15] "" CGW - SG_ IFSref_VehRtAngl2Val : 64|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehLftAngl3Val : 73|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehRtAngl3Val : 82|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehLftAngl4Val : 91|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehRtAngl4Val : 100|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehLftAngl5Val : 109|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehRtAngl5Val : 118|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehLftAngl6Val : 128|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehRtAngl6Val : 137|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehLftAngl7Val : 146|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehRtAngl7Val : 155|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehLftAngl8Val : 164|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehRtAngl8Val : 173|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehLftAngl9Val : 182|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehRtAngl9Val : 192|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehLftAngl10Val : 201|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehRtAngl10Val : 210|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW - SG_ IFSref_VehDst2Val : 219|4@1+ (1,0) [0|15] "" CGW - SG_ IFSref_VehDst3Val : 223|4@1+ (1,0) [0|15] "" CGW - SG_ IFSref_VehDst4Val : 227|4@1+ (1,0) [0|15] "" CGW - SG_ IFSref_VehDst5Val : 231|4@1+ (1,0) [0|15] "" CGW - SG_ IFSref_VehDst6Val : 235|4@1+ (1,0) [0|15] "" CGW - SG_ IFSref_VehDst7Val : 239|4@1+ (1,0) [0|15] "" CGW - SG_ IFSref_VehDst8Val : 243|4@1+ (1,0) [0|15] "" CGW - SG_ IFSref_VehDst9Val : 247|4@1+ (1,0) [0|15] "" CGW - SG_ IFSref_VehDst10Val : 251|4@1+ (1,0) [0|15] "" CGW +BO_ 675 CAM_0x2a3: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 676 CAM_0x2a4: 24 XXX + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ LEFT_LANE_PROB : 31|8@0+ (1,0) [0|255] "" XXX + SG_ RIGHT_LANE_PROB : 39|8@0+ (1,0) [0|255] "" XXX + SG_ LEFT_LANE_TYPE : 43|4@0+ (1,0) [0|15] "" XXX + SG_ RIGHT_LANE_TYPE : 47|4@0+ (1,0) [0|15] "" XXX + SG_ LEFT_LANE_COLOR : 48|4@1+ (1,0) [0|15] "" XXX + SG_ RIGHT_LANE_COLOR : 52|4@1+ (1,0) [0|15] "" XXX + SG_ LEFT_LANE_LINE : 56|2@1+ (1,0) [0|3] "" XXX + SG_ SET_ME_0 : 58|2@1+ (1,0) [0|3] "" XXX + SG_ RIGHT_LANE_LINE : 60|2@1+ (1,0) [0|3] "" XXX + SG_ SET_ME_0_2 : 62|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_2 : 67|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_1 : 71|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_4 : 75|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_3 : 79|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 80|10@1- (1,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_6 : 96|10@1- (1,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_7 : 112|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_8 : 128|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_9 : 144|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_10 : 160|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_11 : 176|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_12 : 192|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_13 : 208|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_14 : 224|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_15 : 240|16@1+ (1,0) [0|65535] "" XXX + +BO_ 687 STEER_TOUCH_2AF: 8 XXX + SG_ CHECKSUM_ : 7|8@0+ (1,0) [0|255] "" XXX + SG_ COUNTER_ : 8|8@1+ (1,0) [0|255] "" XXX + SG_ TOUCH_DETECT : 23|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ TOUCH1 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ TOUCH2 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_3 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_4 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 699 CAM_0x2bb: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 700 CAM_0x2bc: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 701 CAM_0x2bd: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + +BO_ 702 CAM_0x2be: 32 CAMERA + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX BO_ 736 MANUAL_SPEED_LIMIT_ASSIST: 32 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -577,42 +790,45 @@ BO_ 837 ADRV_0x345: 8 ADRV BO_ 866 CAM_0x362: 32 CAMERA SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE3 : 24|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE4 : 32|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE5 : 40|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE6 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ LEFT_LANE_PROB : 31|8@0+ (1,0) [0|255] "" XXX + SG_ RIGHT_LANE_PROB : 39|8@0+ (1,0) [0|255] "" XXX + SG_ LEFT_LANE_TYPE : 43|4@0+ (1,0) [0|15] "" XXX + SG_ RIGHT_LANE_TYPE : 47|4@0+ (1,0) [0|15] "" XXX + SG_ LEFT_LANE_COLOR : 48|4@1+ (1,0) [0|15] "" XXX + SG_ RIGHT_LANE_COLOR : 52|4@1+ (1,0) [0|15] "" XXX SG_ LEFT_LANE_LINE : 56|2@1+ (1,0) [0|3] "" XXX SG_ SET_ME_0 : 58|2@1+ (1,0) [0|3] "" XXX SG_ RIGHT_LANE_LINE : 60|2@1+ (1,0) [0|3] "" XXX SG_ SET_ME_0_2 : 62|2@1+ (1,0) [0|3] "" XXX - SG_ BYTE8 : 64|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE9 : 72|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE10 : 80|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE11 : 88|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE12 : 96|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE13 : 104|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE14 : 112|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE15 : 120|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE16 : 128|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE17 : 136|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE18 : 144|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE19 : 152|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE20 : 160|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE21 : 168|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE22 : 176|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE23 : 184|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE24 : 192|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE25 : 200|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE26 : 208|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE27 : 216|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE28 : 224|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE29 : 232|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE30 : 240|8@1+ (1,0) [0|255] "" XXX - SG_ BYTE31 : 248|8@1+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 67|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_1 : 71|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_4 : 75|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_3 : 79|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 80|10@1- (1,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_6 : 96|10@1- (1,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_7 : 112|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_8 : 128|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_9 : 144|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_10 : 160|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_11 : 176|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_12 : 192|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_13 : 208|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_14 : 224|16@1+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_15 : 240|16@1+ (1,0) [0|65535] "" XXX BO_ 874 BLINDSPOTS_FRONT_CORNER_2: 16 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ RIGHT_BSD : 27|1@0+ (1,0) [0|1] "" XXX + SG_ LEFT_BSD : 28|1@0+ (1,0) [0|1] "" XXX + +BO_ 928 TPMS: 16 XXX + SG_ PRESSURE_FL : 39|8@0+ (1,0) [0|255] "" XXX + SG_ PRESSURE_FR : 47|8@0+ (1,0) [0|255] "" XXX + SG_ PRESSURE_RL : 55|8@0+ (1,0) [0|255] "" XXX + SG_ PRESSURE_RR : 63|8@0+ (1,0) [0|255] "" XXX + SG_ STATUS_TPMS : 66|3@0+ (1,0) [0|3] "" XXX + SG_ UNIT : 68|2@0+ (1,0) [0|3] "" XXX BO_ 961 BLINKER_STALKS: 8 XXX SG_ CHECKSUM_MAYBE : 7|8@0+ (1,0) [0|255] "" XXX @@ -623,6 +839,16 @@ BO_ 961 BLINKER_STALKS: 8 XXX SG_ LEFT_BLINKER : 30|1@0+ (1,0) [0|1] "" XXX SG_ RIGHT_BLINKER : 32|1@0+ (1,0) [0|1] "" XXX +BO_ 995 BLINKERS_ALT: 16 XXX + SG_ LEFT_BLINKER : 74|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT_BLINKER : 76|1@0+ (1,0) [0|1] "" XXX + SG_ LEFT_LAMP_ALT : 89|1@0+ (1,0) [0|1] "" XXX + SG_ LEFT_LAMP : 90|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT_LAMP_ALT : 91|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT_LAMP : 92|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_2 : 95|1@0+ (1,0) [0|1] "" XXX + SG_ BLINKER_ACTIVE : 97|1@0+ (1,0) [0|1] "" XXX + BO_ 1041 DOORS_SEATBELTS: 8 XXX SG_ CHECKSUM_MAYBE : 7|8@0+ (1,0) [0|65535] "" XXX SG_ COUNTER_ALT : 15|4@0+ (1,0) [0|15] "" XXX @@ -643,6 +869,12 @@ BO_ 1043 BLINKERS: 8 XXX SG_ RIGHT_LAMP_ALT : 61|1@0+ (1,0) [0|1] "" XXX SG_ USE_ALT_LAMP : 62|1@0+ (1,0) [0|1] "" XXX +BO_ 1052 LIGHT_SENSOR: 8 XXX + SG_ CHECKSUM_MAYBE : 7|8@0+ (1,0) [0|255] "" XXX + SG_ COUNTER_ALT : 15|4@0+ (1,0) [0|15] "" XXX + SG_ IS_DARK : 19|1@0+ (1,0) [0|1] "" XXX + SG_ LIGHT_LEVEL : 24|10@1+ (1,0) [0|1023] "" XXX + BO_ 1144 DRIVE_MODE: 8 XXX SG_ DRIVE_MODE : 0|16@1+ (1,-61611) [0|61611] "" XXX SG_ DRIVE_MODE2 : 28|3@1+ (1,0) [1|3] "" XXX @@ -660,6 +892,47 @@ BO_ 1151 HVAC_TOUCH_BUTTONS: 8 XXX SG_ RECIRC_BUTTON : 48|1@0+ (1,0) [0|1] "" XXX SG_ HEAT_BUTTON : 52|1@0+ (1,0) [0|1] "" XXX +BO_ 1187 HDA_INFO_4A3: 8 XXX + SG_ LinkClass : 0|3@1+ (1,0) [0|7] "" XXX + SG_ Frwinfo : 3|3@1+ (1,0) [0|7] "" XXX + SG_ SpeedUnit : 6|2@1+ (1,0) [0|3] "" XXX + SG_ SPEED_LIMIT : 15|8@0+ (1,0) [0|255] "" XXX + SG_ CountryCode : 16|10@1+ (1,0) [0|1023] "" XXX + SG_ MapSource : 27|3@1+ (1,0) [0|7] "" XXX + SG_ TollExist : 30|2@1+ (1,0) [0|3] "" XXX + SG_ TunnelExist : 38|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_6 : 47|24@0+ (1,0) [0|16777215] "" XXX + +BO_ 1204 NEW_MSG_4B4: 8 XXX + SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_8 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX + SG_ NEW_SIGNAL_7 : 35|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_3 : 39|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_4 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_5 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_6 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1209 NEW_MSG_4B9: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1214 NEW_MSG_4BE: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + BO_ 1240 CLUSTER_INFO: 8 XXX SG_ DISTANCE_UNIT : 0|1@1+ (1,0) [0|1] "" XXX @@ -673,166 +946,41 @@ BO_ 1264 LOCAL_TIME: 8 XXX SG_ HOURS : 12|5@0+ (1,0) [0|31] "" XXX SG_ MINUTES : 21|6@0+ (1,0) [0|63] "" XXX SG_ SECONDS : 31|8@0+ (1,0) [0|59] "" XXX + SG_ MONTH : 37|4@0+ (1,0) [0|15] "" XXX + SG_ YEAR : 47|8@0+ (1,0) [0|255] "" XXX + SG_ DATE : 48|5@1+ (1,0) [0|31] "" XXX +CM_ SG_ 80 HAS_LANE_SAFETY "If 0, hides LKAS 'Lane Safety' menu from vehicle settings"; CM_ SG_ 96 BRAKE_PRESSURE "User applied brake pedal pressure. Ramps from computer applied pressure on falling edge of cruise. Cruise cancels if !=0"; CM_ SG_ 101 BRAKE_POSITION "User applied brake pedal position, max is ~700. Signed on some vehicles"; -CM_ SG_ 203 ADAS_ActvACISta "ADAS Active AngleControlInterface State"; -CM_ SG_ 203 ADAS_ActvACILvl2Sta "ADAS Active AngleControlInterface Level 2 State"; -CM_ SG_ 203 ADAS_StrAnglReqVal "(LFA) ADAS Steering Angle Request Value; Capped at 119.9;"; -CM_ SG_ 203 ADAS_ACIAnglTqRedcGainVal "(LFA) ADAS AngleControlInterface Angle Torque Reduction Gain Value"; -CM_ SG_ 203 FCA_ESA_ActvSta "FCA_ESA Active State"; -CM_ SG_ 203 FCA_ESA_TqBstGainVal "FCA_ESA Torque Boost Gain Value"; -CM_ BO_ 272 "Alternative LKAS message, used on cars such as 2023 Ioniq 6, 2nd gen Kona. Matches LKAS except size is 32 bytes"; -CM_ SG_ 272 LKA_AVAILABLE "Angle control cars: 3 when LKA is generally available, goes to 0 during changes with LFA"; -CM_ SG_ 272 ADAS_StrAnglReqVal "(LKAS) ADAS Steering Angle Request Value; Capped at 176.7; tracks MDPS->STEERING_ANGLE when not engaged, not STEERING_SENSORS->STEERING_ANGLE"; -CM_ SG_ 272 ADAS_ACIAnglTqRedcGainVal "(LKAS) ADAS AngleControlInterface Angle Torque Reduction Gain Value"; -CM_ BO_ 282 "Sent by the camera containing DAW (Driver Attention Warning) information and information about HBA (High Beam Assist)."; -CM_ SG_ 282 FR_CMR_Crc1Val "The data area for CRC calculation is based on the data length (DLC) of the message DB. The CRC shall be calculated over the entire data block (excluding the CRC bytes) including the user data, alive counter and Data ID - CRC Polynomial (0x1021) , In"; -CM_ SG_ 282 FR_CMR_AlvCnt1Val "For the first transmission request for a data element the counter shall be initialized with 0 and shall be incremented by 1 for every subsequent send request. When the counter reaches the maximum value(0xFF), then it shall restart with 0 for the next s"; -CM_ SG_ 282 HBA_SysOptSta "HBA System Option Information to Lamp Controller"; -CM_ SG_ 282 HBA_SysSta "This signal indicates the status of High Beam Assist system."; -CM_ SG_ 282 HBA_IndLmpReq "HBA System Indicator Lamp Status"; -CM_ SG_ 282 FCA_Equip_MFC "FCA Sensor Type"; -CM_ SG_ 282 HBA_OptUsmSta "HBA Option USM Status"; -CM_ SG_ 282 DAW_LVDA_PUDis "Message for displaying LVDA(Leading Vehicle Departure Alert) Warning"; -CM_ SG_ 282 DAW_LVDA_OptUsmSta "LVDA USM state"; -CM_ SG_ 282 DAW_OptUsmSta "This signal represents the lastest DAW ON/OFF value of USM."; -CM_ SG_ 282 DAW_SysSta "This signal represents Attention Assist System Status or Attention Level."; -CM_ SG_ 282 DAW_WrnMsgSta "0x1 value requests DAW Rest recommend warning message popup at CLU. 0x2 value requests HDA/LFA Hands-Off call at TMS."; -CM_ SG_ 282 DAW_TimeRstReq "This signal requests CLU 'Last Break Time' Reset. DAW send '0x1' when detecting driver's rest."; -CM_ SG_ 282 DAW_SnstvtyModRetVal "This signal represents the feedback value of the current ADAS warning timing."; -CM_ SG_ 282 FR_CMR_SCCEquipSta "This signal indicates equipment for SCC"; -CM_ SG_ 282 FR_CMR_ReqADASMapMsgVal "This signal indicates an ADAS map message request from FR_CMR to H_U. Each bit indicates the request messages as follows. - Bit 0 : H_U_NAVI_V2_STUB_E - Bit 1 : HU_NAVI_V2_PROSHORT_E_00 (곡률) - Bit 2 : HU_NAVI_V2_PROSHORT_E_00 (곡률 외 정보)"; -CM_ SG_ 282 FR_CMR_SwVer1Val "This signal indicates a major version of FR_CMR software. If FR_CMR software version is A.00, 'A' and '00' mean major and minor version respectively."; -CM_ SG_ 282 FR_CMR_SwVer2Val "This signal indicates a minor version of FR_CMR software. If FR_CMR software version is A.00, 'A' and '00' mean major and minor version respectively."; -CM_ SG_ 298 NEW_SIGNAL_4 "todo: figure out why always set to 9"; +CM_ SG_ 272 LKAS_ANGLE_CMD "tracks MDPS->STEERING_ANGLE when not engaged, not STEERING_SENSORS->STEERING_ANGLE"; CM_ SG_ 352 SET_ME_9 "has something to do with AEB settings"; CM_ SG_ 373 ACCEnable "Likely a copy of CAN's TCS13->ACCEnable"; CM_ SG_ 373 DriverBraking "Likely derived from BRAKE->BRAKE_POSITION"; CM_ SG_ 373 DriverBrakingLowSens "Higher threshold version of DriverBraking"; CM_ SG_ 373 PROBABLY_EQUIP "aeb equip?"; CM_ SG_ 416 VSetDis "set speed in display units"; -CM_ BO_ 437 "Sent by the camera containing lane and lead information."; -CM_ SG_ 437 FR_CMR_Crc3Val "The data area for CRC calculation is based on the data length (DLC) of the message DB. The CRC shall be calculated over the entire data block (excluding the CRC bytes) including the user data, alive counter and Data ID - CRC Polynomial (0x1021) , In"; -CM_ SG_ 437 FR_CMR_AlvCnt3Val "For the first transmission request for a data element the counter shall be initialized with 0 and shall be incremented by 1 for every subsequent send request. When the counter reaches the maximum value(0xFF), then it shall restart with 0 for the next s"; -CM_ SG_ 437 Info_LftLnQualSta "This signal indicates the quality of left line."; -CM_ SG_ 437 Info_LftLnDptSta "This signal indicates the lane departure status of left line."; -CM_ SG_ 437 Info_LftLnPosVal "This signal outputs the position of left line from camera center."; -CM_ SG_ 437 Info_LftLnHdingAnglVal "This signal outputs the heading angle of left line."; -CM_ SG_ 437 Info_LftLnCvtrVal "This signal outputs the curvature of left line."; -CM_ SG_ 437 Info_RtLnQualSta "This signal indicates the quality of right line."; -CM_ SG_ 437 Info_RtLnDptSta "This signal indicates the lane departure status of right line."; -CM_ SG_ 437 Info_RtLnPosVal "This signal outputs the position of right line from camera center."; -CM_ SG_ 437 Info_RtLnHdingAnglVal "This signal outputs the heading angle of right line."; -CM_ SG_ 437 Info_RtLnCvtrVal "This signal outputs the curvature of right line."; -CM_ SG_ 437 ID_CIPV "Valid Object = 1 to 255 - ID detected by front camera can vary depending on vehicle environment. - Additional logic would be required to apply this signal for ISG."; -CM_ SG_ 437 Relative_Velocity "+ : Preceding, - : Oncoming - Velocity detected by front camera can vary depending on vehicle environment. - Additional logic would be required to apply this signal for ISG. - Confirmaiton by Autonomous Driving Engineering Team is required to use ID_C"; -CM_ SG_ 416 SCC_ObjSta "state of in-path object and information of controllable state."; -CM_ SG_ 480 NEW_SIGNAL_5 "todo: figure out why always set to 1"; -CM_ BO_ 506 "Sent by the camera containing speed limit information. ISLW stands for Intelligent Speed Limit Warning, and ISLA is Intelligent Speed Limit Assist. it also contains road sign information."; -CM_ SG_ 506 FR_CMR_Crc2Val "The data area for CRC calculation is based on the data length (DLC) of the message DB.The CRC shall be calculated over the entire data block (excluding the CRC bytes) including the user data, alive counter and Data ID - CRC Polynomial (0x1021) , In"; -CM_ SG_ 506 FR_CMR_AlvCnt2Val "For the first transmission request for a data element the counter shall be initialized with 0 and shall be incremented by 1 for every subsequent send request. When the counter reaches the maximum value(0xFF), then it shall restart with 0 for the next s"; -CM_ SG_ 506 ISLW_OptUsmSta "ISLW option information"; -CM_ SG_ 506 ISLW_SysSta "Validity of ISLW information"; -CM_ SG_ 506 ISLW_NoPassingInfoDis "This signal indicates additional information of ISLW. For example no passing."; -CM_ SG_ 506 ISLW_OvrlpSignDis "indicates presence of Overlap sign"; -CM_ SG_ 506 ISLW_SpdCluMainDis "Main Speed Information for cluster display in main page(0x1~0xFCH: 1*(HEX VALUE) [KPH or MPH :Reference signal is CF_Clu_SPEED_UNIT of CLU])"; -CM_ SG_ 506 ISLW_SpdNaviMainDis "Main Speed information for navigation display in main page(0x1~0xFCH: 1*(HEX VALUE) [KPH or MPH :Reference signal is Navi_ISLW_SpdUnit of Navigation)"; -CM_ SG_ 506 ISLW_SubCondinfoSta1 "Indicates 1st conditional traffic sign status"; -CM_ SG_ 506 ISLW_SubCondinfoSta2 "Indicates 2nd conditional traffic sign status"; -CM_ SG_ 506 ISLW_SpdCluSubMainDis "Main Speed Information for cluster display in ISLW detail page"; -CM_ SG_ 506 ISLW_SpdCluDisSubCond1 "Indicates conditional speed limit/no passing of 1st conditional traffic sign for Cluster in ISLW Detail page"; -CM_ SG_ 506 ISLW_SpdCluDisSubCond2 "Indicates conditional speed limit/no passing of 2nd conditional traffic sign for Cluster in ISLW Detail page"; -CM_ SG_ 506 ISLW_SpdNaviSubMainDis "Main Speed Information for NAVI display in ISLW detail page"; -CM_ SG_ 506 ISLW_SpdNaviDisSubCond1 "Indicates conditional speed limit/no passing of 1st conditional traffic sign for NAVI in ISLW Detail page"; -CM_ SG_ 506 ISLW_SpdNaviDisSubCond2 "Indicates conditional speed limit/no passing of 2nd conditional traffic sign for NAVI in ISLW Detail page"; -CM_ SG_ 506 ISLA_SpdwOffst "This is a ISLA speed with offset to change the set speed of MSLA/CC/SCC.Unit (kph or mph) refers to cluster signal: CLU_SpdUnitTyp@CLU_01_20ms"; -CM_ SG_ 506 ISLA_SwIgnoreReq "This is a signal requesting to ignore the -(SET) or +(SET) switch input of the driver."; -CM_ SG_ 506 ISLA_SpdChgReq "This is a signal requesting to change the set speed of MSLA/CC/SCC to the ISLA speed."; -CM_ SG_ 506 ISLA_SpdWrn "This is a warning signal when VANZ exceeds the speed limit."; -CM_ SG_ 506 ISLA_IcyWrn "This is a warning signal when the snow or ice sign is recognized when it is less than 4 'C."; -CM_ SG_ 506 ISLA_SymFlashMod "This is a signal for the flashing mode of the symbol."; -CM_ SG_ 506 ISLA_Popup "This is a signal for ISLA pop-up."; -CM_ SG_ 506 ISLA_OptUsmSta "This is a ISLA option USM signal set by the driver."; -CM_ SG_ 506 ISLA_OffstUsmSta "This is a signal for offset speed set by the driver. Unit (kph or mph) refers to cluster signal: CLU_SpdUnitTyp@CLU_01_20ms"; -CM_ SG_ 506 ISLA_AutoUsmSta "This is a signal for ISLA AUTO USM set by the driver."; -CM_ SG_ 506 ISLA_Cntry "This is a signal for categorizing countries"; -CM_ SG_ 506 ISLA_AddtnlSign "This is a signal for additional sign"; -CM_ SG_ 506 ISLA_SchoolZone "This is a signal for School Zone"; -CM_ SG_ 687 HOD_Dir_Status "This signal indicates the status of hands on/off"; -CM_ BO_ 698 "Sent by the camera containing information about vehicles in front of us. IFS stands for Intelligent Front-lighting System, and this signal provides the information necessary for it to operate."; -CM_ SG_ 698 FR_CMR_Crc4Val "The data area for CRC calculation is based on the data length (DLC) of the message DB. The CRC shall be calculated over the entire data block (excluding the CRC bytes) including the user data, alive counter and Data ID - CRC Polynomial (0x1021) , In"; -CM_ SG_ 698 FR_CMR_AlvCnt4Val "For the first transmission request for a data element the counter shall be initialized with 0 and shall be incremented by 1 for every subsequent send request. When the counter reaches the maximum value(0xFF), then it shall restart with 0 for the next s"; -CM_ SG_ 698 IFSref_FR_CMR_Sta "This is IFS system status needed for operate the IFS function of headlamp highbeam"; -CM_ SG_ 698 IFSref_VehNumVal "This is number of vehicles detected from camera"; -CM_ SG_ 698 IFSref_ILLAmbtSta "This signal is status of the ambient brightness 0x0 is bright condition (HighBeam off), 0x1 is dark condition (None)"; -CM_ SG_ 698 IFSref_VehLftAngl1Val "This is left angle of vehicle 1 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehRtAngl1Val "This is right angle of vehicle 1 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehLftAngl2Val "This is left angle of vehicle 2 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehDst1Val "IFSref_VehicleDistance1Value"; -CM_ SG_ 698 IFSref_VehRtAngl2Val "This is right angle of vehicle 2 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehLftAngl3Val "This is left angle of vehicle 3 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehRtAngl3Val "This is right angle of vehicle 3 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehLftAngl4Val "This is left angle of vehicle 4 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehRtAngl4Val "This is right angle of vehicle 4 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehLftAngl5Val "This is left angle of vehicle 5 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehRtAngl5Val "This is right angle of vehicle 5 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehLftAngl6Val "This is left angle of vehicle 6 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehRtAngl6Val "This is right angle of vehicle 6 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehLftAngl7Val "This is left angle of vehicle 7 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehRtAngl7Val "This is right angle of vehicle 7 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehLftAngl8Val "This is left angle of vehicle 8 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehRtAngl8Val "This is right angle of vehicle 8 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehLftAngl9Val "This is left angle of vehicle 9 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehRtAngl9Val "This is right angle of vehicle 9 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehLftAngl10Val "This is left angle of vehicle 10 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehRtAngl10Val "This is right angle of vehicle 10 Deg = (HEX)*0.1-25"; -CM_ SG_ 698 IFSref_VehDst2Val "IFSref_VehicleDistance2Value"; -CM_ SG_ 698 IFSref_VehDst3Val "IFSref_VehicleDistance3Value"; -CM_ SG_ 698 IFSref_VehDst4Val "IFSref_VehicleDistance4Value"; -CM_ SG_ 698 IFSref_VehDst5Val "IFSref_VehicleDistance5Value"; -CM_ SG_ 698 IFSref_VehDst6Val "IFSref_VehicleDistance6Value"; -CM_ SG_ 698 IFSref_VehDst7Val "IFSref_VehicleDistance7Value"; -CM_ SG_ 698 IFSref_VehDst8Val "IFSref_VehicleDistance8Value"; -CM_ SG_ 698 IFSref_VehDst9Val "IFSref_VehicleDistance9Value"; -CM_ SG_ 698 IFSref_VehDst10Val "IFSref_VehicleDistance10Value"; +CM_ SG_ 676 LEFT_LANE_LINE "Left lane line confidence"; +CM_ SG_ 676 RIGHT_LANE_LINE "Right lane line confidence"; CM_ SG_ 736 MAX_SPEED "Display units. Restricts car from driving above this speed unless accelerator pedal is depressed beyond pressure point"; -CM_ BO_ 866 "Contains signals with detailed lane line information. Used by ADAS ECU on HDA 2 vehicles to operate LFA. Used on cars that use message 272."; CM_ SG_ 866 LEFT_LANE_LINE "Left lane line confidence"; CM_ SG_ 866 RIGHT_LANE_LINE "Right lane line confidence"; CM_ SG_ 961 COUNTER_ALT "only increments on change"; CM_ SG_ 1041 COUNTER_ALT "only increments on change"; -CM_ BO_ 1043 "Lamp signals do not seem universal on cars that use LKAS_ALT, but stalk signals do."; CM_ SG_ 1043 COUNTER_ALT "only increments on change"; CM_ SG_ 1043 USE_ALT_LAMP "likely 1 on cars that use alt lamp signals"; VAL_ 53 GEAR 0 "P" 5 "D" 6 "N" 7 "R"; -VAL_ 64 GEAR 0 "P" 5 "D" 6 "N" 7 "R"; +VAL_ 64 GEAR 0 "P" 5 "D" 6 "N" 7 "R" 4 "T"; VAL_ 69 GEAR 0 "P" 5 "D" 6 "N" 7 "R"; +VAL_ 80 LKA_MODE 1 "warning only" 2 "assist" 6 "off"; +VAL_ 80 LKA_ICON 0 "hidden" 1 "grey" 2 "green" 3 "flashing green"; VAL_ 96 TRACTION_AND_STABILITY_CONTROL 0 "On" 5 "Limited" 1 "Off"; VAL_ 112 GEAR 0 "P" 5 "D" 6 "N" 7 "R"; -VAL_ 203 ADAS_ActvACISta 0 "INIT" 1 "INACTIVE" 2 "ACTIVE35(ACTIVE)" 3 "ACTIVE33(Redundancy)" 4 "RESERVED" 5 "RESERVED" 6 "RESERVED" 7 "RESERVED" 8 "RESERVED" 9 "RESERVED" 10 "RESERVED" 11 "RESERVED" 12 "RESERVED" 13 "RESERVED" 14 "RESERVED" 15 "RESERVED"; -VAL_ 203 ADAS_ActvACILvl2Sta 0 "INIT" 1 "INACTIVE" 2 "ACTIVE35(ACTIVE)" 3 "RESERVED" 4 "RESERVED" 5 "RESERVED" 6 "RESERVED" 7 "RESERVED" 8 "RESERVED" 9 "RESERVED" 10 "RESERVED" 11 "RESERVED" 12 "RESERVED" 13 "RESERVED" 14 "RESERVED" 15 "RESERVED"; -VAL_ 203 ADAS_StrAnglReqVal 0 "0x0x000~0x3FFF:Real Values" 16383 "0x0x000~0x3FFF:Real Values"; -VAL_ 203 ADAS_ACIAnglTqRedcGainVal 0 "0x0x00~0xFA:Real Values" 250 "0x0x00~0xFA:Real Values" 251 "RESERVED" 252 "RESERVED" 253 "RESERVED" 254 "RESERVED" 255 "RESERVED"; -VAL_ 203 FCA_ESA_ActvSta 0 "Inactive" 1 "Active" 2 "RESERVED" 3 "RESERVED"; -VAL_ 203 FCA_ESA_TqBstGainVal 0 "0x0x00~0xFA:Real Values" 250 "0x0x00~0xFA:Real Values" 251 "RESERVED" 252 "RESERVED" 253 "RESERVED" 254 "RESERVED" 255 "RESERVED"; VAL_ 234 LKA_FAULT 0 "ok" 1 "lka fault"; +VAL_ 267 CRUISE_BUTTONS 8 "CRUISE_MAIN" 4 "CANCEL" 1 "RES" 2 "SET" 3 "GAP"; VAL_ 272 LKA_MODE 1 "warning only" 2 "assist" 6 "off"; VAL_ 272 LKA_ICON 0 "hidden" 1 "grey" 2 "green" 3 "flashing green"; -VAL_ 272 LKAS_ANGLE_ACTIVE 0 "off" 1 "not active" 2 "active"; -VAL_ 282 HBA_SysOptSta 0 "None HBA Option (Default)" 1 "HBA Option" 2 "Reserved" 3 "Error indicator"; -VAL_ 282 HBA_SysSta 0 "HBA Disable" 1 "HBA Enable & High Beam Off" 2 "HBA Enable & High Beam On" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "System Fail"; -VAL_ 282 HBA_IndLmpReq 0 "HBA Indicator Lamp Off" 1 "HBA Indicator Lamp On" 2 "Reserved" 3 "Error indicator"; -VAL_ 282 FCA_Equip_MFC 0 "No Coding" 1 "Sensor Fusion FCA" 2 "Camera only FCA" 3 "No FCA Option" 4 "ADAS_DRV Option" 5 "Reserved" 6 "Not used" 7 "Error indicator"; -VAL_ 282 HBA_OptUsmSta 0 "None HBA Option (Default)" 1 "HBA Function Off" 2 "HBA Function On" 3 "Invalid (Fail)"; -VAL_ 282 DAW_LVDA_PUDis 0 "Default" 1 "Display “Leading vehicle departure alert”" 2 "Reserved" 3 "Error indicator"; -VAL_ 282 DAW_LVDA_OptUsmSta 0 "No Option (default)" 1 "Off" 2 "On" 3 "Error Indicator"; -VAL_ 282 DAW_OptUsmSta 0 "None DAW Option (Default)" 1 "System Off" 2 "System On" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Invalid (Gray)"; -VAL_ 282 DAW_SysSta 0 "System Off" 1 "Attention Level 1" 2 "Attention Level 2" 3 "Attention Level 3" 4 "Attention Level 4" 5 "Attention Level 5" 6 "Reserved" 7 "Reserved" 8 "Reserved" 9 "Reserved" 10 "Reserved" 11 "Reserved" 12 "Reserved" 13 "Reserved" 14 "System Standby" 15 "System Fail"; -VAL_ 282 DAW_WrnMsgSta 0 "No Warning" 1 "Rest Recommend Warning" 2 "Hands-Off TMS call request" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Error indicator"; -VAL_ 282 DAW_TimeRstReq 0 "No signal" 1 "Time reset" 2 "Reserved" 3 "Error indicator"; -VAL_ 282 DAW_SnstvtyModRetVal 0 "Default" 1 "Late" 2 "Normal" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Invalid"; -VAL_ 282 FR_CMR_SCCEquipSta 0 "Not Applied" 1 "Applied" 2 "Not used" 3 "Error Indicator"; +VAL_ 272 LKAS_ANGLE_ACTIVE 1 "not active" 2 "active"; VAL_ 298 LKA_MODE 1 "warning only" 2 "assist" 6 "off"; VAL_ 298 LKA_ICON 0 "hidden" 1 "grey" 2 "green" 3 "flashing green"; VAL_ 304 PARK_BUTTON 1 "Pressed" 2 "Not Pressed"; @@ -858,7 +1006,7 @@ VAL_ 353 LANE_RIGHT 0 "HIDDEN" 1 "GREEN"; VAL_ 353 LANE_ZOOM 0 "ZOOM" 1 "HIDDEN"; VAL_ 353 ALERTS_1 0 "HIDDEN" 1 "WARNING_ONLY_CAR_CENTER" 2 "WARNING_ONLY_CAR_LEFT" 3 "WARNING_ONLY_CAR_RIGHT" 4 "WARNING_ONLY_LEFT" 5 "WARNING_ONLY_RIGHT" 11 "EMERGENCY_BRAKING_CAR_CENTER" 12 "EMERGENCY_BRAKING_CAR_LEFT" 13 "EMERGENCY_BRAKING_CAR_RIGHT" 14 "EMERGENCY_BRAKING_LEFT" 15 "EMERGENCY_BRAKING_RIGHT" 21 "EMERGENCY_STEERING_CAR_LEFT" 22 "EMERGENCY_STEERING_CAR_RIGHT" 23 "EMERGENCY_STEERING_CAR_LEFT_AWAY" 24 "EMERGENCY_STEERING_CAR_RIGHT_AWAY" 25 "EMERGENCY_STEERING_REAR_LEFT" 26 "EMERGENCY_STEERING_REAR_RIGHT" 33 "DRIVE_CAREFULLY"; VAL_ 353 ALERTS_2 0 "HIDDEN" 1 "KEEP_HANDS_ON_STEERING_WHEEL" 2 "KEEP_HANDS_ON_STEERING_WHEEL_RED" 3 "LANE_FOLLOWING_ASSIST_DEACTIVATED" 4 "HIGHWAY_DRIVING_ASSIST_DEACTIVATED" 5 "CONSIDER_TAKING_A_BREAK" 6 "PRESS_OK_BUTTON_TO_ENABLE_LANE_CHANGE_ASSIST" 7 "COLLISION_RISK_VEHICLE_TAKING_EMERGENCY_CONTROL" 8 "TAKE_CONTROL_OF_THE_VEHICLE_IMMEDIATELY_VEHICLE_IS_STOPPING" 9 "TAKE_CONTROL_OF_THE_VEHICLE_IMMEDIATELY" 11 "HIGHWAY_DRIVING_PILOT_SYSTEM_DEACTIVATED_AUDIBLE" 12 "KEEP_YOUR_EYES_ON_THE_ROAD" 13 "HIGHWAY_DRIVING_PILOT_CONDITIONS_NOT_MET_AUDIBLE" 14 "COLLISION_RISK_VEHICLE_TAKING_EMERGENCY_CONTROL" 15 "SET_THE_WIPER_AND_LIGHT_CONTROLS_TO_AUTO" 16 "BE_PREPARED_TO_TAKE_CONTROL_OF_THE_VEHICLE_AT_ANY_TIME" 21 "TAKE_CONTROL_OF_THE_VEHICLE_IMMEDIATELY_VEHICLE_IS_STOPPING" 10 "TAKE_CONTROL_OF_THE_VEHICLE_IMMEDIATELY"; -VAL_ 353 ALERTS_3 1 "AUTOMATICALLY_ADJUSTING_TO_THE_POSTED_SPEED_LIMIT" 2 "SET_SPEED_CHANGED" 3 "AUTOMATICALLY_ADJUSTING_TO_THE_POSTED_SPEED_LIMIT" 4 "SET_SPEED_CHANGED" 7 "DISTANCE_1" 8 "DISTANCE_2" 9 "DISTANCE_3" 10 "DISTANCE_4" 17 "DRIVE_CAREFULLY" 18 "CHECK_SURROUNDINGS" 19 "CONDITIONS_NOT_MET" 20 "LANES_NOT_DETECTED" 21 "CURVE_TOO_SHARP" 22 "LANE_TOO_NARROW" 23 "ROAD_TYPE_NOT_SUPPORTED" 24 "UNAVAILABLE_WITH_HAZARD_LIGHTS_ON" 25 "VEHICLE_SPEED_IS_TOO_LOW" 26 "KEEP_HANDS_ON_STEERING_WHEEL" 27 "LANE_TYPE_NOT_SUPPORTED" 28 "LANE_ASSIST_CANCELED_STEERING_INPUT_DETECTED" 0 "HIDDEN"; +VAL_ 353 ALERTS_3 0 "HIDDEN" 1 "AUTOMATICALLY_ADJUSTING_TO_THE_POSTED_SPEED_LIMIT" 2 "SET_SPEED_CHANGED" 3 "AUTOMATICALLY_ADJUSTING_TO_THE_POSTED_SPEED_LIMIT" 4 "SET_SPEED_CHANGED" 7 "DISTANCE_1" 8 "DISTANCE_2" 9 "DISTANCE_3" 10 "DISTANCE_4" 17 "DRIVE_CAREFULLY" 18 "CHECK_SURROUNDINGS" 19 "CONDITIONS_NOT_MET" 20 "LANES_NOT_DETECTED" 21 "CURVE_TOO_SHARP" 22 "LANE_TOO_NARROW" 23 "ROAD_TYPE_NOT_SUPPORTED" 24 "UNAVAILABLE_WITH_HAZARD_LIGHTS_ON" 25 "VEHICLE_SPEED_IS_TOO_LOW" 26 "KEEP_HANDS_ON_STEERING_WHEEL" 27 "LANE_TYPE_NOT_SUPPORTED" 28 "LANE_ASSIST_CANCELED_STEERING_INPUT_DETECTED"; VAL_ 353 ALERTS_4 0 "HIDDEN" 1 "TAKE_FOOT_OFF_THE_ACCELERATOR_PEDAL" 2 "TAKE_FOOT_OFF_THE_BRAKE_PEDAL" 3 "UNAVAILABLE_WHILE_HIGHWAY_DRIVING_PILOT_SYSTEM_IS_ACTIVE" 4 "TO_EXIT_HDP_GRASP_THE_STEERING_WHEEL_THEN_PRESS_AND_HOLD_THE_HDP_BUTTON" 5 "ACCELERATOR_PEDAL_OPERATION_LIMITED_FOR_SAFETY" 6 "TURN_OFF_HAZARD_WARNING_LIGHTS_AND_TURN_SIGNAL" 7 "KEEP_THE_DRIVERS_SEAT_IN_A_SAFE_DRIVING_POSITION" 16 "SET_SPEED_CHANGED" 17 "ACTIVATING_WINDSHIELD_DEFOG_TO_MAINTAIN_THE_DRIVERS_VIEW" 18 "SET_THE_WIPER_AND_LIGHT_CONTROLS_TO_AUTO" 19 "VEHICLE_SPEED_REDUCED_FOR_SAFETY_MERGING_LANES_AHEAD" 20 "SPEED_REDUCED_FOR_SAFETY_CONSTRUCTION_ZONE_DETECTED" 21 "VEHICLE_SPEED_LIMITED_SENSOR_DETECTION_RANGE_LIMITED" 22 "PREPARE_TO_TAKE_CONTROL_UNSUPPORTED_ROAD_TYPE_AHEAD" 23 "PREPARE_TO_TAKE_CONTROL_ENTRANCE_AND_EXIT_RAMPS_AHEAD" 24 "PREPARE_TO_TAKE_CONTROL_TOLLGATE_AHEAD" 25 "PREPARE_TO_TAKE_CONTROL_ROAD_EVENT_AHEAD" 26 "CLEARING_PATH_FOR_EMERGENCY_VEHICLE" 27 "VEHICLE_IS_TOO_SLOW_COMPARED_TO_TRAFFIC_FLOW" 28 "AFTER_SUNSET_HDP_IS_AVAILABLE_IN_AN_INSIDE_LANE_BEHIND_A_LEADING_VEHICLE" 29 "VEHICLE_SPEED_LIMITED_MERGING_LANES_AHEAD" 30 "VEHICLE_SPEED_LIMITED_CONSTRUCTION_ZONE_DETECTED" 31 "VEHICLE_SPEED_TEMPORARILY_LIMITED_FOR_SAFETY" 32 "PRESS_AND_HOLD_THE_BUTTON_TO_ACTIVATE_HIGHWAY_DRIVING_PILOT" 40 "HIGHWAY_DRIVING_PILOT_SYSTEM_IS_AVAILABLE" 64 "RESTART_VEHICLE_AFTER_EMERGENCY_STOP" 65 "CONNECTED_SERVICES_UNAVAILABLE" 66 "AVAILABLE_AFTER_VEHICLE_SOFTWARE_IS_UPDATED" 67 "ROAD_TYPE_NOT_SUPPORTED" 68 "ONLY_AVAILABLE_WHILE_DRIVING_ON_HIGHWAY_LANES" 69 "UNAVAILABLE_WHILE_OTHER_WARNINGS_ARE_ACTIVE" 70 "CANNOT_ACTIVATE_AT_ENTRANCE_EXIT_RAMPS" 71 "LANE_UNSUPPORTED" 72 "NOT_AVAILABLE_IN_THIS_COUNTRY" 79 "CHECKING_THE_DETECTION_RANGE_OF_THE_SENSOR" 80 "SHIFT_TO_D" 81 "ENGINE_STOPPED_BY_AUTO_STOP" 82 "INCREASE_DISTANCE_FROM_VEHICLE_AHEAD" 83 "VEHICLE_SPEED_IS_TOO_HIGH" 84 "CENTER_VEHICLE_IN_THE_LANE" 85 "PARKING_ASSIST_IS_ACTIVE" 86 "ESC_ACTIVIATION_REQUIRED" 87 "UNFOLD_SIDE_VIEW_MIRRORS" 88 "UNAVAILABLE_IN_THE_OUTER_LANE_AFTER_SUNSET" 89 "VEHICLE_SPEED_LIMITED_AFTER_SUNSET_FOR_SAFETY" 90 "LEADING_VEHICLE_NOT_DETECTED" 104 "AGGRESSIVE_BRAKING_OR_STEERING_DETECTED" 110 "SENSOR_AUTO_CALIBRATION_IN_PROGRESS_THIS_MAY_TAKE_SEVERAL_MINUTES" 111 "HIGHWAY_DRIVING_PILOT_WILL_BE_AVAILABLE_SHORTLY" 112 "IF_STEERING_WHEEL_IS_USED_HDP_WILL_BE_DEACTIVATED" 120 "IMPACT_DETECTED" 128 "UNSUITABLE_USE_OF_ACCELERATOR_PEDAL_DETECTED" 129 "GEAR_SHIFTER_USE_DETECTED" 130 "UNSUITABLE_BRAKE_PEDAL_USE_DETECTED" 131 "VEHICLE_START_BUTTON_PRESSED" 132 "VEHICLE_HAS_BEEN_STOPPED_FOR_TOO_LONG" 141 "TRAFFIC_CONGESTION_HAS_CLEARED" 142 "ENTRANCE_AND_EXIT_RAMPS_AHEAD" 143 "UNSUPPORTED_LANE_AHEAD" 144 "UNSUPPORTED_ROAD_TYPE_AHEAD" 145 "LANE_DEPARTURE_DETECTED" 146 "MAXIMUM_SPEED_EXCEEDED" 147 "HIGHWAY_DRIVING_PILOT_LIMITED_ABNORMAL_VEHICLE_CONTROLLER_STATUS" 148 "WIPER_LIGHT_CONTROL_SETTINGS_ARE_UNSUITABLE_FOR_USE_WITH_HDP" 149 "WINDSHIELD_DEFOG_SYSTEM_STATUS_IS_UNSUITABLE_FOR_USE_WITH_HDP" 150 "HAZARD_WARNING_LIGHTS_OR_TURN_SIGNAL_OPERATION_DETECTED" 151 "PERFORMING_EVASIVE_STEERING_OBSTACLES_DETECTED_AHEAD" 152 "HIGHWAY_DRIVING_PILOT_LIMITED_SENSOR_DETECTION_RANGE_LIMITED" 160 "CHECK_HIGHWAY_DRIVING_PILOT_SYSTEM" 161 "SAFETY_FUNCTION_ACTIVATED" 176 "CAMERA_OBSCURED" 177 "RADAR_BLOCKED" 178 "LIDAR_BLOCKED" 179 "AIRBAG_WARNING_LIGHT_IS_ON" 180 "ATTACHED_TRAILED_DETECTED" 181 "HIGH_OUTSIDE_TEMPERATURE" 182 "LOW_OUTSIDE_TEMPERATURE" 190 "UNAVAILABLE_DUE_TO_THE_ROAD_EVENT_INFORMATION_RECEIVED" 191 "UNAVAILABLE_NEAR_TOLLGATES" 192 "DRIVERS_SEAT_IS_NOT_IN_A_SAFE_DRIVING_POSITION" 193 "VEHICLE_DRIVING_THE_WRONG_WAY_DETECTED_AHEAD" 194 "EMERGENCY_VEHICLE_DETECTED" 195 "OBSTACLE_DETECTED_AHEAD" 196 "SENSOR_BLOCKED_DUE_TO_RAIN_SNOW_OR_ROAD_DEBRIS" 197 "SLIPPERY_ROAD_SURFACE_DETECTED" 198 "CONSTRUCTION_ZONE_DETECTED_AHEAD" 199 "PEDESTRIAN_DETECTED_AHEAD" 200 "UNSUITABLE_DRIVERS_SEAT_POSITION_DETECTED" 201 "FOLDED_SIDE_VIEW_MIRRORS_DETECTED" 208 "VEHICLE_POSITION_NOT_DETECTED" 209 "LANE_NOT_DETECTED" 210 "DRIVER_NOT_DETECTED" 211 "KEEP_YOUR_EYES_ON_THE_ROAD" 212 "LEADING_VEHICLE_REQUIRED_AFTER_SUNSET" 213 "TBD" 240 "LOW_FUEL" 241 "LOW_TIRE_PRESSURE" 242 "DOOR_OPEN" 243 "TRUNK_OPEN" 244 "HOOD_OPEN" 245 "SEAT_BELT_NOT_FASTENED" 246 "PARKING_BRAKE_ACTIVATED" 247 "LOW_EV_BATTERY" 248 "HDP_DEACTIVATION_DELAYED_RISK_OF_COLLISION_DETECTED" 249 "LIFTGATE_OPENED"; VAL_ 353 ALERTS_5 0 "HIDDEN" 1 "DRIVERS_GRASP_NOT_DETECTED_DRIVING_SPEED_WILL_BE_LIMITED" 2 "WATCH_FOR_SURROUNDING_VEHICLES" 3 "SMART_CRUISE_CONTROL_DEACTIVATED" 4 "SMART_CRUISE_CONTROL_CONDITIONS_NOT_MET" 5 "USE_SWITCH_OR_PEDAL_TO_ACCELERATE" 6 "DRIVER_ASSISTNCE_SYSTEM_LIMITED_TRAILER_ATTACHED" 7 "DRIVER_ASSISTNCE_SYSTEM_LIMITED_DRIVER_FULL_FACE_NOT_VISIBLE" 11 "LEADING_VEHICLE_IS_DRIVING_AWAY" 12 "STOP_VEHICLE_THEN_TRY_AGAIN" 19 "ACTIVATING_HIGHWAY_DRIVING_PILOT_SYSTEM" 20 "CONTINUING_USE_OF_HIGHWAY_DRIVING_PILOT_WILL_RESULT_IN_DEVIATION_FROM_THE_NAVIGATION_ROUTE" 21 "HIGHWAY_DRIVING_PILOT_SYSTEM_DEACTIVATED_SILENT" 22 "HIGHWAY_DRIVING_PILOT_SYSTEM_NOT_APPLIED" 23 "HIGHWAY_DRIVING_PILOT_CONDITIONS_NOT_MET_SILENT"; VAL_ 353 MUTE 0 "NONE" 1 "MUTED"; @@ -868,7 +1016,7 @@ VAL_ 353 SOUNDS_3 0 "NONE" 3 "SOFT CHIME" 5 "SINGLE CHIME"; VAL_ 353 SOUNDS_4 0 "NONE" 2 "DOUBLE CHIME"; VAL_ 353 SETSPEED_HUD 0 "HIDDEN" 1 "GRAY" 2 "GREEN" 3 "WHITE" 5 "CYAN"; VAL_ 353 DISTANCE_LEAD 0 "HIDDEN" 1 "GRAY" 2 "WHITE"; -VAL_ 353 DISTANCE_CAR 0 "HIDDEN" 1 "GRAY" 2 "WHITE" 3 "CYAN A"; +VAL_ 353 DISTANCE_CAR 0 "HIDDEN" 1 "GRAY" 2 "WHITE" 3 "CYAN"; VAL_ 353 DISTANCE_SPACING 0 "HIDDEN" 1 "BLUE" 3 "WHITE" 5 "CYAN"; VAL_ 353 SETSPEED 0 "HIDDEN" 1 "GRAY" 2 "GREEN" 3 "WHITE" 6 "CYAN"; VAL_ 353 HDA_ICON 0 "HIDDEN" 1 "GRAY" 2 "GREEN" 3 "WHITE" 5 "CYAN HDP"; @@ -885,10 +1033,12 @@ VAL_ 354 SPEEDLIMIT_FLASH 0 "HIDDEN" 1 "ERROR" 2 "NORMAL" 4 "RED"; VAL_ 354 SIGNS 0 "HIDDEN" 1 "PEDESTRIAN_CROSSING" 2 "SCHOOL_CROSSWALK" 8 "STOP" 9 "YIELD" 16 "DO_NOT_PASS" 19 "DO_NOT_ENTER" 24 "ROUNDABOUT" 26 "RIGHT_CURVE_AHEAD" 27 "LEFT_CURVE_AHEAD" 28 "SLIGHT_RIGHT_CURVE_AHEAD" 29 "SLIGHT_LEFT_CURVE_AHEAD"; VAL_ 354 SPEEDLIMIT_WEATHER 0 "HIDDEN" 1 "RAIN" 2 "SNOW" 3 "RAIN+SNOW" 4 "TRAILER"; VAL_ 354 VIBRATE 0 "NONE" 1 "VIBRATE"; -VAL_ 354 LEAD 0 "HIDDEN" 1 "GRAY BOX" 2 "WHITE BOX" 3 "GRAY CAR" 4 "WHITE CAR" 5 "GRAY TRUCK" 6 "WHITE TRUCK" 7 "GRAY PERSON" 8 "WHITE PERSON" 9 "GRAY BICYCLE" 10 "WHITE BICYCLE" 11 "GRAY MOTORCYCLE" 12 "WHITE MOTORCYCLE" 13 "DARK CONE" 14 "ORANGE CONE"; -VAL_ 354 LEAD_ALT 0 "HIDDEN" 1 "GRAY BOX" 2 "WHITE BOX" 3 "DIM CONE" 4 "ORANGE CONE"; -VAL_ 354 LEAD_LEFT 0 "HIDDEN" 1 "GRAY BOX" 2 "WHITE BOX" 3 "GRAY CAR" 4 "WHITE CAR" 5 "GRAY TRUCK" 6 "WHITE TRUCK" 7 "GRAY PERSON" 8 "WHITE PERSON" 9 "GRAY BICYCLE" 10 "WHITE BICYCLE" 11 "GRAY MOTORCYCLE" 12 "WHITE MOTORCYCLE" 13 "DARK CONE" 14 "ORANGE CONE"; -VAL_ 354 LEAD_RIGHT 0 "HIDDEN" 1 "GRAY BOX" 2 "WHITE BOX" 3 "GRAY CAR" 4 "WHITE CAR" 5 "GRAY TRUCK" 6 "WHITE TRUCK" 7 "GRAY PERSON" 8 "WHITE PERSON" 9 "GRAY BICYCLE" 10 "WHITE BICYCLE" 11 "GRAY MOTORCYCLE" 12 "WHITE MOTORCYCLE" 13 "DARK CONE" 14 "ORANGE CONE"; +VAL_ 354 FF_DETECT 0 "HIDDEN" 1 "GRAY BOX" 2 "WHITE BOX" 3 "GRAY CAR" 4 "WHITE CAR" 5 "GRAY TRUCK" 6 "WHITE TRUCK" 7 "GRAY PERSON" 8 "WHITE PERSON" 9 "GRAY BICYCLE" 10 "WHITE BICYCLE" 11 "GRAY MOTORCYCLE" 12 "WHITE MOTORCYCLE" 13 "DARK CONE" 14 "ORANGE CONE"; +VAL_ 354 FF_DETECT_ALT 0 "HIDDEN" 1 "GRAY BOX" 2 "WHITE BOX" 3 "DIM CONE" 4 "ORANGE CONE"; +VAL_ 354 LF_DETECT 0 "HIDDEN" 1 "GRAY BOX" 2 "WHITE BOX" 3 "GRAY CAR" 4 "WHITE CAR" 5 "GRAY TRUCK" 6 "WHITE TRUCK" 7 "GRAY PERSON" 8 "WHITE PERSON" 9 "GRAY BICYCLE" 10 "WHITE BICYCLE" 11 "GRAY MOTORCYCLE" 12 "WHITE MOTORCYCLE" 13 "DARK CONE" 14 "ORANGE CONE"; +VAL_ 354 RF_DETECT 0 "HIDDEN" 1 "GRAY BOX" 2 "WHITE BOX" 3 "GRAY CAR" 4 "WHITE CAR" 5 "GRAY TRUCK" 6 "WHITE TRUCK" 7 "GRAY PERSON" 8 "WHITE PERSON" 9 "GRAY BICYCLE" 10 "WHITE BICYCLE" 11 "GRAY MOTORCYCLE" 12 "WHITE MOTORCYCLE" 13 "DARK CONE" 14 "ORANGE CONE"; +VAL_ 354 LR_DETECT 0 "HIDDEN" 1 "GRAY BOX" 2 "WHITE BOX" 3 "GRAY CAR" 4 "WHITE CAR" 5 "GRAY TRUCK" 6 "WHITE TRUCK" 7 "GRAY PERSON" 8 "WHITE PERSON" 9 "GRAY BICYCLE" 10 "WHITE BICYCLE" 11 "GRAY MOTORCYCLE" 12 "WHITE MOTORCYCLE" 13 "DARK CONE" 14 "ORANGE CONE"; +VAL_ 354 RR_DETECT 0 "HIDDEN" 1 "GRAY BOX" 2 "WHITE BOX" 3 "GRAY CAR" 4 "WHITE CAR" 5 "GRAY TRUCK" 6 "WHITE TRUCK" 7 "GRAY PERSON" 8 "WHITE PERSON" 9 "GRAY BICYCLE" 10 "WHITE BICYCLE" 11 "GRAY MOTORCYCLE" 12 "WHITE MOTORCYCLE" 13 "DARK CONE" 14 "ORANGE CONE"; VAL_ 354 FAULT_FSS 0 "HIDDEN" 1 "CHECK_FORWARD_SAFETY_SYSTEM" 2 "FORWARD_SAFETY_SYSTEM_LIMITED_CAMERA_OBSCURED" 3 "FORWARD_SAFETY_SYSTEM_LIMITED_RADAR_BLOCKED"; VAL_ 354 FAULT_FCA 0 "HIDDEN" 1 "CHECK_FORWARD_SIDE_SAFETY_SYSTEM" 2 "FORWARD_SIDE_SAFETY_SYSTEM_LIMITED_CAMERA_OBSCURED" 3 "FORWARD_SIDE_SAFETY_SYSTEM_LIMITED_RADAR_BLOCKED"; VAL_ 354 FAULT_LSS 0 "HIDDEN" 1 "CHECK_LANE_SAFETY_SYSTEM" 2 "LANE_SAFETY_SYSTEM_DISABLED_CAMERA_OBSCURED"; @@ -903,80 +1053,46 @@ VAL_ 354 FAULT_HDP 0 "HIDDEN" 1 "CHECK_HIGHWAY_DRIVING_PILOT_SYSTEM" 2 "HIGHWAY_ VAL_ 354 FAULT_DAS 0 "HIDDEN" 1 "CHECK_DRIVER_ASSISTANCE_SYSTEM" 2 "DRIVER_ASSISTANCE_SYSTEM_LIMITED_CAMERA_OBSCURED" 3 "DRIVER_ASSISTANCE_SYSTEM_LIMITED_RADAR_BLOCKED" 4 "DRIVER_ASSISTANCE_SYSTEM_LIMITED_CAMERA_OBSCURED_AND_RADAR_BLOCKED"; VAL_ 354 FAULT_ESS 0 "HIDDEN" 1 "CHECK_EMERGENCY_STOPPING_FUNCTION" 2 "EMERGENCY_STOPPING_FUNCTION_DISABLED_CAMERA_OBSCURED" 3 "EMERGENCY_STOPPING_FUNCTION_DISABLED_RADAR_BLOCKED"; VAL_ 362 BLINKER_CONTROL 1 "hazards" 2 "hazards button backlight" 3 "left blinkers" 4 "right blinkers"; +VAL_ 373 SCC_OptTyp 0 "SCC is not equipped" 1 "SCC is equipped" 2 "Not used" 3 "Error Indicator"; VAL_ 373 ACCEnable 0 "SCC ready" 1 "SCC temp fault" 2 "SCC permanent fault" 3 "SCC permanent fault, communication issue"; +VAL_ 373 SCC_ReqLimSta 0 "No request" 1 "Limited No Limitation" 2 "Acceleration Limited" 3 "Deceleration Limited"; +VAL_ 373 ESC_StdStillVal 0 "No stand still detected" 1 "stand still detected" 2 "Not used" 3 "Error Indicator"; +VAL_ 373 ESC_DclEnblReq 0 "Disable deceleration control" 1 "Enable deceleration control" 2 "Not used" 3 "Error Indicator"; +VAL_ 373 ESC_PrkBrkActvSta 0 "Parking brake is not activated" 1 "Parking brake is activated" 2 "Not used" 3 "Error Indicator"; +VAL_ 373 FCA_EquipSta 0 "FCA is not equipped" 1 "FCA is equipped" 2 "Not used" 3 "Error Indicator"; +VAL_ 373 FCA_AvlblSta 0 "Available" 1 "Temporarily not available" 2 "Permanently not available" 3 "FCA Communication Error"; VAL_ 416 ACCMode 0 "off" 1 "enabled" 2 "driver_override" 3 "off_maybe_fault" 4 "cancelled"; -VAL_ 416 SCC_ObjSta 0 "No in-path object detected" 1 "In-path object detected (uncontrollable)" 2 "In-path object detected (controllable:longitudinal)" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Reserved"; VAL_ 426 CRUISE_BUTTONS 0 "none" 1 "res_accel" 2 "set_decel" 3 "gap_distance" 4 "pause_resume"; -VAL_ 437 Info_LftLnQualSta 0 "Very Low Quality" 1 "Low Quality" 2 "High Quality" 3 "Very High Quality" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Error indicator"; -VAL_ 437 Info_LftLnDptSta 0 "No Left Line Departure" 1 "Left Line Departure" 2 "Reserved" 3 "Error Indicator"; -VAL_ 437 Info_RtLnQualSta 0 "Very Low Quality" 1 "Low Quality" 2 "High Quality" 3 "Very High Quality" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Error indicator"; -VAL_ 437 Info_RtLnDptSta 0 "No Right Line Departure" 1 "Right Line Departure" 2 "Reserved" 3 "Error Indicator"; -VAL_ 437 Info_RtLnCvtrVal 65534 "Reserved" 65535 "Error indicator"; VAL_ 463 CRUISE_BUTTONS 0 "none" 1 "res_accel" 2 "set_decel" 3 "gap_distance" 4 "pause_resume"; VAL_ 463 RIGHT_PADDLE 0 "Not Pulled" 1 "Pulled"; VAL_ 463 LEFT_PADDLE 0 "Not Pulled" 1 "Pulled"; -VAL_ 506 ISLW_OptUsmSta 0 "None ISLW Option (Default)" 1 "System Disabled by USM" 2 "System Enable by USM" 3 "Invalid"; -VAL_ 506 ISLW_SysSta 0 "Normal (Default)" 1 "System Fail" 2 "ISLW Temporary Unavailable" 3 "Reserved"; -VAL_ 506 ISLW_NoPassingInfoDis 0 "None Display (Default)" 1 "LHD No Passing Zone Display" 2 "RHD No Passing Zone Display" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Invalid"; -VAL_ 506 ISLW_OvrlpSignDis 0 "None (Default)" 1 "Overlap Sign" 2 "Reserved" 3 "Error indicator"; -VAL_ 506 ISLW_SpdCluMainDis 0 "No Recognition (Default)" 253 "Unlimited Speed" 254 "Reserved" 255 "Invalid"; -VAL_ 506 ISLW_SpdNaviMainDis 0 "No Recognition (Default)" 253 "Unlimited Speed" 254 "Reserved" 255 "Invalid"; -VAL_ 506 ISLW_SubCondinfoSta1 0 "None (Default)" 1 "Rain" 2 "Snow" 3 "Snow&Rain" 4 "Trailer" 5 "Reserved" 6 "Reserved" 7 "Reserved" 8 "Reserved" 9 "Reserved" 10 "Reserved" 11 "Reserved" 12 "Reserved" 13 "Reserved" 14 "Generic" 15 "Invalid"; -VAL_ 506 ISLW_SubCondinfoSta2 0 "None (Default)" 1 "Rain" 2 "Snow" 3 "Snow&Rain" 4 "Trailer" 5 "Reserved" 6 "Reserved" 7 "Reserved" 8 "Reserved" 9 "Reserved" 10 "Reserved" 11 "Reserved" 12 "Reserved" 13 "Reserved" 14 "Generic" 15 "Invalid"; -VAL_ 506 ISLW_SpdCluSubMainDis 0 "No Recognition (Default)" 253 "Unlimited Speed" 254 "Reserved" 255 "Invalid"; -VAL_ 506 ISLW_SpdCluDisSubCond1 0 "No Recognition (Default)" 253 "LHD Conditional No Passing ZONE" 254 "RHD Conditional No Passing ZONE" 255 "Invalid"; -VAL_ 506 ISLW_SpdCluDisSubCond2 0 "No Recognition (Default)" 253 "LHD Conditional No Passing ZONE" 254 "RHD Conditional No Passing ZONE" 255 "Invalid"; -VAL_ 506 ISLW_SpdNaviSubMainDis 0 "No Recognition (Default)" 253 "Unlimited Speed" 254 "Reserved" 255 "Invalid"; -VAL_ 506 ISLW_SpdNaviDisSubCond1 0 "No Recognition (Default)" 253 "LHD Conditional No Passing ZONE" 254 "RHD Conditional No Passing ZONE" 255 "Invalid"; -VAL_ 506 ISLW_SpdNaviDisSubCond2 0 "No Recognition (Default)" 253 "LHD Conditional No Passing ZONE" 254 "RHD Conditional No Passing ZONE" 255 "Invalid"; -VAL_ 506 ISLA_SpdwOffst 0 "No Recognition" 253 "Unlimited Speed" 254 "Reserved" 255 "Invalid"; -VAL_ 506 ISLA_SwIgnoreReq 0 "Allow All Switch Inputs (default)" 1 "-(SET) Switch Input Ignore" 2 "+(SET) Switch Input Ignore" 3 "-(SET) & +(SET) Switch Inputs Ignore"; -VAL_ 506 ISLA_SpdChgReq 0 "Default" 1 "Speed Change Request" 2 "Reserved" 3 "Reserved"; -VAL_ 506 ISLA_SpdWrn 0 "No Warning" 1 "Warning" 2 "Reserved" 3 "Reserved"; -VAL_ 506 ISLA_IcyWrn 0 "No Warning" 1 "Warning" 2 "Reserved" 3 "Reserved"; -VAL_ 506 ISLA_SymFlashMod 0 "No Flasing" 1 "Flashing Sign" 2 "Flashing - Arrow Symbol" 3 "Flashing + Arrow Symbol" 4 "Flashing Auto Symbol" 5 "Reserved" 6 "Reserved" 7 "Reserved"; -VAL_ 506 ISLA_Popup 0 "No Popup" 1 "MSLA Speed will Change" 2 "MSLA Speed has Changed" 3 "CC_SCC Speed will Change" 4 "CC_SCC Speed has Changed" 5 "Reserved" 6 "Reserved" 7 "Reserved"; -VAL_ 506 ISLA_OptUsmSta 0 "None ISLA Option (속도 제한 메뉴 삭제)" 1 "Off" 2 "Warning" 3 "Assist" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Invalid (GRAY)"; -VAL_ 506 ISLA_OffstUsmSta 0 "None Offset Function" 1 "-10kph or -5mph" 2 "-5kph or -3mph" 3 "0kph or 0mph" 4 "+5kph or +3mph" 5 "+10kph or +5mph" 6 "Reserved" 7 "Invalid (GRAY)"; -VAL_ 506 ISLA_AutoUsmSta 0 "None Auto Function (Delete Menu)" 1 "Auto Off" 2 "Auto On" 3 "Invalid (GRAY)"; -VAL_ 506 ISLA_Cntry 0 "Europe/Russia/Australia" 1 "Domestic" 2 "China" 3 "USA" 4 "Canada" 5 "Australia" 6 "Reserved" 7 "Reserved" 8 "Reserved" 9 "Reserved" 10 "Reserved" 11 "Reserved" 12 "Reserved" 13 "Reserved" 14 "Reserved" 15 "Initial Value (default)"; -VAL_ 506 ISLA_AddtnlSign 0 "No Recognition (default)" 1 "School Crossing" 16 "Do Not Pass" 17 "Reserved" 18 "Reserved" 19 "Reserved" 20 "Reserved" 21 "Reserved" 22 "Reserved" 23 "Reserved" 24 "Exit" 25 "Roundabout" 26 "Right Curve" 27 "Left Curve" 28 "Winding Road" 29 "Reserved" 30 "Reserved" 31 "Reserved" 2 "Pedestrian Crossing" 3 "Bicycle Crossing" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Reserved" 8 "Stop" 9 "Yield" 10 "Stop Ahead" 11 "Yield Ahead" 12 "Road Construction Ahead" 13 "Lane Reduction" 14 "Reserved" 15 "Reserved"; -VAL_ 506 ISLA_SchoolZone 0 "No School Zone" 1 "School Zone" 2 "Reserved" 3 "Reserved"; -VAL_ 687 HOD_Dir_Status 0 "HANDS OFF" 1 "HAND TOUCH (SOFT)" 2 "HAND TOUCH (STRONG)" 3 "HAND GRIP (SOFT)" 4 "HAND GRIP (STRONG)" 5 "RESERVED" 6 "RESERVED"; -VAL_ 698 IFSref_FR_CMR_Sta 0 "None Option (Default)" 1 "Normal" 2 "Blockage Status" 3 "Error Indicator"; -VAL_ 698 IFSref_VehNumVal 0 "No vehicle" 1 "Number of vehicles" 2 "Number of vehicles" 3 "Number of vehicles" 4 "Number of vehicles" 5 "Number of vehicles" 6 "Number of vehicles" 7 "Number of vehicles" 8 "Number of vehicles" 9 "Number of vehicles" 10 "Number of vehicles" 11 "Over than 10 vehicles" 12 "Reserved" 13 "Reserved" 14 "Default" 15 "Error indicator"; -VAL_ 698 IFSref_ILLAmbtSta 0 "Bright" 1 "Dark" 2 "Not used" 3 "Error indicator"; -VAL_ 698 IFSref_VehLftAngl1Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehRtAngl1Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehLftAngl2Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehDst1Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; -VAL_ 698 IFSref_VehRtAngl2Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehLftAngl3Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehRtAngl3Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehLftAngl4Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehRtAngl4Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehLftAngl5Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehRtAngl5Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehLftAngl6Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehRtAngl6Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehLftAngl7Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehRtAngl7Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehLftAngl8Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehRtAngl8Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehLftAngl9Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehRtAngl9Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehLftAngl10Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehRtAngl10Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; -VAL_ 698 IFSref_VehDst2Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; -VAL_ 698 IFSref_VehDst3Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; -VAL_ 698 IFSref_VehDst4Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; -VAL_ 698 IFSref_VehDst5Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; -VAL_ 698 IFSref_VehDst6Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; -VAL_ 698 IFSref_VehDst7Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; -VAL_ 698 IFSref_VehDst8Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; -VAL_ 698 IFSref_VehDst9Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; -VAL_ 698 IFSref_VehDst10Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; +VAL_ 480 HDA_OptUsmSta 0 "Not Applied" 1 "Function Off" 2 "Function On" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Invalid (Fail)"; +VAL_ 480 LFA_OptUsmSta 0 "Not Applied" 1 "Function Off" 2 "Function On" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Invalid (Fail)"; +VAL_ 480 HDA_CntrlModSta 0 "System Deactive (Default)" 1 "System Ready" 2 "System Active" 3 "Reserved"; +VAL_ 480 HDA_InfoPUDis 0 "No pop-up" 1 "system start pop-up" 2 "system auto disengaged pop-up by highway off" 3 "system auto disengaged pop-up" 4 "system Fail pop-up" 5 "Hands-off pop up" 6 "Hands-off pop up w/ sound" 7 "System Automatic off"; +VAL_ 480 HDA_AutoSetSpdSta 0 "Auto Set Speed Off" 1 "Auto Set Speed On" 2 "Reserved" 3 "Error indicator"; +VAL_ 480 HDA_AutoSetSpdUpdtSta 0 "Auto Set Speed Update Off" 1 "Auto Set Speed Update On" 2 "Reserved" 3 "Error indicator"; +VAL_ 480 HDA_LFA_SymSta 0 "Off" 1 "Gray" 2 "Green" 3 "Green blink"; +VAL_ 480 HDA_LFA_WrnSnd 0 "Off" 1 "Additional Warning Sound" 2 "Reserved" 3 "Error indicator"; +VAL_ 480 HDA_InfoPUDis1 0 "No Pop-up" 1 "System Automatic off (LFA)" 2 "System Automatic off (HDA)" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Not Used" 7 "Error Indicator"; +VAL_ 480 HDA_TDMRMDclReq 0 "Not automatically deactivated state of LFA (default)" 1 "Automatically deactivated state of LFA" 2 "Reserved" 3 "Reserved"; +VAL_ 490 HDA_MODE2 1 "Lane change icon gray" 2 "lane green + lane change icon green" 3 "lane green + lane change icon green (both blinking)" 4 "lane white + lane change icon white (both blinking rapidly)" 5 "Lane Change Assist system check warning"; +VAL_ 490 LANE_LEFT 0 "IDLE" 1 "ON_SOURCE" 2 "ON_TARGET"; +VAL_ 490 LANE_RIGHT 0 "IDLE" 1 "ON_SOURCE" 2 "ON_TARGET"; +VAL_ 490 LANE_CHANGING 0 "IDLE" 1 "LEFT_CHECK" 3 "LEFT_CHANGING" 2 "RIGHT_CHECK" 4 "RIGHT_CHANGING"; +VAL_ 490 LF_DETECT 0 "none" 1 "gray" 2 "white" 3 "white" 4 "hide"; +VAL_ 490 RF_DETECT 0 "none" 1 "gray" 2 "white" 3 "white" 4 "hide"; +VAL_ 490 LR_DETECT 0 "none" 1 "gray" 2 "white" 3 "white" 4 "hide"; +VAL_ 490 RR_DETECT 0 "none" 1 "gray" 2 "white" 3 "white" 4 "hide"; +VAL_ 490 AUTOLANECHANGE_MSG 1 "Check surrounding conditions" 2 "Operating conditions not met" 3 "Analyzing driving lane" 4 "Sharp curve ahead" 5 "Current lane is too narrow" 6 "Not an operational section" 7 "Hazard lights are on" 8 "Vehicle speed is too low" 9 "Please hold the steering wheel" 10 "Not an operable lane" 11 "Steering input detected" 12 "Press the OK button to activate lane change assist"; +VAL_ 490 LANELINE_CURVATURE_DIRECTION 0 "LEFT" 1 "RIGHT"; +VAL_ 676 LEFT_LANE_COLOR 0 "Not Detected" 1 "White" 2 "Yellow" 3 "Blue"; +VAL_ 676 RIGHT_LANE_COLOR 0 "Not Detected" 1 "White" 2 "Yellow" 3 "Blue"; +VAL_ 676 LEFT_LANE_LINE 0 "Not Detected" 1 "Low Confidence" 2 "Medium Confidence" 3 "High Confidence"; +VAL_ 676 RIGHT_LANE_LINE 0 "Not Detected" 1 "Low Confidence" 2 "Medium Confidence" 3 "High Confidence"; VAL_ 736 MSLA_STATUS 0 "disabled" 1 "active" 2 "paused"; +VAL_ 866 LEFT_LANE_COLOR 0 "Not Detected" 1 "White" 2 "Yellow" 3 "Blue"; +VAL_ 866 RIGHT_LANE_COLOR 0 "Not Detected" 1 "White" 2 "Yellow" 3 "Blue"; VAL_ 866 LEFT_LANE_LINE 0 "Not Detected" 1 "Low Confidence" 2 "Medium Confidence" 3 "High Confidence"; VAL_ 866 RIGHT_LANE_LINE 0 "Not Detected" 1 "Low Confidence" 2 "Medium Confidence" 3 "High Confidence"; VAL_ 1041 DRIVER_DOOR 0 "Closed" 1 "Opened"; @@ -985,5 +1101,7 @@ VAL_ 1041 PASSENGER_SEATBELT 0 "Unlatched" 1 "Latched"; VAL_ 1041 DRIVER_SEATBELT 0 "Unlatched" 1 "Latched"; VAL_ 1041 DRIVER_REAR_DOOR 0 "Closed" 1 "Opened"; VAL_ 1041 PASSENGER_REAR_DOOR 0 "Closed" 1 "Opened"; +VAL_ 1079 TRAILER_CONNECTED 1 "CONNECTED" 0 "DISCONNECTED"; + VAL_ 1144 DRIVE_MODE2 3 "Set Sport" 1 "Set Normal" 2 "Set Eco"; VAL_ 1240 DISTANCE_UNIT 1 "Miles" 0 "Kilometers"; diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_180.dbc b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_180.dbc new file mode 100644 index 000000000..a78803a8c --- /dev/null +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_180.dbc @@ -0,0 +1,140 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + ENVVAR_TYPE_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: XXX RADAR + +BA_DEF_ BO_ "GenMsgCycleTime" INT 0 100000; +BA_DEF_DEF_ "GenMsgCycleTime" 0; + +BO_ 384 CORNER_RADAR_180_OBJECTS_180: 32 RADAR + SG_ SLOT1_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT1_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT1_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT1_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT1_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT1_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT1_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX + SG_ SLOT2_QUAL_LEVEL : 152|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT2_AGE : 160|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_OBJECT_ID : 172|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT2_REL_POS_X : 192|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT2_REL_POS_Y : 206|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT2_REL_VEL_X : 219|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT2_REL_VEL_Y : 232|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT2_REL_ACCEL_X : 243|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 384 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 384 30; + +BO_ 385 CORNER_RADAR_180_OBJECTS_181: 32 RADAR + SG_ SLOT1_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT1_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT1_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT1_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT1_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT1_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT1_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX + SG_ SLOT2_QUAL_LEVEL : 152|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT2_AGE : 160|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_OBJECT_ID : 172|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT2_REL_POS_X : 192|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT2_REL_POS_Y : 206|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT2_REL_VEL_X : 219|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT2_REL_VEL_Y : 232|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT2_REL_ACCEL_X : 243|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 385 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 385 30; + +BO_ 386 CORNER_RADAR_180_OBJECTS_182: 32 RADAR + SG_ SLOT1_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT1_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT1_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT1_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT1_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT1_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT1_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX + SG_ SLOT2_QUAL_LEVEL : 152|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT2_AGE : 160|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_OBJECT_ID : 172|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT2_REL_POS_X : 192|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT2_REL_POS_Y : 206|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT2_REL_VEL_X : 219|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT2_REL_VEL_Y : 232|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT2_REL_ACCEL_X : 243|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 386 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 386 30; + +BO_ 387 CORNER_RADAR_180_OBJECTS_183: 32 RADAR + SG_ SLOT1_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT1_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT1_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT1_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT1_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT1_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT1_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX + SG_ SLOT2_QUAL_LEVEL : 152|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT2_AGE : 160|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_OBJECT_ID : 172|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT2_REL_POS_X : 192|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT2_REL_POS_Y : 206|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT2_REL_VEL_X : 219|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT2_REL_VEL_Y : 232|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT2_REL_ACCEL_X : 243|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 387 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 387 30; + +BO_ 388 CORNER_RADAR_180_OBJECTS_184: 32 RADAR + SG_ SLOT1_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT1_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT1_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT1_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT1_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT1_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT1_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX + SG_ SLOT2_QUAL_LEVEL : 152|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT2_AGE : 160|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_OBJECT_ID : 172|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT2_REL_POS_X : 192|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT2_REL_POS_Y : 206|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT2_REL_VEL_X : 219|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT2_REL_VEL_Y : 232|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT2_REL_ACCEL_X : 243|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 388 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 388 30; diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_180.py b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_180.py new file mode 100755 index 000000000..d7bf6505c --- /dev/null +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_180.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +import os + + +HEADER = """VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + ENVVAR_TYPE_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: XXX RADAR + +""" + + +def write_object_msg(f, addr): + name = f"CORNER_RADAR_180_OBJECTS_{addr:x}" + f.write(f""" +BO_ {addr} {name}: 32 RADAR + SG_ SLOT1_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT1_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT1_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT1_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT1_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT1_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT1_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX + SG_ SLOT2_QUAL_LEVEL : 152|7@1+ (1,0) [0|100] "%" XXX + SG_ SLOT2_AGE : 160|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_OBJECT_ID : 172|7@1+ (1,0) [0|127] "" XXX + SG_ SLOT2_REL_POS_X : 192|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ SLOT2_REL_POS_Y : 206|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ SLOT2_REL_VEL_X : 219|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ SLOT2_REL_VEL_Y : 232|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ SLOT2_REL_ACCEL_X : 243|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +""") + + f.write(f"""CM_ BO_ {addr} "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ {addr} 30; +""") + + +if __name__ == "__main__": + dbc_name = os.path.basename(__file__).replace(".py", ".dbc") + out_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), dbc_name) + with open(out_path, "w", encoding="ascii") as f: + f.write(HEADER) + f.write('BA_DEF_ BO_ "GenMsgCycleTime" INT 0 100000;\n') + f.write('BA_DEF_DEF_ "GenMsgCycleTime" 0;\n') + for addr in range(0x180, 0x185): + write_object_msg(f, addr) diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_235.dbc b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_235.dbc new file mode 100644 index 000000000..f622a7644 --- /dev/null +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_235.dbc @@ -0,0 +1,278 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: XXX RADAR + +BA_DEF_ BO_ "GenMsgCycleTime" INT 0 100000; +BA_DEF_DEF_ "GenMsgCycleTime" 0; + +BO_ 565 CORNER_RADAR_235_OBJECTS_235: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 565 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 565 30; + +BO_ 566 CORNER_RADAR_235_OBJECTS_236: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 566 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 566 30; + +BO_ 567 CORNER_RADAR_235_OBJECTS_237: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 567 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 567 30; + +BO_ 568 CORNER_RADAR_235_OBJECTS_238: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 568 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 568 30; + +BO_ 569 CORNER_RADAR_235_OBJECTS_239: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 569 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 569 30; + +BO_ 570 CORNER_RADAR_235_OBJECTS_23a: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 570 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 570 30; + +BO_ 571 CORNER_RADAR_235_OBJECTS_23b: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 571 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 571 30; + +BO_ 572 CORNER_RADAR_235_OBJECTS_23c: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 572 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 572 30; + +BO_ 573 CORNER_RADAR_235_OBJECTS_23d: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 573 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 573 30; + +BO_ 574 CORNER_RADAR_235_OBJECTS_23e: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 574 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 574 30; + +BO_ 575 CORNER_RADAR_235_OBJECTS_23f: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 575 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 575 30; + +BO_ 576 CORNER_RADAR_235_OBJECTS_240: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 576 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 576 30; + +BO_ 577 CORNER_RADAR_235_OBJECTS_241: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 577 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 577 30; + +BO_ 578 CORNER_RADAR_235_OBJECTS_242: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 578 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 578 30; + +BO_ 579 CORNER_RADAR_235_OBJECTS_243: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 579 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 579 30; + +BO_ 580 CORNER_RADAR_235_OBJECTS_244: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 580 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 580 30; + +BO_ 581 CORNER_RADAR_235_OBJECTS_245: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 581 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 581 30; + +BO_ 582 CORNER_RADAR_235_OBJECTS_246: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 582 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 582 30; + +BO_ 583 CORNER_RADAR_235_OBJECTS_247: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 583 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 583 30; + +BO_ 584 CORNER_RADAR_235_OBJECTS_248: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +CM_ BO_ 584 "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ 584 30; diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_235.py b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_235.py new file mode 100755 index 000000000..6092d0d44 --- /dev/null +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_235.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +import os + + +HEADER = """VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: XXX RADAR + +""" + + +def write_object_msg(f, addr): + name = f"CORNER_RADAR_235_OBJECTS_{addr:x}" + f.write(f""" +BO_ {addr} {name}: 32 RADAR + SG_ OBJ_QUAL_LEVEL : 24|7@1+ (1,0) [0|100] "%" XXX + SG_ OBJ_AGE : 32|8@1+ (1,0) [0|255] "" XXX + SG_ OBJ_OBJECT_ID : 44|7@1+ (1,0) [0|127] "" XXX + SG_ OBJ_REL_POS_X : 64|13@1+ (0.05,0) [0|409.55] "m" XXX + SG_ OBJ_REL_POS_Y : 78|12@1+ (0.05,-102.4) [-102.4|102.35] "m" XXX + SG_ OBJ_REL_VEL_X : 91|12@1+ (0.05,-100) [-100|104.75] "m/s" XXX + SG_ OBJ_REL_VEL_Y : 104|10@1+ (0.05,-25) [-25|26.15] "m/s" XXX + SG_ OBJ_REL_ACCEL_X : 115|9@1- (0.05,0) [-12.8|12.75] "m/s^2" XXX +""") + + f.write(f"""CM_ BO_ {addr} "Corner radar object payload on bus 1. Only signals consumed by Hyundai radar_interface are defined."; +BA_ "GenMsgCycleTime" BO_ {addr} 30; +""") + + +if __name__ == "__main__": + dbc_name = os.path.basename(__file__).replace(".py", ".dbc") + out_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), dbc_name) + with open(out_path, "w", encoding="ascii") as f: + f.write(HEADER) + f.write('BA_DEF_ BO_ "GenMsgCycleTime" INT 0 100000;\n') + f.write('BA_DEF_DEF_ "GenMsgCycleTime" 0;\n') + for addr in range(0x235, 0x249): + write_object_msg(f, addr) diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_430.dbc b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_430.dbc new file mode 100644 index 000000000..528b741d8 --- /dev/null +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_430.dbc @@ -0,0 +1,614 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: XXX RADAR + +BA_DEF_ BO_ "GenMsgCycleTime" INT 0 100000; +BA_DEF_DEF_ "GenMsgCycleTime" 0; + +BO_ 1072 CORNER_RADAR_430_OBJECTS_430: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1072 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1072 30; + +BO_ 1073 CORNER_RADAR_430_OBJECTS_431: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1073 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1073 30; + +BO_ 1074 CORNER_RADAR_430_OBJECTS_432: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1074 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1074 30; + +BO_ 1075 CORNER_RADAR_430_OBJECTS_433: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1075 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1075 30; + +BO_ 1076 CORNER_RADAR_430_OBJECTS_434: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1076 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1076 30; + +BO_ 1077 CORNER_RADAR_430_OBJECTS_435: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1077 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1077 30; + +BO_ 1078 CORNER_RADAR_430_OBJECTS_436: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1078 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1078 30; + +BO_ 1079 CORNER_RADAR_430_OBJECTS_437: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1079 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1079 30; + +BO_ 1088 CORNER_RADAR_430_OBJECTS_440: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1088 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1088 30; + +BO_ 1089 CORNER_RADAR_430_OBJECTS_441: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1089 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1089 30; + +BO_ 1090 CORNER_RADAR_430_OBJECTS_442: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1090 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1090 30; + +BO_ 1091 CORNER_RADAR_430_OBJECTS_443: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1091 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1091 30; + +BO_ 1092 CORNER_RADAR_430_OBJECTS_444: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1092 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1092 30; + +BO_ 1093 CORNER_RADAR_430_OBJECTS_445: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1093 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1093 30; + +BO_ 1094 CORNER_RADAR_430_OBJECTS_446: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1094 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1094 30; + +BO_ 1095 CORNER_RADAR_430_OBJECTS_447: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_DISTANCE_RAW : 32|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT1_META_13_15 : 45|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT1_META_BYTE_2 : 48|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT1_META_BYTE_3 : 56|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_DISTANCE_RAW : 64|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT2_META_13_15 : 77|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT2_META_BYTE_2 : 80|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT2_META_BYTE_3 : 88|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_DISTANCE_RAW : 96|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT3_META_13_15 : 109|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT3_META_BYTE_2 : 112|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT3_META_BYTE_3 : 120|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_DISTANCE_RAW : 128|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT4_META_13_15 : 141|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT4_META_BYTE_2 : 144|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT4_META_BYTE_3 : 152|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_DISTANCE_RAW : 160|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT5_META_13_15 : 173|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT5_META_BYTE_2 : 176|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT5_META_BYTE_3 : 184|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_DISTANCE_RAW : 192|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT6_META_13_15 : 205|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT6_META_BYTE_2 : 208|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT6_META_BYTE_3 : 216|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_DISTANCE_RAW : 224|13@1+ (1,0) [0|8191] "" XXX + SG_ SLOT7_META_13_15 : 237|3@1+ (1,0) [0|7] "" XXX + SG_ SLOT7_META_BYTE_2 : 240|8@1+ (1,0) [0|255] "" XXX + SG_ SLOT7_META_BYTE_3 : 248|8@1+ (1,0) [0|255] "" XXX +CM_ BO_ 1095 "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ 1095 30; diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_430.py b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_430.py new file mode 100755 index 000000000..d663db747 --- /dev/null +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_corner_radar_430.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +import os + + +HEADER = """VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: XXX RADAR + +""" + + +def write_object_msg(f, addr): + name = f"CORNER_RADAR_430_OBJECTS_{addr:x}" + f.write(f""" +BO_ {addr} {name}: 32 RADAR + SG_ HEADER_BYTE_0 : 0|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_1 : 8|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_2 : 16|8@1+ (1,0) [0|255] "" XXX + SG_ HEADER_BYTE_3 : 24|8@1+ (1,0) [0|255] "" XXX +""") + for slot in range(7): + bit = 32 + slot * 32 + prefix = f"SLOT{slot + 1}" + f.write(f""" SG_ {prefix}_DISTANCE_RAW : {bit}|13@1+ (1,0) [0|8191] "" XXX + SG_ {prefix}_META_13_15 : {bit + 13}|3@1+ (1,0) [0|7] "" XXX + SG_ {prefix}_META_BYTE_2 : {bit + 16}|8@1+ (1,0) [0|255] "" XXX + SG_ {prefix}_META_BYTE_3 : {bit + 24}|8@1+ (1,0) [0|255] "" XXX +""") + f.write(f"""CM_ BO_ {addr} "IONIQ 9 candidate corner radar bin container. 0x430-0x437 correlate with left side and 0x440-0x447 with right side. Bytes 4-31 appear as seven 4-byte slots; lower 13 bits are a distance candidate at 0.05 m scale. This DBC intentionally exposes only raw candidate fields until lateral and velocity fields are validated."; +BA_ "GenMsgCycleTime" BO_ {addr} 30; +""") + + +if __name__ == "__main__": + dbc_name = os.path.basename(__file__).replace(".py", ".dbc") + out_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), dbc_name) + with open(out_path, "w", encoding="ascii") as f: + f.write(HEADER) + f.write('BA_DEF_ BO_ "GenMsgCycleTime" INT 0 100000;\n') + f.write('BA_DEF_DEF_ "GenMsgCycleTime" 0;\n') + for addr in range(0x430, 0x438): + write_object_msg(f, addr) + for addr in range(0x440, 0x448): + write_object_msg(f, addr) diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_radar.dbc b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_radar.dbc new file mode 100644 index 000000000..46c3032c2 --- /dev/null +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_radar.dbc @@ -0,0 +1,1178 @@ + +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: XXX + +BO_ 528 RADAR_TRACK_210: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 529 RADAR_TRACK_211: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 530 RADAR_TRACK_212: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 531 RADAR_TRACK_213: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 532 RADAR_TRACK_214: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 533 RADAR_TRACK_215: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 534 RADAR_TRACK_216: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 535 RADAR_TRACK_217: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 536 RADAR_TRACK_218: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 537 RADAR_TRACK_219: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 538 RADAR_TRACK_21a: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 539 RADAR_TRACK_21b: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 540 RADAR_TRACK_21c: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 541 RADAR_TRACK_21d: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 542 RADAR_TRACK_21e: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 543 RADAR_TRACK_21f: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 933 RADAR_TRACK_3a5: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 934 RADAR_TRACK_3a6: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 935 RADAR_TRACK_3a7: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 936 RADAR_TRACK_3a8: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 937 RADAR_TRACK_3a9: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 938 RADAR_TRACK_3aa: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 939 RADAR_TRACK_3ab: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 940 RADAR_TRACK_3ac: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 941 RADAR_TRACK_3ad: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 942 RADAR_TRACK_3ae: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 943 RADAR_TRACK_3af: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 944 RADAR_TRACK_3b0: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 945 RADAR_TRACK_3b1: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 946 RADAR_TRACK_3b2: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 947 RADAR_TRACK_3b3: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 948 RADAR_TRACK_3b4: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 949 RADAR_TRACK_3b5: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 950 RADAR_TRACK_3b6: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 951 RADAR_TRACK_3b7: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 952 RADAR_TRACK_3b8: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 953 RADAR_TRACK_3b9: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 954 RADAR_TRACK_3ba: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 955 RADAR_TRACK_3bb: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 956 RADAR_TRACK_3bc: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 957 RADAR_TRACK_3bd: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 958 RADAR_TRACK_3be: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 959 RADAR_TRACK_3bf: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 960 RADAR_TRACK_3c0: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 961 RADAR_TRACK_3c1: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 962 RADAR_TRACK_3c2: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 963 RADAR_TRACK_3c3: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 964 RADAR_TRACK_3c4: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + +BO_ 1024 RADAR_TRACK_400: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1025 RADAR_TRACK_401: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1026 RADAR_TRACK_402: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1027 RADAR_TRACK_403: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1028 RADAR_TRACK_404: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1029 RADAR_TRACK_405: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1030 RADAR_TRACK_406: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1031 RADAR_TRACK_407: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1032 RADAR_TRACK_408: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1033 RADAR_TRACK_409: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1034 RADAR_TRACK_40a: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1035 RADAR_TRACK_40b: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1036 RADAR_TRACK_40c: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1037 RADAR_TRACK_40d: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1038 RADAR_TRACK_40e: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1039 RADAR_TRACK_40f: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1040 RADAR_TRACK_410: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1041 RADAR_TRACK_411: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1042 RADAR_TRACK_412: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1043 RADAR_TRACK_413: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1044 RADAR_TRACK_414: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1045 RADAR_TRACK_415: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1046 RADAR_TRACK_416: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1047 RADAR_TRACK_417: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1048 RADAR_TRACK_418: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1049 RADAR_TRACK_419: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1050 RADAR_TRACK_41a: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1051 RADAR_TRACK_41b: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1052 RADAR_TRACK_41c: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + +BO_ 1053 RADAR_TRACK_41d: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + \ No newline at end of file diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_radar.py b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_radar.py new file mode 100755 index 000000000..f3abf2eac --- /dev/null +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_canfd_radar.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +import os + +if __name__ == "__main__": + dbc_name = os.path.basename(__file__).replace(".py", ".dbc") + hyundai_path = os.path.dirname(os.path.realpath(__file__)) + with open(os.path.join(hyundai_path, dbc_name), "w", encoding='utf-8') as f: + f.write(""" +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: XXX + """) + + for a in range(0x210, 0x210 + 16): + f.write(f""" +BO_ {a} RADAR_TRACK_{a:x}: 32 RADAR + SG_ NEW_SIGNAL_25 : 26|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_24 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_21 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_20 : 39|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT1 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_15 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_14 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_5 : 63|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST1 : 64|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST1 : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED1 : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_16 : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED1 : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL1 : 118|10@1- (0.05,0) [0|1023] "" XXX + SG_ NEW_SIGNAL_27 : 154|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_26 : 156|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_23 : 164|5@0+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_22 : 167|3@0+ (1,0) [0|7] "" XXX + SG_ VALID_CNT2 : 175|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 179|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_12 : 183|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_11 : 191|8@0- (1,0) [0|255] "" XXX + SG_ LONG_DIST2 : 192|12@1+ (0.05,0) [0|4095] "" XXX + SG_ LAT_DIST2 : 204|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED2 : 216|14@1- (0.01,0) [0|16383] "" XXX + SG_ NEW_SIGNAL_17 : 231|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED2 : 232|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL2 : 246|10@1- (0.05,0) [0|1023] "" XXX + """) + for a in range(0x3a5, 0x3a5 + 32): + f.write(f""" +BO_ {a} RADAR_TRACK_{a:x}: 24 RADAR + SG_ VALID : 25|2@0+ (1,0) [0|3] "" XXX + SG_ VALID2 : 28|2@0+ (1,0) [0|3] "" XXX + SG_ PROB : 30|10@1+ (1,0) [0|1023] "" XXX + SG_ VALID_CNT : 47|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 51|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_6 : 55|4@0+ (1,0) [0|15] "" XXX + SG_ NEW_SIGNAL_2 : 62|7@0- (1,0) [0|127] "" XXX + SG_ LONG_DIST : 63|13@1+ (0.05,0) [0|8191] "" XXX + SG_ LAT_DIST : 76|12@1- (0.05,0) [0|4095] "" XXX + SG_ REL_SPEED : 88|14@1- (0.01,0) [0|16383] "" XXX + SG_ IN_MYLANE : 103|2@0+ (1,0) [0|3] "" XXX + SG_ LAT_SPEED : 104|13@1- (0.01,0) [0|8191] "" XXX + SG_ REL_ACCEL : 118|10@1- (0.05,0) [0|1023] "" XXX + """) + + # Group 3 radar object list: + # 30 one-object messages at 20 Hz, with an empty distance sentinel of 0x7ff. + for a in range(0x400, 0x400 + 30): + f.write(f""" +BO_ {a} RADAR_TRACK_{a:x}: 24 RADAR + SG_ OBJECT_LENGTH : 41|7@1+ (0.1,0) [0|12.7] "m" XXX + SG_ LONG_DIST : 64|11@1+ (0.1,0) [0|204.7] "m" XXX + SG_ LAT_DIST : 75|12@1- (0.05,0) [-102.4|102.35] "m" XXX + SG_ REL_SPEED : 87|11@1- (0.1,0) [-102.4|102.3] "m/s" XXX + """) diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_kia_denso_front_radar.py b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_kia_denso_front_radar.py new file mode 100755 index 000000000..d00e5d355 --- /dev/null +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_kia_denso_front_radar.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +import os + + +if __name__ == "__main__": + dbc_name = os.path.basename(__file__).replace(".py", ".dbc") + hyundai_path = os.path.dirname(os.path.realpath(__file__)) + with open(os.path.join(hyundai_path, dbc_name), "w", encoding="utf-8") as f: + f.write(""" +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: XXX +""") + + # EN: The Denso DNMWR006 radar in the 2018-2019 Kia Sorento UM publishes + # eight stable tracked objects at 20 Hz from 0x500 through 0x507. + # Do not decode 0x508+ distance-sorted raw detections as stable tracks. + # KO: 2018-2019 Kia Sorento UM의 Denso DNMWR006 레이더는 0x500~0x507에서 + # 안정적인 추적 객체 8개를 20Hz로 전송함. 0x508 이후의 거리순 raw + # detection은 안정적인 트랙으로 디코딩하지 않음. + for address in range(0x500, 0x508): + f.write(f""" +BO_ {address} RADAR_TRACK_{address:x}: 8 RADAR + SG_ COUNTER : 7|8@0+ (1,0) [0|255] "" XXX + SG_ LONG_DIST : 15|16@0+ (0.00625,0) [0|409.59375] "m" XXX + SG_ LAT_DIST : 31|11@0- (0.0625,0) [-64|63.9375] "m" XXX + SG_ OBJECT_FLAGS_1 : 36|5@0+ (1,0) [0|31] "" XXX + SG_ OBJECT_FLAG_2 : 47|1@0+ (1,0) [0|1] "" XXX + SG_ REL_SPEED : 46|12@0- (0.015625,0) [-32|31.984375] "m/s" XXX + SG_ OBJECT_STATE : 50|3@0+ (1,0) [0|7] "" XXX + SG_ OBJECT_DETAIL : 63|8@0+ (1,0) [0|255] "" XXX +""") diff --git a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_palisade_2023.dbc b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_palisade_2023.dbc index 68f5d60af..b8ecca766 100644 --- a/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_palisade_2023.dbc +++ b/iqdbc_repo/iqdbc/dbc/generator/hyundai/hyundai_palisade_2023.dbc @@ -1,4 +1,4 @@ -CM_ "IMPORT _hyundai_canfd_common.dbc"; +CM_ "IMPORT _hyundai_common.dbc"; BO_ 67 DATC13: 8 XXX SG_ CF_Datc_AcDisp : 22|2@1+ (1,0) [0|0] "" XXX diff --git a/iqdbc_repo/iqdbc/dbc/hyundai_kia_generic.dbc b/iqdbc_repo/iqdbc/dbc/hyundai_kia_generic.dbc index 6a67700cf..b3bde5fd6 100644 --- a/iqdbc_repo/iqdbc/dbc/hyundai_kia_generic.dbc +++ b/iqdbc_repo/iqdbc/dbc/hyundai_kia_generic.dbc @@ -1341,6 +1341,17 @@ BO_ 273 TCU11: 8 TCU BO_ 16 ACU13: 8 ACU SG_ CF_Acu_CshAct : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CUBIS,IBOX,ODS +BO_ 1007 CRUISE_BUTTON_ALT: 8 XXX + SG_ SET_ME_1 : 52|1@0+ (1,0) [0|1] "" XXX + SG_ CruiseSwMain : 58|1@0+ (1,0) [0|1] "" XXX + SG_ CruiseSwState : 60|3@1+ (1,0) [0|7] "" XXX + +BO_ 1046 CRUISE_BUTTON_LFA: 8 XXX + SG_ NEW_SIGNAL_2 : 49|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_1 : 54|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_3 : 57|1@0+ (1,0) [0|1] "" XXX + SG_ CruiseSwLfa : 58|1@0+ (1,0) [0|1] "" XXX + BO_ 1040 CGW_USM1: 8 BCM SG_ CF_Gway_ATTurnRValue : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU SG_ CF_Gway_PTGMRValue : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU @@ -1384,6 +1395,8 @@ BO_ 1290 SCC13: 8 SCC SG_ SCC_Equip : 3|1@1+ (1,0) [0|1] "" ESC SG_ AebDrvSetStatus : 4|3@1+ (1,0) [0|7] "" CLU,ESC SG_ Lead_Veh_Dep_Alert_USM : 13|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_1 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_2 : 31|8@0+ (1,0) [0|255] "" XXX BO_ 1287 TCS15: 4 ESC SG_ ABS_W_LAMP : 0|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,CUBIS,IBOX @@ -1478,18 +1491,21 @@ BO_ 905 SCC14: 8 SCC SG_ ComfortBandLower : 6|6@1+ (0.02,0) [0|1.26] "m/s^2" ESC SG_ JerkUpperLimit : 12|7@1+ (0.1,0) [0|12.7] "m/s^3" ESC SG_ JerkLowerLimit : 19|7@1+ (0.1,0) [0|12.7] "m/s^3" ESC + SG_ NEW_SIGNAL_1 : 26|6@1+ (1,0) [0|63] "" XXX SG_ ACCMode : 32|3@1+ (1,0) [0|7] "" CLU,HUD,LDWS_LKAS,ESC - SG_ ObjGap : 56|8@1+ (1,0) [0|255] "" CLU,HUD,ESC SG_ ObjDistStat : 42|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_2 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ ObjGap : 56|8@1+ (1,0) [0|255] "" CLU,HUD,ESC -BO_ 1157 LFAHDA_MFC: 4 XXX +BO_ 1157 LFAHDA_MFC: 8 XXX SG_ HDA_USM : 0|2@1+ (1,0) [0|3] "" XXX SG_ HDA_Active : 2|1@1+ (1,0) [0|1] "" XXX SG_ HDA_Icon_State : 3|2@1+ (1,0) [0|3] "" XXX SG_ HDA_Chime : 7|1@1+ (1,0) [0|1] "" XXX SG_ HDA_VSetReq : 8|8@1+ (1,0) [0|255] "km/h" XXX SG_ LFA_SysWarning : 16|3@1+ (1,0) [0|7] "" XXX - SG_ NEW_SIGNAL_1 : 20|3@1+ (1,0) [0|7] "" XXX + SG_ HDA_Icon_Wheel : 20|1@1+ (1,0) [0|1] "" XXX + SG_ HDA_LdwSysState : 21|2@1+ (1,0) [0|3] "" XXX SG_ LFA_Icon_State : 24|2@1+ (1,0) [0|3] "" XXX SG_ LFA_USM : 27|2@1+ (1,0) [0|3] "" XXX SG_ HDA_SysWarning : 29|2@1+ (1,0) [0|3] "" XXX @@ -1497,11 +1513,10 @@ BO_ 1157 LFAHDA_MFC: 4 XXX BO_ 913 BCM_PO_11: 8 Vector__XXX SG_ BCM_Door_Dri_Status : 5|1@0+ (1,0) [0|1] "" PT_ESC_ABS SG_ BCM_Shift_R_MT_SW_Status : 39|2@0+ (1,0) [0|3] "" PT_ESC_ABS - SG_ LDA_BTN : 4|1@0+ (1,0) [0|1] "" XXX + SG_ LFA_Pressed : 4|1@0+ (1,0) [0|1] "" XXX BO_ 1426 LABEL11: 8 XXX SG_ CC_React : 34|1@1+ (1,0) [0|1] "" XXX - SG_ CC_ACT : 35|1@1+ (1,0) [0|1] "" XXX BO_ 910 WHL_SPD12_FS: 5 iBAU SG_ CRC : 0|8@1+ (1,0) [0|0] "" Vector__XXX @@ -1522,7 +1537,10 @@ BO_ 865 ADAS_PRK_11: 8 ADAS_PRK SG_ PCA_CHECK_SUM : 48|8@1+ (1,0) [0|0] "" Vector__XXX BO_ 882 ELECT_GEAR: 8 XXX - SG_ Elect_Gear_Shifter : 16|4@1+ (1,0) [0|7] "" CLU + SG_ Elect_Gear_Shifter : 16|4@1+ (1,0) [0|7] "" CLU + SG_ Elect_Gear_Shifter_NEXO : 16|16@1+ (1,0) [0|65535] "" CLU + SG_ Elect_Gear_Step : 22|3@0+ (1,0) [0|7] "" XXX + SG_ Elect_Motor_Speed : 0|8@1+ (1,0) [0|255] "" XXX SG_ SLC_ON : 31|1@0+ (1,0) [0|1] "" CLU SG_ SLC_SET_SPEED : 32|8@1+ (1,0) [0|255] "" CLU @@ -1534,14 +1552,12 @@ BO_ 881 E_EMS11: 8 XXX SG_ Cruise_Limit_Target : 23|8@1+ (1,0) [0|15] "" XXX SG_ Accel_Pedal_Pos : 31|8@1+ (1,0) [0|254] "" XXX SG_ CR_Vcu_AccPedDep_Pos : 56|8@1+ (1,0) [0|254] "" XXX + SG_ Engine_Run : 14|1@0+ (1,0) [0|1] "" XXX + SG_ N : 18|13@1+ (1,0) [0|15] "" XXX BO_ 1355 EV_PC6: 8 CGW SG_ CF_Vcu_SbwWarnMsg : 16|3@1+ (1,0) [0|7] "" Vector__XXX -BO_ 1429 E_CRUISE_CONTROL: 8 XXX - SG_ CRUISE_LAMP_M : 50|1@0+ (1,0) [0|1] "" XXX - SG_ CRUISE_LAMP_S : 51|1@0+ (1,0) [0|1] "" XXX - BO_ 1430 EV_PC2: 8 CGW SG_ CR_Ldc_ActVol_LS_V : 32|8@1+ (0.1,0) [0|0] "V" Vector__XXX @@ -1584,7 +1600,7 @@ BO_ 352 AHB1: 8 iBAU SG_ CF_Ahb_Bzzr : 26|1@1+ (1,0) [0|1] "" Vector__XXX SG_ CF_Ahb_ChkSum : 56|8@1+ (1,0) [0|255] "" Vector__XXX -BO_ 1191 MFC_4a7: 8 XXX +BO_ 1191 MFC_4a7: 2 XXX SG_ PAINT1 : 0|1@0+ (1,0) [0|1] "" XXX BO_ 1162 BCA11: 8 BCW @@ -1658,33 +1674,22 @@ BO_ 1348 Navi_HU: 8 XXX SG_ SpeedLim_Nav_General : 29|1@0+ (1,0) [0|1] "" XXX SG_ SpeedLim_Nav_Cam : 30|1@0+ (1,0) [0|1] "" XXX -BO_ 683 ESCC: 8 XXX - SG_ FCA_CmdAct : 0|1@1+ (1,0) [0|1] "" ESC - SG_ CF_VSM_Warn_FCA11 : 1|2@1+ (1,0) [0|3] "" ACU,CLU,ESC - SG_ AEB_CmdAct : 3|1@1+ (1,0) [0|1] "" ESC - SG_ CF_VSM_Warn_SCC12 : 4|2@1+ (1,0) [0|3] "" CLU,ESC,IAP - SG_ CF_VSM_DecCmdAct_SCC12 : 6|1@1+ (1,0) [0|1] "" ESC - SG_ CF_VSM_DecCmdAct_FCA11 : 7|1@1+ (1,0) [0|1] "" ESC - SG_ CR_VSM_DecCmd_SCC12 : 8|8@1+ (0.01,0) [0|2.55] "g" ESC - SG_ ObjValid : 16|1@1+ (1,0) [0|1] "" CLU,ESC,TCU - SG_ ACC_ObjStatus : 17|2@1+ (1,0) [0|3] "" ABS,ESC - SG_ ACC_ObjLatPos : 24|9@1+ (0.1,-20) [-20|31.1] "m" ABS,ESC - SG_ ACC_ObjRelSpd : 44|12@1+ (0.1,-170) [-170|239.5] "m/s" ABS,ESC - SG_ ACC_ObjDist : 33|11@1+ (0.1,0) [0|204.7] "m" ABS,ESC - SG_ CR_VSM_DecCmd_FCA11 : 56|8@1+ (0.01,0) [0|2.55] "g" ESC - +BO_ 1291 EV_Info: 8 XXX + SG_ OPKR_EV_Charge_Level : 17|7@1+ (1,0) [0|100] "%" XXX CM_ "BO_ E_EMS11: All (plug-in) hybrids use this gas signal: CR_Vcu_AccPedDep_Pos, and all EVs use the Accel_Pedal_Pos signal. See hyundai/values.py for a specific car list"; CM_ 145 "Contains signal with accelerator pedal press. Used by fuel cell hydrogen-powered (FCEV) cars such as the 2021 Hyundai Nexo."; CM_ 512 "Contains signal with gear shifter. Used by fuel cell hydrogen-powered (FCEV) cars such as the 2021 Hyundai Nexo."; CM_ SG_ 871 CF_Lvr_IsgState "Idle Stop and Go"; CM_ SG_ 1056 SCCInfoDisplay "Goes to 1 for a second while transitioning from Cruise Control to No Message"; CM_ SG_ 1348 SpeedLim_Nav_Clu "Speed limit displayed on Nav, Cluster and HUD"; +CM_ SG_ 1348 SpeedLim_Nav_Cam "Speed limit if speed cam exist"; +VAL_ 882 Elect_Gear_Shifter_NEXO 1546 "D" 2314 "N" 2566 "R" 2569 "P"; VAL_ 274 CUR_GR 1 "D" 2 "D" 3 "D" 4 "D" 5 "D" 6 "D" 7 "D" 8 "D" 14 "R" 0 "P"; VAL_ 512 HYDROGEN_GEAR_SHIFTER 5 "D" 8 "S" 6 "N" 7 "R" 0 "P"; VAL_ 871 CF_Lvr_IsgState 0 "enabled" 1 "activated" 2 "unknown" 3 "disabled"; VAL_ 871 CF_Lvr_Gear 12 "T" 5 "D" 8 "S" 6 "N" 7 "R" 0 "P"; -VAL_ 882 Elect_Gear_Shifter 4 "S" 5 "D" 8 "S" 6 "N" 7 "R" 0 "P"; +VAL_ 882 Elect_Gear_Shifter 4 "S" 5 "D" 8 "S" 6 "N" 7 "R" 0 "P" 12 "T"; VAL_ 905 ACCMode 0 "off" 1 "enabled" 2 "driver_override" 3 "off_maybe_fault" 4 "cancelled"; VAL_ 905 ObjDistStat 0 "no_object" 1 "receding" 2 "approaching"; VAL_ 909 CF_VSM_Warn 2 "FCW" 3 "AEB"; diff --git a/iqdbc_repo/iqdbc/dbc/tesla_model3_vehicle.dbc b/iqdbc_repo/iqdbc/dbc/tesla_model3_vehicle.dbc index fa4624e29..a8faeca93 100644 --- a/iqdbc_repo/iqdbc/dbc/tesla_model3_vehicle.dbc +++ b/iqdbc_repo/iqdbc/dbc/tesla_model3_vehicle.dbc @@ -397,5 +397,10 @@ BO_ 826 ID33AUI_rangeSOC: 8 VehicleBus BO_ 306 ID132HVBattAmpVolt: 8 VehicleBus SG_ BattVoltage132 : 0|16@1+ (0.01,0) [0|655.35] "V" Receiver +BO_ 950 ID3B6UI_odometer: 8 VehicleBus + SG_ UI_odometer : 0|32@1+ (0.001,0) [0|4294967.295] "km" Receiver + SG_ UI_odometerCounter : 52|4@1+ (1,0) [0|15] "" Receiver + SG_ UI_odometerChecksum : 56|8@1+ (1,0) [0|255] "" Receiver + BO_ 658 ID292BMS_SOC: 8 VehicleBus SG_ SOCUI292 : 10|10@1+ (0.1,0) [0|102.3] "%" Receiver diff --git a/iqdbc_repo/iqdbc/iqpilot/car/chrysler/carstate_ext.py b/iqdbc_repo/iqdbc/iqpilot/car/chrysler/carstate_ext.py deleted file mode 100644 index 67cf260b7..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/chrysler/carstate_ext.py +++ /dev/null @@ -1,37 +0,0 @@ - -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" - -from enum import StrEnum - -from iqdbc.car import Bus, structs -from iqdbc.can.parser import CANParser -from iqdbc.car.chrysler.values import RAM_HD -from iqdbc.iqpilot.car.chrysler.values_ext import BUTTONS - - -class CarStateExt: - def __init__(self, CP, CP_IQ): - self.CP = CP - self.CP_IQ = CP_IQ - - self.button_events = [] - self.button_states = {button.event_type: False for button in BUTTONS} - - def update(self, ret: structs.CarState, ret_iq: structs.IQCarState, can_parsers: dict[StrEnum, CANParser]): - cp = can_parsers[Bus.pt] - - button_events = [] - for button in BUTTONS: - state = (cp.vl[button.can_addr][button.can_msg] in button.values) - if self.button_states[button.event_type] != state: - event = structs.CarState.ButtonEvent.new_message() - event.type = button.event_type - event.pressed = state - button_events.append(event) - self.button_states[button.event_type] = state - self.button_events = button_events - - if self.CP.carFingerprint in RAM_HD: - ret.steeringAngleDeg = cp.vl["STEERING"]["STEERING_ANGLE"] diff --git a/iqdbc_repo/iqdbc/iqpilot/car/ford/aol.py b/iqdbc_repo/iqdbc/iqpilot/car/ford/aol.py deleted file mode 100644 index 510c9e0fa..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/ford/aol.py +++ /dev/null @@ -1,21 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" - -from enum import StrEnum - -from iqdbc.car import Bus,structs - -from iqdbc.iqpilot.aol_base import AolCarStateBase -from iqdbc.can.parser import CANParser - - -class AolCarState(AolCarStateBase): - def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): - super().__init__(CP, CP_IQ) - - def update_aol(self, ret: structs.CarState, can_parsers: dict[StrEnum, CANParser]) -> None: - cp = can_parsers[Bus.pt] - - self.prev_lkas_button = self.lkas_button - self.lkas_button = cp.vl["Steering_Data_FD1"]["TjaButtnOnOffPress"] diff --git a/iqdbc_repo/iqdbc/iqpilot/car/gm/interface_ext.py b/iqdbc_repo/iqdbc/iqpilot/car/gm/interface_ext.py deleted file mode 100644 index 2c1bea1f4..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/gm/interface_ext.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" -import os -from math import exp - -from iqdbc.car import structs -from iqdbc.car.common.basedir import BASEDIR -from iqdbc.car.gm.interface import CAR -from iqdbc.iqpilot.car.interfaces import LatControlInputs, NanoFFModel, TorqueFromLateralAccelCallbackTypeTorqueSpace - -NON_LINEAR_TORQUE_PARAMS = { - CAR.CHEVROLET_BOLT_EUV: [2.6531724862969748, 1.0, 0.1919764879840985, 0.009054123646805178], - CAR.GMC_ACADIA: [4.78003305, 1.0, 0.3122, 0.05591772], - CAR.CHEVROLET_SILVERADO: [3.29974374, 1.0, 0.25571356, 0.0465122] -} - - -class CarInterfaceExt: - def __init__(self, CP: structs.CarParams, CI_Base): - self.CP = CP - self.CI_Base = CI_Base - self.neural_ff_model = None - - def torque_from_lateral_accel_siglin(self, latcontrol_inputs: LatControlInputs, torque_params: structs.CarParams.LateralTorqueTuning, - gravity_adjusted: bool) -> float: - def sig(val): - # https://timvieira.github.io/blog/post/2014/02/11/exp-normalize-trick - if val >= 0: - return 1 / (1 + exp(-val)) - 0.5 - else: - z = exp(val) - return z / (1 + z) - 0.5 - - # The "lat_accel vs torque" relationship is assumed to be the sum of "sigmoid + linear" curves - # An important thing to consider is that the slope at 0 should be > 0 (ideally >1) - # This has big effect on the stability about 0 (noise when going straight) - # ToDo: To generalize to other GMs, explore tanh function as the nonlinear - non_linear_torque_params = NON_LINEAR_TORQUE_PARAMS.get(self.CP.carFingerprint) - assert non_linear_torque_params, "The params are not defined" - a, b, c, _ = non_linear_torque_params - steer_torque = (sig(latcontrol_inputs.lateral_acceleration * a) * b) + (latcontrol_inputs.lateral_acceleration * c) - return float(steer_torque) - - def torque_from_lateral_accel_neural(self, latcontrol_inputs: LatControlInputs, orque_params: structs.CarParams.LateralTorqueTuning, - gravity_adjusted: bool) -> float: - inputs = list(latcontrol_inputs) - if gravity_adjusted: - inputs[0] += inputs[1] - return float(self.neural_ff_model.predict(inputs)) - - def torque_from_lateral_accel_in_torque_space(self) -> TorqueFromLateralAccelCallbackTypeTorqueSpace: - if self.CP.carFingerprint == CAR.CHEVROLET_BOLT_EUV: - return self.torque_from_lateral_accel_neural - elif self.CP.carFingerprint in NON_LINEAR_TORQUE_PARAMS: - return self.torque_from_lateral_accel_siglin - else: - return self.CI_Base.torque_from_lateral_accel_linear_in_torque_space diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/aol.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/aol.py deleted file mode 100644 index 53e91379d..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/aol.py +++ /dev/null @@ -1,99 +0,0 @@ -from enum import StrEnum -from collections import namedtuple - -from iqdbc.car import Bus, DT_CTRL, structs -from iqdbc.car.hyundai.values import CAR - -from iqdbc.car.hyundai.values import HyundaiFlags -from iqdbc.iqpilot.car.hyundai.values import HyundaiFlagsIQ -from iqdbc.iqpilot.aol_base import AolCarStateBase -from iqdbc.can.parser import CANParser - -ButtonType = structs.CarState.ButtonEvent.Type - -AolDataIQ = namedtuple("AolDataIQ", - ["enable_aol", "lat_active", "disengaging", "paused"]) - - -class AolCarController: - def __init__(self): - self.aol = AolDataIQ(False, False, False, False) - - self.lat_disengage_blink = 0 - self.lat_disengage_init = False - self.prev_lat_active = False - - self.lkas_icon = 0 - self.lfa_icon = 0 - - def aol_status_update(self, CC: structs.CarControl, CC_IQ: structs.IQCarControl, frame: int) -> AolDataIQ: - enable_aol = CC_IQ.aol.available - - if CC.latActive: - self.lat_disengage_init = False - elif self.prev_lat_active: - self.lat_disengage_init = True - - if not self.lat_disengage_init: - self.lat_disengage_blink = frame - - paused = CC_IQ.aol.enabled and not CC.latActive - disengaging = (frame - self.lat_disengage_blink) * DT_CTRL < 1.0 if self.lat_disengage_init else False - - self.prev_lat_active = CC.latActive - - return AolDataIQ(enable_aol, CC.latActive, disengaging, paused) - - def create_lkas_icon(self, CP: structs.CarParams, enabled: bool) -> int: - if self.aol.enable_aol: - lkas_icon = 2 if self.aol.lat_active else 3 if self.aol.disengaging else 1 - else: - lkas_icon = 2 if enabled else 1 - - if CP.carFingerprint in (CAR.KIA_OPTIMA_G4, CAR.KIA_OPTIMA_G4_FL, CAR.HYUNDAI_KONA_NON_SCC): - lkas_icon = 3 if (self.aol.lat_active if self.aol.enable_aol else enabled) else 1 - - return lkas_icon - - def create_lfa_icon(self, enabled: bool) -> int: - if self.aol.enable_aol: - lfa_icon = 2 if self.aol.lat_active else 3 if self.aol.disengaging else 1 if self.aol.paused else 0 - else: - lfa_icon = 2 if enabled else 0 - - return lfa_icon - - def update(self, CP: structs.CarParams, CC: structs.CarControl, CC_IQ: structs.IQCarControl, frame: int) -> None: - self.aol = self.aol_status_update(CC, CC_IQ, frame) - self.lkas_icon = self.create_lkas_icon(CP, CC.enabled) - self.lfa_icon = self.create_lfa_icon(CC.enabled) - - -class AolCarState(AolCarStateBase): - def __init__(self, CP: structs.CarParams, CP_IQ: structs.CarParams): - super().__init__(CP, CP_IQ) - self.main_cruise_enabled: bool = False - - @staticmethod - def get_parser(CP, CP_IQ, pt_messages) -> None: - pass - - def get_main_cruise(self, ret: structs.CarState) -> bool: - if self.CP_IQ.flags & HyundaiFlagsIQ.MAIN_BTN_LONG_TOGGLE: - if any(be.type == ButtonType.mainCruise and be.pressed for be in ret.buttonEvents): - self.main_cruise_enabled = not self.main_cruise_enabled - else: - self.main_cruise_enabled = True - - return self.main_cruise_enabled if ret.cruiseState.available else False - - def update_aol(self, ret: structs.CarState, can_parsers: dict[StrEnum, CANParser]) -> None: - pass - - def update_aol_canfd(self, ret: structs.CarState, can_parsers: dict[StrEnum, CANParser]) -> None: - cp = can_parsers[Bus.pt] - cp_cam = can_parsers[Bus.cam] - - if not self.CP.openpilotLongitudinalControl: - cp_cruise_info = cp_cam if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else cp - ret.cruiseState.available = cp_cruise_info.vl["SCC_CONTROL"]["MainMode_ACC"] == 1 diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/carstate_ext.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/carstate_ext.py deleted file mode 100644 index b9415de70..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/carstate_ext.py +++ /dev/null @@ -1,79 +0,0 @@ -from enum import StrEnum - -from iqdbc.car import Bus, structs -from iqdbc.can.parser import CANParser -from iqdbc.car.hyundai.values import HyundaiFlags -from iqdbc.iqpilot.car.hyundai.values import HyundaiFlagsIQ - - -class CarStateExt: - def __init__(self, CP, CP_IQ): - self.CP = CP - self.CP_IQ = CP_IQ - - self.aBasis = 0.0 - - def update_speed_limit(self, cp, cp_cam) -> float: - speed_limit = 0 - - if self.CP.flags & HyundaiFlags.CANFD: - if self.CP_IQ.flags & HyundaiFlagsIQ.SPEED_LIMIT_AVAILABLE: - bus = cp if self.CP.flags & HyundaiFlags.CANFD_LKA_STEERING else cp_cam - speed_limit = bus.vl["FR_CMR_02_100ms"]["ISLW_SpdCluMainDis"] - else: - nav, cam = 0, 0 - if self.CP_IQ.flags & HyundaiFlagsIQ.SPEED_LIMIT_AVAILABLE: - nav = cp.vl["Navi_HU"]["SpeedLim_Nav_Clu"] - if self.CP_IQ.flags & HyundaiFlagsIQ.HAS_LKAS12: - cam = cp_cam.vl["LKAS12"]["CF_Lkas_TsrSpeed_Display_Clu"] - - speed_limit = cam if cam not in (0, 255) else nav - - if speed_limit in (0, 255): - speed_limit = 0 - - return speed_limit - - def update(self, ret: structs.CarState, ret_iq: structs.IQCarState, can_parsers: dict[StrEnum, CANParser], speed_conv: float) -> None: - cp = can_parsers[Bus.pt] - cp_cam = can_parsers[Bus.cam] - - self.aBasis = cp.vl["TCS13"]["aBasis"] - - if self.CP_IQ.flags & HyundaiFlagsIQ.NON_SCC: - cruise_msg = "LABEL11" if self.CP.flags & HyundaiFlags.EV else \ - "E_CRUISE_CONTROL" if self.CP.flags & HyundaiFlags.HYBRID else \ - "EMS16" - cruise_available_sig = "CC_React" if self.CP.flags & HyundaiFlags.EV else "CRUISE_LAMP_M" - cruise_enabled_sig = "CC_ACT" if self.CP.flags & HyundaiFlags.EV else "CRUISE_LAMP_S" - cruise_speed_msg = "E_EMS11" if self.CP.flags & HyundaiFlags.EV else \ - "ELECT_GEAR" if self.CP.flags & HyundaiFlags.HYBRID else \ - "LVR12" - cruise_speed_sig = "Cruise_Limit_Target" if self.CP.flags & HyundaiFlags.EV else \ - "SLC_SET_SPEED" if self.CP.flags & HyundaiFlags.HYBRID else \ - "CF_Lvr_CruiseSet" - ret.cruiseState.available = cp.vl[cruise_msg][cruise_available_sig] != 0 - ret.cruiseState.enabled = cp.vl[cruise_msg][cruise_enabled_sig] != 0 - ret.cruiseState.speed = cp.vl[cruise_speed_msg][cruise_speed_sig] * speed_conv - ret.cruiseState.standstill = False - ret.cruiseState.nonAdaptive = False - - if not self.CP_IQ.flags & HyundaiFlagsIQ.NON_SCC_NO_FCA: - cp_cruise = cp if self.CP_IQ.flags & HyundaiFlagsIQ.NON_SCC_RADAR_FCA else cp_cam - - aeb_src = "FCA11" - aeb_warning = cp_cruise.vl[aeb_src]["CF_VSM_Warn"] != 0 - aeb_braking = cp_cruise.vl[aeb_src]["CF_VSM_DecCmdAct"] != 0 or cp_cruise.vl[aeb_src]["FCA_CmdAct"] != 0 - ret.stockFcw = aeb_warning and not aeb_braking - ret.stockAeb = aeb_warning and aeb_braking - - ret_iq.speedLimit = self.update_speed_limit(cp, cp_cam) * speed_conv - - def update_canfd_ext(self, ret: structs.CarState, ret_iq: structs.IQCarState, can_parsers: dict[StrEnum, CANParser], - speed_factor: float) -> None: - cp = can_parsers[Bus.pt] - cp_cam = can_parsers[Bus.cam] - - self.aBasis = cp.vl["TCS"]["aBasis"] - - ret_iq.speedLimit = self.update_speed_limit(cp, cp_cam) * speed_factor diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/enable_radar_tracks.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/enable_radar_tracks.py deleted file mode 100644 index bb554eb68..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/enable_radar_tracks.py +++ /dev/null @@ -1,67 +0,0 @@ -from iqdbc.car import uds -from iqdbc.car.carlog import carlog -from iqdbc.car.isotp_parallel_query import IsoTpParallelQuery - -DEVELOPER_DIAGNOSTIC = 0x07 -CUSTOM_DIAGNOSTIC_REQUEST = bytes([uds.SERVICE_TYPE.DIAGNOSTIC_SESSION_CONTROL, DEVELOPER_DIAGNOSTIC]) -CUSTOM_DIAGNOSTIC_RESPONSE = bytes([uds.SERVICE_TYPE.DIAGNOSTIC_SESSION_CONTROL + 0x40, DEVELOPER_DIAGNOSTIC]) - -READ_DATA_REQUEST = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER]) -READ_DATA_RESPONSE = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER + 0x40]) - -WRITE_DATA_REQUEST = bytes([uds.SERVICE_TYPE.WRITE_DATA_BY_IDENTIFIER]) -WRITE_DATA_RESPONSE = bytes([uds.SERVICE_TYPE.WRITE_DATA_BY_IDENTIFIER + 0x40]) - -CONFIG_DATA_ID = bytes([0x01, 0x42]) -DEFAULT_CONFIG = bytes([0x00, 0x00, 0x00, 0x01, 0x00, 0x00]) -TRACKS_ENABLED_CONFIG = bytes([0x00, 0x00, 0x00, 0x01, 0x00, 0x01]) -TRACKS_ENABLED_CONFIG_BYTES = b"\x00\x00\x01\x00\x01" - - -def enable_radar_tracks(logcan, sendcan, bus=0, addr=0x7d0, timeout=0.1, retry=2): - carlog.error("radar_tracks: enabling ...") - - for i in range(retry): - try: - query = IsoTpParallelQuery(sendcan, logcan, bus, [addr], [CUSTOM_DIAGNOSTIC_REQUEST], [CUSTOM_DIAGNOSTIC_RESPONSE]) - - for _, _ in query.get_data(timeout).items(): - carlog.error("radar_tracks: check current config ...") - - request = READ_DATA_REQUEST + CONFIG_DATA_ID - query = IsoTpParallelQuery(sendcan, logcan, bus, [addr], [request], [READ_DATA_RESPONSE]) - - for _, data in query.get_data(timeout).items(): - current_config = data[3:] - - carlog.error(f"radar_tracks: current config: {current_config.hex()}") - - if current_config == TRACKS_ENABLED_CONFIG_BYTES: - carlog.error("radar_tracks: already enabled, skipping ...") - else: - carlog.error("radar_tracks: reconfigure radar to output radar points ...") - request = WRITE_DATA_REQUEST + CONFIG_DATA_ID + TRACKS_ENABLED_CONFIG - query = IsoTpParallelQuery(sendcan, logcan, bus, [addr], [request], [WRITE_DATA_RESPONSE]) - query.get_data(0) - - carlog.error("radar_tracks: successfully enabled") - - return True - - except Exception as e: - carlog.exception(f"radar_tracks exception: {e}") - - carlog.error(f"radar_tracks retry ({i + 1}) ...") - carlog.error("radar_tracks: failed") - return False - - -if __name__ == "__main__": - import time - import cereal.messaging as messaging - sendcan = messaging.pub_sock('sendcan') - logcan = messaging.sub_sock('can') - time.sleep(1) - - enabled = enable_radar_tracks(logcan, sendcan, bus=0, addr=0x7d0, timeout=0.1) - print(f"enabled: {enabled}") diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/escc.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/escc.py deleted file mode 100644 index 1e0ab7784..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/escc.py +++ /dev/null @@ -1,51 +0,0 @@ -from iqdbc.car import structs - -from iqdbc.iqpilot.car.hyundai.values import HyundaiFlagsIQ - -ESCC_MSG = 0x2AB - - -class EnhancedSmartCruiseControl: - def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): - self.CP = CP - self.CP_IQ = CP_IQ - - @property - def enabled(self): - return self.CP_IQ.flags & HyundaiFlagsIQ.ENHANCED_SCC - - @property - def trigger_msg(self): - return ESCC_MSG - - def update_car_state(self, car_state): - self.car_state = car_state - - def update_scc12(self, values): - values["AEB_CmdAct"] = self.car_state.escc_cmd_act - values["CF_VSM_Warn"] = self.car_state.escc_aeb_warning - values["CF_VSM_DecCmdAct"] = self.car_state.escc_aeb_dec_cmd_act - values["CR_VSM_DecCmd"] = self.car_state.escc_aeb_dec_cmd - values["AEB_Status"] = 2 # AEB enabled - - -class EsccCarStateBase: - def __init__(self): - self.escc_aeb_warning = 0 - self.escc_aeb_dec_cmd_act = 0 - self.escc_cmd_act = 0 - self.escc_aeb_dec_cmd = 0 - - -class EsccCarController: - def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): - self.ESCC = EnhancedSmartCruiseControl(CP, CP_IQ) - - def update(self, car_state): - self.ESCC.update_car_state(car_state) - - -class EsccRadarInterfaceBase: - def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): - self.ESCC = EnhancedSmartCruiseControl(CP, CP_IQ) - self.use_escc = False diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/fingerprints_ext.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/fingerprints_ext.py deleted file mode 100644 index 4dc867963..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/fingerprints_ext.py +++ /dev/null @@ -1,95 +0,0 @@ -from iqdbc.car.structs import CarParams -from iqdbc.car.hyundai.values import CAR - -Ecu = CarParams.Ecu - - -FW_VERSIONS_EXT = { - CAR.KIA_CEED_PHEV_2022_NON_SCC: { - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00CD MDPS C 1.00 1.01 56310-XX000 4CPHC101', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00CDH LKAS AT EUR LHD 1.00 1.01 99211-CR700 931', - ], - }, - CAR.GENESIS_G70_2021_NON_SCC: { - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00IK MDPS R 1.00 1.08 57700-G9200 4I2CL108', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00IK__ SCC --CUP 1.00 1.02 96400-G9100 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00IK MFC MT USA LHD 1.00 1.01 95740-G9000 170920', - ], - }, - CAR.HYUNDAI_KONA_NON_SCC: { - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00OS MDPS C 1.00 1.05 56310J9030\x00 4OSDC105', - b'\xf1\x00OS MDPS C 1.00 1.04 56310J9030\x00 4OSDC104', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00OS9 LKAS AT USA LHD 1.00 1.00 95740-J9200 g30', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x006T6J0_C2\x00\x006T6K1051\x00\x00TOS4N20NS2\x00\x00\x00\x00', - ], - }, - CAR.KIA_FORTE_2019_NON_SCC: { - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00BD MDPS C 1.00 1.04 56310/M6000 4BDDC104', - b'\xf1\x00BD MDPS C 1.00 1.05 56310/M6000 4BDDC105', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00BD LKAS AT USA LHD 1.00 1.02 95740-M6000 J31', - ], - }, - CAR.KIA_FORTE_2021_NON_SCC: { - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00BD MDPS C 1.00 1.08 56310M6000\x00 4BDDC108', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00BD LKAS AT USA LHD 1.00 1.04 95740-M6000 J33', - ], - }, - CAR.KIA_SELTOS_2023_NON_SCC: { - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00SP ESC \t 101"\t\x01 58910-Q5510', - b'\xf1\x00SP ESC \r 100"\x04\x01 58910-Q5510', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00SP2 MDPS C 1.00 1.04 56310Q5240 4SPSC104', - b'\xf1\x00SP2 MDPS C 1.00 1.01 56300Q5920 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00SP2 MFC AT USA LHD 1.00 1.03 99210-Q5500 230208', - b'\xf1\x00SP2 MFC AT AUS RHD 1.00 1.02 99210-Q5500 220624', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x006V2B0_C2\x00\x006V2D5051\x00\x00CSP2N20NL0\x00\x00\x00\x00', - b'\xf1\x006V2B0_C2\x00\x006V2D4051\x00\x00CSP2N20KL1\x00\x00\x00\x00', - ], - }, - CAR.HYUNDAI_ELANTRA_2022_NON_SCC: { - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00CN7 MDPS R 1.00 1.04 57700-IB000 4CNNP104', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.01 99210-AB000 210205', - b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.00 99210-IB000 210531', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00CN ESC \t 100!\x05\x01 58910-IB000', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00T02601BL T02900A1 WCN7T20XXX900NS4\xf7\xccz\xf6', - ], - }, - CAR.HYUNDAI_BAYON_1ST_GEN_NON_SCC: { - # TODO: Check working route for more FW - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00BC3 LKA AT EUR LHD 1.00 1.01 99211-Q0100 261' - ], - }, -} diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/lead_data_ext.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/lead_data_ext.py deleted file mode 100644 index f2c77de9f..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/lead_data_ext.py +++ /dev/null @@ -1,111 +0,0 @@ -from abc import ABC, abstractmethod -from iqdbc.car import structs -from iqdbc.car.hyundai.values import HyundaiFlags - - -class LeadData(ABC): - def __init__(self, object_gap: int, lead_distance: float, lead_rel_speed: float, lead_visible: bool): - self.object_gap = object_gap - self.lead_distance = lead_distance - self.lead_rel_speed = lead_rel_speed - self.lead_visible = lead_visible - - @property - @abstractmethod - def object_rel_gap(self) -> int: - raise NotImplementedError("Subclasses must implement this method") - - -class CanLeadData(LeadData): - @property - def object_rel_gap(self) -> int: - return 0 if self.lead_distance == 0 else 2 if self.lead_rel_speed < -0.2 else 1 - - -class CanFdLeadData(LeadData): - @property - def object_rel_gap(self) -> int: - return 0 if not self.lead_visible else 2 if self.lead_rel_speed < 0 else 1 - - -def _hysteresis_update(current, new_value, counter, threshold): - """ - Updates a value based on a hysteresis threshold mechanism. This function - compares a new value against the current value and uses a counter to detect - when a transition should occur, avoiding rapid oscillations between states. - A new value will only be adopted if it differs from the current value and - the counter reaches the specified threshold. - - :param current: The current value being tracked. - :param new_value: The potential new value to compare against the current. - :param counter: The count of consecutive different values encountered. - :param threshold: The minimum count required before switching to the new value. - :return: A tuple containing: - - The updated current value, which is either the original current - value or the new value if the hysteresis condition was met. - - The updated counter, reset to 0 if the new value was adopted, - or incremented by 1 otherwise. - """ - if new_value == current: - return current, 0 - counter += 1 - return (new_value, 0) if counter >= threshold else (current, counter) - - -class LeadDataCarController: - # Hysteresis parameters - LEAD_HYSTERESIS_FRAMES: int = 50 - - def __init__(self, CP: structs.CarParams): - self.CP = CP - - self.lead_one = {} - self.lead_two = {} - - self._lead_on_counter = 0 - self._lead_off_counter = 0 - self.lead_visible = False - self.gap_counter = 0 - self.object_gap = 0 - self.lead_distance = 0 - self.lead_rel_speed = 0 - - def _update_object_gap(self, lead_distance: float | None): - new_gap = 5 # Default gap value if no lead distance is provided - if lead_distance is None or lead_distance == 0: - new_gap = 0 - elif lead_distance < 20: - new_gap = 2 - elif lead_distance < 25: - new_gap = 3 - elif lead_distance < 30: - new_gap = 4 - - self.object_gap, self.gap_counter = _hysteresis_update(self.object_gap, new_gap, self.gap_counter, self.LEAD_HYSTERESIS_FRAMES) - - def _update_lead_visible_hysteresis(self, raw_lead_visible: bool): - counter = self._lead_on_counter if raw_lead_visible else self._lead_off_counter - self.lead_visible, counter = _hysteresis_update(self.lead_visible, raw_lead_visible, counter, self.LEAD_HYSTERESIS_FRAMES) - - if raw_lead_visible: - self._lead_on_counter = counter - self._lead_off_counter = 0 # reset opposite counter - else: - self._lead_off_counter = counter - self._lead_on_counter = 0 # reset opposite counter - - def update(self, CC_IQ: structs.IQCarControl) -> None: - self.lead_one = CC_IQ.leadOne - self.lead_two = CC_IQ.leadTwo - - self.lead_distance = self.lead_one.dRel - self.lead_rel_speed = self.lead_one.vRel - self._update_lead_visible_hysteresis(self.lead_one.status) - self._update_object_gap(self.lead_distance) - - @property - def lead_data(self) -> CanLeadData | CanFdLeadData: - if self.CP.flags & HyundaiFlags.CANFD: - return CanFdLeadData(self.object_gap, self.lead_distance, self.lead_rel_speed, self.lead_visible) - - return CanLeadData(self.object_gap, self.lead_distance, self.lead_rel_speed, self.lead_visible) diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/config.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/config.py deleted file mode 100644 index dc04044b2..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/config.py +++ /dev/null @@ -1,49 +0,0 @@ -from dataclasses import dataclass, field - -from iqdbc.car.hyundai.values import CAR - - -@dataclass -class CarTuningConfig: - lookahead_jerk_bp: list[float] = field(default_factory=lambda: [5., 20.]) - lookahead_jerk_upper_v: list[float] = field(default_factory=lambda: [0.25, 0.5]) - lookahead_jerk_lower_v: list[float] = field(default_factory=lambda: [0.15, 0.3]) - longitudinal_actuator_delay: float = 0.45 - jerk_limits: float = 4.0 - - -# Default configurations for different car types -TUNING_CONFIGS = { - "CANFD": CarTuningConfig( - lookahead_jerk_bp=[2., 5., 20.], - lookahead_jerk_upper_v=[0.25, 0.5, 1.0], - lookahead_jerk_lower_v=[0.05, 0.10, 0.325], - ), - "EV": CarTuningConfig( - lookahead_jerk_upper_v=[0.3, 0.7], - lookahead_jerk_lower_v=[0.2, 0.4], - ), - "HYBRID": CarTuningConfig(), - "DEFAULT": CarTuningConfig( - lookahead_jerk_bp=[2., 5., 20.], - lookahead_jerk_upper_v=[0.25, 0.5, 1.0], - lookahead_jerk_lower_v=[0.05, 0.10, 0.3], - ) -} - -# Car-specific configs -CAR_SPECIFIC_CONFIGS = { - CAR.KIA_NIRO_EV: CarTuningConfig( - lookahead_jerk_upper_v=[0.3, 1.0], - lookahead_jerk_lower_v=[0.2, 0.4], - jerk_limits=2.5, - ), - CAR.KIA_NIRO_PHEV_2022: CarTuningConfig( - lookahead_jerk_upper_v=[0.3, 1.0], - lookahead_jerk_lower_v=[0.15, 0.3], - jerk_limits=4.0, - ), - CAR.HYUNDAI_IONIQ: CarTuningConfig( - jerk_limits=4.5, - ) -} diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/controller.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/controller.py deleted file mode 100644 index 78c2546e9..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/controller.py +++ /dev/null @@ -1,288 +0,0 @@ -import numpy as np -from dataclasses import dataclass - -from iqdbc.car import structs, DT_CTRL -from iqdbc.car.interfaces import CarStateBase -from iqdbc.car.hyundai.values import CarControllerParams -from iqdbc.iqpilot.car.hyundai.longitudinal.helpers import get_car_config, jerk_limited_integrator, ramp_update -from iqdbc.iqpilot.car.hyundai.values import HyundaiFlagsIQ - -LongCtrlState = structs.CarControl.Actuators.LongControlState - -MIN_JERK = 0.5 -COMFORT_BAND_VAL = 0.01 - -DYNAMIC_LOWER_JERK_BP = [-2.0, -1.5, -1.0, -0.25, -0.1, -0.025, -0.01, -0.005] -DYNAMIC_LOWER_JERK_V = [3.3, 2.5, 2.0, 1.9, 1.8, 1.65, 1.15, 0.5] - - -@dataclass -class LongitudinalState: - desired_accel: float = 0.0 - actual_accel: float = 0.0 - accel_last: float = 0.0 - jerk_upper: float = 0.0 - jerk_lower: float = 0.0 - comfort_band_upper: float = 0.0 - comfort_band_lower: float = 0.0 - stopping: bool = False - - -class LongitudinalController: - """Longitudinal controller which gets injected into CarControllerParams.""" - - def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams) -> None: - self.CP = CP - self.CP_IQ = CP_IQ - - self.tuning = LongitudinalState() - self.car_config = get_car_config(CP) - self.long_control_state_last = LongCtrlState.off - self.stopping_count = 0 - - self.accel_cmd = 0.0 - self.desired_accel = 0.0 - self.actual_accel = 0.0 - self.accel_last = 0.0 - self.jerk_upper = 0.0 - self.jerk_lower = 0.0 - self.comfort_band_upper = 0.0 - self.comfort_band_lower = 0.0 - self.stopping = False - - @property - def enabled(self) -> bool: - return bool(self.CP_IQ.flags & (HyundaiFlagsIQ.LONG_TUNING_DYNAMIC | HyundaiFlagsIQ.LONG_TUNING_PREDICTIVE)) - - def get_stopping_state(self, actuators: structs.CarControl.Actuators) -> None: - stopping = actuators.longControlState == LongCtrlState.stopping - - # If custom tuning is not enabled, use upstream stopping logic - if not self.enabled: - self.stopping = stopping - self.stopping_count = 0 - return - - # Reset stopping state when not in stopping mode - if not stopping: - self.stopping = False - self.stopping_count = 0 - return - - # When transitioning from off state to stopping - if self.long_control_state_last == LongCtrlState.off: - self.stopping = True - return - - # Keep track of time in stopping state (in control cycles) - if self.stopping_count > 1 / (DT_CTRL * 2): - self.stopping = True - - self.stopping_count += 1 - - @staticmethod - def _calculate_speed_based_jerk_limits(velocity: float, long_control_state: LongCtrlState) -> tuple[float, float]: - """Calculate jerk limits based on vehicle speed according to ISO 15622:2018. - - Args: - velocity: Current vehicle speed (m/s) - long_control_state: Current longitudinal control state - - Returns: - Tuple of (upper_limit, lower_limit) in m/s³ - """ - - # Upper jerk limit varies based on speed and control state - if long_control_state == LongCtrlState.pid: - upper_limit = float(np.interp(velocity, [0.0, 5.0, 20.0], [2.0, 3.0, 1.6])) - else: - upper_limit = 0.5 # Default for non-PID states - - # Lower jerk limit varies based on speed - lower_limit = float(np.interp(velocity, [0.0, 5.0, 20.0], [5.0, 4.0, 2.5])) - - return upper_limit, lower_limit - - def _calculate_lookahead_jerk(self, accel_error: float, velocity: float) -> tuple[float, float]: - """Calculate lookahead jerk needed to reach target acceleration. - - Args: - accel_error: Difference between target and current acceleration (m/s²) - velocity: Current vehicle speed (m/s) - - Returns: - Tuple of (upper_jerk, lower_jerk) in m/s³ - """ - - # Time window to reach target acceleration, varies with speed - future_t_upper = float(np.interp(velocity, self.car_config.lookahead_jerk_bp, self.car_config.lookahead_jerk_upper_v)) - future_t_lower = float(np.interp(velocity, self.car_config.lookahead_jerk_bp, self.car_config.lookahead_jerk_lower_v)) - - # Required jerk to reach target acceleration in lookahead window - j_ego_upper = accel_error / future_t_upper - j_ego_lower = accel_error / future_t_lower - - return j_ego_upper, j_ego_lower - - def _calculate_dynamic_lower_jerk(self, accel_error: float, velocity: float) -> float: - """Calculate dynamic jerk for braking based on acceleration error. - - Used for the dynamic tuning approach (non-predictive). - - Args: - accel_error: Difference between actual and previous acceleration (m/s²) - velocity: Current vehicle speed (m/s) - - Returns: - Dynamic lower jerk limit (m/s³) - """ - - if self.CP.radarUnavailable: - return 5.0 - - if accel_error < 0: - # Scale the brake jerk values based on car config - lower_max = self.car_config.jerk_limits - original_values = np.array(DYNAMIC_LOWER_JERK_V) - scaled_values = original_values * (lower_max / original_values[0]) - - # Interpolate based on acceleration error - dynamic_lower_jerk = float(np.interp(accel_error, DYNAMIC_LOWER_JERK_BP, scaled_values)) - else: - dynamic_lower_jerk = 0.5 - - return dynamic_lower_jerk - - def calculate_jerk(self, CC: structs.CarControl, CS: CarStateBase, long_control_state: LongCtrlState) -> None: - """Calculate appropriate jerk limits for smooth acceleration/deceleration. - - Args: - CC: Car control signals - CS: Car state - long_control_state: Current longitudinal control state - """ - - # If custom tuning is disabled, use upstream fixed values - if not self.enabled: - jerk_limit = 3.0 if long_control_state == LongCtrlState.pid else 1.0 - self.jerk_upper = jerk_limit - self.jerk_lower = 5.0 - return - - velocity = CS.out.vEgo - accel_error = self.accel_cmd - self.accel_last - - # Calculate jerk limits based on speed - upper_speed_factor, lower_speed_factor = self._calculate_speed_based_jerk_limits(velocity, long_control_state) - - # Calculate lookahead jerk - j_ego_upper, j_ego_lower = self._calculate_lookahead_jerk(accel_error, velocity) - - # Calculate lower jerk limit - lower_jerk = max(-j_ego_lower, MIN_JERK) - if self.CP.radarUnavailable: - lower_jerk = 5.0 - - # Final jerk limits with thresholds - desired_jerk_upper = min(max(j_ego_upper, MIN_JERK), upper_speed_factor) - desired_jerk_lower = min(lower_jerk, lower_speed_factor) - - # Calculate dynamic lower jerk for non-predictive tuning - a_ego_blended = float(np.interp(velocity, [1.0, 2.0], [CS.aBasis, CS.out.aEgo])) - dynamic_accel_error = a_ego_blended - self.accel_last - dynamic_lower_jerk = self._calculate_dynamic_lower_jerk(dynamic_accel_error, velocity) - dynamic_desired_lower_jerk = min(dynamic_lower_jerk, lower_speed_factor) - - # Apply jerk limits based on tuning approach - self.jerk_upper = ramp_update(self.jerk_upper, desired_jerk_upper) - - # Predictive tuning uses calculated desired jerk directly - # Dynamic tuning applies a ramped approach for smoother transitions - if self.CP_IQ.flags & HyundaiFlagsIQ.LONG_TUNING_PREDICTIVE: - self.jerk_lower = desired_jerk_lower - else: - self.jerk_lower = ramp_update(self.jerk_lower, dynamic_desired_lower_jerk) - - # Disable jerk when longitudinal control is inactive - if not CC.longActive: - self.jerk_upper = 0.0 - self.jerk_lower = 0.0 - - def calculate_accel(self, CC: structs.CarControl) -> None: - """Calculate commanded acceleration using jerk-limited approach. - - Args: - CC: Car control signals - """ - - # Skip custom processing if tuning is disabled or radar unavailable - if not self.enabled or self.CP.radarUnavailable: - self.desired_accel = self.accel_cmd - self.actual_accel = self.accel_cmd - return - - # Reset acceleration when control is inactive - if not CC.longActive: - self.desired_accel = 0.0 - self.actual_accel = 0.0 - self.accel_last = 0.0 - return - - # Force zero acceleration during stopping - if self.stopping: - self.desired_accel = 0.0 - else: - self.desired_accel = float(np.clip(self.accel_cmd, CarControllerParams.ACCEL_MIN, CarControllerParams.ACCEL_MAX)) - - # Apply jerk-limited integration to get smooth acceleration - self.actual_accel = jerk_limited_integrator(self.desired_accel, self.accel_last, self.jerk_upper, self.jerk_lower) - - self.accel_last = self.actual_accel - - def calculate_comfort_band(self, CC: structs.CarControl) -> None: - if not self.enabled or self.CP.radarUnavailable or not CC.longActive: - self.comfort_band_upper = 0.0 - self.comfort_band_lower = 0.0 - return - - self.comfort_band_upper = COMFORT_BAND_VAL - self.comfort_band_lower = COMFORT_BAND_VAL - - def get_tuning_state(self) -> None: - """Update the tuning state object with current control values. - - External components depend on this state for longitudinal control. - """ - - self.tuning = LongitudinalState( - desired_accel=self.desired_accel, - actual_accel=self.actual_accel, - accel_last=self.accel_last, - jerk_upper=self.jerk_upper, - jerk_lower=self.jerk_lower, - comfort_band_upper=self.comfort_band_upper, - comfort_band_lower=self.comfort_band_lower, - stopping=self.stopping, - ) - - def update(self, CC: structs.CarControl, CS: CarStateBase) -> None: - """Update longitudinal control calculations. - - This is the main entry point called externally. - - Args: - CC: Car control signals including actuators - CS: Car state information - """ - - actuators = CC.actuators - long_control_state = actuators.longControlState - self.accel_cmd = CC.actuators.accel - - self.get_stopping_state(actuators) - self.calculate_jerk(CC, CS, long_control_state) - self.calculate_accel(CC) - self.calculate_comfort_band(CC) - self.get_tuning_state() - - self.long_control_state_last = long_control_state diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/helpers.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/helpers.py deleted file mode 100644 index 3cbe20e10..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/longitudinal/helpers.py +++ /dev/null @@ -1,52 +0,0 @@ -import numpy as np - -from iqdbc.car import structs, DT_CTRL, rate_limit -from iqdbc.car.hyundai.values import HyundaiFlags -from iqdbc.iqpilot.car.hyundai.longitudinal.config import CarTuningConfig, TUNING_CONFIGS, CAR_SPECIFIC_CONFIGS - -JERK_THRESHOLD = 0.1 -JERK_STEP = 0.1 - - -class LongitudinalTuningType: - OFF = 0 - DYNAMIC = 1 - PREDICTIVE = 2 - - -def get_car_config(CP: structs.CarParams) -> CarTuningConfig: - # Get car type flags from specific configs or determine from car flags - car_config = CAR_SPECIFIC_CONFIGS.get(CP.carFingerprint) - # If car is not in specific configs, determine from flags - if car_config is None: - if CP.flags & HyundaiFlags.CANFD: - car_config = TUNING_CONFIGS["CANFD"] - elif CP.flags & HyundaiFlags.EV: - car_config = TUNING_CONFIGS["EV"] - elif CP.flags & HyundaiFlags.HYBRID: - car_config = TUNING_CONFIGS["HYBRID"] - else: - car_config = TUNING_CONFIGS["DEFAULT"] - - return car_config - - -def get_longitudinal_tune(CP: structs.CarParams) -> None: - config = get_car_config(CP) - CP.longitudinalActuatorDelay = config.longitudinal_actuator_delay - - -def jerk_limited_integrator(desired_accel, last_accel, jerk_upper, jerk_lower) -> float: - if desired_accel >= last_accel: - val = jerk_upper * DT_CTRL * 2 - else: - val = jerk_lower * DT_CTRL * 2 - - return rate_limit(desired_accel, last_accel, -val, val) - - -def ramp_update(current, target): - error = target - current - if abs(error) > JERK_THRESHOLD: - return current + float(np.clip(error, -JERK_STEP, JERK_STEP)) - return target diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/radar_interface_ext.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/radar_interface_ext.py deleted file mode 100644 index ff8c9f753..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/radar_interface_ext.py +++ /dev/null @@ -1,85 +0,0 @@ -from iqdbc.can.parser import CANParser -from iqdbc.car import structs, Bus -from iqdbc.car.hyundai.hyundaicanfd import CanBus -from iqdbc.car.hyundai.values import DBC, HyundaiFlags - -from iqdbc.iqpilot.car.hyundai.escc import EsccRadarInterfaceBase - - -class RadarInterfaceExt(EsccRadarInterfaceBase): - msg_src: str - trigger_msg: int - rcp: CANParser - pts: dict[int, structs.RadarData.RadarPoint] - - def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): - EsccRadarInterfaceBase.__init__(self, CP, CP_IQ) - self.CP = CP - self.CP_IQ = CP_IQ - - self.track_id = 0 - - @property - def use_radar_interface_ext(self) -> bool: - return self.use_escc or self.CP.flags & (HyundaiFlags.CAMERA_SCC | HyundaiFlags.CANFD_CAMERA_SCC) - - def get_msg_src(self) -> str | None: - if self.use_escc: - return "ESCC" - if self.CP.flags & (HyundaiFlags.CAMERA_SCC | HyundaiFlags.CANFD_CAMERA_SCC): - return "SCC_CONTROL" if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else "SCC11" - - def get_radar_ext_can_parser(self) -> CANParser: - if self.ESCC.enabled: - lead_src, bus = "ESCC", 0 - elif self.CP.flags & (HyundaiFlags.CAMERA_SCC | HyundaiFlags.CANFD_CAMERA_SCC): - lead_src = "SCC_CONTROL" if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else "SCC11" - bus = CanBus(self.CP).CAM if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else 2 - else: - return None - - messages = [(lead_src, 50)] - return CANParser(DBC[self.CP.carFingerprint][Bus.pt], messages, bus) - - def get_trigger_msg(self, default_trigger_msg) -> int: - if self.ESCC.enabled: - return self.ESCC.trigger_msg - if self.CP.flags & (HyundaiFlags.CAMERA_SCC | HyundaiFlags.CANFD_CAMERA_SCC): - return 0x1A0 if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else 0x420 - return default_trigger_msg - - def initialize_radar_ext(self, default_trigger_msg) -> None: - if self.ESCC.enabled: - self.use_escc = True - - self.rcp = self.get_radar_ext_can_parser() - self.trigger_msg = self.get_trigger_msg(default_trigger_msg) - - def update_ext(self, ret: structs.RadarData) -> structs.RadarData: - if not self.rcp.can_valid: - ret.errors.canError = True - return ret - - for ii in range(1): - msg_src = self.get_msg_src() - msg = self.rcp.vl[msg_src] - - if ii not in self.pts: - self.pts[ii] = structs.RadarData.RadarPoint() - self.pts[ii].trackId = self.track_id - self.track_id += 1 - - valid = msg['ACC_ObjDist'] < 204.6 if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else msg['ACC_ObjStatus'] - if valid: - self.pts[ii].measured = True - self.pts[ii].dRel = msg['ACC_ObjDist'] - self.pts[ii].yRel = float('nan') - self.pts[ii].vRel = msg['ACC_ObjRelSpd'] - self.pts[ii].aRel = float('nan') - self.pts[ii].yvRel = float('nan') - - else: - del self.pts[ii] - - ret.points = list(self.pts.values()) - return ret diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/values.py b/iqdbc_repo/iqdbc/iqpilot/car/hyundai/values.py deleted file mode 100644 index 672943fcf..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/values.py +++ /dev/null @@ -1,25 +0,0 @@ -from enum import IntFlag - - -class HyundaiSafetyFlagsIQ: - DEFAULT = 0 - ESCC = 16 - MAIN_BTN_LONG_TOGGLE = 32 - HAS_LDA_BUTTON = 64 - NON_SCC = 128 - - -class HyundaiFlagsIQ(IntFlag): - ENHANCED_SCC = 1 - HAS_LFA_BUTTON = 2 - MAIN_BTN_LONG_TOGGLE = 2 ** 2 - ENABLE_RADAR_TRACKS_DEPRECATED = 2 ** 3 - LONG_TUNING_DYNAMIC = 2 ** 4 - LONG_TUNING_PREDICTIVE = 2 ** 5 - NON_SCC = 2 ** 6 - NON_SCC_RADAR_FCA = 2 ** 7 - NON_SCC_NO_FCA = 2 ** 8 - SPEED_LIMIT_AVAILABLE = 2 ** 9 - HAS_LKAS12 = 2 ** 10 - - diff --git a/iqdbc_repo/iqdbc/iqpilot/car/rivian/__init__.py b/iqdbc_repo/iqdbc/iqpilot/car/rivian/__init__.py deleted file mode 100644 index 297dca9e1..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/rivian/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" diff --git a/iqdbc_repo/iqdbc/iqpilot/car/rivian/aol.py b/iqdbc_repo/iqdbc/iqpilot/car/rivian/aol.py deleted file mode 100644 index f28c0c23d..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/rivian/aol.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" -from collections import namedtuple - -from iqdbc.car import structs -from iqdbc.car.interfaces import CarStateBase - -MAX_STEERING_ANGLE = 90.0 - -AolDataIQ = namedtuple("AolDataIQ", - ["lka_icon_states", "lat_active"]) - - -class AolCarController: - def __init__(self): - self.aol = AolDataIQ(False, False) - - self.lka_icon_states = False - self.lat_active = False - - def aol_status_update(self, CC: structs.CarControl, CC_IQ: structs.IQCarControl, CS: CarStateBase) -> AolDataIQ: - if CC_IQ.aol.available: - self.lka_icon_states = self.lat_active - self.lat_active = CC.latActive and abs(CS.out.steeringAngleDeg) < MAX_STEERING_ANGLE - else: - self.lka_icon_states = CC.enabled - self.lat_active = CC.latActive - - return AolDataIQ(self.lka_icon_states, self.lat_active) - - def update(self, CC: structs.CarControl, CC_IQ: structs.IQCarControl, CS: CarStateBase) -> None: - self.aol = self.aol_status_update(CC, CC_IQ, CS) diff --git a/iqdbc_repo/iqdbc/iqpilot/car/subaru/__init__.py b/iqdbc_repo/iqdbc/iqpilot/car/subaru/__init__.py deleted file mode 100644 index 297dca9e1..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/subaru/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" diff --git a/iqdbc_repo/iqdbc/iqpilot/car/subaru/aol.py b/iqdbc_repo/iqdbc/iqpilot/car/subaru/aol.py deleted file mode 100644 index 523d06fea..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/subaru/aol.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" - -from enum import StrEnum -from iqdbc.car import Bus, structs - -from iqdbc.car.subaru.values import SubaruFlags -from iqdbc.iqpilot.aol_base import AolCarStateBase -from iqdbc.can.parser import CANParser - -ButtonType = structs.CarState.ButtonEvent.Type - - -class AolCarState(AolCarStateBase): - def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): - super().__init__(CP, CP_IQ) - - @staticmethod - def create_lkas_button_events(cur_btn: int, prev_btn: int, - buttons_dict: dict[int, structs.CarState.ButtonEvent.Type]) -> list[structs.CarState.ButtonEvent]: - events: list[structs.CarState.ButtonEvent] = [] - - if cur_btn == prev_btn: - return events - - state_changes = [ - {"pressed": prev_btn != cur_btn and cur_btn != 2 and not (prev_btn == 2 and cur_btn == 1)}, - {"pressed": prev_btn != cur_btn and cur_btn == 2 and cur_btn != 1}, - ] - - for change in state_changes: - if change["pressed"]: - events.append(structs.CarState.ButtonEvent(pressed=change["pressed"], - type=buttons_dict.get(cur_btn, ButtonType.unknown))) - return events - - def update_aol(self, ret: structs.CarState, can_parsers: dict[StrEnum, CANParser]) -> None: - cp_cam = can_parsers[Bus.cam] - - self.prev_lkas_button = self.lkas_button - if not self.CP.flags & SubaruFlags.PREGLOBAL: - self.lkas_button = cp_cam.vl["ES_LKAS_State"]["LKAS_Dash_State"] - - ret.buttonEvents = self.create_lkas_button_events(self.lkas_button, self.prev_lkas_button, {1: ButtonType.lkas}) diff --git a/iqdbc_repo/iqdbc/iqpilot/car/subaru/stop_and_go.py b/iqdbc_repo/iqdbc/iqpilot/car/subaru/stop_and_go.py deleted file mode 100644 index a696c22b8..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/subaru/stop_and_go.py +++ /dev/null @@ -1,121 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" - -import copy -from enum import StrEnum - -from iqdbc.car import Bus, structs, DT_CTRL -from iqdbc.car.can_definitions import CanData -from iqdbc.car.interfaces import CarStateBase -from iqdbc.car.subaru.values import SubaruFlags - -from iqdbc.iqpilot.car.subaru import subarucan_ext -from iqdbc.iqpilot.car.subaru.values_ext import SubaruFlagsIQ -from iqdbc.can.parser import CANParser - -_SNG_ACC_MIN_DIST = 3 -_SNG_ACC_MAX_DIST = 4.5 - - -class SnGCarController: - def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): - self.CP = CP - self.CP_IQ = CP_IQ - self.enabled = CP_IQ.flags & (SubaruFlagsIQ.STOP_AND_GO | SubaruFlagsIQ.STOP_AND_GO_MANUAL_PARKING_BRAKE) - self.manual_parking_brake = CP_IQ.flags & SubaruFlagsIQ.STOP_AND_GO_MANUAL_PARKING_BRAKE - - self.last_standstill_frame = 0 - self.epb_resume_frames_remaining = -1 - self.prev_close_distance = 0.0 - - def update_epb_resume_sequence(self, should_resume: bool) -> bool: - if self.manual_parking_brake: - return False - - if should_resume: - self.epb_resume_frames_remaining = 15 - - send_resume = self.epb_resume_frames_remaining > 0 - if self.epb_resume_frames_remaining > 0: - self.epb_resume_frames_remaining -= 1 - - return send_resume - - def update_stop_and_go(self, CC: structs.CarControl, CS: CarStateBase, frame: int) -> bool: - """ - Manages stop-and-go functionality for adaptive cruise control (ACC). - - Args: - CC: Car control data - CS: Car state data - frame: Current frame number - - Returns: - bool: True if resume command should be sent, False otherwise - """ - - if not CC.enabled or not CC.hudControl.leadVisible: - return False - - close_distance = CS.es_distance_msg["Close_Distance"] - in_standstill = CS.out.standstill - - if not in_standstill: - self.last_standstill_frame = frame - - # Check if we've been in standstill long enough - mpb_standstill_timers = (0.75, 0.8) if self.CP.flags & SubaruFlags.PREGLOBAL else (0.5, 0.55) - standstill_duration = (frame - self.last_standstill_frame) * DT_CTRL - in_standstill_hold = standstill_duration > mpb_standstill_timers[0] - if (frame - self.last_standstill_frame) * DT_CTRL >= mpb_standstill_timers[1]: - self.last_standstill_frame = frame - - # Car state distance-based conditions (EPB only) - in_resume_distance = _SNG_ACC_MIN_DIST < close_distance < _SNG_ACC_MAX_DIST - distance_increasing = close_distance > self.prev_close_distance - distance_resume_allowed = in_resume_distance and distance_increasing - - if self.manual_parking_brake: - # Manual parking brake: Direct resume when the standstill hold threshold is reached to prevent ACC fault - send_resume = in_standstill_hold - else: - # EPB: Resume sequence with trigger on distance with lead car increasing - should_resume = CS.out.standstill and distance_resume_allowed - send_resume = self.update_epb_resume_sequence(should_resume) - - self.prev_close_distance = close_distance - - return send_resume - - def create_stop_and_go(self, packer, CC: structs.CarControl, CS: CarStateBase, frame: int) -> list[CanData]: - can_sends = [] - - if not self.enabled: - return can_sends - - send_resume = self.update_stop_and_go(CC, CS, frame) - - can_sends.append(subarucan_ext.create_throttle(packer, self.CP, CS.throttle_msg, send_resume and not self.manual_parking_brake)) - - if frame % 2 == 0: - can_sends.append(subarucan_ext.create_brake_pedal(packer, self.CP, CS.brake_pedal_msg, send_resume and self.manual_parking_brake)) - - return can_sends - - -class SnGCarState: - def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): - self.CP = CP - self.CP_IQ = CP_IQ - - self.brake_pedal_msg: dict[str, float] = {} - self.throttle_msg: dict[str, float] = {} - - def update(self, ret: structs.CarState, can_parsers: dict[StrEnum, CANParser]) -> None: - cp = can_parsers[Bus.pt] - - self.brake_pedal_msg = copy.copy(cp.vl["Brake_Pedal"]) - - if not self.CP.flags & SubaruFlags.HYBRID: - self.throttle_msg = copy.copy(cp.vl["Throttle"]) diff --git a/iqdbc_repo/iqdbc/iqpilot/car/subaru/subarucan_ext.py b/iqdbc_repo/iqdbc/iqpilot/car/subaru/subarucan_ext.py deleted file mode 100644 index b6a710e8d..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/subaru/subarucan_ext.py +++ /dev/null @@ -1,68 +0,0 @@ -from iqdbc.car.subaru.values import CanBus, SubaruFlags - - -def create_counter(msg): - return (msg["COUNTER"] + 1) % 0x10 - - -def create_throttle(packer, CP, throttle_msg, send_resume): - if CP.flags & SubaruFlags.PREGLOBAL: - values = {s: throttle_msg[s] for s in [ - "Throttle_Pedal", - "Signal1", - "Not_Full_Throttle", - "Signal2", - "Engine_RPM", - "Off_Throttle", - "Signal3", - "Throttle_Cruise", - "Throttle_Combo", - "Throttle_Body", - "Off_Throttle_2", - "Signal4", - ]} - else: - values = {s: throttle_msg[s] for s in [ - "CHECKSUM", - "Signal1", - "Engine_RPM", - "Neutral", - "Throttle_Pedal", - "Throttle_Cruise", - "Throttle_Combo", - "Signal3", - "Off_Accel", - ]} - - values["COUNTER"] = create_counter(throttle_msg) - - if send_resume: - values["Throttle_Pedal"] = 5 - - return packer.make_can_msg("Throttle", CanBus.camera, values) - - -def create_brake_pedal(packer, CP, brake_pedal_msg, send_resume): - if CP.flags & SubaruFlags.PREGLOBAL: - values = {s: brake_pedal_msg[s] for s in [ - "Speed", - "Brake_Pedal", - "Signal1", - ]} - else: - values = {s: brake_pedal_msg[s] for s in [ - "CHECKSUM", - "Signal1", - "Speed", - "Signal2", - "Brake_Lights", - "Signal3", - "Brake_Pedal", - "Signal4", - ]} - values["COUNTER"] = create_counter(brake_pedal_msg) - - if send_resume: - values["Speed"] = 1 if CP.flags & SubaruFlags.PREGLOBAL else 3 - - return packer.make_can_msg("Brake_Pedal", CanBus.camera, values) diff --git a/iqdbc_repo/iqdbc/iqpilot/car/tesla/__init__.py b/iqdbc_repo/iqdbc/iqpilot/car/tesla/__init__.py deleted file mode 100644 index 297dca9e1..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/tesla/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" diff --git a/iqdbc_repo/iqdbc/iqpilot/car/tests/__init__.py b/iqdbc_repo/iqdbc/iqpilot/car/tests/__init__.py deleted file mode 100644 index 297dca9e1..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/tests/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" diff --git a/iqdbc_repo/iqdbc/iqpilot/car/toyota/__init__.py b/iqdbc_repo/iqdbc/iqpilot/car/toyota/__init__.py deleted file mode 100644 index 297dca9e1..000000000 --- a/iqdbc_repo/iqdbc/iqpilot/car/toyota/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" diff --git a/iqdbc_repo/iqdbc/iqpilot/__init__.py b/iqdbc_repo/iqdbc/lvbs/__init__.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/__init__.py rename to iqdbc_repo/iqdbc/lvbs/__init__.py diff --git a/iqdbc_repo/iqdbc/iqpilot/aol_base.py b/iqdbc_repo/iqdbc/lvbs/aol_base.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/aol_base.py rename to iqdbc_repo/iqdbc/lvbs/aol_base.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/__init__.py b/iqdbc_repo/iqdbc/lvbs/car/__init__.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/__init__.py rename to iqdbc_repo/iqdbc/lvbs/car/__init__.py diff --git a/iqpilot/selfdrive/controls/lib/speed_limit/tests/__init__.py b/iqdbc_repo/iqdbc/lvbs/car/chrysler/__init__.py similarity index 100% rename from iqpilot/selfdrive/controls/lib/speed_limit/tests/__init__.py rename to iqdbc_repo/iqdbc/lvbs/car/chrysler/__init__.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/chrysler/aol.py b/iqdbc_repo/iqdbc/lvbs/car/chrysler/aol.py similarity index 62% rename from iqdbc_repo/iqdbc/iqpilot/car/chrysler/aol.py rename to iqdbc_repo/iqdbc/lvbs/car/chrysler/aol.py index 262546a3a..348641785 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/chrysler/aol.py +++ b/iqdbc_repo/iqdbc/lvbs/car/chrysler/aol.py @@ -1,21 +1,23 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" +Always-on-Lateral adapter for Chrysler. CarState reads the LKAS toggle button +(and the forwarded LKAS heartbeat); CarController tracks the AOL state and, when +AOL is available, drives the LKAS_DISABLED bit the dash reads from the heartbeat. +""" from enum import StrEnum from collections import namedtuple from iqdbc.car import Bus, structs from iqdbc.car.chrysler.values import RAM_CARS - -from iqdbc.iqpilot.aol_base import AolCarStateBase +from iqdbc.lvbs.aol_base import AolCarStateBase from iqdbc.can.parser import CANParser -AolDataIQ = namedtuple("AolDataIQ", - ["enable_aol", "paused", "lkas_disabled"]) - +AolDataIQ = namedtuple("AolDataIQ", ["enable_aol", "paused", "lkas_disabled"]) ButtonType = structs.CarState.ButtonEvent.Type +_HEARTBIT_FIELDS = ("LKAS_DISABLED", "AUTO_HIGH_BEAM", "FORWARD_1", "FORWARD_2", "FORWARD_3") + class AolCarController: def __init__(self): @@ -23,28 +25,18 @@ class AolCarController: @staticmethod def create_lkas_heartbit(packer, lkas_heartbit, aol): - # LKAS_HEARTBIT (0x2D9) LKAS heartbeat - values = {s: lkas_heartbit[s] for s in [ - "LKAS_DISABLED", - "AUTO_HIGH_BEAM", - "FORWARD_1", - "FORWARD_2", - "FORWARD_3", - ]} - + values = {name: lkas_heartbit[name] for name in _HEARTBIT_FIELDS} if aol.enable_aol: values["LKAS_DISABLED"] = 1 if aol.lkas_disabled else 0 - return packer.make_can_msg("LKAS_HEARTBIT", 0, values) @staticmethod def aol_status_update(CC: structs.CarControl, CC_IQ: structs.IQCarControl, CS) -> AolDataIQ: enable_aol = CC_IQ.aol.available paused = CC_IQ.aol.enabled and not CC.latActive - + # A tap of the LKAS button flips the driver's "LKAS disabled" preference. if any(be.type == ButtonType.lkas and be.pressed for be in CS.out.buttonEvents): CS.lkas_disabled = not CS.lkas_disabled - return AolDataIQ(enable_aol, paused, CS.lkas_disabled) def update(self, CC: structs.CarControl, CC_IQ: structs.IQCarControl, CS) -> None: @@ -55,35 +47,27 @@ class AolCarState(AolCarStateBase): def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): super().__init__(CP, CP_IQ) self.lkas_heartbit = 0 - self.init_lkas_disabled = False self.lkas_disabled = False @staticmethod def get_parser(CP, pt_messages, cam_messages) -> None: if CP.carFingerprint in RAM_CARS: - pt_messages += [ - ("Center_Stack_2", 1), - ] + pt_messages.append(("Center_Stack_2", 1)) else: pt_messages.append(("TRACTION_BUTTON", 1)) cam_messages.append(("LKAS_HEARTBIT", 1)) - def get_lkas_button(self, cp, cp_cam): + def _read_lkas_button(self, cp, cp_cam) -> int: if self.CP.carFingerprint in RAM_CARS: - lkas_button = cp.vl["Center_Stack_2"]["LKAS_Button"] - else: - lkas_button = cp.vl["TRACTION_BUTTON"]["TOGGLE_LKAS"] - self.lkas_heartbit = cp_cam.vl["LKAS_HEARTBIT"] - if not self.init_lkas_disabled: - self.lkas_disabled = cp_cam.vl["LKAS_HEARTBIT"]["LKAS_DISABLED"] - self.init_lkas_disabled = True + return cp.vl["Center_Stack_2"]["LKAS_Button"] - return lkas_button + self.lkas_heartbit = cp_cam.vl["LKAS_HEARTBIT"] + if not self.init_lkas_disabled: + self.lkas_disabled = cp_cam.vl["LKAS_HEARTBIT"]["LKAS_DISABLED"] + self.init_lkas_disabled = True + return cp.vl["TRACTION_BUTTON"]["TOGGLE_LKAS"] def update_aol(self, ret: structs.CarState, can_parsers: dict[StrEnum, CANParser]) -> None: - cp = can_parsers[Bus.pt] - cp_cam = can_parsers[Bus.cam] - self.prev_lkas_button = self.lkas_button - self.lkas_button = self.get_lkas_button(cp, cp_cam) + self.lkas_button = self._read_lkas_button(can_parsers[Bus.pt], can_parsers[Bus.cam]) diff --git a/iqdbc_repo/iqdbc/iqpilot/car/chrysler/carcontroller_ext.py b/iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_carcontroller.py similarity index 72% rename from iqdbc_repo/iqdbc/iqpilot/car/chrysler/carcontroller_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_carcontroller.py index fdeb0a85b..140fff14a 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/chrysler/carcontroller_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_carcontroller.py @@ -1,23 +1,27 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +Chrysler low-speed steering gate: overrides the stock LKAS control bit when the +no-min-steering-speed option is set, and holds the RAM DT engagement window. """ from iqdbc.car import structs from iqdbc.car.interfaces import CarStateBase from iqdbc.car.chrysler.values import RAM_DT -from iqdbc.iqpilot.car.chrysler.values_ext import ChryslerFlagsIQ +from iqdbc.lvbs.car.chrysler.iq_values import ChryslerFlagsIQ GearShifter = structs.CarState.GearShifter -class CarControllerExt: +class IQCarController: def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): self.CP = CP self.CP_IQ = CP_IQ def get_lkas_control_bit(self, CS: CarStateBase, CC: structs.CarControl, lkas_control_bit: bool) -> bool: if self.CP_IQ.flags & ChryslerFlagsIQ.NO_MIN_STEERING_SPEED: - lkas_control_bit = CC.latActive - elif self.CP.carFingerprint in RAM_DT: + return CC.latActive + + if self.CP.carFingerprint in RAM_DT: if self.CP.minEnableSpeed <= CS.out.vEgo <= self.CP.minEnableSpeed + 0.5: lkas_control_bit = True if self.CP.minEnableSpeed >= 14.5 and CS.out.gearShifter != GearShifter.drive: diff --git a/iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_carstate.py b/iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_carstate.py new file mode 100644 index 000000000..e92944a69 --- /dev/null +++ b/iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_carstate.py @@ -0,0 +1,32 @@ +""" +Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +Chrysler cruise-button reader: emits edge ButtonEvents for the ACC steering-wheel +buttons so IQ.Pilot can react to accel/decel/cancel/resume. +""" +from enum import StrEnum + +from iqdbc.car import Bus, structs +from iqdbc.can.parser import CANParser +from iqdbc.lvbs.car.chrysler.iq_values import BUTTONS + + +class IQCarState: + def __init__(self, CP, CP_IQ): + self.CP = CP + self.CP_IQ = CP_IQ + self.button_events: list = [] + self.button_states = {button.event_type: False for button in BUTTONS} + + def update(self, ret: structs.CarState, ret_iq: structs.IQCarState, can_parsers: dict[StrEnum, CANParser]) -> None: + cp = can_parsers[Bus.pt] + events = [] + for button in BUTTONS: + pressed = cp.vl[button.can_addr][button.can_msg] in button.values + if pressed != self.button_states[button.event_type]: + event = structs.CarState.ButtonEvent.new_message() + event.type = button.event_type + event.pressed = pressed + events.append(event) + self.button_states[button.event_type] = pressed + self.button_events = events diff --git a/iqdbc_repo/iqdbc/iqpilot/car/chrysler/fingerprints_ext.py b/iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_fingerprints.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/chrysler/fingerprints_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_fingerprints.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/chrysler/values_ext.py b/iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_values.py similarity index 87% rename from iqdbc_repo/iqdbc/iqpilot/car/chrysler/values_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_values.py index 7b966eed0..caee7333c 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/chrysler/values_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/chrysler/iq_values.py @@ -1,7 +1,9 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" +IQ.Pilot Chrysler extension flags + the cruise-button table read by the AOL +cruise-button reader. +""" from collections import namedtuple from enum import IntFlag @@ -20,5 +22,3 @@ BUTTONS = [ class ChryslerFlagsIQ(IntFlag): NO_MIN_STEERING_SPEED = 1 - - diff --git a/system/ui/iqpilot/widgets/helpers/__init__.py b/iqdbc_repo/iqdbc/lvbs/car/gm/__init__.py similarity index 100% rename from system/ui/iqpilot/widgets/helpers/__init__.py rename to iqdbc_repo/iqdbc/lvbs/car/gm/__init__.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/gm/carstate_ext.py b/iqdbc_repo/iqdbc/lvbs/car/gm/iq_carstate.py similarity index 50% rename from iqdbc_repo/iqdbc/iqpilot/car/gm/carstate_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/gm/iq_carstate.py index 4ebe9a111..96d1344ad 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/gm/carstate_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/gm/iq_carstate.py @@ -1,23 +1,26 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +Non-ACC GM carState: these cars have no adaptive cruise, so cruise engage/set +speed come from the stock (non-adaptive) ECM cruise message. """ from enum import StrEnum from iqdbc.car import Bus, structs from iqdbc.car.common.conversions import Conversions as CV from iqdbc.can.parser import CANParser -from iqdbc.iqpilot.car.gm.values_ext import GMFlagsIQ +from iqdbc.lvbs.car.gm.iq_values import GMFlagsIQ -class CarStateExt: +class IQCarState: def __init__(self, CP, CP_IQ): self.CP = CP self.CP_IQ = CP_IQ def update(self, ret: structs.CarState, can_parsers: dict[StrEnum, CANParser]) -> None: + if not self.CP_IQ.flags & GMFlagsIQ.NON_ACC: + return pt_cp = can_parsers[Bus.pt] - - if self.CP_IQ.flags & GMFlagsIQ.NON_ACC: - ret.cruiseState.enabled = pt_cp.vl["ECMCruiseControl"]["CruiseActive"] != 0 - ret.cruiseState.speed = pt_cp.vl["ECMCruiseControl"]["CruiseSetSpeed"] * CV.KPH_TO_MS - ret.accFaulted = False + ret.cruiseState.enabled = pt_cp.vl["ECMCruiseControl"]["CruiseActive"] != 0 + ret.cruiseState.speed = pt_cp.vl["ECMCruiseControl"]["CruiseSetSpeed"] * CV.KPH_TO_MS + ret.accFaulted = False diff --git a/iqdbc_repo/iqdbc/iqpilot/car/gm/fingerprints_ext.py b/iqdbc_repo/iqdbc/lvbs/car/gm/iq_fingerprints.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/gm/fingerprints_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/gm/iq_fingerprints.py diff --git a/iqdbc_repo/iqdbc/lvbs/car/gm/iq_interface.py b/iqdbc_repo/iqdbc/lvbs/car/gm/iq_interface.py new file mode 100644 index 000000000..1c7b64cef --- /dev/null +++ b/iqdbc_repo/iqdbc/lvbs/car/gm/iq_interface.py @@ -0,0 +1,43 @@ +""" +Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +GM torque-space feed-forward for the IQ.Pilot lateral extension: a sigmoid+linear +lat-accel -> torque curve for the tuned platforms, else the linear default. +""" +from math import exp + +from iqdbc.car import structs +from iqdbc.car.gm.interface import CAR +from iqdbc.lvbs.car.interfaces import LatControlInputs, TorqueFromLateralAccelCallbackTypeTorqueSpace + +_NON_LINEAR_TORQUE_PARAMS = { + CAR.CHEVROLET_BOLT_EUV: [2.6531724862969748, 1.0, 0.1919764879840985, 0.009054123646805178], + CAR.GMC_ACADIA: [4.78003305, 1.0, 0.3122, 0.05591772], + CAR.CHEVROLET_SILVERADO: [3.29974374, 1.0, 0.25571356, 0.0465122], +} + + +class IQCarInterface: + def __init__(self, CP: structs.CarParams, CI_Base): + self.CP = CP + self.CI_Base = CI_Base + + @staticmethod + def _centered_sigmoid(val: float) -> float: + # sigmoid shifted to pass through the origin; branch keeps exp() from overflowing + if val >= 0: + return 1.0 / (1.0 + exp(-val)) - 0.5 + z = exp(val) + return z / (1.0 + z) - 0.5 + + def torque_from_lateral_accel_siglin(self, latcontrol_inputs: LatControlInputs, + torque_params: structs.CarParams.LateralTorqueTuning, + gravity_adjusted: bool) -> float: + a, b, c, _ = _NON_LINEAR_TORQUE_PARAMS[self.CP.carFingerprint] + lat_accel = latcontrol_inputs.lateral_acceleration + return float(self._centered_sigmoid(lat_accel * a) * b + lat_accel * c) + + def torque_from_lateral_accel_in_torque_space(self) -> TorqueFromLateralAccelCallbackTypeTorqueSpace: + if self.CP.carFingerprint in _NON_LINEAR_TORQUE_PARAMS: + return self.torque_from_lateral_accel_siglin + return self.CI_Base.torque_from_lateral_accel_linear_in_torque_space diff --git a/iqdbc_repo/iqdbc/iqpilot/car/gm/values_ext.py b/iqdbc_repo/iqdbc/lvbs/car/gm/iq_values.py similarity index 72% rename from iqdbc_repo/iqdbc/iqpilot/car/gm/values_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/gm/iq_values.py index ddbce1a62..b52d29380 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/gm/values_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/gm/iq_values.py @@ -1,7 +1,8 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" +IQ.Pilot GM extension flags for the non-adaptive-cruise (Non-ACC) camera-harness port. +""" from enum import IntFlag @@ -11,5 +12,3 @@ class GMFlagsIQ(IntFlag): class GMSafetyFlagsIQ: NON_ACC = 1 - - diff --git a/iqdbc_repo/iqdbc/iqpilot/car/chrysler/__init__.py b/iqdbc_repo/iqdbc/lvbs/car/honda/__init__.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/chrysler/__init__.py rename to iqdbc_repo/iqdbc/lvbs/car/honda/__init__.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/honda/aol.py b/iqdbc_repo/iqdbc/lvbs/car/honda/aol.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/honda/aol.py rename to iqdbc_repo/iqdbc/lvbs/car/honda/aol.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/honda/gas_interceptor.py b/iqdbc_repo/iqdbc/lvbs/car/honda/gas_interceptor.py similarity index 94% rename from iqdbc_repo/iqdbc/iqpilot/car/honda/gas_interceptor.py rename to iqdbc_repo/iqdbc/lvbs/car/honda/gas_interceptor.py index f4e9fe46e..95ed00a91 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/honda/gas_interceptor.py +++ b/iqdbc_repo/iqdbc/lvbs/car/honda/gas_interceptor.py @@ -6,7 +6,7 @@ import numpy as np from iqdbc.car import structs from iqdbc.car.can_definitions import CanData -from iqdbc.iqpilot.car import create_gas_interceptor_command +from iqdbc.lvbs.car import create_gas_interceptor_command class GasInterceptorCarController: diff --git a/iqdbc_repo/iqdbc/iqpilot/car/honda/carstate_ext.py b/iqdbc_repo/iqdbc/lvbs/car/honda/iq_carstate.py similarity index 93% rename from iqdbc_repo/iqdbc/iqpilot/car/honda/carstate_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/honda/iq_carstate.py index 679e85dee..830b77b42 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/honda/carstate_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/honda/iq_carstate.py @@ -5,10 +5,10 @@ from enum import StrEnum from iqdbc.car import Bus, structs from iqdbc.can.parser import CANParser -from iqdbc.iqpilot.car.honda.values_ext import HondaFlagsIQ +from iqdbc.lvbs.car.honda.iq_values import HondaFlagsIQ -class CarStateExt: +class IQCarState: def __init__(self, CP, CP_IQ): self.CP = CP self.CP_IQ = CP_IQ diff --git a/iqdbc_repo/iqdbc/iqpilot/car/honda/fingerprints_ext.py b/iqdbc_repo/iqdbc/lvbs/car/honda/iq_fingerprints.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/honda/fingerprints_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/honda/iq_fingerprints.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/honda/values_ext.py b/iqdbc_repo/iqdbc/lvbs/car/honda/iq_values.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/honda/values_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/honda/iq_values.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/honda/test_honda.py b/iqdbc_repo/iqdbc/lvbs/car/honda/test_honda.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/honda/test_honda.py rename to iqdbc_repo/iqdbc/lvbs/car/honda/test_honda.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/interfaces.py b/iqdbc_repo/iqdbc/lvbs/car/interfaces.py similarity index 65% rename from iqdbc_repo/iqdbc/iqpilot/car/interfaces.py rename to iqdbc_repo/iqdbc/lvbs/car/interfaces.py index fce3fa649..f000d63fd 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/interfaces.py +++ b/iqdbc_repo/iqdbc/lvbs/car/interfaces.py @@ -8,14 +8,10 @@ from collections.abc import Callable from iqdbc.car import structs from iqdbc.car.can_definitions import CanRecvCallable, CanSendCallable -from iqdbc.car.hyundai.values import HyundaiFlags from iqdbc.car.subaru.values import SubaruFlags -from iqdbc.iqpilot.car.hyundai.enable_radar_tracks import enable_radar_tracks as hyundai_enable_radar_tracks -from iqdbc.iqpilot.car.hyundai.longitudinal.helpers import LongitudinalTuningType -from iqdbc.iqpilot.car.hyundai.values import HyundaiFlagsIQ -from iqdbc.iqpilot.car.subaru.values_ext import SubaruFlagsIQ, SubaruSafetyFlagsIQ -from iqdbc.iqpilot.car.tesla.values import TeslaFlagsIQ -from iqdbc.iqpilot.car.toyota.values import ToyotaFlagsIQ +from iqdbc.lvbs.car.subaru.iq_values import SubaruFlagsIQ, SubaruSafetyFlagsIQ +from iqdbc.lvbs.car.tesla.values import TeslaFlagsIQ +from iqdbc.lvbs.car.toyota.values import ToyotaFlagsIQ class LatControlInputs(NamedTuple): @@ -71,7 +67,7 @@ class NanoFFModel: return pred -def setup_interfaces(CI, CP: structs.CarParams, CP_IQ: structs.IQCarParams, +def apply_iq_car_config(CI, CP: structs.CarParams, CP_IQ: structs.IQCarParams, params_list: list[dict[str, str]] | None = None, can_recv: CanRecvCallable | None = None, can_send: CanSendCallable | None = None) -> None: if params_list is None: @@ -81,7 +77,6 @@ def setup_interfaces(CI, CP: structs.CarParams, CP_IQ: structs.IQCarParams, _initialize_custom_longitudinal_tuning(CI, CP, CP_IQ, params_dict) _initialize_coop_steering(CP, CP_IQ, params_dict) - _initialize_radar_tracks(CP, CP_IQ, can_recv, can_send) _initialize_stop_and_go(CP, CP_IQ, params_dict) _initialize_toyota(CP, CP_IQ, params_dict) @@ -89,16 +84,6 @@ def setup_interfaces(CI, CP: structs.CarParams, CP_IQ: structs.IQCarParams, def _initialize_custom_longitudinal_tuning(CI, CP: structs.CarParams, CP_IQ: structs.IQCarParams, params_dict: dict[str, str]) -> None: - # HKG longitudinal tuning lineage in this port traces to Jason Wen, James - # Vecellio-Grant, and carrotpilot; keep that attribution with this path. - # Hyundai Custom Longitudinal Tuning - if CP.brand == 'hyundai': - hyundai_longitudinal_tuning = int(params_dict.get("HyundaiLongitudinalTuning", 0)) - if hyundai_longitudinal_tuning == LongitudinalTuningType.DYNAMIC: - CP_IQ.flags |= HyundaiFlagsIQ.LONG_TUNING_DYNAMIC.value - if hyundai_longitudinal_tuning == LongitudinalTuningType.PREDICTIVE: - CP_IQ.flags |= HyundaiFlagsIQ.LONG_TUNING_PREDICTIVE.value - _ = CI.get_longitudinal_tuning_iq(CP, CP_IQ) @@ -110,25 +95,18 @@ def _initialize_coop_steering(CP: structs.CarParams, CP_IQ: structs.IQCarParams, CP_IQ.flags |= TeslaFlagsIQ.COOP_STEERING.value -def _initialize_radar_tracks(CP: structs.CarParams, CP_IQ: structs.IQCarParams, - can_recv: CanRecvCallable | None = None, can_send: CanSendCallable | None = None) -> None: - if CP.brand == 'hyundai': - if CP.flags & HyundaiFlags.MANDO_RADAR and (CP.radarUnavailable or CP_IQ.flags & HyundaiFlagsIQ.ENHANCED_SCC): - tracks_enabled = hyundai_enable_radar_tracks(can_recv, can_send, bus=0, addr=0x7d0) - CP.radarUnavailable = not tracks_enabled - - def _initialize_stop_and_go(CP: structs.CarParams, CP_IQ: structs.IQCarParams, params_dict: dict[str, str]) -> None: - if CP.brand == 'subaru' and not CP.flags & (SubaruFlags.GLOBAL_GEN2 | SubaruFlags.HYBRID): - stop_and_go = int(params_dict.get("SubaruStopAndGo", 0)) == 1 - stop_and_go_manual_parking_brake = int(params_dict.get("SubaruStopAndGoManualParkingBrake", 0)) == 1 + # Subaru stop-and-go; unsupported on gen2-global and hybrid platforms. + if CP.brand != 'subaru' or CP.flags & (SubaruFlags.GLOBAL_GEN2 | SubaruFlags.HYBRID): + return - if stop_and_go: - CP_IQ.flags |= SubaruFlagsIQ.STOP_AND_GO.value - if stop_and_go_manual_parking_brake: - CP_IQ.flags |= SubaruFlagsIQ.STOP_AND_GO_MANUAL_PARKING_BRAKE.value - if stop_and_go or stop_and_go_manual_parking_brake: - CP_IQ.safetyParam |= SubaruSafetyFlagsIQ.STOP_AND_GO + if int(params_dict.get("SubaruStopAndGo", 0)) == 1: + CP_IQ.flags |= SubaruFlagsIQ.STOP_AND_GO.value + if int(params_dict.get("SubaruStopAndGoManualParkingBrake", 0)) == 1: + CP_IQ.flags |= SubaruFlagsIQ.STOP_AND_GO_MANUAL_PARKING_BRAKE.value + + if CP_IQ.flags & (SubaruFlagsIQ.STOP_AND_GO | SubaruFlagsIQ.STOP_AND_GO_MANUAL_PARKING_BRAKE): + CP_IQ.iqSafetyFlags |= SubaruSafetyFlagsIQ.STOP_AND_GO def _initialize_toyota(CP: structs.CarParams, CP_IQ: structs.IQCarParams, params_dict: dict[str, str]) -> None: diff --git a/iqdbc_repo/iqdbc/iqpilot/car/fingerprints_ext.py b/iqdbc_repo/iqdbc/lvbs/car/iq_fingerprints.py similarity index 88% rename from iqdbc_repo/iqdbc/iqpilot/car/fingerprints_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/iq_fingerprints.py index 1bc43ae0f..1d43a621b 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/fingerprints_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/iq_fingerprints.py @@ -3,7 +3,7 @@ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed """ -def merge_fw_versions(fw_versions, new_fw_versions): +def extend_fw_versions(fw_versions, new_fw_versions): """ Merge firmware versions by extending lists for matching ECUs, adding all entries regardless of duplicates. @@ -22,7 +22,7 @@ def merge_fw_versions(fw_versions, new_fw_versions): return fw_versions -def merge_fingerprints(fingerprints, new_fingerprints): +def extend_fingerprints(fingerprints, new_fingerprints): """ Merge fingerprints by extending lists for matching keys, adding all entries regardless of duplicates. diff --git a/iqdbc_repo/iqdbc/iqpilot/car/lateral_ext.py b/iqdbc_repo/iqdbc/lvbs/car/iq_lateral.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/lateral_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/iq_lateral.py diff --git a/iqdbc_repo/iqdbc/lvbs/car/nissan/__init__.py b/iqdbc_repo/iqdbc/lvbs/car/nissan/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/iqdbc_repo/iqdbc/iqpilot/car/nissan/carstate_ext.py b/iqdbc_repo/iqdbc/lvbs/car/nissan/iq_carstate.py similarity index 52% rename from iqdbc_repo/iqdbc/iqpilot/car/nissan/carstate_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/nissan/iq_carstate.py index e28f9e44e..76e88915a 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/nissan/carstate_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/nissan/iq_carstate.py @@ -1,32 +1,31 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" +Nissan cruise-button reader: emits edge ButtonEvents for the RES/SET buttons. +""" from enum import StrEnum from iqdbc.car import Bus, structs from iqdbc.can.parser import CANParser -from iqdbc.iqpilot.car.nissan.values import BUTTONS +from iqdbc.lvbs.car.nissan.values import BUTTONS -class CarStateExt: +class IQCarState: def __init__(self, CP, CP_IQ): self.CP = CP self.CP_IQ = CP_IQ - - self.button_events = [] + self.button_events: list = [] self.button_states = {button.event_type: False for button in BUTTONS} - def update(self, ret: structs.CarState, ret_iq: structs.IQCarState, can_parsers: dict[StrEnum, CANParser]): + def update(self, ret: structs.CarState, ret_iq: structs.IQCarState, can_parsers: dict[StrEnum, CANParser]) -> None: cp = can_parsers[Bus.pt] - - button_events = [] + events = [] for button in BUTTONS: - state = (cp.vl[button.can_addr][button.can_msg] in button.values) - if self.button_states[button.event_type] != state: + pressed = cp.vl[button.can_addr][button.can_msg] in button.values + if pressed != self.button_states[button.event_type]: event = structs.CarState.ButtonEvent.new_message() event.type = button.event_type - event.pressed = state - button_events.append(event) - self.button_states[button.event_type] = state - self.button_events = button_events + event.pressed = pressed + events.append(event) + self.button_states[button.event_type] = pressed + self.button_events = events diff --git a/iqdbc_repo/iqdbc/iqpilot/car/nissan/values.py b/iqdbc_repo/iqdbc/lvbs/car/nissan/values.py similarity index 89% rename from iqdbc_repo/iqdbc/iqpilot/car/nissan/values.py rename to iqdbc_repo/iqdbc/lvbs/car/nissan/values.py index 2c2e333e2..d1cbe203a 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/nissan/values.py +++ b/iqdbc_repo/iqdbc/lvbs/car/nissan/values.py @@ -1,8 +1,10 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" +IQ.Pilot Nissan extension: safety flag + cruise-button table. +""" from collections import namedtuple + from iqdbc.car import structs @@ -11,12 +13,9 @@ class NissanSafetyFlagsIQ: LEAF = 1 - - ButtonType = structs.CarState.ButtonEvent.Type Button = namedtuple('Button', ['event_type', 'can_addr', 'can_msg', 'values']) - BUTTONS = [ Button(ButtonType.accelCruise, "CRUISE_THROTTLE", "RES_BUTTON", [1]), Button(ButtonType.decelCruise, "CRUISE_THROTTLE", "SET_BUTTON", [1]), diff --git a/iqdbc_repo/iqdbc/iqpilot/car/platform_list.py b/iqdbc_repo/iqdbc/lvbs/car/platform_list.py similarity index 90% rename from iqdbc_repo/iqdbc/iqpilot/car/platform_list.py rename to iqdbc_repo/iqdbc/lvbs/car/platform_list.py index 0c659dbf7..002bd2204 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/platform_list.py +++ b/iqdbc_repo/iqdbc/lvbs/car/platform_list.py @@ -7,7 +7,7 @@ from iqdbc.car.values import PLATFORMS def get_car_list() -> dict[str, dict[str, list[str] | str]]: collected_footnote = get_all_footnotes() - sorted_list: dict[str, dict[str, list[str] | str]] = build_sorted_car_list(PLATFORMS, collected_footnote) + sorted_list: dict[str, dict[str, list[str] | str]] = collect_car_docs(PLATFORMS, collected_footnote) return sorted_list @@ -17,7 +17,7 @@ def _natural_sort_key(s): return [int(t) if t.isdigit() else t.lower() for t in re.split(r'(\d+)', normalized) if t] -def build_sorted_car_list(platforms, footnotes) -> dict[str, dict[str, list[str] | str]]: +def collect_car_docs(platforms, footnotes) -> dict[str, dict[str, list[str] | str]]: cars: dict[str, dict[str, list[str] | str]] = {} for model, platform in platforms.items(): car_docs = platform.config.get_all_docs() diff --git a/iqdbc_repo/iqdbc/lvbs/car/rivian/__init__.py b/iqdbc_repo/iqdbc/lvbs/car/rivian/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/iqdbc_repo/iqdbc/lvbs/car/rivian/aol.py b/iqdbc_repo/iqdbc/lvbs/car/rivian/aol.py new file mode 100644 index 000000000..3c92c9a31 --- /dev/null +++ b/iqdbc_repo/iqdbc/lvbs/car/rivian/aol.py @@ -0,0 +1,30 @@ +""" +Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +Always-on-Lateral output adapter for Rivian: derives the per-frame lateral-active +and lane-keep icon state the LKAS command needs from the shared AOL state. +""" +from collections import namedtuple + +from iqdbc.car import structs +from iqdbc.car.interfaces import CarStateBase + +# Rivian EPAS rejects large-angle torque, so lateral is dropped past this bound. +_MAX_STEERING_ANGLE = 90.0 + +AolDataIQ = namedtuple("AolDataIQ", ["lka_icon_states", "lat_active"]) + + +class AolCarController: + def __init__(self): + self.aol = AolDataIQ(False, False) + + def update(self, CC: structs.CarControl, CC_IQ: structs.IQCarControl, CS: CarStateBase) -> None: + prev_active = self.aol.lat_active + if CC_IQ.aol.available: + lat_active = CC.latActive and abs(CS.out.steeringAngleDeg) < _MAX_STEERING_ANGLE + lka_icon = prev_active + else: + lat_active = CC.latActive + lka_icon = CC.enabled + self.aol = AolDataIQ(lka_icon, lat_active) diff --git a/iqdbc_repo/iqdbc/iqpilot/car/rivian/carstate_ext.py b/iqdbc_repo/iqdbc/lvbs/car/rivian/iq_carstate.py similarity index 52% rename from iqdbc_repo/iqdbc/iqpilot/car/rivian/carstate_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/rivian/iq_carstate.py index 051ed135b..d7098e2df 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/rivian/carstate_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/rivian/iq_carstate.py @@ -1,5 +1,9 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +Rivian longitudinal-harness-upgrade carState reader: with the upgrade harness the +right steering-wheel controls and the drive stalk drive the openpilot set speed, +and the harness exposes blind-spot indicators. Only active behind the upgrade flag. """ import math from enum import StrEnum @@ -8,15 +12,17 @@ from iqdbc.car import Bus, structs from iqdbc.can.parser import CANParser from iqdbc.car.common.conversions import Conversions as CV from iqdbc.car.rivian.values import DBC -from iqdbc.iqpilot.car.rivian.values import RivianFlagsIQ +from iqdbc.lvbs.car.rivian.values import RivianFlagsIQ ButtonType = structs.CarState.ButtonEvent.Type -MAX_SET_SPEED = 85 * CV.MPH_TO_MS -MIN_SET_SPEED = 20 * CV.MPH_TO_MS +_SET_SPEED_MAX = 85 * CV.MPH_TO_MS +_SET_SPEED_MIN = 20 * CV.MPH_TO_MS +_LONG_PRESS_FRAMES = 66 +_STALK_HOLD_FRAMES = 50 -class CarStateExt: +class IQCarState: def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): self.CP = CP self.CP_IQ = CP_IQ @@ -29,57 +35,57 @@ class CarStateExt: self.decrease_counter = 0 self.stalk_down_counter = 0 + def _apply_set_speed_buttons(self, ret: structs.CarState, cp_park, cp_adas) -> None: + was_increasing = self.increase_button + was_decreasing = self.decrease_button + + self.increase_button = cp_park.vl["WheelButtons"]["RightButton_RightClick"] == 2 + self.decrease_button = cp_park.vl["WheelButtons"]["RightButton_LeftClick"] == 2 + self.increase_counter = self.increase_counter + 1 if self.increase_button else 0 + self.decrease_counter = self.decrease_counter + 1 if self.decrease_button else 0 + + metric = cp_adas.vl["Cluster"]["Cluster_Unit"] == 0 + conversion = CV.KPH_TO_MS if metric else CV.MPH_TO_MS + step = 10.0 if metric else 5.0 + shown = self.set_speed * (CV.MS_TO_KPH if metric else CV.MS_TO_MPH) + + # A held button steps to the next round multiple; a tap nudges by one unit. + if self.increase_button: + if self.increase_counter % _LONG_PRESS_FRAMES == 0: + self.set_speed = math.ceil((shown + 1) / step) * step * conversion + elif not was_increasing: + self.set_speed += conversion + if self.decrease_button: + if self.decrease_counter % _LONG_PRESS_FRAMES == 0: + self.set_speed = math.floor((shown - 1) / step) * step * conversion + elif not was_decreasing: + self.set_speed -= conversion + def update_longitudinal_upgrade(self, ret: structs.CarState, can_parsers: dict[StrEnum, CANParser]) -> None: cp_park = can_parsers[Bus.alt] cp_adas = can_parsers[Bus.adas] cp = can_parsers[Bus.pt] - prev_increase_button = self.increase_button - prev_decrease_button = self.decrease_button - if self.CP.openpilotLongitudinalControl: - # distance scroll wheel right_scroll = cp_park.vl["WheelButtons"]["RightButton_Scroll"] if right_scroll != 255: if self.distance_button != right_scroll: ret.buttonEvents = [structs.CarState.ButtonEvent(pressed=False, type=ButtonType.gapAdjustCruise)] self.distance_button = right_scroll - # button logic for set-speed - self.increase_button = cp_park.vl["WheelButtons"]["RightButton_RightClick"] == 2 - self.decrease_button = cp_park.vl["WheelButtons"]["RightButton_LeftClick"] == 2 - - self.increase_counter = self.increase_counter + 1 if self.increase_button else 0 - self.decrease_counter = self.decrease_counter + 1 if self.decrease_button else 0 - - metric = cp_adas.vl["Cluster"]["Cluster_Unit"] == 0 - conversion = CV.KPH_TO_MS if metric else CV.MPH_TO_MS - long_press_step = 10.0 if metric else 5.0 - set_speed_converted = self.set_speed * (CV.MS_TO_KPH if metric else CV.MS_TO_MPH) - - if self.increase_button: - if self.increase_counter % 66 == 0: - self.set_speed = (int(math.ceil((set_speed_converted + 1) / long_press_step)) * long_press_step) * conversion - elif not prev_increase_button: - self.set_speed += conversion - - if self.decrease_button: - if self.decrease_counter % 66 == 0: - self.set_speed = (int(math.floor((set_speed_converted - 1) / long_press_step)) * long_press_step) * conversion - elif not prev_decrease_button: - self.set_speed -= conversion + self._apply_set_speed_buttons(ret, cp_park, cp_adas) if not ret.cruiseState.enabled: self.set_speed = ret.vEgoCluster - # VDM_UserAdasRequest: 0=IDLE, 1=UP_1, 2=UP_2, 3=DOWN_1, 4=DOWN_2 + # Drive stalk held down (VDM_UserAdasRequest 3/4) for ~0.5s snaps set speed + # up to the current speed, matching stock Rivian ACC (it never lowers it). stalk_down = int(cp.vl["VDM_AdasSts"]["VDM_UserAdasRequest"]) in (3, 4) self.stalk_down_counter = self.stalk_down_counter + 1 if stalk_down else 0 - if self.stalk_down_counter == 50: - # Mimic Rivian ACC: holding stalk 0.5s sets speed to current speed (never decreases) + if self.stalk_down_counter == _STALK_HOLD_FRAMES: self.set_speed = max(self.set_speed, ret.vEgoCluster) - self.set_speed = max(MIN_SET_SPEED, min(self.set_speed, MAX_SET_SPEED)) + self.set_speed = max(_SET_SPEED_MIN, min(self.set_speed, _SET_SPEED_MAX)) ret.cruiseState.speed = self.set_speed if self.CP.enableBsm: @@ -92,9 +98,7 @@ class CarStateExt: @staticmethod def get_parser(CP, CP_IQ) -> dict[StrEnum, CANParser]: - messages = {} - + messages: dict[StrEnum, CANParser] = {} if CP_IQ.flags & RivianFlagsIQ.LONGITUDINAL_HARNESS_UPGRADE: messages[Bus.alt] = CANParser(DBC[CP.carFingerprint][Bus.alt], [], 5) - return messages diff --git a/iqdbc_repo/iqdbc/iqpilot/car/rivian/values.py b/iqdbc_repo/iqdbc/lvbs/car/rivian/values.py similarity index 86% rename from iqdbc_repo/iqdbc/iqpilot/car/rivian/values.py rename to iqdbc_repo/iqdbc/lvbs/car/rivian/values.py index c165a172d..0cbd70116 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/rivian/values.py +++ b/iqdbc_repo/iqdbc/lvbs/car/rivian/values.py @@ -1,10 +1,10 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +IQ.Pilot Rivian extension flags. """ from enum import IntFlag class RivianFlagsIQ(IntFlag): LONGITUDINAL_HARNESS_UPGRADE = 1 - - diff --git a/iqdbc_repo/iqdbc/lvbs/car/subaru/__init__.py b/iqdbc_repo/iqdbc/lvbs/car/subaru/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/iqdbc_repo/iqdbc/lvbs/car/subaru/aol.py b/iqdbc_repo/iqdbc/lvbs/car/subaru/aol.py new file mode 100644 index 000000000..6846fafc3 --- /dev/null +++ b/iqdbc_repo/iqdbc/lvbs/car/subaru/aol.py @@ -0,0 +1,36 @@ +""" +Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +Always-on-Lateral input adapter for Subaru: turns the dashboard LKAS button into +a carState lkas ButtonEvent so the shared AOL state machine can toggle lateral. +""" +from enum import StrEnum + +from iqdbc.car import Bus, structs +from iqdbc.car.subaru.values import SubaruFlags +from iqdbc.lvbs.aol_base import AolCarStateBase +from iqdbc.can.parser import CANParser + +_LKAS = structs.CarState.ButtonEvent.Type.lkas + +# ES_LKAS_State/LKAS_Dash_State: 0 = neutral, 1 = LKAS shown on, 2 = LKAS shown off +_DASH_ON = 1 +_DASH_OFF = 2 + + +class AolCarState(AolCarStateBase): + def update_aol(self, ret: structs.CarState, can_parsers: dict[StrEnum, CANParser]) -> None: + if self.CP.flags & SubaruFlags.PREGLOBAL: + return + + self.prev_lkas_button = self.lkas_button + self.lkas_button = can_parsers[Bus.cam].vl["ES_LKAS_State"]["LKAS_Dash_State"] + + if self._is_toggle_edge(): + ret.buttonEvents = [*ret.buttonEvents, structs.CarState.ButtonEvent(type=_LKAS, pressed=True)] + + def _is_toggle_edge(self) -> bool: + # every dash-state change is a deliberate press except the off->on rebound (2 -> 1) + if self.lkas_button == self.prev_lkas_button: + return False + return not (self.prev_lkas_button == _DASH_OFF and self.lkas_button == _DASH_ON) diff --git a/iqdbc_repo/iqdbc/lvbs/car/subaru/iq_subarucan.py b/iqdbc_repo/iqdbc/lvbs/car/subaru/iq_subarucan.py new file mode 100644 index 000000000..5fd8e16e7 --- /dev/null +++ b/iqdbc_repo/iqdbc/lvbs/car/subaru/iq_subarucan.py @@ -0,0 +1,41 @@ +""" +Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +Camera-bus message spoofers for Subaru stop-and-go: re-emit the stock Throttle +and Brake_Pedal frames, nudging a single field to trigger an ACC resume from a +standstill. Field sets mirror the DBC message layout. +""" +from iqdbc.car.subaru.values import CanBus, SubaruFlags + +_THROTTLE_FIELDS_PREGLOBAL = ("Throttle_Pedal", "Signal1", "Not_Full_Throttle", "Signal2", "Engine_RPM", + "Off_Throttle", "Signal3", "Throttle_Cruise", "Throttle_Combo", "Throttle_Body", + "Off_Throttle_2", "Signal4") +_THROTTLE_FIELDS_GLOBAL = ("CHECKSUM", "Signal1", "Engine_RPM", "Neutral", "Throttle_Pedal", "Throttle_Cruise", + "Throttle_Combo", "Signal3", "Off_Accel") +_BRAKE_FIELDS_PREGLOBAL = ("Speed", "Brake_Pedal", "Signal1") +_BRAKE_FIELDS_GLOBAL = ("CHECKSUM", "Signal1", "Speed", "Signal2", "Brake_Lights", "Signal3", "Brake_Pedal", "Signal4") + + +def _next_counter(msg): + return (msg["COUNTER"] + 1) % 0x10 + + +def create_throttle(packer, CP, throttle_msg, send_resume): + preglobal = bool(CP.flags & SubaruFlags.PREGLOBAL) + fields = _THROTTLE_FIELDS_PREGLOBAL if preglobal else _THROTTLE_FIELDS_GLOBAL + values = {name: throttle_msg[name] for name in fields} + values["COUNTER"] = _next_counter(throttle_msg) + if send_resume: + values["Throttle_Pedal"] = 5 + return packer.make_can_msg("Throttle", CanBus.camera, values) + + +def create_brake_pedal(packer, CP, brake_pedal_msg, send_resume): + preglobal = bool(CP.flags & SubaruFlags.PREGLOBAL) + fields = _BRAKE_FIELDS_PREGLOBAL if preglobal else _BRAKE_FIELDS_GLOBAL + values = {name: brake_pedal_msg[name] for name in fields} + if not preglobal: + values["COUNTER"] = _next_counter(brake_pedal_msg) + if send_resume: + values["Speed"] = 1 if preglobal else 3 + return packer.make_can_msg("Brake_Pedal", CanBus.camera, values) diff --git a/iqdbc_repo/iqdbc/iqpilot/car/subaru/values_ext.py b/iqdbc_repo/iqdbc/lvbs/car/subaru/iq_values.py similarity index 63% rename from iqdbc_repo/iqdbc/iqpilot/car/subaru/values_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/subaru/iq_values.py index a58d76324..6536b0c0d 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/subaru/values_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/subaru/iq_values.py @@ -1,14 +1,16 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +IQ.Pilot Subaru extension flags. Selected in apply_iq_car_config() from the user's +stop-and-go params and consumed by the stop-and-go controller and panda safety. """ - from enum import IntFlag -class SubaruSafetyFlagsIQ: - STOP_AND_GO = 1 - - class SubaruFlagsIQ(IntFlag): STOP_AND_GO = 1 STOP_AND_GO_MANUAL_PARKING_BRAKE = 2 + + +class SubaruSafetyFlagsIQ: + STOP_AND_GO = 1 diff --git a/iqdbc_repo/iqdbc/lvbs/car/subaru/stop_and_go.py b/iqdbc_repo/iqdbc/lvbs/car/subaru/stop_and_go.py new file mode 100644 index 000000000..5256a8533 --- /dev/null +++ b/iqdbc_repo/iqdbc/lvbs/car/subaru/stop_and_go.py @@ -0,0 +1,93 @@ +""" +Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +IQ.Pilot Subaru stop-and-go: nudges the ACC out of a standstill it would +otherwise hold. Two variants gated by user flags — an electronic-parking-brake +resume pulse (distance/lead triggered) and a manual-parking-brake hold-timer +resume. Both work by spoofing the camera-bus throttle/brake frames. +""" +import copy +from enum import StrEnum + +from iqdbc.car import Bus, structs, DT_CTRL +from iqdbc.car.can_definitions import CanData +from iqdbc.car.interfaces import CarStateBase +from iqdbc.car.subaru.values import SubaruFlags + +from iqdbc.lvbs.car.subaru import iq_subarucan +from iqdbc.lvbs.car.subaru.iq_values import SubaruFlagsIQ +from iqdbc.can.parser import CANParser + +# EPB resume fires only while the lead is pulling away within this gap band (m). +_RESUME_GAP_MIN = 3.0 +_RESUME_GAP_MAX = 4.5 +_EPB_PULSE_FRAMES = 15 + + +class IQStopAndGoController: + def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): + self.CP = CP + self.CP_IQ = CP_IQ + self.enabled = bool(CP_IQ.flags & (SubaruFlagsIQ.STOP_AND_GO | SubaruFlagsIQ.STOP_AND_GO_MANUAL_PARKING_BRAKE)) + self.manual_parking_brake = bool(CP_IQ.flags & SubaruFlagsIQ.STOP_AND_GO_MANUAL_PARKING_BRAKE) + + self.standstill_since = 0 + self._pulse_left = 0 + self.prev_gap = 0.0 + + def _epb_pulse(self, trigger: bool) -> bool: + # A trigger arms a fixed-length resume pulse; the pulse then plays out frame by frame. + if self.manual_parking_brake: + return False + if trigger: + self._pulse_left = _EPB_PULSE_FRAMES + if self._pulse_left > 0: + self._pulse_left -= 1 + return True + return False + + def _want_resume(self, CC: structs.CarControl, CS: CarStateBase, frame: int) -> bool: + if not CC.enabled or not CC.hudControl.leadVisible: + return False + + gap = CS.es_distance_msg["Close_Distance"] + standing = CS.out.standstill + if not standing: + self.standstill_since = frame + + hold_arm, hold_reset = (0.75, 0.8) if self.CP.flags & SubaruFlags.PREGLOBAL else (0.5, 0.55) + held_for = (frame - self.standstill_since) * DT_CTRL + held_long_enough = held_for > hold_arm + if held_for >= hold_reset: + self.standstill_since = frame + + lead_pulling_away = _RESUME_GAP_MIN < gap < _RESUME_GAP_MAX and gap > self.prev_gap + self.prev_gap = gap + + if self.manual_parking_brake: + return held_long_enough + return self._epb_pulse(standing and lead_pulling_away) + + def create_stop_and_go(self, packer, CC: structs.CarControl, CS: CarStateBase, frame: int) -> list[CanData]: + if not self.enabled: + return [] + + resume = self._want_resume(CC, CS, frame) + can_sends = [iq_subarucan.create_throttle(packer, self.CP, CS.throttle_msg, resume and not self.manual_parking_brake)] + if frame % 2 == 0: + can_sends.append(iq_subarucan.create_brake_pedal(packer, self.CP, CS.brake_pedal_msg, resume and self.manual_parking_brake)) + return can_sends + + +class IQStopAndGoState: + def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): + self.CP = CP + self.CP_IQ = CP_IQ + self.brake_pedal_msg: dict[str, float] = {} + self.throttle_msg: dict[str, float] = {} + + def update(self, ret: structs.CarState, can_parsers: dict[StrEnum, CANParser]) -> None: + cp = can_parsers[Bus.pt] + self.brake_pedal_msg = copy.copy(cp.vl["Brake_Pedal"]) + if not self.CP.flags & SubaruFlags.HYBRID: + self.throttle_msg = copy.copy(cp.vl["Throttle"]) diff --git a/iqdbc_repo/iqdbc/iqpilot/car/ford/__init__.py b/iqdbc_repo/iqdbc/lvbs/car/tesla/__init__.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/ford/__init__.py rename to iqdbc_repo/iqdbc/lvbs/car/tesla/__init__.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/tesla/coop_steering.py b/iqdbc_repo/iqdbc/lvbs/car/tesla/coop_steering.py similarity index 99% rename from iqdbc_repo/iqdbc/iqpilot/car/tesla/coop_steering.py rename to iqdbc_repo/iqdbc/lvbs/car/tesla/coop_steering.py index 966edbc31..e67d44311 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/tesla/coop_steering.py +++ b/iqdbc_repo/iqdbc/lvbs/car/tesla/coop_steering.py @@ -10,7 +10,7 @@ from iqdbc.car import structs, rate_limit, DT_CTRL from iqdbc.car.vehicle_model import VehicleModel from iqdbc.car.lateral import apply_steer_angle_limits_vm from iqdbc.car.tesla.values import CarControllerParams -from iqdbc.iqpilot.car.tesla.values import TeslaFlagsIQ +from iqdbc.lvbs.car.tesla.values import TeslaFlagsIQ DT_LAT_CTRL = DT_CTRL * CarControllerParams.STEER_STEP diff --git a/iqdbc_repo/iqdbc/iqpilot/car/tesla/carstate_ext.py b/iqdbc_repo/iqdbc/lvbs/car/tesla/iq_carstate.py similarity index 79% rename from iqdbc_repo/iqdbc/iqpilot/car/tesla/carstate_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/tesla/iq_carstate.py index 019ac7beb..90be56407 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/tesla/carstate_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/tesla/iq_carstate.py @@ -7,20 +7,29 @@ from iqdbc.car import Bus, create_button_events, structs from iqdbc.can.parser import CANParser from iqdbc.car.common.conversions import Conversions as CV from iqdbc.car.tesla.values import DBC, CANBUS -from iqdbc.iqpilot.car.tesla.values import TeslaFlagsIQ +from iqdbc.lvbs.car.tesla.values import TeslaFlagsIQ ButtonType = structs.CarState.ButtonEvent.Type -class CarStateExt: +class IQCarState: def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams): self.CP = CP self.CP_IQ = CP_IQ self.infotainment_3_finger_press = 0 + self.vehicle_bus_available = bool(CP_IQ.flags & TeslaFlagsIQ.HAS_VEHICLE_BUS) def update(self, ret: structs.CarState, ret_iq: structs.IQCarState, can_parsers: dict[StrEnum, CANParser]) -> None: - if self.CP_IQ.flags & TeslaFlagsIQ.HAS_VEHICLE_BUS: + if Bus.adas in can_parsers: + cp_adas = can_parsers[Bus.adas] + + odometer_km = float(cp_adas.vl["ID3B6UI_odometer"].get("UI_odometer", 0.0)) + if 0.0 < odometer_km < 4294967.296: + self.vehicle_bus_available = True + ret.odometer = odometer_km + + if self.vehicle_bus_available and Bus.adas in can_parsers: cp_adas = can_parsers[Bus.adas] prev_infotainment_3_finger_press = self.infotainment_3_finger_press @@ -66,7 +75,9 @@ class CarStateExt: def get_parser(CP: structs.CarParams, CP_IQ: structs.IQCarParams) -> dict[StrEnum, CANParser]: messages = {} - if CP_IQ.flags & TeslaFlagsIQ.HAS_VEHICLE_BUS: + # Only tap the vehicle bus on cars where fingerprinting saw it: an always-on + # bus-1 parser trips bus_timeout -> canBusMissing on harnesses without the tap. + if CP_IQ.flags & TeslaFlagsIQ.HAS_VEHICLE_BUS and Bus.adas in DBC[CP.carFingerprint]: messages[Bus.adas] = CANParser(DBC[CP.carFingerprint][Bus.adas], [], CANBUS.vehicle) return messages diff --git a/iqdbc_repo/iqdbc/iqpilot/car/tesla/values.py b/iqdbc_repo/iqdbc/lvbs/car/tesla/values.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/tesla/values.py rename to iqdbc_repo/iqdbc/lvbs/car/tesla/values.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/gm/__init__.py b/iqdbc_repo/iqdbc/lvbs/car/tests/__init__.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/gm/__init__.py rename to iqdbc_repo/iqdbc/lvbs/car/tests/__init__.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/tests/test_car_list.py b/iqdbc_repo/iqdbc/lvbs/car/tests/test_car_list.py similarity index 92% rename from iqdbc_repo/iqdbc/iqpilot/car/tests/test_car_list.py rename to iqdbc_repo/iqdbc/lvbs/car/tests/test_car_list.py index 6417bb610..d0163498e 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/tests/test_car_list.py +++ b/iqdbc_repo/iqdbc/lvbs/car/tests/test_car_list.py @@ -2,7 +2,7 @@ import json import os from iqdbc.car.common.basedir import BASEDIR -from iqdbc.iqpilot.car.platform_list import get_car_list +from iqdbc.lvbs.car.platform_list import get_car_list CATALOG_JSON = os.path.join(BASEDIR, "..", "..", "iqpilot", "selfdrive", "car", "vehicle_catalog.json") diff --git a/iqdbc_repo/iqdbc/iqpilot/car/honda/__init__.py b/iqdbc_repo/iqdbc/lvbs/car/toyota/__init__.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/honda/__init__.py rename to iqdbc_repo/iqdbc/lvbs/car/toyota/__init__.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/toyota/gas_interceptor.py b/iqdbc_repo/iqdbc/lvbs/car/toyota/gas_interceptor.py similarity index 97% rename from iqdbc_repo/iqdbc/iqpilot/car/toyota/gas_interceptor.py rename to iqdbc_repo/iqdbc/lvbs/car/toyota/gas_interceptor.py index 7e9e697c0..34ab7986a 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/toyota/gas_interceptor.py +++ b/iqdbc_repo/iqdbc/lvbs/car/toyota/gas_interceptor.py @@ -7,7 +7,7 @@ import numpy as np from iqdbc.car import structs from iqdbc.car.can_definitions import CanData from iqdbc.car.toyota.values import CAR, MIN_ACC_SPEED, PEDAL_TRANSITION -from iqdbc.iqpilot.car import create_gas_interceptor_command +from iqdbc.lvbs.car import create_gas_interceptor_command class GasInterceptorCarController: diff --git a/iqdbc_repo/iqdbc/iqpilot/car/toyota/carstate_ext.py b/iqdbc_repo/iqdbc/lvbs/car/toyota/iq_carstate.py similarity index 98% rename from iqdbc_repo/iqdbc/iqpilot/car/toyota/carstate_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/toyota/iq_carstate.py index 1e7aa85c1..df00ceec0 100644 --- a/iqdbc_repo/iqdbc/iqpilot/car/toyota/carstate_ext.py +++ b/iqdbc_repo/iqdbc/lvbs/car/toyota/iq_carstate.py @@ -8,7 +8,7 @@ from iqdbc.car import Bus, structs from iqdbc.car.carlog import carlog from iqdbc.can.parser import CANParser from iqdbc.car.common.conversions import Conversions as CV -from iqdbc.iqpilot.car.toyota.values import ToyotaFlagsIQ +from iqdbc.lvbs.car.toyota.values import ToyotaFlagsIQ TRAFFIC_SIGNAL_MAP = { 1: "kph", @@ -21,7 +21,7 @@ ZSS_DIFF_THRESHOLD = 4 ZSS_MAX_THRESHOLD = 10 -class CarStateExt: +class IQCarState: def __init__(self, CP, CP_IQ): self.CP = CP self.CP_IQ = CP_IQ diff --git a/iqdbc_repo/iqdbc/iqpilot/car/toyota/fingerprints_ext.py b/iqdbc_repo/iqdbc/lvbs/car/toyota/iq_fingerprints.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/toyota/fingerprints_ext.py rename to iqdbc_repo/iqdbc/lvbs/car/toyota/iq_fingerprints.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/toyota/values.py b/iqdbc_repo/iqdbc/lvbs/car/toyota/values.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/toyota/values.py rename to iqdbc_repo/iqdbc/lvbs/car/toyota/values.py diff --git a/iqdbc_repo/iqdbc/safety/iqpilot/aol.h b/iqdbc_repo/iqdbc/safety/aol/aol.h similarity index 99% rename from iqdbc_repo/iqdbc/safety/iqpilot/aol.h rename to iqdbc_repo/iqdbc/safety/aol/aol.h index e6492db8b..63cd62e5c 100644 --- a/iqdbc_repo/iqdbc/safety/iqpilot/aol.h +++ b/iqdbc_repo/iqdbc/safety/aol/aol.h @@ -6,7 +6,7 @@ #pragma once -#include "iqdbc/safety/iqpilot/aol_declarations.h" +#include "iqdbc/safety/aol/aol_declarations.h" // =============================== // Global Variables diff --git a/iqdbc_repo/iqdbc/safety/iqpilot/aol_declarations.h b/iqdbc_repo/iqdbc/safety/aol/aol_declarations.h similarity index 100% rename from iqdbc_repo/iqdbc/safety/iqpilot/aol_declarations.h rename to iqdbc_repo/iqdbc/safety/aol/aol_declarations.h diff --git a/iqdbc_repo/iqdbc/safety/lateral.h b/iqdbc_repo/iqdbc/safety/lateral.h index fcc72182e..66715842f 100644 --- a/iqdbc_repo/iqdbc/safety/lateral.h +++ b/iqdbc_repo/iqdbc/safety/lateral.h @@ -1,4 +1,4 @@ -#include "iqdbc/safety/iqpilot/aol.h" +#include "iqdbc/safety/aol/aol.h" #include "iqdbc/safety/declarations.h" // ISO 11270 diff --git a/iqdbc_repo/iqdbc/safety/modes/hyundai.h b/iqdbc_repo/iqdbc/safety/modes/hyundai.h index f37d9dcc9..deaff486e 100644 --- a/iqdbc_repo/iqdbc/safety/modes/hyundai.h +++ b/iqdbc_repo/iqdbc/safety/modes/hyundai.h @@ -3,6 +3,8 @@ #include "iqdbc/safety/declarations.h" #include "iqdbc/safety/modes/hyundai_common.h" +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" + #define HYUNDAI_LIMITS(steer, rate_up, rate_down) { \ .max_torque = (steer), \ .max_rate_up = (rate_up), \ @@ -21,96 +23,84 @@ extern const LongitudinalLimits HYUNDAI_LONG_LIMITS; const LongitudinalLimits HYUNDAI_LONG_LIMITS = { - .max_accel = 200, // 1/100 m/s2 - .min_accel = -350, // 1/100 m/s2 - .zero_accel = 0, + .max_accel = 250, // 1/100 m/s2 + .min_accel = -400, // 1/100 m/s2 }; -#define HYUNDAI_COMMON_TX_MSGS(scc_bus) \ - {0x340, 0, 8, .check_relay = true}, /* LKAS11 Bus 0 */ \ - {0x4F1, scc_bus, 4, .check_relay = false}, /* CLU11 Bus 0 (radar-SCC) or 2 (camera-SCC) */ \ - {0x485, 0, 4, .check_relay = true}, /* LFAHDA_MFC Bus 0 */ \ - -#define HYUNDAI_LONG_COMMON_TX_MSGS(scc_bus) \ - HYUNDAI_COMMON_TX_MSGS(scc_bus) \ - {0x420, 0, 8, .check_relay = true}, /* SCC11 Bus 0 */ \ - {0x421, 0, 8, .check_relay = true}, /* SCC12 Bus 0 */ \ - {0x50A, 0, 8, .check_relay = true}, /* SCC13 Bus 0 */ \ - {0x389, 0, 8, .check_relay = true}, /* SCC14 Bus 0 */ \ - {0x4A2, 0, 2, .check_relay = false}, /* FRT_RADAR11 Bus 0 */ \ - -#define HYUNDAI_COMMON_RX_CHECKS(legacy) \ - {.msg = {{0x260, 0, 8, 100U, .max_counter = 3U, .ignore_quality_flag = true}, \ - {0x371, 0, 8, 100U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }}}, \ - {.msg = {{0x386, 0, 8, 100U, .ignore_checksum = (legacy), .ignore_counter = (legacy), .max_counter = (legacy) ? 0U : 15U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ - {.msg = {{0x394, 0, 8, 100U, .ignore_checksum = (legacy), .ignore_counter = (legacy), .max_counter = (legacy) ? 0U : 7U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ - {.msg = {{0x251, 0, 8, 50U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ - {.msg = {{0x4F1, 0, 4, 50U, .ignore_checksum = true, .max_counter = 15U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ - -#define HYUNDAI_SCC11_ADDR_CHECK(scc_bus) \ - {.msg = {{0x420, (scc_bus), 8, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true, .frequency = 50U}, { 0 }, { 0 }}}, \ - -#define HYUNDAI_SCC12_ADDR_CHECK(scc_bus) \ - {.msg = {{0x421, (scc_bus), 8, 50U, .max_counter = 15U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ - -#define HYUNDAI_FCEV_GAS_ADDR_CHECK \ - {.msg = {{0x91, 0, 8, 100U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ - -#define HYUNDAI_LDA_BUTTON_ADDR_CHECK \ - {.msg = {{0x391, 0, 8, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true, .frequency = 50U}, { 0 }, { 0 }}}, \ - -#define HYUNDAI_NON_SCC_HEV_ADDR_CHECK \ - {.msg = {{0x595U, 0, 8, 10U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ - -#define HYUNDAI_NON_SCC_EV_ADDR_CHECK \ - {.msg = {{0x592U, 0, 8, 10U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ - static const CanMsg HYUNDAI_TX_MSGS[] = { - HYUNDAI_COMMON_TX_MSGS(0) + {0x340, 0, 8}, // LKAS11 Bus 0 + {0x4F1, 0, 4}, // CLU11 Bus 0 + {0x485, 0, 8}, // LFAHDA_MFC Bus 0 + {593, 2, 8}, // MDPS12, Bus 2 + {1056, 0, 8}, // SCC11, Bus 0 + {1057, 0, 8}, // SCC12, Bus 0 + {1290, 0, 8}, // SCC13, Bus 0 + {905, 0, 8}, // SCC14, Bus 0 + {909, 0, 8}, // FCA11 Bus 0 + {1155, 0, 8}, // FCA12 Bus 0 + {1186, 0, 8}, // FRT_RADAR11, Bus 0 + {1265, 2, 4}, // CLU11, Bus 0, 2 + {0x7D0, 0, 8}, // radar UDS TX addr Bus 0 (for radar disable) // 2000 + {0x7b1, 0, 8}, }; -static bool hyundai_legacy = false; +#define HYUNDAI_COMMON_RX_CHECKS(legacy) \ + {.msg = {{0x260, 0, 8, .max_counter = 3U, .frequency = 100U}, \ + {0x371, 0, 8, .ignore_checksum = true, .ignore_counter = true, .frequency = 100U}, \ + {0x91, 0, 8, .ignore_checksum = true, .ignore_counter = true, .frequency = 100U}}}, \ + {.msg = {{0x386, 0, 8, .ignore_checksum = (legacy), .ignore_counter = (legacy), .max_counter = (legacy) ? 0U : 15U, .frequency = 100U}, { 0 }, { 0 }}}, \ + {.msg = {{0x394, 0, 8, .ignore_checksum = (legacy), .ignore_counter = (legacy), .max_counter = (legacy) ? 0U : 7U, .frequency = 100U}, { 0 }, { 0 }}}, \ -static uint8_t hyundai_get_counter(const CANPacket_t *msg) { +#define HYUNDAI_SCC12_ADDR_CHECK(scc_bus) \ + {.msg = {{0x421, (scc_bus), 8, .max_counter = 15U, .frequency = 50U}, { 0 }, { 0 }}}, \ + +static bool hyundai_legacy = false; +static bool hyundai_cruise_buttons_alt = false; + +static uint8_t hyundai_get_counter(const CANPacket_t *to_push) { + int addr = GET_ADDR(to_push); uint8_t cnt = 0; - if (msg->addr == 0x260U) { - cnt = (msg->data[7] >> 4) & 0x3U; - } else if (msg->addr == 0x386U) { - cnt = ((msg->data[3] >> 6) << 2) | (msg->data[1] >> 6); - } else if (msg->addr == 0x394U) { - cnt = (msg->data[1] >> 5) & 0x7U; - } else if (msg->addr == 0x421U) { - cnt = msg->data[7] & 0xFU; - } else if (msg->addr == 0x4F1U) { - cnt = (msg->data[3] >> 4) & 0xFU; + if (addr == 0x260) { + cnt = (GET_BYTE(to_push, 7) >> 4) & 0x3U; + } else if (addr == 0x386) { + cnt = ((GET_BYTE(to_push, 3) >> 6) << 2) | (GET_BYTE(to_push, 1) >> 6); + } else if (addr == 0x394) { + cnt = (GET_BYTE(to_push, 1) >> 5) & 0x7U; + } else if (addr == 0x421) { + cnt = GET_BYTE(to_push, 7) & 0xFU; + } else if (addr == 0x4F1) { + cnt = (GET_BYTE(to_push, 3) >> 4) & 0xFU; } else { } return cnt; } -static uint32_t hyundai_get_checksum(const CANPacket_t *msg) { +static uint32_t hyundai_get_checksum(const CANPacket_t *to_push) { + int addr = GET_ADDR(to_push); uint8_t chksum = 0; - if (msg->addr == 0x260U) { - chksum = msg->data[7] & 0xFU; - } else if (msg->addr == 0x386U) { - chksum = ((msg->data[7] >> 6) << 2) | (msg->data[5] >> 6); - } else if (msg->addr == 0x394U) { - chksum = msg->data[6] & 0xFU; - } else if (msg->addr == 0x421U) { - chksum = msg->data[7] >> 4; + if (addr == 0x260) { + chksum = GET_BYTE(to_push, 7) & 0xFU; + } else if (addr == 0x386) { + chksum = ((GET_BYTE(to_push, 7) >> 6) << 2) | (GET_BYTE(to_push, 5) >> 6); + } else if (addr == 0x394) { + chksum = GET_BYTE(to_push, 6) & 0xFU; + } else if (addr == 0x421) { + chksum = GET_BYTE(to_push, 7) >> 4; } else { } return chksum; } -static uint32_t hyundai_compute_checksum(const CANPacket_t *msg) { +static uint32_t hyundai_compute_checksum(const CANPacket_t *to_push) { + int addr = GET_ADDR(to_push); + uint8_t chksum = 0; - if (msg->addr == 0x386U) { + if (addr == 0x386) { // count the bits for (int i = 0; i < 8; i++) { - uint8_t b = msg->data[i]; + uint8_t b = GET_BYTE(to_push, i); for (int j = 0; j < 8; j++) { uint8_t bit = 0; // exclude checksum and counter @@ -124,12 +114,12 @@ static uint32_t hyundai_compute_checksum(const CANPacket_t *msg) { } else { // sum of nibbles for (int i = 0; i < 8; i++) { - if ((msg->addr == 0x394U) && (i == 7)) { + if ((addr == 0x394) && (i == 7)) { continue; // exclude } - uint8_t b = msg->data[i]; - if (((msg->addr == 0x260U) && (i == 7)) || ((msg->addr == 0x394U) && (i == 6)) || ((msg->addr == 0x421U) && (i == 7))) { - b &= (msg->addr == 0x421U) ? 0x0FU : 0xF0U; // remove checksum + uint8_t b = GET_BYTE(to_push, i); + if (((addr == 0x260) && (i == 7)) || ((addr == 0x394) && (i == 6)) || ((addr == 0x421) && (i == 7))) { + b &= (addr == 0x421) ? 0x0FU : 0xF0U; // remove checksum } chksum += (b % 16U) + (b / 16U); } @@ -139,127 +129,115 @@ static uint32_t hyundai_compute_checksum(const CANPacket_t *msg) { return chksum; } -static void hyundai_rx_hook(const CANPacket_t *msg) { +static void hyundai_rx_hook(const CANPacket_t *to_push) { + int bus = GET_BUS(to_push); + int addr = GET_ADDR(to_push); // SCC12 is on bus 2 for camera-based SCC cars, bus 0 on all others - if (msg->addr == 0x421U) { - if (((msg->bus == 0U) && !hyundai_camera_scc) || ((msg->bus == 2U) && hyundai_camera_scc)) { + if (addr == 0x421) { + if (((bus == 0) && !hyundai_camera_scc) || ((bus == 2) && hyundai_camera_scc)) { // 2 bits: 13-14 - int cruise_engaged = (GET_BYTES(msg, 0, 4) >> 13) & 0x3U; + int cruise_engaged = (GET_BYTES(to_push, 0, 4) >> 13) & 0x3U; hyundai_common_cruise_state_check(cruise_engaged); } } - if (msg->addr == 0x420U) { - if (((msg->bus == 0U) && !hyundai_camera_scc) || ((msg->bus == 2U) && hyundai_camera_scc)) { - if (!hyundai_longitudinal) { - acc_main_on = GET_BIT(msg, 0U); - } - } - } - - if (msg->bus == 0U) { - if (msg->addr == 0x251U) { - int torque_driver_new = (GET_BYTES(msg, 0, 2) & 0x7ffU) - 1024U; + if (bus == 0) { + if (addr == 0x251) { + int torque_driver_new = (GET_BYTES(to_push, 0, 2) & 0x7ffU) - 1024U; // update array of samples update_sample(&torque_driver, torque_driver_new); } - if (msg->addr == 0x391U) { - aol_button_press = GET_BIT(msg, 4U) ? AOL_BUTTON_PRESSED : AOL_BUTTON_NOT_PRESSED; - } - // ACC steering wheel buttons - if (msg->addr == 0x4F1U) { - int cruise_button = msg->data[0] & 0x7U; - bool main_button = GET_BIT(msg, 3U); + if (addr == 1007) hyundai_cruise_buttons_alt = true; // CASPER_EV: 1007 + if (addr == 1007) { + int cruise_button = (GET_BYTE(to_push, 7) >> 4) & 0x07U; + bool main_button = GET_BIT(to_push, 58U); + hyundai_common_cruise_buttons_check(cruise_button, main_button); + } + else if (addr == 0x4F1 && !hyundai_cruise_buttons_alt) { + int cruise_button = GET_BYTE(to_push, 0) & 0x7U; + bool main_button = GET_BIT(to_push, 3U); hyundai_common_cruise_buttons_check(cruise_button, main_button); } // gas press, different for EV, hybrid, and ICE models - if ((msg->addr == 0x371U) && hyundai_ev_gas_signal) { - gas_pressed = (((msg->data[4] & 0x7FU) << 1) | (msg->data[3] >> 7)) != 0U; - } else if ((msg->addr == 0x371U) && hyundai_hybrid_gas_signal) { - gas_pressed = msg->data[7] != 0U; - } else if ((msg->addr == 0x91U) && hyundai_fcev_gas_signal) { - gas_pressed = msg->data[6] != 0U; - } else if ((msg->addr == 0x260U) && !hyundai_ev_gas_signal && !hyundai_hybrid_gas_signal) { - gas_pressed = (msg->data[7] >> 6) != 0U; + if ((addr == 0x371) && hyundai_ev_gas_signal) { + gas_pressed = (((GET_BYTE(to_push, 4) & 0x7FU) << 1) | GET_BYTE(to_push, 3) >> 7) != 0U; + } else if ((addr == 0x371) && hyundai_hybrid_gas_signal) { + gas_pressed = GET_BYTE(to_push, 7) != 0U; + } else if ((addr == 0x91) && hyundai_fcev_gas_signal) { + gas_pressed = GET_BYTE(to_push, 6) != 0U; + } else if ((addr == 0x260) && !hyundai_ev_gas_signal && !hyundai_hybrid_gas_signal) { + gas_pressed = (GET_BYTE(to_push, 7) >> 6) != 0U; } else { } // sample wheel speed, averaging opposite corners - if (msg->addr == 0x386U) { - uint32_t front_left_speed = GET_BYTES(msg, 0, 2) & 0x3FFFU; - uint32_t rear_right_speed = GET_BYTES(msg, 6, 2) & 0x3FFFU; + if (addr == 0x386) { + uint32_t front_left_speed = GET_BYTES(to_push, 0, 2) & 0x3FFFU; + uint32_t rear_right_speed = GET_BYTES(to_push, 6, 2) & 0x3FFFU; vehicle_moving = (front_left_speed > HYUNDAI_STANDSTILL_THRSLD) || (rear_right_speed > HYUNDAI_STANDSTILL_THRSLD); } - if (msg->addr == 0x394U) { - brake_pressed = ((msg->data[5] >> 5U) & 0x3U) == 0x2U; + if (addr == 0x394) { + brake_pressed = ((GET_BYTE(to_push, 5) >> 5U) & 0x3U) == 0x2U; } - if (msg->addr == 0x592U) { - acc_main_on = GET_BIT(msg, 34U); - bool cruise_engaged = GET_BIT(msg, 35U); - hyundai_common_cruise_state_check(cruise_engaged); - } + bool stock_ecu_detected = (addr == 0x340); - if (msg->addr == 0x595U) { - acc_main_on = GET_BIT(msg, 50U); - bool cruise_engaged = GET_BIT(msg, 51U); - hyundai_common_cruise_state_check(cruise_engaged); - } - - if ((msg->addr == 0x260U) && hyundai_non_scc && !hyundai_ev_gas_signal && !hyundai_hybrid_gas_signal) { - acc_main_on = GET_BIT(msg, 25U); - bool cruise_engaged = GET_BIT(msg, 26U); - hyundai_common_cruise_state_check(cruise_engaged); + // If openpilot is controlling longitudinal we need to ensure the radar is turned off + // Enforce by checking we don't see SCC12 + if (hyundai_longitudinal && (addr == 0x421)) { + stock_ecu_detected = true; } + generic_rx_checks(); + stock_ecu_check(stock_ecu_detected); } - - hyundai_common_reset_acc_main_on_mismatches(); } -static bool hyundai_tx_hook(const CANPacket_t *msg) { - const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS = HYUNDAI_LIMITS(384, 3, 7); - const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS_ALT = HYUNDAI_LIMITS(270, 2, 3); +uint32_t last_ts_lkas11_from_op = 0; +uint32_t last_ts_scc12_from_op = 0; +uint32_t last_ts_scc13_from_op = 0; +uint32_t last_ts_mdps12_from_op = 0; +uint32_t last_ts_fca11_from_op = 0; +uint32_t last_ts_fca12_from_op = 0; +uint32_t last_ts_lfahda_mfc_from_op = 0; + +static bool hyundai_tx_hook(const CANPacket_t *to_send) { + const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS = HYUNDAI_LIMITS(512, 10, 10); + const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS_ALT = HYUNDAI_LIMITS(512, 10, 10); const TorqueSteeringLimits HYUNDAI_STEERING_LIMITS_ALT_2 = HYUNDAI_LIMITS(170, 2, 3); bool tx = true; + int addr = GET_ADDR(to_send); // FCA11: Block any potential actuation - if (msg->addr == 0x38DU) { - int CR_VSM_DecCmd = msg->data[1]; - bool FCA_CmdAct = GET_BIT(msg, 20U); - bool CF_VSM_DecCmdAct = GET_BIT(msg, 31U); + if (addr == 0x38D) { + int CR_VSM_DecCmd = GET_BYTE(to_send, 1); + bool FCA_CmdAct = GET_BIT(to_send, 20U); + bool CF_VSM_DecCmdAct = GET_BIT(to_send, 31U); if ((CR_VSM_DecCmd != 0) || FCA_CmdAct || CF_VSM_DecCmdAct) { tx = false; } } - if (msg->addr == 0x420U) { - acc_main_on_tx = GET_BIT(msg, 0U); - hyundai_common_acc_main_on_sync(); - } - // ACCEL: safety check - if (msg->addr == 0x421U) { - int desired_accel_raw = (((msg->data[4] & 0x7U) << 8) | msg->data[3]) - 1023U; - int desired_accel_val = ((msg->data[5] << 3) | (msg->data[4] >> 5)) - 1023U; + if (addr == 0x421) { + int desired_accel_raw = (((GET_BYTE(to_send, 4) & 0x7U) << 8) | GET_BYTE(to_send, 3)) - 1023U; + int desired_accel_val = ((GET_BYTE(to_send, 5) << 3) | (GET_BYTE(to_send, 4) >> 5)) - 1023U; - int aeb_decel_cmd = msg->data[2]; - bool aeb_req = GET_BIT(msg, 54U); + int aeb_decel_cmd = GET_BYTE(to_send, 2); + bool aeb_req = GET_BIT(to_send, 54U); bool violation = false; violation |= longitudinal_accel_checks(desired_accel_raw, HYUNDAI_LONG_LIMITS); violation |= longitudinal_accel_checks(desired_accel_val, HYUNDAI_LONG_LIMITS); - if (!hyundai_escc) { - violation |= (aeb_decel_cmd != 0); - violation |= aeb_req; - } + violation |= (aeb_decel_cmd != 0); + violation |= aeb_req; if (violation) { tx = false; @@ -267,9 +245,9 @@ static bool hyundai_tx_hook(const CANPacket_t *msg) { } // LKA STEER: safety check - if (msg->addr == 0x340U) { - int desired_torque = ((GET_BYTES(msg, 0, 4) >> 16) & 0x7ffU) - 1024U; - bool steer_req = GET_BIT(msg, 27U); + if (addr == 0x340) { + int desired_torque = ((GET_BYTES(to_send, 0, 4) >> 16) & 0x7ffU) - 1024U; + bool steer_req = GET_BIT(to_send, 27U); const TorqueSteeringLimits limits = hyundai_alt_limits_2 ? HYUNDAI_STEERING_LIMITS_ALT_2 : hyundai_alt_limits ? HYUNDAI_STEERING_LIMITS_ALT : HYUNDAI_STEERING_LIMITS; @@ -280,220 +258,199 @@ static bool hyundai_tx_hook(const CANPacket_t *msg) { } // UDS: Only tester present ("\x02\x3E\x80\x00\x00\x00\x00\x00") allowed on diagnostics address - if (msg->addr == 0x7D0U) { - if ((GET_BYTES(msg, 0, 4) != 0x00803E02U) || (GET_BYTES(msg, 4, 4) != 0x0U)) { + if (addr == 0x7D0) { + if ((GET_BYTES(to_send, 0, 4) != 0x00803E02U) || (GET_BYTES(to_send, 4, 4) != 0x0U)) { tx = false; } } // BUTTONS: used for resume spamming and cruise cancellation - if ((msg->addr == 0x4F1U) && !hyundai_longitudinal) { - int button = msg->data[0] & 0x7U; + if ((addr == 0x4F1) && !hyundai_longitudinal) { + int button = GET_BYTE(to_send, 0) & 0x7U; bool allowed_resume = (button == 1) && controls_allowed; - bool allowed_set = (button == 2) && controls_allowed; - bool allowed_cancel = (button == 4) && cruise_engaged_prev; - if (!(allowed_resume || allowed_set || allowed_cancel)) { + bool allowed_cancel = (button == 4) && (cruise_engaged_prev || controls_allowed); + if (!(allowed_resume || allowed_cancel)) { tx = false; } } + uint32_t now = microsecond_timer_get(); + if(addr == 832) + last_ts_lkas11_from_op = (tx == 0 ? 0 : now); + else if(addr == 1057) + last_ts_scc12_from_op = (tx == 0 ? 0 : now); + else if(addr == 593) + last_ts_mdps12_from_op = (tx == 0 ? 0 : now); + else if (addr == 909) + last_ts_fca11_from_op = (tx == 0 ? 0 : now); + else if (addr == 1155) + last_ts_fca12_from_op = (tx == 0 ? 0 : now); + else if(addr == 1290) + last_ts_scc13_from_op = (tx == 0 ? 0 : now); + else if(addr == 0x485) + last_ts_lfahda_mfc_from_op = (tx == 0 ? 0 : now); return tx; } -static safety_config hyundai_init(uint16_t param) { - static const CanMsg HYUNDAI_LONG_TX_MSGS[] = { - HYUNDAI_LONG_COMMON_TX_MSGS(0) - {0x38D, 0, 8, .check_relay = false}, // FCA11 Bus 0 - {0x483, 0, 8, .check_relay = false}, // FCA12 Bus 0 - {0x7D0, 0, 8, .check_relay = false}, // radar UDS TX addr Bus 0 (for radar disable) - }; +static bool hyundai_fwd_hook(int bus_num, int addr) { + int bus_fwd = -1; - static const CanMsg HYUNDAI_CAMERA_SCC_TX_MSGS[] = { - HYUNDAI_COMMON_TX_MSGS(2) - }; + uint32_t now = microsecond_timer_get(); - static const CanMsg HYUNDAI_CAMERA_SCC_LONG_TX_MSGS[] = { - HYUNDAI_LONG_COMMON_TX_MSGS(2) - }; + // forward cam to ccan and viceversa, except lkas cmd + if (bus_num == 0) { + bus_fwd = 2; - static const CanMsg HYUNDAI_LONG_ESCC_TX_MSGS[] = { - HYUNDAI_LONG_COMMON_TX_MSGS(0) - }; - - hyundai_common_init(param); - hyundai_legacy = false; - - safety_config ret; - if (hyundai_longitudinal) { - // Use CLU11 (buttons) to manage controls allowed instead of SCC cruise state - static RxCheck hyundai_long_rx_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - }; - - static RxCheck hyundai_lda_button_long_rx_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_LDA_BUTTON_ADDR_CHECK - }; - - static RxCheck hyundai_fcev_long_rx_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_FCEV_GAS_ADDR_CHECK - }; - - static RxCheck hyundai_fcev_lda_button_long_rx_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_FCEV_GAS_ADDR_CHECK - HYUNDAI_LDA_BUTTON_ADDR_CHECK - }; - - if (hyundai_fcev_gas_signal) { - if (hyundai_has_lda_button) { - SET_RX_CHECKS(hyundai_fcev_lda_button_long_rx_checks, ret); - } else { - SET_RX_CHECKS(hyundai_fcev_long_rx_checks, ret); - } - } else { - if (hyundai_has_lda_button) { - SET_RX_CHECKS(hyundai_lda_button_long_rx_checks, ret); - } else { - SET_RX_CHECKS(hyundai_long_rx_checks, ret); - } - } - if (hyundai_escc) { - SET_TX_MSGS(HYUNDAI_LONG_ESCC_TX_MSGS, ret); - } else if (hyundai_camera_scc) { - SET_TX_MSGS(HYUNDAI_CAMERA_SCC_LONG_TX_MSGS, ret); - } else { - SET_TX_MSGS(HYUNDAI_LONG_TX_MSGS, ret); - } - - } else if (hyundai_camera_scc) { - static RxCheck hyundai_cam_scc_rx_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_SCC12_ADDR_CHECK(2) - HYUNDAI_SCC11_ADDR_CHECK(2) - HYUNDAI_LDA_BUTTON_ADDR_CHECK - }; - - ret = BUILD_SAFETY_CFG(hyundai_cam_scc_rx_checks, HYUNDAI_CAMERA_SCC_TX_MSGS); - } else { - static RxCheck hyundai_rx_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_SCC12_ADDR_CHECK(0) - HYUNDAI_SCC11_ADDR_CHECK(0) - }; - - static RxCheck hyundai_lda_button_rx_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_SCC12_ADDR_CHECK(0) - HYUNDAI_SCC11_ADDR_CHECK(0) - HYUNDAI_LDA_BUTTON_ADDR_CHECK - }; - - static RxCheck hyundai_fcev_rx_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_SCC12_ADDR_CHECK(0) - HYUNDAI_SCC11_ADDR_CHECK(0) - HYUNDAI_FCEV_GAS_ADDR_CHECK - }; - - static RxCheck hyundai_fcev_lda_button_rx_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_SCC12_ADDR_CHECK(0) - HYUNDAI_SCC11_ADDR_CHECK(0) - HYUNDAI_FCEV_GAS_ADDR_CHECK - HYUNDAI_LDA_BUTTON_ADDR_CHECK - }; - - static RxCheck hyundai_non_scc_addr_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - }; - - static RxCheck hyundai_non_scc_lda_button_addr_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_LDA_BUTTON_ADDR_CHECK - }; - - static RxCheck hyundai_hev_non_scc_addr_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_NON_SCC_HEV_ADDR_CHECK - }; - - static RxCheck hyundai_hev_non_scc_lda_button_addr_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_NON_SCC_HEV_ADDR_CHECK - HYUNDAI_LDA_BUTTON_ADDR_CHECK - }; - - static RxCheck hyundai_ev_non_scc_addr_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_NON_SCC_EV_ADDR_CHECK - }; - - static RxCheck hyundai_ev_non_scc_lda_button_addr_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(false) - HYUNDAI_NON_SCC_EV_ADDR_CHECK - HYUNDAI_LDA_BUTTON_ADDR_CHECK - }; - - SET_TX_MSGS(HYUNDAI_TX_MSGS, ret); - if (hyundai_fcev_gas_signal) { - if (hyundai_has_lda_button) { - SET_RX_CHECKS(hyundai_fcev_lda_button_rx_checks, ret); - } else { - SET_RX_CHECKS(hyundai_fcev_rx_checks, ret); - } - } else if (hyundai_non_scc) { - if (hyundai_ev_gas_signal) { - if (hyundai_has_lda_button) { - SET_RX_CHECKS(hyundai_ev_non_scc_lda_button_addr_checks, ret); - } else { - SET_RX_CHECKS(hyundai_ev_non_scc_addr_checks, ret); - } - } else if (hyundai_hybrid_gas_signal) { - if (hyundai_has_lda_button) { - SET_RX_CHECKS(hyundai_hev_non_scc_lda_button_addr_checks, ret); - } else { - SET_RX_CHECKS(hyundai_hev_non_scc_addr_checks, ret); - } - } else { - if (hyundai_has_lda_button) { - SET_RX_CHECKS(hyundai_non_scc_lda_button_addr_checks, ret); - } else { - SET_RX_CHECKS(hyundai_non_scc_addr_checks, ret); - } - } - } else { - if (hyundai_has_lda_button) { - SET_RX_CHECKS(hyundai_lda_button_rx_checks, ret); - } else { - SET_RX_CHECKS(hyundai_rx_checks, ret); + if(addr == 593) { + if(now - last_ts_mdps12_from_op < 200000) { + bus_fwd = -1; } } } - return ret; + + if (bus_num == 2) { + bool is_lkas_msg = addr == 832; + bool is_lfahda_msg = addr == 1157; + bool is_scc_msg = addr == 1056 || addr == 1057 || addr == 905; + bool is_scc13_msg = addr == 1290; + bool is_fca11_msg = addr == 909; + bool is_fca12_msg = addr == 1155; + + bool block_msg = is_lkas_msg || is_lfahda_msg || is_scc_msg || is_scc13_msg || is_fca11_msg || is_fca12_msg; + if (!block_msg) { + bus_fwd = 0; + } + else { + if(is_lkas_msg) { + if(now - last_ts_lkas11_from_op >= 200000) { + bus_fwd = 0; + } + } + else if(is_lfahda_msg) { + if (now - last_ts_lfahda_mfc_from_op >= 200000) + bus_fwd = 0; + } + else if (is_scc_msg) { + if (now - last_ts_scc12_from_op >= 400000) + bus_fwd = 0; + } + else if (is_scc13_msg) { + if (now - last_ts_scc13_from_op >= 800000) + bus_fwd = 0; + } + else if (is_fca11_msg) { + if (now - last_ts_fca11_from_op >= 400000) + bus_fwd = 0; + } + else if (is_fca12_msg) { + if (now - last_ts_fca12_from_op >= 400000) + bus_fwd = 0; + } + } + } + + return bus_fwd == -1; +} + +/* case + - legacy(on/off) + camera_scc(allways longitudinal on) + longitudinal(scc off) +*/ +static safety_config hyundai_init_carrot(bool legacy_car) { + static const CanMsg HYUNDAI_LONG_TX_MSGS[] = { + {0x340, 0, 8}, // LKAS11 Bus 0 + {0x4F1, 0, 4}, // CLU11 Bus 0 + {0x485, 0, 8}, // LFAHDA_MFC Bus 0 + {0x251, 2, 8}, // MDPS12 Bus 2 + {0x420, 0, 8}, // SCC11 Bus 0 + {0x421, 0, 8}, // SCC12 Bus 0 + {0x50A, 0, 8}, // SCC13 Bus 0 + {0x389, 0, 8}, // SCC14 Bus 0 + {0x4A2, 0, 2}, // FRT_RADAR11 Bus 0 + {0x38D, 0, 8}, // FCA11 Bus 0 + {0x483, 0, 8}, // FCA12 Bus 0 + {0x7D0, 0, 8}, // radar UDS TX addr Bus 0 (for radar disable) + }; + + static const CanMsg HYUNDAI_CAMERA_SCC_TX_MSGS[] = { + {0x340, 0, 8}, // LKAS11 Bus 0 + {0x4F1, 2, 4}, // CLU11 Bus 2 + {0x485, 0, 8}, // LFAHDA_MFC Bus 0 + {593, 2, 8}, // MDPS12, Bus 2 + {1056, 0, 8}, // SCC11, Bus 0 + {1057, 0, 8}, // SCC12, Bus 0 + {1290, 0, 8}, // SCC13, Bus 0 + {905, 0, 8}, // SCC14, Bus 0 + {909, 0, 8}, // FCA11 Bus 0 + {1155, 0, 8}, // FCA12 Bus 0 + {1186, 0, 8}, // FRT_RADAR11, Bus 0 + {0x4F1, 0, 4}, // CLU11 Bus 0 + }; + + safety_config ret; + if (hyundai_camera_scc) { + static RxCheck hyundai_cam_scc_rx_checks[] = { + HYUNDAI_COMMON_RX_CHECKS(false) + HYUNDAI_SCC12_ADDR_CHECK(2) + }; + static RxCheck hyundai_cam_scc_rx_checks_legacy[] = { + HYUNDAI_COMMON_RX_CHECKS(true) + HYUNDAI_SCC12_ADDR_CHECK(2) + }; + if(legacy_car) ret = BUILD_SAFETY_CFG(hyundai_cam_scc_rx_checks_legacy, HYUNDAI_CAMERA_SCC_TX_MSGS); + else ret = BUILD_SAFETY_CFG(hyundai_cam_scc_rx_checks, HYUNDAI_CAMERA_SCC_TX_MSGS); + } + else if (hyundai_longitudinal) { + static RxCheck hyundai_long_rx_checks[] = { + HYUNDAI_COMMON_RX_CHECKS(false) + // Use CLU11 (buttons) to manage controls allowed instead of SCC cruise state + {.msg = {{0x4F1, 0, 4, .ignore_checksum = true, .max_counter = 15U, .frequency = 50U}, { 0 }, { 0 }} +}, + }; + static RxCheck hyundai_long_rx_checks_legacy[] = { + HYUNDAI_COMMON_RX_CHECKS(true) + // Use CLU11 (buttons) to manage controls allowed instead of SCC cruise state + {.msg = {{0x4F1, 0, 4, .ignore_checksum = true, .max_counter = 15U, .frequency = 50U}, { 0 }, { 0 }} +}, + }; + + if(legacy_car) ret = BUILD_SAFETY_CFG(hyundai_long_rx_checks_legacy, HYUNDAI_LONG_TX_MSGS); + else ret = BUILD_SAFETY_CFG(hyundai_long_rx_checks, HYUNDAI_LONG_TX_MSGS); + } + else { + static RxCheck hyundai_rx_checks[] = { + HYUNDAI_COMMON_RX_CHECKS(false) + HYUNDAI_SCC12_ADDR_CHECK(0) + }; + static RxCheck hyundai_rx_checks_legacy[] = { + HYUNDAI_COMMON_RX_CHECKS(true) + //HYUNDAI_SCC12_ADDR_CHECK(0) + }; + + if(legacy_car) ret = BUILD_SAFETY_CFG(hyundai_rx_checks_legacy, HYUNDAI_TX_MSGS); + else ret = BUILD_SAFETY_CFG(hyundai_rx_checks, HYUNDAI_TX_MSGS); + } + return ret; +} + + +static safety_config hyundai_init(uint16_t param) { + hyundai_common_init(param); + hyundai_legacy = false; + return hyundai_init_carrot(hyundai_legacy); } static safety_config hyundai_legacy_init(uint16_t param) { - // older hyundai models have less checks due to missing counters and checksums - static RxCheck hyundai_legacy_rx_checks[] = { - HYUNDAI_COMMON_RX_CHECKS(true) - HYUNDAI_SCC12_ADDR_CHECK(0) - HYUNDAI_SCC11_ADDR_CHECK(0) - }; - hyundai_common_init(param); hyundai_legacy = true; - hyundai_longitudinal = false; - hyundai_camera_scc = false; - return BUILD_SAFETY_CFG(hyundai_legacy_rx_checks, HYUNDAI_TX_MSGS); + return hyundai_init_carrot(hyundai_legacy); } const safety_hooks hyundai_hooks = { .init = hyundai_init, .rx = hyundai_rx_hook, .tx = hyundai_tx_hook, + .fwd = hyundai_fwd_hook, .get_counter = hyundai_get_counter, .get_checksum = hyundai_get_checksum, .compute_checksum = hyundai_compute_checksum, @@ -503,6 +460,7 @@ const safety_hooks hyundai_legacy_hooks = { .init = hyundai_legacy_init, .rx = hyundai_rx_hook, .tx = hyundai_tx_hook, + .fwd = hyundai_fwd_hook, .get_counter = hyundai_get_counter, .get_checksum = hyundai_get_checksum, .compute_checksum = hyundai_compute_checksum, diff --git a/iqdbc_repo/iqdbc/safety/modes/hyundai_canfd.h b/iqdbc_repo/iqdbc/safety/modes/hyundai_canfd.h index 9256cee67..e3a6cbdeb 100644 --- a/iqdbc_repo/iqdbc/safety/modes/hyundai_canfd.h +++ b/iqdbc_repo/iqdbc/safety/modes/hyundai_canfd.h @@ -3,149 +3,550 @@ #include "iqdbc/safety/declarations.h" #include "iqdbc/safety/modes/hyundai_common.h" -#define HYUNDAI_CANFD_CRUISE_BUTTON_TX_MSGS(bus) \ - {0x1CF, bus, 8, .check_relay = false}, /* CRUISE_BUTTON */ \ +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#pragma GCC diagnostic ignored "-Wunused-function" -#define HYUNDAI_CANFD_LKA_STEERING_COMMON_TX_MSGS(a_can, e_can) \ - HYUNDAI_CANFD_CRUISE_BUTTON_TX_MSGS(e_can) \ - {0x50, a_can, 16, .check_relay = (a_can) == 0}, /* LKAS */ \ - {0x2A4, a_can, 24, .check_relay = (a_can) == 0}, /* CAM_0x2A4 */ \ +const TorqueSteeringLimits HYUNDAI_CANFD_STEERING_LIMITS = { + .max_torque = 512, //270, + .max_rt_delta = 112, -#define HYUNDAI_CANFD_LKA_STEERING_ALT_COMMON_TX_MSGS(a_can, e_can) \ - HYUNDAI_CANFD_CRUISE_BUTTON_TX_MSGS(e_can) \ - {0x110, a_can, 32, .check_relay = (a_can) == 0}, /* LKAS_ALT */ \ - {0x362, a_can, 32, .check_relay = (a_can) == 0}, /* CAM_0x362 */ \ + .max_rate_up = 2, + .max_rate_down = 3, + .driver_torque_allowance = 250, + .driver_torque_multiplier = 2, + .type = TorqueDriverLimited, -#define HYUNDAI_CANFD_LFA_STEERING_COMMON_TX_MSGS(e_can) \ - {0x12A, e_can, 16, .check_relay = (e_can) == 0}, /* LFA */ \ - {0x1E0, e_can, 16, .check_relay = (e_can) == 0}, /* LFAHDA_CLUSTER */ \ + // the EPS faults when the steering angle is above a certain threshold for too long. to prevent this, + // we allow setting torque actuation bit to 0 while maintaining the requested torque value for two consecutive frames + .min_valid_request_frames = 89, + .max_invalid_request_frames = 2, + .min_valid_request_rt_interval = 810000, // 810ms; a ~10% buffer on cutting every 90 frames + .has_steer_req_tolerance = true, +}; + +const CanMsg HYUNDAI_CANFD_HDA2_TX_MSGS[] = { + {0x50, 0, 16}, // LKAS + {0x1CF, 1, 8}, // CRUISE_BUTTON + {0x2A4, 0, 24}, // CAM_0x2A4 +}; + +const CanMsg HYUNDAI_CANFD_HDA2_ALT_STEERING_TX_MSGS[] = { + {0x110, 0, 32}, // LKAS_ALT + {0x1CF, 1, 8}, // CRUISE_BUTTON + {0x362, 0, 32}, // CAM_0x362 + {0x1AA, 1, 16}, // CRUISE_ALT_BUTTONS , carrot +}; + +const CanMsg HYUNDAI_CANFD_HDA2_LONG_TX_MSGS[] = { + {0x50, 0, 16}, // LKAS + {0x1CF, 0, 8}, // CRUISE_BUTTON + {0x1CF, 1, 8}, // CRUISE_BUTTON + {0x1CF, 2, 8}, // CRUISE_BUTTON + {0x1AA, 0, 16}, // CRUISE_ALT_BUTTONS , carrot + {0x1AA, 1, 16}, // CRUISE_ALT_BUTTONS , carrot + {0x1AA, 2, 16}, // CRUISE_ALT_BUTTONS , carrot + {0x2A4, 0, 24}, // CAM_0x2A4 + {0x51, 0, 32}, // ADRV_0x51 + {0x730, 1, 8}, // tester present for ADAS ECU disable + {0x12A, 1, 16}, // LFA + {0x160, 1, 16}, // ADRV_0x160 + {0x1E0, 1, 16}, // LFAHDA_CLUSTER + {0x1A0, 1, 32}, // CRUISE_INFO + {0x1EA, 1, 32}, // ADRV_0x1ea + {0x200, 1, 8}, // ADRV_0x200 + {0x345, 1, 8}, // ADRV_0x345 + {0x1DA, 1, 32}, // ADRV_0x1da + + {0x12A, 0, 16}, // LFA + {0x1E0, 0, 16}, // LFAHDA_CLUSTER + {0x160, 0, 16}, // ADRV_0x160 + {0x1EA, 0, 32}, // ADRV_0x1ea + {0x200, 0, 8}, // ADRV_0x200 + {0x1A0, 0, 32}, // CRUISE_INFO + {0x345, 0, 8}, // ADRV_0x345 + {0x1DA, 0, 32}, // ADRV_0x1da + + {0x362, 0, 32}, // CAM_0x362 + {0x362, 1, 32}, // CAM_0x362 + {0x2a4, 1, 24}, // CAM_0x2a4 + + {0x110, 0, 32}, // LKAS_ALT (272) + {0x110, 1, 32}, // LKAS_ALT (272) + + {0x50, 1, 16}, // + {0x51, 1, 32}, // + + {353, 0, 32}, // ADRV_353 + {354, 0, 32}, // CORNER_RADAR_HIGHWAY + {512, 0, 8}, // ADRV_0x200 + {1187, 2, 8}, // 4A3 + {1204, 2, 8}, // 4B4 + + {203, 0, 24}, // CB + {373, 2, 24}, // TCS(0x175) + {506, 2, 32}, // CLUSTER_SPEED_LIMIT + {234, 2, 24}, // MDPS + {687, 2, 8}, // STEER_TOUCH_2AF + + {0x4BE, 2, 8}, // NEW_MSG_4BE (may be corner radar enabler x) + {0x4B9, 2, 8}, // NEW_MSG_4B9 (may be corner radar enabler) +}; + +const CanMsg HYUNDAI_CANFD_HDA1_TX_MSGS[] = { + {0x12A, 0, 16}, // LFA + {0x1A0, 0, 32}, // CRUISE_INFO + {0x1CF, 0, 8}, // CRUISE_BUTTON + {0x1CF, 2, 8}, // CRUISE_BUTTON + {0x1E0, 0, 16}, // LFAHDA_CLUSTER + {0x160, 0, 16}, // ADRV_0x160 + {0x7D0, 0, 8}, // tester present for radar ECU disable + {0x1AA, 2, 16}, // CRUISE_ALT_BUTTONS , carrot + {203, 0, 24}, // CB + {373, 2, 24}, // TCS(0x175) + + {353, 0, 32}, // ADRV_353 + {354, 0, 32}, // CORNER_RADAR_HIGHWAY + {512, 0, 8}, // ADRV_0x200 + {1187, 2, 8}, // 4A3 + {1204, 2, 8}, // 4B4 + {373, 2, 24}, // TCS(0x175) + {234, 2, 24}, // MDPS + {687, 2, 8}, // STEER_TOUCH_2AF + +}; -#define HYUNDAI_CANFD_SCC_CONTROL_COMMON_TX_MSGS(e_can, longitudinal) \ - {0x1A0, e_can, 32, .check_relay = (longitudinal)}, /* SCC_CONTROL */ \ // *** Addresses checked in rx hook *** // EV, ICE, HYBRID: ACCELERATOR (0x35), ACCELERATOR_BRAKE_ALT (0x100), ACCELERATOR_ALT (0x105) -#define HYUNDAI_CANFD_COMMON_RX_CHECKS(pt_bus) \ - {.msg = {{0x35, (pt_bus), 32, 100U, .max_counter = 0xffU, .ignore_quality_flag = true}, \ - {0x100, (pt_bus), 32, 100U, .max_counter = 0xffU, .ignore_quality_flag = true}, \ - {0x105, (pt_bus), 32, 100U, .max_counter = 0xffU, .ignore_quality_flag = true}}}, \ - {.msg = {{0x175, (pt_bus), 24, 50U, .max_counter = 0xffU, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ - {.msg = {{0xa0, (pt_bus), 24, 100U, .max_counter = 0xffU, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ - {.msg = {{0xea, (pt_bus), 24, 100U, .max_counter = 0xffU, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ +#define HYUNDAI_CANFD_COMMON_RX_CHECKS(pt_bus) \ + {.msg = {{0x35, (pt_bus), 32, .max_counter = 0xffU, .frequency = 100U}, \ + {0x100, (pt_bus), 32, .max_counter = 0xffU, .frequency = 100U}, \ + {0x105, (pt_bus), 32, .max_counter = 0xffU, .frequency = 100U}}}, \ + {.msg = {{0x175, (pt_bus), 24, .max_counter = 0xffU, .frequency = 50U}, { 0 }, { 0 }}}, \ + {.msg = {{0xa0, (pt_bus), 24, .max_counter = 0xffU, .frequency = 100U}, { 0 }, { 0 }}}, \ + {.msg = {{0xea, (pt_bus), 24, .max_counter = 0xffU, .frequency = 100U}, { 0 }, { 0 }}}, \ -#define HYUNDAI_CANFD_STD_BUTTONS_RX_CHECKS(pt_bus) \ - HYUNDAI_CANFD_COMMON_RX_CHECKS(pt_bus) \ - {.msg = {{0x1cf, (pt_bus), 8, 50U, .ignore_checksum = true, .max_counter = 0xfU, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ +#define HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(pt_bus) \ + {.msg = {{0x1cf, (pt_bus), 8, .ignore_checksum = true, .max_counter = 0xfU, .frequency = 50U}, { 0 }, { 0 }}}, \ -#define HYUNDAI_CANFD_ALT_BUTTONS_RX_CHECKS(pt_bus) \ - HYUNDAI_CANFD_COMMON_RX_CHECKS(pt_bus) \ - {.msg = {{0x1aa, (pt_bus), 16, 50U, .ignore_checksum = true, .max_counter = 0xffU, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ +#define HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(pt_bus) \ + {.msg = {{0x1aa, (pt_bus), 16, .ignore_checksum = true, .max_counter = 0xffU, .frequency = 50U}, { 0 }, { 0 }}}, \ // SCC_CONTROL (from ADAS unit or camera) -#define HYUNDAI_CANFD_SCC_ADDR_CHECK(scc_bus) \ - {.msg = {{0x1a0, (scc_bus), 32, 50U, .max_counter = 0xffU, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \ +#define HYUNDAI_CANFD_SCC_ADDR_CHECK(scc_bus) \ + {.msg = {{0x1a0, (scc_bus), 32, .max_counter = 0xffU, .frequency = 50U}, { 0 }, { 0 }}}, \ -static bool hyundai_canfd_alt_buttons = false; -static bool hyundai_canfd_lka_steering_alt = false; +//static bool hyundai_canfd_alt_buttons = false; +//static bool hyundai_canfd_hda2_alt_steering = false; -static unsigned int hyundai_canfd_get_lka_addr(void) { - return hyundai_canfd_lka_steering_alt ? 0x110U : 0x50U; +// *** Non-HDA2 checks *** +// Camera sends SCC messages on HDA1. +// Both button messages exist on some platforms, so we ensure we track the correct one using flag +RxCheck hyundai_canfd_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(2) +}; +RxCheck hyundai_canfd_alt_buttons_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(2) +}; + +// Longitudinal checks for HDA1 +RxCheck hyundai_canfd_long_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) +}; +RxCheck hyundai_canfd_long_alt_buttons_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(0) +}; + +// Radar sends SCC messages on these cars instead of camera +RxCheck hyundai_canfd_radar_scc_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(0) +}; +RxCheck hyundai_canfd_radar_scc_alt_buttons_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(0) +}; + + +// *** HDA2 checks *** +// E-CAN is on bus 1, ADAS unit sends SCC messages on HDA2. +// Does not use the alt buttons message +RxCheck hyundai_canfd_hda2_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(1) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(1) // TODO: carrot: canival no 0x1cf + HYUNDAI_CANFD_SCC_ADDR_CHECK(1) +}; +RxCheck hyundai_canfd_hda2_rx_checks_scc2[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) // TODO: carrot: canival no 0x1cf + HYUNDAI_CANFD_SCC_ADDR_CHECK(2) +}; +RxCheck hyundai_canfd_hda2_alt_buttons_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(1) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(1) + HYUNDAI_CANFD_SCC_ADDR_CHECK(1) +}; +RxCheck hyundai_canfd_hda2_alt_buttons_rx_checks_scc2[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(2) +}; +RxCheck hyundai_canfd_hda2_long_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(1) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(1) // TODO: carrot: canival no 0x1cf +}; +RxCheck hyundai_canfd_hda2_long_rx_checks_scc2[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) +}; +RxCheck hyundai_canfd_hda2_long_alt_buttons_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(1) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(1) +}; +RxCheck hyundai_canfd_hda2_long_alt_buttons_rx_checks_scc2[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(0) +}; + + +const int HYUNDAI_PARAM_CANFD_ALT_BUTTONS = 32; +const int HYUNDAI_PARAM_CANFD_HDA2_ALT_STEERING = 128; +bool hyundai_canfd_alt_buttons = false; +bool hyundai_canfd_hda2_alt_steering = false; +bool hyundai_canfd_buffered_fwd = false; + +int hyundai_canfd_hda2_get_lkas_addr(void) { + return hyundai_canfd_hda2_alt_steering ? 0x110 : 0x50; } -static uint8_t hyundai_canfd_get_counter(const CANPacket_t *msg) { +static uint8_t hyundai_canfd_get_counter(const CANPacket_t* to_push) { uint8_t ret = 0; - if (GET_LEN(msg) == 8U) { - ret = msg->data[1] >> 4; - } else { - ret = msg->data[2]; + if (GET_LEN(to_push) == 8U) { + ret = GET_BYTE(to_push, 1) >> 4; + } + else { + ret = GET_BYTE(to_push, 2); } return ret; } -static uint32_t hyundai_canfd_get_checksum(const CANPacket_t *msg) { - uint32_t chksum = msg->data[0] | (msg->data[1] << 8); +static uint32_t hyundai_canfd_get_checksum(const CANPacket_t* to_push) { + uint32_t chksum = GET_BYTE(to_push, 0) | (GET_BYTE(to_push, 1) << 8); return chksum; } -static void hyundai_canfd_rx_hook(const CANPacket_t *msg) { - const unsigned pt_bus = hyundai_canfd_lka_steering ? 1U : 0U; - const unsigned int scc_bus = hyundai_camera_scc ? 2U : pt_bus; +typedef struct { + int addr; + int bus; // forwarding block ��� tx bus: 0 or 2 + int hz; + uint32_t timeout_us; + uint32_t last_tx_us; +} CanfdTxState; - if (msg->bus == pt_bus) { +// forwarding block��: bus 0,2�� ��� +CanfdTxState canfd_tx_states[] = { + {0x50, 0, 100, 0U, 0U}, // 80: LKAS + {0x51, 0, 100, 0U, 0U}, // 81: ADRV_0x51 + {0x110, 0, 100, 0U, 0U}, // 272: LKAS_ALT + {0x12A, 0, 100, 0U, 0U}, // 298: LFA + {0x160, 0, 50, 0U, 0U}, // 352: ADRV_0x160 + {0x161, 0, 20, 0U, 0U}, // 353: ADRV_0x161 + {0x162, 0, 20, 0U, 0U}, // 354: CCNC_0x162 + {0x1A0, 0, 50, 0U, 0U}, // 416: SCC_CONTROL + {0x1DA, 0, 1, 0U, 0U}, // 474: ADRV_0x1da + {0x1E0, 0, 20, 0U, 0U}, // 480: LFAHDA_CLUSTER + {0x1EA, 0, 20, 0U, 0U}, // 490: ADRV_0x1ea + {0x200, 0, 20, 0U, 0U}, // 512: ADRV_0x200 + {0x2A4, 0, 20, 0U, 0U}, // 676: CAM_0x2a4 + {0x345, 0, 5, 0U, 0U}, // 837: ADRV_0x345 + {0x362, 0, 10, 0U, 0U}, // 866: CAM_0x362 + {0x0CB, 0, 100, 0U, 0U}, // 203: LFA_ALT + + {0x175, 2, 50, 0U, 0U}, // 373: TCS + {0x1AA, 2, 50, 0U, 0U}, // 426: CRUISE_ALT_BUTTONS + {0x1CF, 2, 50, 0U, 0U}, // 463: CRUISE_BUTTON + {0x1FA, 2, 10, 0U, 0U}, // 506: CLUSTER_SPEED_LIMIT + {0x0EA, 2, 100, 0U, 0U}, // 234: MDPS + {0x2AF, 2, 10, 0U, 0U}, // 687: STEER_TOUCH_2AF + {0x4A3, 2, 5, 0U, 0U}, // 1187: HDA_INFO_4A3 + {0x4B4, 2, 10, 0U, 0U}, // 1204: NEW_MSG_4B4 + {0x4BE, 2, 10, 0U, 0U}, // 1214: NEW_MSG_4BE + {0x4B9, 2, 10, 0U, 0U}, // 1209: NEW_MSG_4B9 + + {0, 0, 0, 0U, 0U}, +}; + +static CanfdTxState* find_canfd_tx_state(int bus, int addr) { + for (int i = 0; canfd_tx_states[i].addr > 0; i++) { + if ((canfd_tx_states[i].addr == addr) && (canfd_tx_states[i].bus == bus)) { + return &canfd_tx_states[i]; + } + } + return NULL; +} + + +static void hyundai_canfd_set_counter(CANPacket_t* to_push, uint8_t counter) { + if (GET_LEN(to_push) == 8U) { + to_push->data[1] = (to_push->data[1] & 0x0FU) | ((counter & 0x0FU) << 4); + } + else { + to_push->data[2] = counter; + } +} + +static void hyundai_canfd_set_checksum(CANPacket_t* to_push, uint16_t checksum) { + to_push->data[0] = (uint8_t)(checksum & 0xFFU); + to_push->data[1] = (uint8_t)((checksum >> 8U) & 0xFFU); +} + +static void hyundai_canfd_update_checksum(CANPacket_t* to_push) { + to_push->data[0] = 0U; + to_push->data[1] = 0U; + uint32_t checksum = hyundai_common_canfd_compute_checksum(to_push); + hyundai_canfd_set_checksum(to_push, (uint16_t)checksum); +} +static void canfd_apply_counter_and_update_checksum(CANPacket_t* dst, uint8_t counter) { + hyundai_canfd_set_counter(dst, counter); + hyundai_canfd_update_checksum(dst); +} +static void canfd_record_tx_time(int bus, int addr, bool tx) { + CanfdTxState* st = find_canfd_tx_state(bus, addr); + if (st != NULL) { + st->last_tx_us = tx ? microsecond_timer_get() : 0U; + } +} + +static bool canfd_should_block_fwd(int tx_bus, int addr, uint32_t now) { + CanfdTxState* st = find_canfd_tx_state(tx_bus, addr); + if (st == NULL) { + return false; + } + return (now - st->last_tx_us) < st->timeout_us; +} + +#define CANFD_BFWD_MAX_QUEUE 2 +#define CANFD_BFWD_REUSE_MAX 2 + +typedef struct { + int addr; + int dst_bus; + bool enabled; + + bool started; + uint8_t head; + uint8_t tail; + uint8_t count; + + uint8_t reuse_left; + bool has_last_pkt; + CANPacket_t last_pkt; + + CANPacket_t q[CANFD_BFWD_MAX_QUEUE]; +} CanfdBufferedFwd; + +CanfdBufferedFwd canfd_bfwd[] = { + {.addr = 0x1A0, .dst_bus = 0, .enabled = true }, // SCC_CONTROL + {.addr = 0x12A, .dst_bus = 0, .enabled = true }, // LFA + {.addr = 0x0CB, .dst_bus = 0, .enabled = true }, // LFA_ALT + {.addr = 0x0EA, .dst_bus = 2, .enabled = true }, // MDPS + {.addr = 0x1AA, .dst_bus = 2, .enabled = true }, // CRUISE_ALT_BUTTONS + // {.addr = 0x1CF, .dst_bus = 2, .enabled = true }, // CRUISE_BUTTON + {.addr = 0x175, .dst_bus = 2, .enabled = true }, // TCS + { 0 }, +}; + +static void canfd_copy_packet(CANPacket_t* dst, const CANPacket_t* src) { + dst->fd = src->fd; + dst->returned = 0U; + dst->rejected = 0U; + dst->extended = src->extended; + dst->addr = src->addr; + dst->bus = src->bus; + dst->data_len_code = src->data_len_code; + for (uint8_t i = 0U; i < GET_LEN(src); i++) { + dst->data[i] = src->data[i]; + } +} +static CanfdBufferedFwd* canfd_bfwd_find(int addr, int dst_bus) { + for (int i = 0; canfd_bfwd[i].addr > 0; i++) { + if (canfd_bfwd[i].enabled && + (canfd_bfwd[i].addr == addr) && + (canfd_bfwd[i].dst_bus == dst_bus)) { + return &canfd_bfwd[i]; + } + } + return NULL; +} + +static void canfd_bfwd_reset(CanfdBufferedFwd* st) { + st->started = false; + st->head = 0U; + st->tail = 0U; + st->count = 0U; + st->reuse_left = 0U; + st->has_last_pkt = false; + st->last_pkt = (CANPacket_t){0}; +} +static void canfd_bfwd_push(CanfdBufferedFwd* st, const CANPacket_t* pkt) { + if ((st == NULL) || !st->enabled) return; + if (GET_BUS(pkt) != st->dst_bus) return; + + // queue�� �̹� 2���� �̹� �� packet�� ���� + if (st->count >= CANFD_BFWD_MAX_QUEUE) { + return; + } + + canfd_copy_packet(&st->q[st->tail], pkt); + st->tail = (st->tail + 1U) % CANFD_BFWD_MAX_QUEUE; + st->count++; + st->started = true; +} + +static bool canfd_bfwd_pop(CanfdBufferedFwd* st, CANPacket_t* pkt) { + if ((st == NULL) || !st->enabled) { + return false; + } + + if (!st->started || (st->count == 0U)) { + return false; + } + + canfd_copy_packet(pkt, &st->q[st->head]); + st->head = (st->head + 1U) % CANFD_BFWD_MAX_QUEUE; + st->count--; + + // ������ ���� packet ���� + canfd_copy_packet(&st->last_pkt, pkt); + st->has_last_pkt = true; + st->reuse_left = CANFD_BFWD_REUSE_MAX; + + if (st->count == 0U) { + st->started = false; + } + + return true; +} +static bool canfd_bfwd_reuse_last(CanfdBufferedFwd* st, CANPacket_t* pkt) { + if ((st == NULL) || !st->enabled) { + return false; + } + + if (!st->has_last_pkt || (st->reuse_left == 0U)) { + return false; + } + + canfd_copy_packet(pkt, &st->last_pkt); + st->reuse_left--; + + return true; +} + + + + +static void hyundai_canfd_rx_hook(const CANPacket_t *to_push) { + int bus = GET_BUS(to_push); + int addr = GET_ADDR(to_push); + + int pt_bus = hyundai_canfd_hda2 ? 1 : 0; + const int scc_bus = hyundai_camera_scc ? 2 : pt_bus; + + if (hyundai_camera_scc) pt_bus = 0; + + if (bus == pt_bus) { // driver torque - if (msg->addr == 0xeaU) { - int torque_driver_new = ((msg->data[11] & 0x1fU) << 8U) | msg->data[10]; + if (addr == 0xea) { + int torque_driver_new = ((GET_BYTE(to_push, 11) & 0x1fU) << 8U) | GET_BYTE(to_push, 10); torque_driver_new -= 4095; update_sample(&torque_driver, torque_driver_new); } // cruise buttons - const unsigned int button_addr = hyundai_canfd_alt_buttons ? 0x1aaU : 0x1cfU; - if (msg->addr == button_addr) { + const int button_addr = hyundai_canfd_alt_buttons ? 0x1aa : 0x1cf; + if (addr == button_addr) { bool main_button = false; int cruise_button = 0; - if (msg->addr == 0x1cfU) { - cruise_button = msg->data[2] & 0x7U; - main_button = GET_BIT(msg, 19U); - aol_button_press = GET_BIT(msg, 23U) ? AOL_BUTTON_PRESSED : AOL_BUTTON_NOT_PRESSED; + if (addr == 0x1cf) { + cruise_button = GET_BYTE(to_push, 2) & 0x7U; + main_button = GET_BIT(to_push, 19U); } else { - cruise_button = (msg->data[4] >> 4) & 0x7U; - main_button = GET_BIT(msg, 34U); - aol_button_press = GET_BIT(msg, 39U) ? AOL_BUTTON_PRESSED : AOL_BUTTON_NOT_PRESSED; + cruise_button = (GET_BYTE(to_push, 4) >> 4) & 0x7U; + main_button = GET_BIT(to_push, 34U); } hyundai_common_cruise_buttons_check(cruise_button, main_button); } // gas press, different for EV, hybrid, and ICE models - if ((msg->addr == 0x35U) && hyundai_ev_gas_signal) { - gas_pressed = msg->data[5] != 0U; - } else if ((msg->addr == 0x105U) && hyundai_hybrid_gas_signal) { - gas_pressed = GET_BIT(msg, 103U) || (msg->data[13] != 0U) || GET_BIT(msg, 112U); - } else if ((msg->addr == 0x100U) && !hyundai_ev_gas_signal && !hyundai_hybrid_gas_signal) { - gas_pressed = GET_BIT(msg, 176U); + if ((addr == 0x35) && hyundai_ev_gas_signal) { + gas_pressed = GET_BYTE(to_push, 5) != 0U; + } else if ((addr == 0x105) && hyundai_hybrid_gas_signal) { + gas_pressed = GET_BIT(to_push, 103U) || (GET_BYTE(to_push, 13) != 0U) || GET_BIT(to_push, 112U); + } else if ((addr == 0x100) && !hyundai_ev_gas_signal && !hyundai_hybrid_gas_signal) { + gas_pressed = GET_BIT(to_push, 176U); } else { } // brake press - if (msg->addr == 0x175U) { - brake_pressed = GET_BIT(msg, 81U); + if (addr == 0x175) { + brake_pressed = GET_BIT(to_push, 81U); } // vehicle moving - if (msg->addr == 0xa0U) { - uint32_t fl = (GET_BYTES(msg, 8, 2)) & 0x3FFFU; - uint32_t fr = (GET_BYTES(msg, 10, 2)) & 0x3FFFU; - uint32_t rl = (GET_BYTES(msg, 12, 2)) & 0x3FFFU; - uint32_t rr = (GET_BYTES(msg, 14, 2)) & 0x3FFFU; + if (addr == 0xa0) { + uint32_t fl = (GET_BYTES(to_push, 8, 2)) & 0x3FFFU; + uint32_t fr = (GET_BYTES(to_push, 10, 2)) & 0x3FFFU; + uint32_t rl = (GET_BYTES(to_push, 12, 2)) & 0x3FFFU; + uint32_t rr = (GET_BYTES(to_push, 14, 2)) & 0x3FFFU; vehicle_moving = (fl > HYUNDAI_STANDSTILL_THRSLD) || (fr > HYUNDAI_STANDSTILL_THRSLD) || (rl > HYUNDAI_STANDSTILL_THRSLD) || (rr > HYUNDAI_STANDSTILL_THRSLD); // average of all 4 wheel speeds. Conversion: raw * 0.03125 / 3.6 = m/s - UPDATE_VEHICLE_SPEED((fr + rr + rl + fl) / 4.0 * 0.03125 * KPH_TO_MS); + UPDATE_VEHICLE_SPEED((fr + rr + rl + fl) / 4.0 * 0.03125 / 3.6); } } - if (msg->bus == scc_bus) { + if (bus == scc_bus) { // cruise state - if ((msg->addr == 0x1a0U) && !hyundai_longitudinal) { + if ((addr == 0x1a0) && !hyundai_longitudinal) { // 1=enabled, 2=driver override - int cruise_status = ((msg->data[8] >> 4) & 0x7U); + int cruise_status = ((GET_BYTE(to_push, 8) >> 4) & 0x7U); bool cruise_engaged = (cruise_status == 1) || (cruise_status == 2); hyundai_common_cruise_state_check(cruise_engaged); - acc_main_on = GET_BIT(msg, 66U); } } - hyundai_common_reset_acc_main_on_mismatches(); + const int steer_addr = hyundai_canfd_hda2 ? hyundai_canfd_hda2_get_lkas_addr() : 0x12a; + bool stock_ecu_detected = (addr == steer_addr) && (bus == 0); + if (hyundai_longitudinal) { + // on HDA2, ensure ADRV ECU is still knocked out + // on others, ensure accel msg is blocked from camera + const int stock_scc_bus = hyundai_canfd_hda2 ? 1 : 0; + stock_ecu_detected = stock_ecu_detected || ((addr == 0x1a0) && (bus == stock_scc_bus)); + } + generic_rx_checks(); + stock_ecu_check(stock_ecu_detected); + } -static bool hyundai_canfd_tx_hook(const CANPacket_t *msg) { +static bool hyundai_canfd_tx_hook(const CANPacket_t *to_send_const) { + CANPacket_t* to_send = (CANPacket_t*)to_send_const; + const TorqueSteeringLimits HYUNDAI_CANFD_STEERING_LIMITS = { - .max_torque = 270, + .max_torque = 512, .max_rt_delta = 112, - .max_rate_up = 2, - .max_rate_down = 3, + + .max_rate_up = 10, + .max_rate_down = 10, .driver_torque_allowance = 250, .driver_torque_multiplier = 2, .type = TorqueDriverLimited, @@ -159,12 +560,14 @@ static bool hyundai_canfd_tx_hook(const CANPacket_t *msg) { }; bool tx = true; + int addr = GET_ADDR(to_send); + bool violation = false; // steering - const unsigned int steer_addr = (hyundai_canfd_lka_steering && !hyundai_longitudinal) ? hyundai_canfd_get_lka_addr() : 0x12aU; - if (msg->addr == steer_addr) { - int desired_torque = (((msg->data[6] & 0xFU) << 7U) | (msg->data[5] >> 1U)) - 1024U; - bool steer_req = GET_BIT(msg, 52U); + const int steer_addr = (hyundai_canfd_hda2 && !hyundai_longitudinal) ? hyundai_canfd_hda2_get_lkas_addr() : 0x12a; + if (addr == steer_addr) { + int desired_torque = (((GET_BYTE(to_send, 6) & 0xFU) << 7U) | (GET_BYTE(to_send, 5) >> 1U)) - 1024U; + bool steer_req = GET_BIT(to_send, 52U); if (steer_torque_cmd_checks(desired_torque, steer_req, HYUNDAI_CANFD_STEERING_LIMITS)) { tx = false; @@ -172,209 +575,166 @@ static bool hyundai_canfd_tx_hook(const CANPacket_t *msg) { } // cruise buttons check - if (msg->addr == 0x1cfU) { - int button = msg->data[2] & 0x7U; + if (addr == 0x1cf) { + int button = GET_BYTE(to_send, 2) & 0x7U; bool is_cancel = (button == HYUNDAI_BTN_CANCEL); bool is_resume = (button == HYUNDAI_BTN_RESUME); - bool is_set = (button == HYUNDAI_BTN_SET); - bool allowed = (is_cancel && cruise_engaged_prev) || ((is_resume || is_set) && controls_allowed); + bool allowed = (is_cancel && (cruise_engaged_prev || controls_allowed)) || (is_resume && controls_allowed); if (!allowed) { tx = false; } } - // UDS: only tester present ("\x02\x3E\x80\x00\x00\x00\x00\x00") allowed on diagnostics address - if (((msg->addr == 0x730U) && hyundai_canfd_lka_steering) || ((msg->addr == 0x7D0U) && !hyundai_camera_scc)) { - if ((GET_BYTES(msg, 0, 4) != 0x00803E02U) || (GET_BYTES(msg, 4, 4) != 0x0U)) { + if ((addr == 0x730) && hyundai_canfd_hda2) { + if ((GET_BYTES(to_send, 0, 4) != 0x00803E02U) || (GET_BYTES(to_send, 4, 4) != 0x0U)) { tx = false; } } // ACCEL: safety check - if (msg->addr == 0x1a0U) { - int desired_accel_raw = (((msg->data[17] & 0x7U) << 8) | msg->data[16]) - 1023U; - int desired_accel_val = ((msg->data[18] << 4) | (msg->data[17] >> 4)) - 1023U; + if (addr == 0x1a0) { + int desired_accel_raw = (((GET_BYTE(to_send, 17) & 0x7U) << 8) | GET_BYTE(to_send, 16)) - 1023U; + int desired_accel_val = ((GET_BYTE(to_send, 18) << 4) | (GET_BYTE(to_send, 17) >> 4)) - 1023U; - bool violation = false; if (hyundai_longitudinal) { violation |= longitudinal_accel_checks(desired_accel_raw, HYUNDAI_LONG_LIMITS); violation |= longitudinal_accel_checks(desired_accel_val, HYUNDAI_LONG_LIMITS); - } else { + } + else { // only used to cancel on here - const int acc_mode = (msg->data[8] >> 4) & 0x7U; + const int acc_mode = (GET_BYTE(to_send, 8) >> 4) & 0x7U; if (acc_mode != 4) { violation = true; } - if ((desired_accel_raw != 0) || (desired_accel_val != 0)) { violation = true; } } - - if (violation) { - tx = false; - } - - acc_main_on_tx = GET_BIT(msg, 66U); - hyundai_common_acc_main_on_sync(); } + if (violation) { + tx = false; + } + else if (hyundai_canfd_buffered_fwd) { + CanfdBufferedFwd* bfwd = canfd_bfwd_find(addr, GET_BUS(to_send)); + if (bfwd != NULL) { + canfd_bfwd_push(bfwd, to_send); + //tx = false; + return true; + } + } + + canfd_record_tx_time(GET_BUS(to_send), addr, tx); + return tx; } +static bool hyundai_canfd_fwd_hook(int bus_num, int addr) { + uint32_t now = microsecond_timer_get(); + if (bus_num == 0) { + if (canfd_should_block_fwd(2, addr, now)) { + return true; + } + if (addr == 0x4B9) { + return true; + } + return false; + } + return (bus_num != 2) || canfd_should_block_fwd(0, addr, now); +} + static safety_config hyundai_canfd_init(uint16_t param) { - const uint16_t HYUNDAI_PARAM_CANFD_LKA_STEERING_ALT = 128; - const uint16_t HYUNDAI_PARAM_CANFD_ALT_BUTTONS = 32; - static const CanMsg HYUNDAI_CANFD_LKA_STEERING_TX_MSGS[] = { - HYUNDAI_CANFD_LKA_STEERING_COMMON_TX_MSGS(0, 1) - }; + for (int i = 0; canfd_tx_states[i].addr > 0; i++) { + canfd_tx_states[i].timeout_us = (uint32_t)(1000000.0 / canfd_tx_states[i].hz) + 20000U; + canfd_tx_states[i].last_tx_us = 0U; + } - static const CanMsg HYUNDAI_CANFD_LKA_STEERING_ALT_TX_MSGS[] = { - HYUNDAI_CANFD_LKA_STEERING_ALT_COMMON_TX_MSGS(0, 1) - }; - - static const CanMsg HYUNDAI_CANFD_LKA_STEERING_LONG_TX_MSGS[] = { - HYUNDAI_CANFD_LKA_STEERING_COMMON_TX_MSGS(0, 1) - HYUNDAI_CANFD_LFA_STEERING_COMMON_TX_MSGS(1) - HYUNDAI_CANFD_SCC_CONTROL_COMMON_TX_MSGS(1, true) - {0x51, 0, 32, .check_relay = false}, // ADRV_0x51 - {0x730, 1, 8, .check_relay = false}, // tester present for ADAS ECU disable - {0x160, 1, 16, .check_relay = false}, // ADRV_0x160 - {0x1EA, 1, 32, .check_relay = false}, // ADRV_0x1ea - {0x200, 1, 8, .check_relay = false}, // ADRV_0x200 - {0x345, 1, 8, .check_relay = false}, // ADRV_0x345 - {0x1DA, 1, 32, .check_relay = false}, // ADRV_0x1da - }; - - static const CanMsg HYUNDAI_CANFD_LFA_STEERING_TX_MSGS[] = { - HYUNDAI_CANFD_CRUISE_BUTTON_TX_MSGS(2) - HYUNDAI_CANFD_LFA_STEERING_COMMON_TX_MSGS(0) - HYUNDAI_CANFD_SCC_CONTROL_COMMON_TX_MSGS(0, false) - }; - - // ADRV_0x160 is checked for radar liveness - static const CanMsg HYUNDAI_CANFD_LFA_STEERING_LONG_TX_MSGS[] = { - HYUNDAI_CANFD_CRUISE_BUTTON_TX_MSGS(2) - HYUNDAI_CANFD_LFA_STEERING_COMMON_TX_MSGS(0) - HYUNDAI_CANFD_SCC_CONTROL_COMMON_TX_MSGS(0, true) - {0x160, 0, 16, .check_relay = true}, // ADRV_0x160 - {0x7D0, 0, 8, .check_relay = false}, // tester present for radar ECU disable - }; - - // ADRV_0x160 is checked for relay malfunction -#define HYUNDAI_CANFD_LFA_STEERING_CAMERA_SCC_TX_MSGS(longitudinal) \ - HYUNDAI_CANFD_CRUISE_BUTTON_TX_MSGS(2) \ - HYUNDAI_CANFD_LFA_STEERING_COMMON_TX_MSGS(0) \ - HYUNDAI_CANFD_SCC_CONTROL_COMMON_TX_MSGS(0, (longitudinal)) \ - {0x160, 0, 16, .check_relay = (longitudinal)}, /* ADRV_0x160 */ \ + for (int i = 0; canfd_bfwd[i].addr > 0; i++) { + canfd_bfwd_reset(&canfd_bfwd[i]); + } hyundai_common_init(param); gen_crc_lookup_table_16(0x1021, hyundai_canfd_crc_lut); hyundai_canfd_alt_buttons = GET_FLAG(param, HYUNDAI_PARAM_CANFD_ALT_BUTTONS); - hyundai_canfd_lka_steering_alt = GET_FLAG(param, HYUNDAI_PARAM_CANFD_LKA_STEERING_ALT); + hyundai_canfd_hda2_alt_steering = GET_FLAG(param, HYUNDAI_PARAM_CANFD_HDA2_ALT_STEERING); + hyundai_canfd_buffered_fwd = hyundai_camera_scc; + // no long for radar-SCC HDA1 yet + //if (!hyundai_canfd_hda2 && !hyundai_camera_scc) { + // hyundai_longitudinal = false; + //} safety_config ret; if (hyundai_longitudinal) { - if (hyundai_canfd_lka_steering) { - static RxCheck hyundai_canfd_lka_steering_long_rx_checks[] = { - HYUNDAI_CANFD_STD_BUTTONS_RX_CHECKS(1) - }; - - ret = BUILD_SAFETY_CFG(hyundai_canfd_lka_steering_long_rx_checks, HYUNDAI_CANFD_LKA_STEERING_LONG_TX_MSGS); - + if (hyundai_canfd_hda2) { + if (hyundai_canfd_alt_buttons) { // carrot : for CANIVAL 4TH HDA2 + if (hyundai_camera_scc) ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_alt_buttons_rx_checks_scc2, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + else ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + } + else { + if (hyundai_camera_scc) ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_rx_checks_scc2, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + else ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_rx_checks, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + } } else { - // Longitudinal checks for LFA steering - static RxCheck hyundai_canfd_long_rx_checks[] = { - HYUNDAI_CANFD_STD_BUTTONS_RX_CHECKS(0) - }; - - static RxCheck hyundai_canfd_alt_buttons_long_rx_checks[] = { - HYUNDAI_CANFD_ALT_BUTTONS_RX_CHECKS(0) - }; - - static CanMsg hyundai_canfd_lfa_steering_camera_scc_tx_msgs[] = { - HYUNDAI_CANFD_LFA_STEERING_CAMERA_SCC_TX_MSGS(true) - }; - - if (hyundai_canfd_alt_buttons) { - SET_RX_CHECKS(hyundai_canfd_alt_buttons_long_rx_checks, ret); - } else { - SET_RX_CHECKS(hyundai_canfd_long_rx_checks, ret); - } - - if (hyundai_camera_scc) { - SET_TX_MSGS(hyundai_canfd_lfa_steering_camera_scc_tx_msgs, ret); - } else { - SET_TX_MSGS(HYUNDAI_CANFD_LFA_STEERING_LONG_TX_MSGS, ret); - } + ret = hyundai_canfd_alt_buttons ? BUILD_SAFETY_CFG(hyundai_canfd_long_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_long_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS); } - } else { - if (hyundai_canfd_lka_steering) { - // *** LKA steering checks *** - // E-CAN is on bus 1, SCC messages are sent on cars with ADRV ECU. - // Does not use the alt buttons message - static RxCheck hyundai_canfd_lka_steering_rx_checks[] = { - HYUNDAI_CANFD_STD_BUTTONS_RX_CHECKS(1) - HYUNDAI_CANFD_SCC_ADDR_CHECK(1) + if (hyundai_canfd_hda2 && hyundai_camera_scc) { + if (hyundai_canfd_alt_buttons) { // carrot : for CANIVAL 4TH HDA2 + ret = hyundai_canfd_hda2_alt_steering ? BUILD_SAFETY_CFG(hyundai_canfd_hda2_alt_buttons_rx_checks_scc2, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_hda2_alt_buttons_rx_checks_scc2, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + } + else { + ret = hyundai_canfd_hda2_alt_steering ? BUILD_SAFETY_CFG(hyundai_canfd_hda2_rx_checks_scc2, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_hda2_rx_checks_scc2, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + } + }else if (hyundai_canfd_hda2) { + if (hyundai_canfd_alt_buttons) { // carrot : for CANIVAL 4TH HDA2 + ret = hyundai_canfd_hda2_alt_steering ? BUILD_SAFETY_CFG(hyundai_canfd_hda2_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_hda2_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + } + else { + ret = hyundai_canfd_hda2_alt_steering ? BUILD_SAFETY_CFG(hyundai_canfd_hda2_rx_checks, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_hda2_rx_checks, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + } + } else if (!hyundai_camera_scc) { + static RxCheck hyundai_canfd_radar_scc_alt_buttons_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(0) }; - SET_RX_CHECKS(hyundai_canfd_lka_steering_rx_checks, ret); - if (hyundai_canfd_lka_steering_alt) { - SET_TX_MSGS(HYUNDAI_CANFD_LKA_STEERING_ALT_TX_MSGS, ret); - } else { - SET_TX_MSGS(HYUNDAI_CANFD_LKA_STEERING_TX_MSGS, ret); - } - - } else if (!hyundai_camera_scc) { // Radar sends SCC messages on these cars instead of camera static RxCheck hyundai_canfd_radar_scc_rx_checks[] = { - HYUNDAI_CANFD_STD_BUTTONS_RX_CHECKS(0) + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) HYUNDAI_CANFD_SCC_ADDR_CHECK(0) }; - static RxCheck hyundai_canfd_alt_buttons_radar_scc_rx_checks[] = { - HYUNDAI_CANFD_ALT_BUTTONS_RX_CHECKS(0) - HYUNDAI_CANFD_SCC_ADDR_CHECK(0) - }; - - SET_TX_MSGS(HYUNDAI_CANFD_LFA_STEERING_TX_MSGS, ret); - - if (hyundai_canfd_alt_buttons) { - SET_RX_CHECKS(hyundai_canfd_alt_buttons_radar_scc_rx_checks, ret); - } else { - SET_RX_CHECKS(hyundai_canfd_radar_scc_rx_checks, ret); - } - + ret = hyundai_canfd_alt_buttons ? BUILD_SAFETY_CFG(hyundai_canfd_radar_scc_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_radar_scc_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS); } else { - // *** LFA steering checks *** - // Camera sends SCC messages on LFA steering cars. + // *** Non-HDA2 checks *** + static RxCheck hyundai_canfd_alt_buttons_rx_checks[] = { + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_ALT_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_SCC_ADDR_CHECK(2) + }; + + // Camera sends SCC messages on HDA1. // Both button messages exist on some platforms, so we ensure we track the correct one using flag static RxCheck hyundai_canfd_rx_checks[] = { - HYUNDAI_CANFD_STD_BUTTONS_RX_CHECKS(0) + HYUNDAI_CANFD_COMMON_RX_CHECKS(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) HYUNDAI_CANFD_SCC_ADDR_CHECK(2) }; - static RxCheck hyundai_canfd_alt_buttons_rx_checks[] = { - HYUNDAI_CANFD_ALT_BUTTONS_RX_CHECKS(0) - HYUNDAI_CANFD_SCC_ADDR_CHECK(2) - }; - - static CanMsg hyundai_canfd_lfa_steering_camera_scc_tx_msgs[] = { - HYUNDAI_CANFD_LFA_STEERING_CAMERA_SCC_TX_MSGS(false) - }; - - SET_TX_MSGS(hyundai_canfd_lfa_steering_camera_scc_tx_msgs, ret); - - if (hyundai_canfd_alt_buttons) { - SET_RX_CHECKS(hyundai_canfd_alt_buttons_rx_checks, ret); - } else { - SET_RX_CHECKS(hyundai_canfd_rx_checks, ret); - } + ret = hyundai_canfd_alt_buttons ? BUILD_SAFETY_CFG(hyundai_canfd_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS) : \ + BUILD_SAFETY_CFG(hyundai_canfd_rx_checks, HYUNDAI_CANFD_HDA1_TX_MSGS); } } @@ -385,6 +745,7 @@ const safety_hooks hyundai_canfd_hooks = { .init = hyundai_canfd_init, .rx = hyundai_canfd_rx_hook, .tx = hyundai_canfd_tx_hook, + .fwd = hyundai_canfd_fwd_hook, .get_counter = hyundai_canfd_get_counter, .get_checksum = hyundai_canfd_get_checksum, .compute_checksum = hyundai_common_canfd_compute_checksum, diff --git a/iqdbc_repo/iqdbc/safety/modes/hyundai_common.h b/iqdbc_repo/iqdbc/safety/modes/hyundai_common.h index 8d16f08bf..2cbb2c843 100644 --- a/iqdbc_repo/iqdbc/safety/modes/hyundai_common.h +++ b/iqdbc_repo/iqdbc/safety/modes/hyundai_common.h @@ -2,11 +2,20 @@ #include "iqdbc/safety/declarations.h" +#define GET_ADDR(msg) ((msg)->addr) +#define GET_BUS(msg) ((msg)->bus) +#define GET_BYTE(msg, b) ((msg)->data[(b)]) + +static int cruise_main_prev = 0; + +static void generic_rx_checks(void); +static void stock_ecu_check(bool stock_ecu_detected); + extern uint16_t hyundai_canfd_crc_lut[256]; uint16_t hyundai_canfd_crc_lut[256]; static const uint8_t HYUNDAI_PREV_BUTTON_SAMPLES = 8; // roughly 160 ms - + // extern const uint32_t HYUNDAI_STANDSTILL_THRSLD; const uint32_t HYUNDAI_STANDSTILL_THRSLD = 12; // 0.375 kph @@ -17,13 +26,6 @@ enum { HYUNDAI_BTN_CANCEL = 4, }; -enum { - HYUNDAI_PARAM_IQ_ESCC = 16, - HYUNDAI_PARAM_IQ_MAIN_BTN_LONG_TOGGLE = 32, - HYUNDAI_PARAM_IQ_HAS_LDA_BUTTON = 64, - HYUNDAI_PARAM_IQ_NON_SCC = 128, -}; - // common state extern bool hyundai_ev_gas_signal; bool hyundai_ev_gas_signal = false; @@ -37,8 +39,8 @@ bool hyundai_longitudinal = false; extern bool hyundai_camera_scc; bool hyundai_camera_scc = false; -extern bool hyundai_canfd_lka_steering; -bool hyundai_canfd_lka_steering = false; +extern bool hyundai_canfd_hda2; +bool hyundai_canfd_hda2 = false; extern bool hyundai_alt_limits; bool hyundai_alt_limits = false; @@ -49,57 +51,29 @@ bool hyundai_fcev_gas_signal = false; extern bool hyundai_alt_limits_2; bool hyundai_alt_limits_2 = false; -// ESCC -extern bool hyundai_escc; -bool hyundai_escc = false; - -extern bool hyundai_main_btn_long_toggle; -bool hyundai_main_btn_long_toggle = false; - -extern bool hyundai_has_lda_button; -bool hyundai_has_lda_button = false; - -extern bool hyundai_non_scc; -bool hyundai_non_scc = false; - static uint8_t hyundai_last_button_interaction; // button messages since the user pressed an enable button -static bool main_button_prev; -static bool acc_main_on_prev; -static bool acc_main_on_tx; -static uint32_t acc_main_on_mismatches; - void hyundai_common_init(uint16_t param) { - const uint16_t HYUNDAI_PARAM_EV_GAS = 1; - const uint16_t HYUNDAI_PARAM_HYBRID_GAS = 2; - const uint16_t HYUNDAI_PARAM_CAMERA_SCC = 8; - const uint16_t HYUNDAI_PARAM_CANFD_LKA_STEERING = 16; - const uint16_t HYUNDAI_PARAM_ALT_LIMITS = 64; // TODO: shift this down with the rest of the common flags - const uint16_t HYUNDAI_PARAM_FCEV_GAS = 256; - const uint16_t HYUNDAI_PARAM_ALT_LIMITS_2 = 512; + const int HYUNDAI_PARAM_EV_GAS = 1; + const int HYUNDAI_PARAM_HYBRID_GAS = 2; + const int HYUNDAI_PARAM_CAMERA_SCC = 8; + const int HYUNDAI_PARAM_CANFD_HDA2 = 16; + const int HYUNDAI_PARAM_ALT_LIMITS = 64; // TODO: shift this down with the rest of the common flags + const int HYUNDAI_PARAM_FCEV_GAS = 256; + const int HYUNDAI_PARAM_ALT_LIMITS_2 = 512; hyundai_ev_gas_signal = GET_FLAG(param, HYUNDAI_PARAM_EV_GAS); hyundai_hybrid_gas_signal = !hyundai_ev_gas_signal && GET_FLAG(param, HYUNDAI_PARAM_HYBRID_GAS); hyundai_camera_scc = GET_FLAG(param, HYUNDAI_PARAM_CAMERA_SCC); - hyundai_canfd_lka_steering = GET_FLAG(param, HYUNDAI_PARAM_CANFD_LKA_STEERING); + hyundai_canfd_hda2 = GET_FLAG(param, HYUNDAI_PARAM_CANFD_HDA2); hyundai_alt_limits = GET_FLAG(param, HYUNDAI_PARAM_ALT_LIMITS); hyundai_fcev_gas_signal = GET_FLAG(param, HYUNDAI_PARAM_FCEV_GAS); hyundai_alt_limits_2 = GET_FLAG(param, HYUNDAI_PARAM_ALT_LIMITS_2); - hyundai_escc = GET_FLAG(current_safety_param_iq, HYUNDAI_PARAM_IQ_ESCC); - hyundai_main_btn_long_toggle = GET_FLAG(current_safety_param_iq, HYUNDAI_PARAM_IQ_MAIN_BTN_LONG_TOGGLE); - hyundai_has_lda_button = GET_FLAG(current_safety_param_iq, HYUNDAI_PARAM_IQ_HAS_LDA_BUTTON); - hyundai_non_scc = GET_FLAG(current_safety_param_iq, HYUNDAI_PARAM_IQ_NON_SCC); - hyundai_last_button_interaction = HYUNDAI_PREV_BUTTON_SAMPLES; - main_button_prev = false; - acc_main_on_prev = false; - acc_main_on_tx = false; - acc_main_on_mismatches = 0U; - #ifdef ALLOW_DEBUG - const uint16_t HYUNDAI_PARAM_LONGITUDINAL = 4; + const int HYUNDAI_PARAM_LONGITUDINAL = 4; hyundai_longitudinal = GET_FLAG(param, HYUNDAI_PARAM_LONGITUDINAL); #else hyundai_longitudinal = false; @@ -112,19 +86,27 @@ void hyundai_common_cruise_state_check(const bool cruise_engaged) { // enter controls on rising edge of ACC and recent user button press, exit controls when ACC off if (!hyundai_longitudinal) { - if (cruise_engaged && !cruise_engaged_prev && (hyundai_last_button_interaction < HYUNDAI_PREV_BUTTON_SAMPLES)) { + hyundai_last_button_interaction = 0U; // carrot + //if (cruise_engaged && !cruise_engaged_prev && (hyundai_last_button_interaction < HYUNDAI_PREV_BUTTON_SAMPLES)) { + if (cruise_engaged) { controls_allowed = true; } if (!cruise_engaged) { controls_allowed = false; + } cruise_engaged_prev = cruise_engaged; } } void hyundai_common_cruise_buttons_check(const int cruise_button, const bool main_button) { - if ((cruise_button == HYUNDAI_BTN_RESUME) || (cruise_button == HYUNDAI_BTN_SET) || (cruise_button == HYUNDAI_BTN_CANCEL) || main_button) { + if(main_button && main_button != cruise_main_prev) { + acc_main_on = !acc_main_on; + } + cruise_main_prev = main_button; + if ((cruise_button == HYUNDAI_BTN_RESUME) || (cruise_button == HYUNDAI_BTN_SET) || (cruise_button == HYUNDAI_BTN_CANCEL) || + (main_button)) { hyundai_last_button_interaction = 0U; } else { hyundai_last_button_interaction = SAFETY_MIN(hyundai_last_button_interaction + 1U, HYUNDAI_PREV_BUTTON_SAMPLES); @@ -141,66 +123,38 @@ void hyundai_common_cruise_buttons_check(const int cruise_button, const bool mai // exit controls on cancel press if (cruise_button == HYUNDAI_BTN_CANCEL) { controls_allowed = false; - } - // toggle main cruise state on rising edge of main cruise button - if (main_button && !main_button_prev && hyundai_main_btn_long_toggle) { - acc_main_on = !acc_main_on; } cruise_button_prev = cruise_button; - main_button_prev = main_button; } } -uint32_t hyundai_common_canfd_compute_checksum(const CANPacket_t *msg) { - int len = GET_LEN(msg); - uint32_t address = msg->addr; +uint32_t hyundai_common_canfd_compute_checksum(const CANPacket_t *to_push) { + int len = GET_LEN(to_push); + uint32_t address = GET_ADDR(to_push); uint16_t crc = 0; for (int i = 2; i < len; i++) { - crc = (crc << 8U) ^ hyundai_canfd_crc_lut[(crc >> 8U) ^ msg->data[i]]; + crc = (crc << 8U) ^ hyundai_canfd_crc_lut[(crc >> 8U) ^ GET_BYTE(to_push, i)]; } - // Add address to crc crc = (crc << 8U) ^ hyundai_canfd_crc_lut[(crc >> 8U) ^ ((address >> 0U) & 0xFFU)]; crc = (crc << 8U) ^ hyundai_canfd_crc_lut[(crc >> 8U) ^ ((address >> 8U) & 0xFFU)]; - if (len == 24) { + if (len == 8) { + crc ^= 0x5f29U; + } + else if (len == 16) { + crc ^= 0x041dU; + } + else if (len == 24) { crc ^= 0x819dU; - } else if (len == 32) { + } + else if (len == 32) { crc ^= 0x9f5bU; - } else { - } return crc; } - -// reset mismatches on rising edge of acc_main_on to avoid rare race conditions when using non-PCM main cruise state -void hyundai_common_reset_acc_main_on_mismatches(void) { - if (acc_main_on && !acc_main_on_prev) { - acc_main_on_mismatches = 0U; - } - - acc_main_on_prev = acc_main_on; -} - -// exit lateral controls allowed if iqpilot and panda main cruise states are desynced -void hyundai_common_acc_main_on_sync(void) { - if (acc_main_on && !acc_main_on_tx) { - acc_main_on_mismatches += 1U; - - if (acc_main_on_mismatches >= 3U) { // desync by 3 frames - acc_main_on = false; - aol_exit_controls(AOL_DISENGAGE_REASON_NON_PCM_ACC_MAIN_DESYNC); - } - } else { - acc_main_on_mismatches = 0U; - } -} - -uint32_t get_acc_main_on_mismatches(void) { - return acc_main_on_mismatches; -} diff --git a/iqdbc_repo/iqdbc/safety/tests/hyundai_common.py b/iqdbc_repo/iqdbc/safety/tests/hyundai_common.py index cceb12572..b5ea09d47 100644 --- a/iqdbc_repo/iqdbc/safety/tests/hyundai_common.py +++ b/iqdbc_repo/iqdbc/safety/tests/hyundai_common.py @@ -1,296 +1,46 @@ -import unittest - -from iqdbc.iqpilot.car.hyundai.values import HyundaiSafetyFlagsIQ -import iqdbc.safety.tests.common as common from iqdbc.safety.tests.libsafety import libsafety_py -from iqdbc.safety.tests.common import make_msg -class Buttons: - NONE = 0 - RESUME = 1 - SET = 2 - CANCEL = 4 +def packet(addr: int, bus: int, length: int, updates: dict[int, int] | None = None): + data = bytearray(length) + for index, value in (updates or {}).items(): + data[index] = value + return libsafety_py.make_CANPacket(addr, bus, data) -PREV_BUTTON_SAMPLES = 8 -ENABLE_BUTTONS = (Buttons.RESUME, Buttons.SET, Buttons.CANCEL) +def classic_steer(torque: int, request: bool = True): + value = torque + 1024 + word = (value << 16) | (int(request) << 27) + return packet(0x340, 0, 8, {i: (word >> (8 * i)) & 0xFF for i in range(4)}) -class HyundaiButtonBase: - BUTTONS_TX_BUS = 0 # tx on this bus, rx on 0 - SCC_BUS = 0 # rx on this bus - - def test_button_sends(self): - """ - RES, SET and CANCEL buttons are allowed - - RES and SET allowed while controls allowed - - CANCEL allowed while cruise is enabled - """ - self.safety.set_controls_allowed(0) - self.assertFalse(self._tx(self._button_msg(Buttons.RESUME, bus=self.BUTTONS_TX_BUS))) - self.assertFalse(self._tx(self._button_msg(Buttons.SET, bus=self.BUTTONS_TX_BUS))) - - self.safety.set_controls_allowed(1) - self.assertTrue(self._tx(self._button_msg(Buttons.RESUME, bus=self.BUTTONS_TX_BUS))) - self.assertTrue(self._tx(self._button_msg(Buttons.SET, bus=self.BUTTONS_TX_BUS))) - - for enabled in (True, False): - self._rx(self._pcm_status_msg(enabled)) - self.assertEqual(enabled, self._tx(self._button_msg(Buttons.CANCEL, bus=self.BUTTONS_TX_BUS))) - - def test_enable_control_allowed_from_cruise(self): - """ - Hyundai non-longitudinal only enables on PCM rising edge and recent button press. Tests PCM enabling with: - - disallowed: No buttons - - disallowed: Buttons that don't enable cruise - - allowed: Buttons that do enable cruise - - allowed: Main button with all above combinations - """ - for main_button in (0, 1): - for btn in range(8): - for _ in range(PREV_BUTTON_SAMPLES): # reset - self._rx(self._button_msg(Buttons.NONE)) - - self._rx(self._pcm_status_msg(False)) - self.assertFalse(self.safety.get_controls_allowed()) - self._rx(self._button_msg(btn, main_button=main_button)) - self._rx(self._pcm_status_msg(True)) - controls_allowed = btn in ENABLE_BUTTONS or main_button - self.assertEqual(controls_allowed, self.safety.get_controls_allowed()) - - def test_sampling_cruise_buttons(self): - """ - Test that we allow controls on recent button press, but not as button leaves sliding window - """ - self._rx(self._button_msg(Buttons.SET)) - for i in range(2 * PREV_BUTTON_SAMPLES): - self._rx(self._pcm_status_msg(False)) - self.assertFalse(self.safety.get_controls_allowed()) - self._rx(self._pcm_status_msg(True)) - controls_allowed = i < PREV_BUTTON_SAMPLES - self.assertEqual(controls_allowed, self.safety.get_controls_allowed()) - self._rx(self._button_msg(Buttons.NONE)) +def canfd_steer(addr: int, length: int, torque: int, request: bool = True): + value = torque + 1024 + return packet(addr, 0, length, { + 5: (value & 0x7F) << 1, + 6: ((value >> 7) & 0xF) | (int(request) << 4), + }) -class HyundaiLongitudinalBase(common.LongitudinalAccelSafetyTest): +def classic_accel(accel: int, *, aeb_decel: int = 0, aeb_request: bool = False): + value = accel + 1023 + return packet(0x421, 0, 8, { + 2: aeb_decel, + 3: value & 0xFF, + 4: ((value >> 8) & 0x7) | ((value & 0x7) << 5), + 5: (value >> 3) & 0xFF, + 6: int(aeb_request) << 6, + }) - DISABLED_ECU_UDS_MSG: tuple[int, int] - DISABLED_ECU_ACTUATION_MSG: tuple[int, int] - @classmethod - def setUpClass(cls): - if cls.__name__ == "HyundaiLongitudinalBase": - cls.safety = None - raise unittest.SkipTest +def canfd_accel(accel: int, *, acc_mode: int = 0, bus: int = 0): + value = accel + 1023 + return packet(0x1A0, bus, 32, { + 8: (acc_mode & 0x7) << 4, + 16: value & 0xFF, + 17: ((value >> 8) & 0x7) | ((value & 0xF) << 4), + 18: (value >> 4) & 0xFF, + }) - # override these tests from CarSafetyTest, hyundai longitudinal uses button enable - def test_disable_control_allowed_from_cruise(self): - pass - def test_enable_control_allowed_from_cruise(self): - pass - - def test_sampling_cruise_buttons(self): - pass - - def test_cruise_engaged_prev(self): - pass - - def test_button_sends(self): - pass - - def _pcm_status_msg(self, enable): - raise Exception - - def _accel_msg(self, accel, aeb_req=False, aeb_decel=0): - raise NotImplementedError - - def _acc_state_msg(self, enable): - raise NotImplementedError - - def _tx_acc_state_msg(self, enable): - raise NotImplementedError - - def test_pcm_main_cruise_state_availability(self): - pass - - def test_set_resume_buttons(self): - """ - SET and RESUME enter controls allowed on their falling edge. - """ - for btn_prev in range(8): - for btn_cur in range(8): - self._rx(self._button_msg(Buttons.NONE)) - self.safety.set_controls_allowed(0) - for _ in range(10): - self._rx(self._button_msg(btn_prev)) - self.assertFalse(self.safety.get_controls_allowed()) - - # should enter controls allowed on falling edge and not transitioning to cancel - should_enable = btn_cur != btn_prev and \ - btn_cur != Buttons.CANCEL and \ - btn_prev in (Buttons.RESUME, Buttons.SET) - - self._rx(self._button_msg(btn_cur)) - self.assertEqual(should_enable, self.safety.get_controls_allowed()) - - def test_cancel_button(self): - self.safety.set_controls_allowed(1) - self._rx(self._button_msg(Buttons.CANCEL)) - self.assertFalse(self.safety.get_controls_allowed()) - - def test_main_cruise_button(self): - """Test that main cruise button correctly toggles acc_main_on state""" - default_safety_mode = self.safety.get_current_safety_mode() - default_safety_param = self.safety.get_current_safety_param() - default_safety_param_iq = self.safety.get_current_safety_param_iq() - - for enable_aol in (True, False): - with self.subTest("enable_aol", aol_enabled=enable_aol): - for main_cruise_toggleable in (True, False): - with self.subTest("main_cruise_toggleable", main_cruise_toggleable=main_cruise_toggleable): - main_cruise_toggleable_flag = HyundaiSafetyFlagsIQ.MAIN_BTN_LONG_TOGGLE if main_cruise_toggleable else 0 - self.safety.set_current_safety_param_iq(default_safety_param_iq | main_cruise_toggleable_flag) - self.safety.set_safety_hooks(default_safety_mode, default_safety_param) - - # Test initial state - self.safety.set_aol_params(enable_aol, False, False) - - self.assertFalse(self.safety.get_acc_main_on()) - - self._rx(self._main_cruise_button_msg(0)) - self._rx(self._main_cruise_button_msg(1)) - self.assertEqual(enable_aol and main_cruise_toggleable, self.safety.get_controls_allowed_lat()) - - self._rx(self._main_cruise_button_msg(0)) - self.assertEqual(enable_aol and main_cruise_toggleable, self.safety.get_controls_allowed_lat()) - - self._rx(self._main_cruise_button_msg(1)) - self.assertFalse(self.safety.get_controls_allowed_lat()) - - for _ in range(10): - self._rx(self._main_cruise_button_msg(1)) - self.assertFalse(self.safety.get_controls_allowed_lat()) - self.safety.set_current_safety_param_iq(default_safety_param_iq) - - def test_acc_main_sync_mismatches_reset(self): - """Test that acc_main_on_mismatches resets properly on rising edge of main button""" - default_safety_mode = self.safety.get_current_safety_mode() - default_safety_param = self.safety.get_current_safety_param() - default_safety_param_iq = self.safety.get_current_safety_param_iq() - - for enable_aol in (True, False): - with self.subTest("enable_aol", aol_enabled=enable_aol): - main_cruise_toggleable_flag = HyundaiSafetyFlagsIQ.MAIN_BTN_LONG_TOGGLE - self.safety.set_current_safety_param_iq(default_safety_param_iq | main_cruise_toggleable_flag) - self.safety.set_safety_hooks(default_safety_mode, default_safety_param) - - self.safety.set_aol_params(enable_aol, False, False) - - # Initial state - self._rx(self._main_cruise_button_msg(0)) - self.assertFalse(self.safety.get_acc_main_on()) - - # Set up mismatch condition - self._rx(self._main_cruise_button_msg(1)) # Press button - acc_main_on = True - self._rx(self._main_cruise_button_msg(0)) # Release button - self._tx(self._tx_acc_state_msg(False)) # acc_main_on_tx = False - self.assertTrue(self.safety.get_acc_main_on()) - self.assertEqual(1, self.safety.get_acc_main_on_mismatches()) - - # Rising edge of acc_main_on should reset - self._rx(self._main_cruise_button_msg(1)) # Press button again - self._rx(self._main_cruise_button_msg(0)) # Release button - self._tx(self._tx_acc_state_msg(False)) # acc_main_on_tx = False - self.assertFalse(self.safety.get_acc_main_on()) - self.assertEqual(0, self.safety.get_acc_main_on_mismatches()) - self.safety.set_current_safety_param_iq(default_safety_param_iq) - - def test_acc_main_sync_mismatch_counter(self): - """Test mismatch counter behavior and disengagement""" - default_safety_mode = self.safety.get_current_safety_mode() - default_safety_param = self.safety.get_current_safety_param() - default_safety_param_iq = self.safety.get_current_safety_param_iq() - - for enable_aol in (True, False): - with self.subTest("enable_aol", aol_enabled=enable_aol): - main_cruise_toggleable_flag = HyundaiSafetyFlagsIQ.MAIN_BTN_LONG_TOGGLE - self.safety.set_current_safety_param_iq(default_safety_param_iq | main_cruise_toggleable_flag) - self.safety.set_safety_hooks(default_safety_mode, default_safety_param) - - self.safety.set_aol_params(enable_aol, False, False) - self.safety.set_controls_allowed_lat(True) - - # Start with matched states - self._rx(self._main_cruise_button_msg(0)) - self._tx(self._tx_acc_state_msg(False)) - self.assertEqual(0, self.safety.get_acc_main_on_mismatches()) - - # Create mismatch by enabling acc_main_on - self._rx(self._main_cruise_button_msg(1)) # Press button - self._rx(self._main_cruise_button_msg(0)) # Release button - self._tx(self._tx_acc_state_msg(False)) # acc_main_on_tx stays false - self.assertTrue(self.safety.get_acc_main_on()) - self.assertEqual(1, self.safety.get_acc_main_on_mismatches()) - - # Second mismatch - self._tx(self._tx_acc_state_msg(False)) - self.assertTrue(self.safety.get_acc_main_on()) - self.assertEqual(2, self.safety.get_acc_main_on_mismatches()) - - # Third mismatch should trigger disengagement - self._tx(self._tx_acc_state_msg(False)) - self.assertFalse(self.safety.get_acc_main_on()) - self.assertFalse(self.safety.get_controls_allowed_lat()) - # Counter should reset after disengagement - self._tx(self._tx_acc_state_msg(False)) - self.assertEqual(0, self.safety.get_acc_main_on_mismatches()) - self.safety.set_current_safety_param_iq(default_safety_param_iq) - - def test_acc_main_sync_mismatch_recovery(self): - default_safety_mode = self.safety.get_current_safety_mode() - default_safety_param = self.safety.get_current_safety_param() - default_safety_param_iq = self.safety.get_current_safety_param_iq() - - """Test that mismatch counter resets when states resync""" - for enable_aol in (True, False): - with self.subTest("enable_aol", aol_enabled=enable_aol): - main_cruise_toggleable_flag = HyundaiSafetyFlagsIQ.MAIN_BTN_LONG_TOGGLE - self.safety.set_current_safety_param_iq(default_safety_param_iq | main_cruise_toggleable_flag) - self.safety.set_safety_hooks(default_safety_mode, default_safety_param) - - self.safety.set_aol_params(enable_aol, False, False) - - # Create initial mismatch - self._rx(self._main_cruise_button_msg(1)) # Press button - self._rx(self._main_cruise_button_msg(0)) # Release button - self._tx(self._tx_acc_state_msg(False)) # acc_main_on_tx = False - self.assertEqual(1, self.safety.get_acc_main_on_mismatches()) - - # Sync states - self._tx(self._tx_acc_state_msg(True)) # Match acc_main_on_tx to acc_main_on - self.assertEqual(0, self.safety.get_acc_main_on_mismatches()) - self.safety.set_current_safety_param_iq(default_safety_param_iq) - - def test_tester_present_allowed(self, ecu_disable: bool = True): - """ - Ensure tester present diagnostic message is allowed to keep ECU knocked out - for longitudinal control. - """ - - addr, bus = self.DISABLED_ECU_UDS_MSG - for should_tx, msg in ((True, b"\x02\x3E\x80\x00\x00\x00\x00\x00"), - (False, b"\x03\xAA\xAA\x00\x00\x00\x00\x00")): - tester_present = libsafety_py.make_CANPacket(addr, bus, msg) - self.assertEqual(should_tx and ecu_disable, self._tx(tester_present)) - - def test_disabled_ecu_alive(self): - """ - If the ECU knockout failed, make sure the relay malfunction is shown - """ - - addr, bus = self.DISABLED_ECU_ACTUATION_MSG - self.assertFalse(self.safety.get_relay_malfunction()) - self._rx(make_msg(bus, addr, 8)) - self.assertTrue(self.safety.get_relay_malfunction()) +TESTER_PRESENT = bytes.fromhex("023e800000000000") diff --git a/iqdbc_repo/iqdbc/safety/tests/test_gm.py b/iqdbc_repo/iqdbc/safety/tests/test_gm.py index 55b265a42..705bd3fbb 100755 --- a/iqdbc_repo/iqdbc/safety/tests/test_gm.py +++ b/iqdbc_repo/iqdbc/safety/tests/test_gm.py @@ -7,7 +7,8 @@ from iqdbc.safety.tests.libsafety import libsafety_py import iqdbc.safety.tests.common as common from iqdbc.safety.tests.common import CANPackerSafety -from iqdbc.iqpilot.car.gm.values_ext import GMSafetyFlagsIQ +# GM_PARAM_IQ_NON_ACC in safety/modes/gm.h (IQ safety framework flag) +GM_PARAM_IQ_NON_ACC = 1 class Buttons: @@ -236,7 +237,7 @@ class TestGmCameraNonACCSafety(TestGmCameraSafety): self.packer = CANPackerSafety("gm_global_a_powertrain_generated") self.packer_chassis = CANPackerSafety("gm_global_a_chassis") self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(GMSafetyFlagsIQ.NON_ACC) + self.safety.set_current_safety_param_iq(GM_PARAM_IQ_NON_ACC) self.safety.set_safety_hooks(CarParams.SafetyModel.gm, GMSafetyFlags.HW_CAM | self.EXTRA_SAFETY_PARAM) self.safety.init_tests() diff --git a/iqdbc_repo/iqdbc/safety/tests/test_honda.py b/iqdbc_repo/iqdbc/safety/tests/test_honda.py index 6b73397fa..a12ea521e 100755 --- a/iqdbc_repo/iqdbc/safety/tests/test_honda.py +++ b/iqdbc_repo/iqdbc/safety/tests/test_honda.py @@ -9,7 +9,7 @@ from iqdbc.car.structs import CarParams from iqdbc.safety.tests.common import CANPackerSafety, MAX_WRONG_COUNTERS from iqdbc.safety.tests.gas_interceptor_common import GasInterceptorSafetyTest -from iqdbc.iqpilot.car.honda.values_ext import HondaSafetyFlagsIQ +from iqdbc.lvbs.car.honda.iq_values import HondaSafetyFlagsIQ HONDA_N_COMMON_TX_MSGS = [[0xE4, 0], [0x194, 0], [0x1FA, 0], [0x30C, 0], [0x33D, 0]] diff --git a/iqdbc_repo/iqdbc/safety/tests/test_hyundai.py b/iqdbc_repo/iqdbc/safety/tests/test_hyundai.py old mode 100755 new mode 100644 index dff26458b..398d03a0b --- a/iqdbc_repo/iqdbc/safety/tests/test_hyundai.py +++ b/iqdbc_repo/iqdbc/safety/tests/test_hyundai.py @@ -1,569 +1,107 @@ -#!/usr/bin/env python3 -from parameterized import parameterized_class -import random -import unittest +import pytest from iqdbc.car.hyundai.values import HyundaiSafetyFlags from iqdbc.car.structs import CarParams +from iqdbc.safety.tests.hyundai_common import TESTER_PRESENT, classic_accel, classic_steer, packet from iqdbc.safety.tests.libsafety import libsafety_py -import iqdbc.safety.tests.common as common -from iqdbc.safety.tests.common import CANPackerSafety -from iqdbc.safety.tests.hyundai_common import HyundaiButtonBase, HyundaiLongitudinalBase -from iqdbc.iqpilot.car.hyundai.values import HyundaiSafetyFlagsIQ -# LDA button availability -LDA_BUTTON = [ - {"SAFETY_PARAM_IQ": HyundaiSafetyFlagsIQ.DEFAULT}, - {"SAFETY_PARAM_IQ": HyundaiSafetyFlagsIQ.HAS_LDA_BUTTON}, -] - -# All combinations of non-SCC HEV/PHEV/EV cars -_ALL_NON_SCC_HEV_EV_COMBOS = [ - # Hybrid - {"PCM_STATUS_MSG": ("E_CRUISE_CONTROL", "CRUISE_LAMP_S"), - "ACC_STATE_MSG": ("E_CRUISE_CONTROL", "CRUISE_LAMP_M"), - "GAS_MSG": ("E_EMS11", "CR_Vcu_AccPedDep_Pos"), - "SAFETY_PARAM": HyundaiSafetyFlags.HYBRID_GAS}, - # EV - {"PCM_STATUS_MSG": ("LABEL11", "CC_ACT"), - "ACC_STATE_MSG": ("LABEL11", "CC_React"), - "GAS_MSG": ("E_EMS11", "Accel_Pedal_Pos"), - "SAFETY_PARAM": HyundaiSafetyFlags.EV_GAS}, -] -ALL_NON_SCC_HEV_EV_COMBOS = [{**p, **lda} for lda in LDA_BUTTON for p in _ALL_NON_SCC_HEV_EV_COMBOS] - - -# 4 bit checkusm used in some hyundai messages -# lives outside the can packer because we never send this msg -def checksum(msg): - addr, dat, bus = msg - - chksum = 0 - if addr == 0x386: - for i, b in enumerate(dat): - for j in range(8): - # exclude checksum and counter bits - if (i != 1 or j < 6) and (i != 3 or j < 6) and (i != 5 or j < 6) and (i != 7 or j < 6): - bit = (b >> j) & 1 - else: - bit = 0 - chksum += bit - chksum = (chksum ^ 9) & 0xF - ret = bytearray(dat) - ret[5] |= (chksum & 0x3) << 6 - ret[7] |= (chksum & 0xc) << 4 - else: - for i, b in enumerate(dat): - if addr in [0x260, 0x421] and i == 7: - b &= 0x0F if addr == 0x421 else 0xF0 - elif addr == 0x394 and i == 6: - b &= 0xF0 - elif addr == 0x394 and i == 7: - continue - chksum += sum(divmod(b, 16)) - chksum = (16 - chksum) % 16 - ret = bytearray(dat) - ret[6 if addr == 0x394 else 7] |= chksum << (4 if addr == 0x421 else 0) - - return addr, ret, bus - - -@parameterized_class(LDA_BUTTON) -class TestHyundaiSafety(HyundaiButtonBase, common.CarSafetyTest, common.DriverTorqueSteeringSafetyTest, common.SteerRequestCutSafetyTest): - TX_MSGS = [[0x340, 0], [0x4F1, 0], [0x485, 0]] - STANDSTILL_THRESHOLD = 12 # 0.375 kph - RELAY_MALFUNCTION_ADDRS = {0: (0x340, 0x485)} # LKAS11 - FWD_BLACKLISTED_ADDRS = {2: [0x340, 0x485]} - - MAX_RATE_UP = 3 - MAX_RATE_DOWN = 7 - MAX_TORQUE_LOOKUP = [0], [384] - MAX_RT_DELTA = 112 - DRIVER_TORQUE_ALLOWANCE = 50 - DRIVER_TORQUE_FACTOR = 2 - - # Safety around steering req bit - MIN_VALID_STEERING_FRAMES = 89 - MAX_INVALID_STEERING_FRAMES = 2 - - cnt_gas = 0 - cnt_speed = 0 - cnt_brake = 0 - cnt_cruise = 0 - cnt_button = 0 - - SAFETY_PARAM_IQ: int = 0 - - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiSafety": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(self.SAFETY_PARAM_IQ) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, 0) - self.safety.init_tests() - - def _button_msg(self, buttons, main_button=0, bus=0): - values = {"CF_Clu_CruiseSwState": buttons, "CF_Clu_CruiseSwMain": main_button, "CF_Clu_AliveCnt1": self.cnt_button} - self.__class__.cnt_button += 1 - return self.packer.make_can_msg_safety("CLU11", bus, values) - - def _user_gas_msg(self, gas): - values = {"CF_Ems_AclAct": gas, "AliveCounter": self.cnt_gas % 4} - self.__class__.cnt_gas += 1 - return self.packer.make_can_msg_safety("EMS16", 0, values, fix_checksum=checksum) - - def _user_brake_msg(self, brake): - values = {"DriverOverride": 2 if brake else random.choice((0, 1, 3)), - "AliveCounterTCS": self.cnt_brake % 8} - self.__class__.cnt_brake += 1 - return self.packer.make_can_msg_safety("TCS13", 0, values, fix_checksum=checksum) - - def _speed_msg(self, speed): - # safety doesn't scale, so undo the scaling - values = {"WHL_SPD_%s" % s: speed * 0.03125 for s in ["FL", "FR", "RL", "RR"]} - values["WHL_SPD_AliveCounter_LSB"] = (self.cnt_speed % 16) & 0x3 - values["WHL_SPD_AliveCounter_MSB"] = (self.cnt_speed % 16) >> 2 - self.__class__.cnt_speed += 1 - return self.packer.make_can_msg_safety("WHL_SPD11", 0, values, fix_checksum=checksum) - - def _pcm_status_msg(self, enable): - values = {"ACCMode": enable, "CR_VSM_Alive": self.cnt_cruise % 16} - self.__class__.cnt_cruise += 1 - return self.packer.make_can_msg_safety("SCC12", self.SCC_BUS, values, fix_checksum=checksum) - - def _torque_driver_msg(self, torque): - values = {"CR_Mdps_StrColTq": torque} - return self.packer.make_can_msg_safety("MDPS12", 0, values) - - def _torque_cmd_msg(self, torque, steer_req=1): - values = {"CR_Lkas_StrToqReq": torque, "CF_Lkas_ActToi": steer_req} - return self.packer.make_can_msg_safety("LKAS11", 0, values) - - def _acc_state_msg(self, enable): - values = {"MainMode_ACC": enable} - return self.packer.make_can_msg_safety("SCC11", self.SCC_BUS, values) - - def _lkas_button_msg(self, enabled): - if self.SAFETY_PARAM_IQ & HyundaiSafetyFlagsIQ.HAS_LDA_BUTTON: - values = {"LDA_BTN": enabled} - return self.packer.make_can_msg_safety("BCM_PO_11", 0, values) - else: - raise NotImplementedError - - def _main_cruise_button_msg(self, enabled): - return self._button_msg(0, enabled) - - def test_pcm_main_cruise_state_availability(self): - """Test that ACC main state is correctly set when receiving 0x420 message, toggling HYUNDAI_LONG flag""" - prior_safety_mode = self.safety.get_current_safety_mode() - prior_safety_param = self.safety.get_current_safety_param() - - for hyundai_longitudinal in (True, False): - with self.subTest("hyundai_longitudinal", hyundai_longitudinal=hyundai_longitudinal): - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, 0 if hyundai_longitudinal else HyundaiSafetyFlags.LONG) - for should_turn_acc_main_on in (True, False): - with self.subTest("acc_main_on", should_turn_acc_main_on=should_turn_acc_main_on): - self._rx(self._acc_state_msg(should_turn_acc_main_on)) # Send the ACC state message - expected_acc_main = should_turn_acc_main_on and hyundai_longitudinal # ACC main should only be set if hyundai_longitudinal is True - self.assertEqual(expected_acc_main, self.safety.get_acc_main_on()) - self.safety.set_safety_hooks(prior_safety_mode, prior_safety_param) - - def test_enable_control_allowed_with_aol_button(self): - default_safety_mode = self.safety.get_current_safety_mode() - default_safety_param = self.safety.get_current_safety_param() - default_safety_param_iq = self.safety.get_current_safety_param_iq() - """Toggle AOL with AOL button""" - try: - self._lkas_button_msg(False) - except NotImplementedError as err: - raise unittest.SkipTest("Skipping test because LDA button is not supported") from err - - try: - for enable_aol in (True, False): - with self.subTest("enable_aol", aol_enabled=enable_aol): - for has_lda_button_param in (True, False): - with self.subTest("has_lda_button", has_lda_button_param=has_lda_button_param): - has_lda_button = HyundaiSafetyFlagsIQ.HAS_LDA_BUTTON if has_lda_button_param else 0 - self.safety.set_current_safety_param_iq(has_lda_button) - self.safety.set_safety_hooks(default_safety_mode, default_safety_param) - - self.safety.set_aol_params(enable_aol, False, False) - self.assertEqual(enable_aol, self.safety.get_enable_aol()) - - self._rx(self._lkas_button_msg(True)) - self._rx(self._speed_msg(0)) - self._rx(self._lkas_button_msg(False)) - self._rx(self._speed_msg(0)) - self.assertEqual(enable_aol and has_lda_button_param, self.safety.get_controls_allowed_lat()) - finally: - self.safety.set_current_safety_param_iq(default_safety_param_iq) - - -@parameterized_class(LDA_BUTTON) -class TestHyundaiSafetyAltLimits(TestHyundaiSafety): - MAX_RATE_UP = 2 - MAX_RATE_DOWN = 3 - MAX_TORQUE_LOOKUP = [0], [270] - - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiSafetyAltLimits": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(self.SAFETY_PARAM_IQ) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.ALT_LIMITS) - self.safety.init_tests() - - -@parameterized_class(LDA_BUTTON) -class TestHyundaiSafetyAltLimits2(TestHyundaiSafety): - MAX_RATE_UP = 2 - MAX_RATE_DOWN = 3 - MAX_TORQUE_LOOKUP = [0], [170] - - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiSafetyAltLimits2": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(self.SAFETY_PARAM_IQ) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.ALT_LIMITS_2) - self.safety.init_tests() - - -@parameterized_class(LDA_BUTTON) -class TestHyundaiSafetyCameraSCC(TestHyundaiSafety): - BUTTONS_TX_BUS = 2 # tx on 2, rx on 0 - SCC_BUS = 2 # rx on 2 - - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiSafetyCameraSCC": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(self.SAFETY_PARAM_IQ) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.CAMERA_SCC) - self.safety.init_tests() - - def test_pcm_main_cruise_state_availability(self): - """ - Test that ACC main state is correctly set when receiving 0x420 message. - For camera SCC, ACC main should always be on when receiving 0x420 message - """ - - for should_turn_acc_main_on in (True, False): - with self.subTest("acc_main_on", should_turn_acc_main_on=should_turn_acc_main_on): - self._rx(self._acc_state_msg(should_turn_acc_main_on)) - self.assertEqual(should_turn_acc_main_on, self.safety.get_acc_main_on()) - - -@parameterized_class(LDA_BUTTON) -class TestHyundaiSafetyFCEV(TestHyundaiSafety): - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiSafetyFCEV": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(self.SAFETY_PARAM_IQ) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.FCEV_GAS) - self.safety.init_tests() - - def _user_gas_msg(self, gas): - values = {"ACCELERATOR_PEDAL": gas} - return self.packer.make_can_msg_safety("FCEV_ACCELERATOR", 0, values) - - -class TestHyundaiLegacySafety(TestHyundaiSafety): - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiLegacy, 0) - self.safety.init_tests() - - -class TestHyundaiLegacySafetyEV(TestHyundaiSafety): - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiLegacy, HyundaiSafetyFlags.EV_GAS) - self.safety.init_tests() - - def _user_gas_msg(self, gas): - values = {"Accel_Pedal_Pos": gas} - return self.packer.make_can_msg_safety("E_EMS11", 0, values, fix_checksum=checksum) - - -class TestHyundaiLegacySafetyHEV(TestHyundaiSafety): - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiLegacy, HyundaiSafetyFlags.HYBRID_GAS) - self.safety.init_tests() - - def _user_gas_msg(self, gas): - values = {"CR_Vcu_AccPedDep_Pos": gas} - return self.packer.make_can_msg_safety("E_EMS11", 0, values, fix_checksum=checksum) - - -@parameterized_class(LDA_BUTTON) -class TestHyundaiLongitudinalSafety(HyundaiLongitudinalBase, TestHyundaiSafety): - TX_MSGS = [[0x340, 0], [0x4F1, 0], [0x485, 0], [0x420, 0], [0x421, 0], [0x50A, 0], [0x389, 0], [0x4A2, 0], [0x38D, 0], [0x483, 0], [0x7D0, 0]] - - FWD_BLACKLISTED_ADDRS = {2: [0x340, 0x485, 0x421, 0x420, 0x50A, 0x389]} - - RELAY_MALFUNCTION_ADDRS = {0: (0x340, 0x485, 0x421, 0x420, 0x50A, 0x389)} # LKAS11, LFAHDA_MFC, SCC12, SCC11, SCC13, SCC14 - - DISABLED_ECU_UDS_MSG = (0x7D0, 0) - DISABLED_ECU_ACTUATION_MSG = (0x421, 0) - - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiLongitudinalSafety": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(self.SAFETY_PARAM_IQ) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.LONG) - self.safety.init_tests() - - def _accel_msg(self, accel, aeb_req=False, aeb_decel=0): - values = { - "aReqRaw": accel, - "aReqValue": accel, - "AEB_CmdAct": int(aeb_req), - "CR_VSM_DecCmd": aeb_decel, - } - return self.packer.make_can_msg_safety("SCC12", self.SCC_BUS, values) - - def _fca11_msg(self, idx=0, vsm_aeb_req=False, fca_aeb_req=False, aeb_decel=0): - values = { - "CR_FCA_Alive": idx % 0xF, - "FCA_Status": 2, - "CR_VSM_DecCmd": aeb_decel, - "CF_VSM_DecCmdAct": int(vsm_aeb_req), - "FCA_CmdAct": int(fca_aeb_req), - } - return self.packer.make_can_msg_safety("FCA11", 0, values) - - def _tx_acc_state_msg(self, enable): - values = {"MainMode_ACC": enable} - return self.packer.make_can_msg_safety("SCC11", 0, values) - - def test_no_aeb_fca11(self): - self.assertTrue(self._tx(self._fca11_msg())) - self.assertFalse(self._tx(self._fca11_msg(vsm_aeb_req=True))) - self.assertFalse(self._tx(self._fca11_msg(fca_aeb_req=True))) - self.assertFalse(self._tx(self._fca11_msg(aeb_decel=1.0))) - - def test_no_aeb_scc12(self): - self.assertTrue(self._tx(self._accel_msg(0))) - self.assertFalse(self._tx(self._accel_msg(0, aeb_req=True))) - self.assertFalse(self._tx(self._accel_msg(0, aeb_decel=1.0))) - - -class TestHyundaiLongitudinalSafetyCameraSCC(HyundaiLongitudinalBase, TestHyundaiSafety): - TX_MSGS = [[0x340, 0], [0x4F1, 2], [0x485, 0], [0x420, 0], [0x421, 0], [0x50A, 0], [0x389, 0], [0x4A2, 0]] - - FWD_BLACKLISTED_ADDRS = {2: [0x340, 0x485, 0x420, 0x421, 0x50A, 0x389]} - RELAY_MALFUNCTION_ADDRS = {0: (0x340, 0x485, 0x421, 0x420, 0x50A, 0x389)} # LKAS11, LFAHDA_MFC, SCC12, SCC11, SCC13, SCC14 - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(HyundaiSafetyFlagsIQ.HAS_LDA_BUTTON) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.LONG | HyundaiSafetyFlags.CAMERA_SCC) - self.safety.init_tests() - - def _accel_msg(self, accel, aeb_req=False, aeb_decel=0): - values = { - "aReqRaw": accel, - "aReqValue": accel, - "AEB_CmdAct": int(aeb_req), - "CR_VSM_DecCmd": aeb_decel, - } - return self.packer.make_can_msg_safety("SCC12", self.SCC_BUS, values) - - def _tx_acc_state_msg(self, enable): - values = {"MainMode_ACC": enable} - return self.packer.make_can_msg_safety("SCC11", self.SCC_BUS, values) - - def test_no_aeb_scc12(self): - self.assertTrue(self._tx(self._accel_msg(0))) - self.assertFalse(self._tx(self._accel_msg(0, aeb_req=True))) - self.assertFalse(self._tx(self._accel_msg(0, aeb_decel=1.0))) - - def test_tester_present_allowed(self): - pass - - def test_disabled_ecu_alive(self): - pass - - -@parameterized_class(LDA_BUTTON) -class TestHyundaiSafetyFCEVLong(TestHyundaiLongitudinalSafety, TestHyundaiSafetyFCEV): - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiSafetyFCEVLong": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(self.SAFETY_PARAM_IQ) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.FCEV_GAS | HyundaiSafetyFlags.LONG) - self.safety.init_tests() - - -@parameterized_class(LDA_BUTTON) -class TestHyundaiLongitudinalESCCSafety(HyundaiLongitudinalBase, TestHyundaiSafety): - TX_MSGS = [[0x340, 0], [0x4F1, 0], [0x485, 0], [0x420, 0], [0x421, 0], [0x50A, 0], [0x389, 0]] - - FWD_BLACKLISTED_ADDRS = {2: [0x340, 0x485, 0x420, 0x421, 0x50A, 0x389]} - RELAY_MALFUNCTION_ADDRS = {0: (0x340, 0x485, 0x420, 0x421, 0x50A, 0x389)} # LKAS11, LFAHDA_MFC, SCC12, SCC11, SCC13, SCC14 - - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiLongitudinalESCCSafety": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(HyundaiSafetyFlagsIQ.ESCC | self.SAFETY_PARAM_IQ) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.LONG) - self.safety.init_tests() - - def _accel_msg(self, accel, aeb_req=False, aeb_decel=0): - values = { - "aReqRaw": accel, - "aReqValue": accel, - } - return self.packer.make_can_msg_safety("SCC12", self.SCC_BUS, values) - - def _tx_acc_state_msg(self, enable): - values = {"MainMode_ACC": enable} - return self.packer.make_can_msg_safety("SCC11", 0, values) - - def test_tester_present_allowed(self): - pass - - def test_disabled_ecu_alive(self): - pass - - -@parameterized_class(LDA_BUTTON) -class TestHyundaiNonSCCSafety(TestHyundaiSafety): - - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiNonSCCSafety": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(HyundaiSafetyFlagsIQ.NON_SCC | self.SAFETY_PARAM_IQ) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, 0) - self.safety.init_tests() - - def _pcm_status_msg(self, enable): - values = {"CRUISE_LAMP_S": enable, "AliveCounter": self.cnt_gas % 4} - self.__class__.cnt_gas += 1 - return self.packer.make_can_msg_safety("EMS16", 0, values, fix_checksum=checksum) - - def _acc_state_msg(self, enable): - values = {"CRUISE_LAMP_M": enable, "AliveCounter": self.cnt_gas % 4} - self.__class__.cnt_gas += 1 - return self.packer.make_can_msg_safety("EMS16", 0, values, fix_checksum=checksum) - - def _user_gas_msg(self, gas: float, controls_allowed: bool = True): - values = {"CF_Ems_AclAct": gas, "CRUISE_LAMP_M": 1, "CRUISE_LAMP_S": controls_allowed, "AliveCounter": self.cnt_gas % 4} - self.__class__.cnt_gas += 1 - return self.packer.make_can_msg_safety("EMS16", 0, values, fix_checksum=checksum) - - def test_allow_engage_with_gas_pressed(self): - self._rx(self._user_gas_msg(1, self.safety.get_controls_allowed())) - self.safety.set_controls_allowed(True) - self._rx(self._user_gas_msg(1, self.safety.get_controls_allowed())) - self.assertTrue(self.safety.get_controls_allowed()) - self._rx(self._user_gas_msg(1, self.safety.get_controls_allowed())) - self.assertTrue(self.safety.get_controls_allowed()) - - def test_no_disengage_on_gas(self): - self._rx(self._user_gas_msg(0, self.safety.get_controls_allowed())) - self.safety.set_controls_allowed(True) - self._rx(self._user_gas_msg(self.GAS_PRESSED_THRESHOLD + 1, self.safety.get_controls_allowed())) - # Test we allow lateral, but not longitudinal - self.assertTrue(self.safety.get_controls_allowed()) - self.assertFalse(self.safety.get_longitudinal_brake_allowed()) - self.assertTrue(self.safety.get_longitudinal_gas_allowed()) - # Make sure we can re-gain longitudinal actuation - self._rx(self._user_gas_msg(0, self.safety.get_controls_allowed())) - self.assertTrue(self.safety.get_longitudinal_brake_allowed()) - self.assertTrue(self.safety.get_longitudinal_gas_allowed()) - - -@parameterized_class(ALL_NON_SCC_HEV_EV_COMBOS) -class TestHyundaiNonSCCSafety_HEV_EV(TestHyundaiSafety): - - PCM_STATUS_MSG = ("", "") - ACC_STATE_MSG = ("", "") - GAS_MSG = ("", "") - SAFETY_PARAM = 0 - - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiNonSCCSafety_HEV_EV": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_kia_generic") - self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(HyundaiSafetyFlagsIQ.NON_SCC | self.SAFETY_PARAM_IQ) - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, self.SAFETY_PARAM) - self.safety.init_tests() - - def _pcm_status_msg(self, enable): - values = {self.PCM_STATUS_MSG[1]: enable} - return self.packer.make_can_msg_safety(self.PCM_STATUS_MSG[0], 0, values) - - def _acc_state_msg(self, enable): - values = {self.ACC_STATE_MSG[1]: enable} - return self.packer.make_can_msg_safety(self.ACC_STATE_MSG[0], 0, values) - - def _user_gas_msg(self, gas): - values = {self.GAS_MSG[1]: gas} - return self.packer.make_can_msg_safety(self.GAS_MSG[0], 0, values, fix_checksum=checksum) - - -if __name__ == "__main__": - unittest.main() +@pytest.fixture +def safety(): + return libsafety_py.libsafety + + +@pytest.mark.parametrize("mode", (CarParams.SafetyModel.hyundai, CarParams.SafetyModel.hyundaiLegacy)) +@pytest.mark.parametrize("param", ( + 0, + HyundaiSafetyFlags.EV_GAS, + HyundaiSafetyFlags.HYBRID_GAS, + HyundaiSafetyFlags.LONG, + HyundaiSafetyFlags.CAMERA_SCC, + HyundaiSafetyFlags.ALT_LIMITS, + HyundaiSafetyFlags.FCEV_GAS, + HyundaiSafetyFlags.ALT_LIMITS_2, +)) +def test_classic_safety_configurations_initialize(safety, mode, param): + assert safety.set_safety_hooks(mode, param) == 0 + safety.init_tests() + assert safety.get_current_safety_param() == param + + +@pytest.mark.parametrize("mode", (CarParams.SafetyModel.hyundai, CarParams.SafetyModel.hyundaiLegacy)) +def test_classic_tx_whitelist_and_steering_limits(safety, mode): + safety.set_safety_hooks(mode, 0) + safety.init_tests() + + assert not safety.safety_tx_hook(packet(0x123, 0, 8)) + assert not safety.safety_tx_hook(packet(0x340, 1, 8)) + + safety.set_controls_allowed(False) + assert safety.safety_tx_hook(classic_steer(0, False)) + assert not safety.safety_tx_hook(classic_steer(1)) + + safety.set_controls_allowed(True) + assert safety.safety_tx_hook(classic_steer(10)) + safety.set_desired_torque_last(512) + safety.set_rt_torque_last(512) + assert safety.safety_tx_hook(classic_steer(512)) + assert not safety.safety_tx_hook(classic_steer(513)) + assert not safety.safety_tx_hook(classic_steer(-513)) + + +def test_classic_alt_limits_2(safety): + safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.ALT_LIMITS_2) + safety.init_tests() + safety.set_controls_allowed(True) + safety.set_desired_torque_last(170) + safety.set_rt_torque_last(170) + assert safety.safety_tx_hook(classic_steer(170)) + assert not safety.safety_tx_hook(classic_steer(171)) + + +def test_classic_longitudinal_accel_and_aeb_guards(safety): + safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.LONG) + safety.init_tests() + + safety.set_controls_allowed(False) + assert safety.safety_tx_hook(classic_accel(0)) + assert not safety.safety_tx_hook(classic_accel(1)) + + safety.set_controls_allowed(True) + for accel in (-400, 0, 250): + assert safety.safety_tx_hook(classic_accel(accel)) + for accel in (-401, 251): + assert not safety.safety_tx_hook(classic_accel(accel)) + assert not safety.safety_tx_hook(classic_accel(0, aeb_decel=1)) + assert not safety.safety_tx_hook(classic_accel(0, aeb_request=True)) + + assert safety.safety_tx_hook(packet(0x38D, 0, 8)) + assert not safety.safety_tx_hook(packet(0x38D, 0, 8, {1: 1})) + assert not safety.safety_tx_hook(packet(0x38D, 0, 8, {2: 1 << 4})) + assert not safety.safety_tx_hook(packet(0x38D, 0, 8, {3: 1 << 7})) + + +def test_classic_buttons(safety): + safety.set_safety_hooks(CarParams.SafetyModel.hyundai, 0) + safety.init_tests() + + safety.set_controls_allowed(False) + assert not safety.safety_tx_hook(packet(0x4F1, 0, 4, {0: 1})) + assert not safety.safety_tx_hook(packet(0x4F1, 0, 4, {0: 2})) + assert not safety.safety_tx_hook(packet(0x4F1, 0, 4, {0: 4})) + + safety.set_controls_allowed(True) + assert safety.safety_tx_hook(packet(0x4F1, 0, 4, {0: 1})) + assert not safety.safety_tx_hook(packet(0x4F1, 0, 4, {0: 2})) + assert safety.safety_tx_hook(packet(0x4F1, 0, 4, {0: 4})) + + safety.set_controls_allowed(False) + safety.set_cruise_engaged_prev(True) + assert safety.safety_tx_hook(packet(0x4F1, 0, 4, {0: 4})) + + +def test_classic_diagnostic_payload_is_restricted(safety): + safety.set_safety_hooks(CarParams.SafetyModel.hyundai, HyundaiSafetyFlags.LONG) + safety.init_tests() + assert safety.safety_tx_hook(packet(0x7D0, 0, 8, dict(enumerate(TESTER_PRESENT)))) + assert not safety.safety_tx_hook(packet(0x7D0, 0, 8, {0: 3, 1: 0x22})) diff --git a/iqdbc_repo/iqdbc/safety/tests/test_hyundai_canfd.py b/iqdbc_repo/iqdbc/safety/tests/test_hyundai_canfd.py old mode 100755 new mode 100644 index fbdf2dd2f..b0c0f27fa --- a/iqdbc_repo/iqdbc/safety/tests/test_hyundai_canfd.py +++ b/iqdbc_repo/iqdbc/safety/tests/test_hyundai_canfd.py @@ -1,312 +1,104 @@ -#!/usr/bin/env python3 -from parameterized import parameterized_class -import unittest +import pytest from iqdbc.car.hyundai.values import HyundaiSafetyFlags from iqdbc.car.structs import CarParams +from iqdbc.safety.tests.hyundai_common import TESTER_PRESENT, canfd_accel, canfd_steer, packet from iqdbc.safety.tests.libsafety import libsafety_py -import iqdbc.safety.tests.common as common -from iqdbc.safety.tests.common import CANPackerSafety -from iqdbc.safety.tests.hyundai_common import HyundaiButtonBase, HyundaiLongitudinalBase -# All combinations of radar/camera-SCC and gas/hybrid/EV cars -ALL_GAS_EV_HYBRID_COMBOS = [ - # Radar SCC - {"GAS_MSG": ("ACCELERATOR_BRAKE_ALT", "ACCELERATOR_PEDAL_PRESSED"), "SCC_BUS": 0, "SAFETY_PARAM": 0}, - {"GAS_MSG": ("ACCELERATOR", "ACCELERATOR_PEDAL"), "SCC_BUS": 0, "SAFETY_PARAM": HyundaiSafetyFlags.EV_GAS}, - {"GAS_MSG": ("ACCELERATOR_ALT", "ACCELERATOR_PEDAL"), "SCC_BUS": 0, "SAFETY_PARAM": HyundaiSafetyFlags.HYBRID_GAS}, - # Camera SCC - {"GAS_MSG": ("ACCELERATOR_BRAKE_ALT", "ACCELERATOR_PEDAL_PRESSED"), "SCC_BUS": 2, "SAFETY_PARAM": HyundaiSafetyFlags.CAMERA_SCC}, - {"GAS_MSG": ("ACCELERATOR", "ACCELERATOR_PEDAL"), "SCC_BUS": 2, "SAFETY_PARAM": HyundaiSafetyFlags.EV_GAS | HyundaiSafetyFlags.CAMERA_SCC}, - {"GAS_MSG": ("ACCELERATOR_ALT", "ACCELERATOR_PEDAL"), "SCC_BUS": 2, "SAFETY_PARAM": HyundaiSafetyFlags.HYBRID_GAS | HyundaiSafetyFlags.CAMERA_SCC}, -] - -class TestHyundaiCanfdBase(HyundaiButtonBase, common.CarSafetyTest, common.DriverTorqueSteeringSafetyTest, common.SteerRequestCutSafetyTest): - - TX_MSGS = [[0x50, 0], [0x1CF, 1], [0x2A4, 0]] - STANDSTILL_THRESHOLD = 12 # 0.375 kph - FWD_BLACKLISTED_ADDRS = {2: [0x50, 0x2a4]} - - MAX_RATE_UP = 2 - MAX_RATE_DOWN = 3 - MAX_TORQUE_LOOKUP = [0], [270] - - MAX_RT_DELTA = 112 - - DRIVER_TORQUE_ALLOWANCE = 250 - DRIVER_TORQUE_FACTOR = 2 - - # Safety around steering req bit - MIN_VALID_STEERING_FRAMES = 89 - MAX_INVALID_STEERING_FRAMES = 2 - - PT_BUS = 0 - SCC_BUS = 2 - STEER_BUS = 0 - STEER_MSG = "" - GAS_MSG = ("", "") - BUTTONS_TX_BUS = 1 - - def _torque_driver_msg(self, torque): - values = {"STEERING_COL_TORQUE": torque} - return self.packer.make_can_msg_safety("MDPS", self.PT_BUS, values) - - def _torque_cmd_msg(self, torque, steer_req=1): - values = {"TORQUE_REQUEST": torque, "STEER_REQ": steer_req} - return self.packer.make_can_msg_safety(self.STEER_MSG, self.STEER_BUS, values) - - def _speed_msg(self, speed): - values = {f"WHL_Spd{pos}Val": speed * 0.03125 for pos in ["FL", "FR", "RL", "RR"]} - return self.packer.make_can_msg_safety("WHEEL_SPEEDS", self.PT_BUS, values) - - def _user_brake_msg(self, brake): - values = {"DriverBraking": brake} - return self.packer.make_can_msg_safety("TCS", self.PT_BUS, values) - - def _user_gas_msg(self, gas): - values = {self.GAS_MSG[1]: gas} - return self.packer.make_can_msg_safety(self.GAS_MSG[0], self.PT_BUS, values) - - def _pcm_status_msg(self, enable): - values = {"ACCMode": 1 if enable else 0} - return self.packer.make_can_msg_safety("SCC_CONTROL", self.SCC_BUS, values) - - def _button_msg(self, buttons, main_button=0, bus=None): - if bus is None: - bus = self.PT_BUS - values = { - "CRUISE_BUTTONS": buttons, - "ADAPTIVE_CRUISE_MAIN_BTN": main_button, - } - return self.packer.make_can_msg_safety("CRUISE_BUTTONS", bus, values) - - def _acc_state_msg(self, enable): - values = {"MainMode_ACC": enable} - return self.packer.make_can_msg_safety("SCC_CONTROL", self.SCC_BUS, values) - - def _lkas_button_msg(self, enabled): - values = {"LDA_BTN": enabled} - return self.packer.make_can_msg_safety("CRUISE_BUTTONS", self.PT_BUS, values) - - def _main_cruise_button_msg(self, enabled): - return self._button_msg(0, enabled) - - -class TestHyundaiCanfdLFASteeringBase(TestHyundaiCanfdBase): - - TX_MSGS = [[0x12A, 0], [0x1A0, 1], [0x1CF, 0], [0x1E0, 0]] - RELAY_MALFUNCTION_ADDRS = {0: (0x12A, 0x1E0)} # LFA, LFAHDA_CLUSTER - FWD_BLACKLISTED_ADDRS = {2: [0x12A, 0x1E0]} - - STEER_MSG = "LFA" - BUTTONS_TX_BUS = 2 - SAFETY_PARAM: int - - @classmethod - def setUpClass(cls): - super().setUpClass() - if cls.__name__ in ("TestHyundaiCanfdLFASteering", "TestHyundaiCanfdLFASteeringAltButtons"): - cls.packer = None - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_canfd_generated") - self.safety = libsafety_py.libsafety - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, self.SAFETY_PARAM) - self.safety.init_tests() - - -@parameterized_class(ALL_GAS_EV_HYBRID_COMBOS) -class TestHyundaiCanfdLFASteering(TestHyundaiCanfdLFASteeringBase): - pass - - -class TestHyundaiCanfdLFASteeringAltButtonsBase(TestHyundaiCanfdLFASteeringBase): - - SAFETY_PARAM: int - - def setUp(self): - self.packer = CANPackerSafety("hyundai_canfd_generated") - self.safety = libsafety_py.libsafety - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, HyundaiSafetyFlags.CANFD_ALT_BUTTONS | self.SAFETY_PARAM) - self.safety.init_tests() - - def _button_msg(self, buttons, main_button=0, bus=1): - values = { - "CRUISE_BUTTONS": buttons, - "ADAPTIVE_CRUISE_MAIN_BTN": main_button, - } - return self.packer.make_can_msg_safety("CRUISE_BUTTONS_ALT", self.PT_BUS, values) - - def _lkas_button_msg(self, enabled): - values = {"LDA_BTN": enabled} - return self.packer.make_can_msg_safety("CRUISE_BUTTONS_ALT", self.PT_BUS, values) - - def _acc_cancel_msg(self, cancel, accel=0): - values = {"ACCMode": 4 if cancel else 0, "aReqRaw": accel, "aReqValue": accel} - return self.packer.make_can_msg_safety("SCC_CONTROL", self.PT_BUS, values) - - def test_button_sends(self): - """ - No button send allowed with alt buttons. - """ - for enabled in (True, False): - for btn in range(8): - self.safety.set_controls_allowed(enabled) - self.assertFalse(self._tx(self._button_msg(btn))) - - def test_acc_cancel(self): - # FIXME: the CANFD_ALT_BUTTONS cars are the only ones that use SCC_CONTROL to cancel, why can't we use buttons? - for enabled in (True, False): - self.safety.set_controls_allowed(enabled) - self.assertTrue(self._tx(self._acc_cancel_msg(True))) - self.assertFalse(self._tx(self._acc_cancel_msg(True, accel=1))) - self.assertFalse(self._tx(self._acc_cancel_msg(False))) - - -@parameterized_class(ALL_GAS_EV_HYBRID_COMBOS) -class TestHyundaiCanfdLFASteeringAltButtons(TestHyundaiCanfdLFASteeringAltButtonsBase): - pass - - -class TestHyundaiCanfdLKASteeringEV(TestHyundaiCanfdBase): - - TX_MSGS = [[0x50, 0], [0x1CF, 1], [0x2A4, 0]] - RELAY_MALFUNCTION_ADDRS = {0: (0x50, 0x2a4)} # LKAS, CAM_0x2A4 - FWD_BLACKLISTED_ADDRS = {2: [0x50, 0x2a4]} - - PT_BUS = 1 - SCC_BUS = 1 - STEER_MSG = "LKAS" - GAS_MSG = ("ACCELERATOR", "ACCELERATOR_PEDAL") - - def setUp(self): - self.packer = CANPackerSafety("hyundai_canfd_generated") - self.safety = libsafety_py.libsafety - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, HyundaiSafetyFlags.CANFD_LKA_STEERING | HyundaiSafetyFlags.EV_GAS) - self.safety.init_tests() - - -# TODO: Handle ICE and HEV configurations once we see cars that use the new messages -class TestHyundaiCanfdLKASteeringAltEV(TestHyundaiCanfdBase): - - TX_MSGS = [[0x110, 0], [0x1CF, 1], [0x362, 0]] - RELAY_MALFUNCTION_ADDRS = {0: (0x110, 0x362)} # LKAS_ALT, CAM_0x362 - FWD_BLACKLISTED_ADDRS = {2: [0x110, 0x362]} - - PT_BUS = 1 - SCC_BUS = 1 - STEER_MSG = "LKAS_ALT" - GAS_MSG = ("ACCELERATOR", "ACCELERATOR_PEDAL") - - def setUp(self): - self.packer = CANPackerSafety("hyundai_canfd_generated") - self.safety = libsafety_py.libsafety - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, HyundaiSafetyFlags.CANFD_LKA_STEERING | HyundaiSafetyFlags.EV_GAS | - HyundaiSafetyFlags.CANFD_LKA_STEERING_ALT) - self.safety.init_tests() - - -class TestHyundaiCanfdLKASteeringLongEV(HyundaiLongitudinalBase, TestHyundaiCanfdLKASteeringEV): - - TX_MSGS = [[0x50, 0], [0x1CF, 1], [0x2A4, 0], [0x51, 0], [0x730, 1], [0x12a, 1], [0x160, 1], - [0x1e0, 1], [0x1a0, 1], [0x1ea, 1], [0x200, 1], [0x345, 1], [0x1da, 1]] - - RELAY_MALFUNCTION_ADDRS = {0: (0x50, 0x2a4), 1: (0x1a0,)} # LKAS, CAM_0x2A4, SCC_CONTROL - - DISABLED_ECU_UDS_MSG = (0x730, 1) - DISABLED_ECU_ACTUATION_MSG = (0x1a0, 1) - - STEER_MSG = "LFA" - GAS_MSG = ("ACCELERATOR", "ACCELERATOR_PEDAL") - STEER_BUS = 1 - - def setUp(self): - self.packer = CANPackerSafety("hyundai_canfd_generated") - self.safety = libsafety_py.libsafety - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, HyundaiSafetyFlags.CANFD_LKA_STEERING | - HyundaiSafetyFlags.LONG | HyundaiSafetyFlags.EV_GAS) - self.safety.init_tests() - - def _accel_msg(self, accel, aeb_req=False, aeb_decel=0): - values = { - "aReqRaw": accel, - "aReqValue": accel, - } - return self.packer.make_can_msg_safety("SCC_CONTROL", self.PT_BUS, values) - - def _tx_acc_state_msg(self, enable): - values = {"MainMode_ACC": enable} - return self.packer.make_can_msg_safety("SCC_CONTROL", self.PT_BUS, values) - - -# Tests longitudinal for ICE, hybrid, EV cars with LFA steering -class TestHyundaiCanfdLFASteeringLongBase(HyundaiLongitudinalBase, TestHyundaiCanfdLFASteeringBase): - - FWD_BLACKLISTED_ADDRS = {2: [0x12a, 0x1e0, 0x1a0, 0x160]} - - RELAY_MALFUNCTION_ADDRS = {0: (0x12A, 0x1E0, 0x1a0, 0x160)} # LFA, LFAHDA_CLUSTER, SCC_CONTROL, ADRV_0x160 - - DISABLED_ECU_UDS_MSG = (0x7D0, 0) - DISABLED_ECU_ACTUATION_MSG = (0x1a0, 0) - - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiCanfdLFASteeringLongBase": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_canfd_generated") - self.safety = libsafety_py.libsafety - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, HyundaiSafetyFlags.LONG | self.SAFETY_PARAM) - self.safety.init_tests() - - def _accel_msg(self, accel, aeb_req=False, aeb_decel=0): - values = { - "aReqRaw": accel, - "aReqValue": accel, - } - return self.packer.make_can_msg_safety("SCC_CONTROL", self.PT_BUS, values) - - def _tx_acc_state_msg(self, enable): - values = {"MainMode_ACC": enable} - return self.packer.make_can_msg_safety("SCC_CONTROL", self.PT_BUS, values) - - # no knockout - def test_tester_present_allowed(self): - pass - - -@parameterized_class(ALL_GAS_EV_HYBRID_COMBOS) -class TestHyundaiCanfdLFASteeringLong(TestHyundaiCanfdLFASteeringLongBase): - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiCanfdLFASteeringLong": - cls.safety = None - raise unittest.SkipTest - - -@parameterized_class(ALL_GAS_EV_HYBRID_COMBOS) -class TestHyundaiCanfdLFASteeringLongAltButtons(TestHyundaiCanfdLFASteeringLongBase, TestHyundaiCanfdLFASteeringAltButtonsBase): - @classmethod - def setUpClass(cls): - if cls.__name__ == "TestHyundaiCanfdLFASteeringLongAltButtons": - cls.safety = None - raise unittest.SkipTest - - def setUp(self): - self.packer = CANPackerSafety("hyundai_canfd_generated") - self.safety = libsafety_py.libsafety - self.safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, HyundaiSafetyFlags.LONG | HyundaiSafetyFlags.CANFD_ALT_BUTTONS | self.SAFETY_PARAM) - self.safety.init_tests() - - def test_acc_cancel(self): - # Alt buttons does not use SCC_CONTROL to cancel if longitudinal - pass - - -if __name__ == "__main__": - unittest.main() +@pytest.fixture +def safety(): + return libsafety_py.libsafety + + +@pytest.mark.parametrize("param", ( + 0, + HyundaiSafetyFlags.EV_GAS, + HyundaiSafetyFlags.HYBRID_GAS, + HyundaiSafetyFlags.LONG, + HyundaiSafetyFlags.CAMERA_SCC, + HyundaiSafetyFlags.CANFD_LKA_STEERING, + HyundaiSafetyFlags.CANFD_ALT_BUTTONS, + HyundaiSafetyFlags.CANFD_LKA_STEERING | HyundaiSafetyFlags.CANFD_LKA_STEERING_ALT, + HyundaiSafetyFlags.CANFD_LKA_STEERING | HyundaiSafetyFlags.LONG, + HyundaiSafetyFlags.CANFD_LKA_STEERING | HyundaiSafetyFlags.LONG | HyundaiSafetyFlags.CANFD_ALT_BUTTONS, +)) +def test_canfd_safety_configurations_initialize(safety, param): + assert safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, param) == 0 + safety.init_tests() + assert safety.get_current_safety_param() == param + + +@pytest.mark.parametrize(("param", "addr", "length"), ( + (0, 0x12A, 16), + (HyundaiSafetyFlags.CANFD_LKA_STEERING, 0x50, 16), + (HyundaiSafetyFlags.CANFD_LKA_STEERING | HyundaiSafetyFlags.CANFD_LKA_STEERING_ALT, 0x110, 32), + (HyundaiSafetyFlags.CANFD_LKA_STEERING | HyundaiSafetyFlags.LONG, 0x12A, 16), +)) +def test_canfd_steering_limits(safety, param, addr, length): + safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, param) + safety.init_tests() + + safety.set_controls_allowed(False) + assert safety.safety_tx_hook(canfd_steer(addr, length, 0, False)) + assert not safety.safety_tx_hook(canfd_steer(addr, length, 1)) + + safety.set_controls_allowed(True) + assert safety.safety_tx_hook(canfd_steer(addr, length, 10)) + safety.set_desired_torque_last(512) + safety.set_rt_torque_last(512) + assert safety.safety_tx_hook(canfd_steer(addr, length, 512)) + assert not safety.safety_tx_hook(canfd_steer(addr, length, 513)) + assert not safety.safety_tx_hook(canfd_steer(addr, length, -513)) + + +def test_canfd_tx_whitelist_and_buttons(safety): + safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, 0) + safety.init_tests() + assert not safety.safety_tx_hook(packet(0x123, 0, 8)) + assert not safety.safety_tx_hook(packet(0x12A, 1, 16)) + + safety.set_controls_allowed(False) + assert not safety.safety_tx_hook(packet(0x1CF, 0, 8, {2: 1})) + assert not safety.safety_tx_hook(packet(0x1CF, 0, 8, {2: 2})) + assert not safety.safety_tx_hook(packet(0x1CF, 0, 8, {2: 4})) + + safety.set_controls_allowed(True) + assert safety.safety_tx_hook(packet(0x1CF, 0, 8, {2: 1})) + assert not safety.safety_tx_hook(packet(0x1CF, 0, 8, {2: 2})) + assert safety.safety_tx_hook(packet(0x1CF, 0, 8, {2: 4})) + + safety.set_controls_allowed(False) + safety.set_cruise_engaged_prev(True) + assert safety.safety_tx_hook(packet(0x1CF, 0, 8, {2: 4})) + + +def test_canfd_stock_longitudinal_only_allows_cancel(safety): + safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, 0) + safety.init_tests() + assert safety.safety_tx_hook(canfd_accel(0, acc_mode=4)) + assert not safety.safety_tx_hook(canfd_accel(1, acc_mode=4)) + assert not safety.safety_tx_hook(canfd_accel(0, acc_mode=0)) + + +def test_canfd_longitudinal_accel_limits(safety): + safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, HyundaiSafetyFlags.LONG) + safety.init_tests() + + safety.set_controls_allowed(False) + assert safety.safety_tx_hook(canfd_accel(0)) + assert not safety.safety_tx_hook(canfd_accel(1)) + + safety.set_controls_allowed(True) + for accel in (-400, 0, 250): + assert safety.safety_tx_hook(canfd_accel(accel)) + for accel in (-401, 251): + assert not safety.safety_tx_hook(canfd_accel(accel)) + + +def test_canfd_hda2_diagnostic_payload_is_restricted(safety): + param = HyundaiSafetyFlags.CANFD_LKA_STEERING | HyundaiSafetyFlags.LONG + safety.set_safety_hooks(CarParams.SafetyModel.hyundaiCanfd, param) + safety.init_tests() + assert safety.safety_tx_hook(packet(0x730, 1, 8, dict(enumerate(TESTER_PRESENT)))) + assert not safety.safety_tx_hook(packet(0x730, 1, 8, {0: 3, 1: 0x22})) diff --git a/iqdbc_repo/iqdbc/safety/tests/test_hyundai_controller.py b/iqdbc_repo/iqdbc/safety/tests/test_hyundai_controller.py new file mode 100644 index 000000000..71c14b5b1 --- /dev/null +++ b/iqdbc_repo/iqdbc/safety/tests/test_hyundai_controller.py @@ -0,0 +1,39 @@ +import pytest + +from iqdbc.car import gen_empty_fingerprint, structs +from iqdbc.car.hyundai.interface import CarInterface +from iqdbc.car.hyundai.values import CAR +from iqdbc.safety.tests.libsafety import libsafety_py + + +@pytest.mark.parametrize("candidate", list(CAR), ids=lambda candidate: candidate.value) +@pytest.mark.parametrize("alpha_long", (False, True), ids=("stock_long", "openpilot_long")) +def test_controller_frames_match_configured_safety(candidate, alpha_long, monkeypatch, tmp_path): + """Run real controller output through the safety configuration selected for every HKG platform.""" + monkeypatch.setenv("PARAMS_ROOT", str(tmp_path / candidate.value)) + fingerprint = gen_empty_fingerprint() + cp = CarInterface.get_params(candidate, fingerprint, [], alpha_long, False, False) + cp_iq = CarInterface.get_params_iq(cp, candidate, fingerprint, [], alpha_long, False, False) + interface = CarInterface(cp, cp_iq) + interface.update([]) + + safety_config = cp.safetyConfigs[-1] + safety = libsafety_py.libsafety + assert safety.set_safety_hooks(safety_config.safetyModel.raw, safety_config.safetyParam) == 0 + safety.init_tests() + safety.set_controls_allowed(True) + + control = structs.CarControl.new_message() + control.enabled = True + control.latActive = True + control.longActive = alpha_long + control.actuators.torque = 0.01 + control.actuators.accel = 0.0 + + for frame in range(20): + _, can_sends = interface.apply(control.as_reader(), structs.IQCarControl()) + assert isinstance(can_sends, list) + for address, data, bus in can_sends: + packet = libsafety_py.make_CANPacket(address, bus, data) + rejection = f"{candidate.value} frame {frame}: safety rejected address={address:#x} bus={bus} data={data.hex()}" + assert safety.safety_tx_hook(packet), rejection diff --git a/iqdbc_repo/iqdbc/safety/tests/test_nissan.py b/iqdbc_repo/iqdbc/safety/tests/test_nissan.py index 7685f6c40..fe09fa03e 100755 --- a/iqdbc_repo/iqdbc/safety/tests/test_nissan.py +++ b/iqdbc_repo/iqdbc/safety/tests/test_nissan.py @@ -2,8 +2,10 @@ import unittest from iqdbc.car.nissan.values import NissanSafetyFlags -from iqdbc.iqpilot.car.nissan.values import NissanSafetyFlagsIQ from iqdbc.car.structs import CarParams + +# NISSAN_PARAM_IQ_LEAF in safety/modes/nissan.h (IQ safety framework flag) +NISSAN_PARAM_IQ_LEAF = 1 from iqdbc.safety.tests.libsafety import libsafety_py import iqdbc.safety.tests.common as common from iqdbc.safety.tests.common import CANPackerSafety @@ -105,7 +107,7 @@ class TestNissanLeafSafety(TestNissanSafety): def setUp(self): self.packer = CANPackerSafety("nissan_leaf_2018_generated") self.safety = libsafety_py.libsafety - self.safety.set_current_safety_param_iq(NissanSafetyFlagsIQ.LEAF) + self.safety.set_current_safety_param_iq(NISSAN_PARAM_IQ_LEAF) self.safety.set_safety_hooks(CarParams.SafetyModel.nissan, 0) self.safety.init_tests() diff --git a/iqdbc_repo/iqdbc/safety/tests/test_tesla.py b/iqdbc_repo/iqdbc/safety/tests/test_tesla.py index 5ee35f742..cde24518e 100755 --- a/iqdbc_repo/iqdbc/safety/tests/test_tesla.py +++ b/iqdbc_repo/iqdbc/safety/tests/test_tesla.py @@ -6,7 +6,7 @@ import numpy as np import pytest try: from iqdbc.car.tesla.carcontroller import get_safety_CP - from iqdbc.iqpilot.car.tesla.values import TeslaSafetyFlagsIQ + from iqdbc.lvbs.car.tesla.values import TeslaSafetyFlagsIQ except ImportError: pytest.skip("requires openpilot dependencies", allow_module_level=True) diff --git a/iqdbc_repo/iqdbc/safety/tests/test_toyota.py b/iqdbc_repo/iqdbc/safety/tests/test_toyota.py index 10cbf1f82..b5730ebd9 100755 --- a/iqdbc_repo/iqdbc/safety/tests/test_toyota.py +++ b/iqdbc_repo/iqdbc/safety/tests/test_toyota.py @@ -6,7 +6,7 @@ import unittest import itertools from iqdbc.car.toyota.values import ToyotaSafetyFlags -from iqdbc.iqpilot.car.toyota.values import ToyotaSafetyFlagsIQ +from iqdbc.lvbs.car.toyota.values import ToyotaSafetyFlagsIQ from iqdbc.car.structs import CarParams from iqdbc.safety.tests.libsafety import libsafety_py import iqdbc.safety.tests.common as common diff --git a/iqpilot/common/steer_delay.py b/iqpilot/common/steer_delay.py index 258f3d10d..ff50d5434 100644 --- a/iqpilot/common/steer_delay.py +++ b/iqpilot/common/steer_delay.py @@ -3,14 +3,14 @@ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed Chooses which steer-actuator delay the lateral controllers run with: the value the live estimator learned, or the driver's fixed software delay — gated by the -"LagdToggle" param. The pick is mirrored into "LagdValueCache" so consumers that do +"IQLiveSteerDelay" param. The pick is mirrored into "IQSteerDelayCache" so consumers that do not subscribe to liveDelay can still read the current value. """ from openpilot.common.params import Params -_ENABLE_KEY = "LagdToggle" -_FIXED_KEY = "LagdToggleDelay" -_CACHE_KEY = "LagdValueCache" +_ENABLE_KEY = "IQLiveSteerDelay" +_FIXED_KEY = "IQSoftwareSteerDelay" +_CACHE_KEY = "IQSteerDelayCache" def resolve_steer_delay(params, stock_delay): @@ -27,7 +27,7 @@ def cached_steer_delay(): class SteerDelayPublisher: - """Refreshes LagdValueCache every lag message: the learned live delay when the + """Refreshes IQSteerDelayCache every lag message: the learned live delay when the toggle is on, else the actuator delay plus the driver's fixed software offset.""" def __init__(self, car_params): diff --git a/iqpilot/iq_maps/road_data/__init__.py b/iqpilot/iq_maps/road_data/__init__.py index 2c07d28b8..200a8b430 100644 --- a/iqpilot/iq_maps/road_data/__init__.py +++ b/iqpilot/iq_maps/road_data/__init__.py @@ -1,15 +1,21 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +Shared tunables and a small debug logger for the offline road-name / turn-speed path. """ from openpilot.common.swaglog import cloudlog -LOOK_AHEAD_HORIZON_TIME = 15. # s. Time horizon for look ahead of turn speed sections to provide on iqLiveData msg. +# seconds of road ahead we scan for upcoming turn-speed zones published on iqLiveData +LOOK_AHEAD_HORIZON_TIME = 15.0 +# clear the on-screen road name once it has gone this long without a refresh (s) +ROAD_NAME_TIMEOUT = 30 + +R = 6373000.0 # mean Earth radius in metres (great-circle distance math) +QUERY_RADIUS = 3000 # online OSM query reach, metres +QUERY_RADIUS_OFFLINE = 2250 # offline-tile OSM query reach, metres + _DEBUG = False _CLOUDLOG_DEBUG = False -ROAD_NAME_TIMEOUT = 30 # secs -R = 6373000.0 # approximate radius of earth in mts -QUERY_RADIUS = 3000 # mts. Radius to use on OSM data queries. -QUERY_RADIUS_OFFLINE = 2250 # mts. Radius to use on offline OSM data queries. def debug_road_data(msg, log_to_cloud=True): diff --git a/iqpilot/iq_maps/road_data/road_daemon.py b/iqpilot/iq_maps/road_data/road_daemon.py index 5f5ed13de..0e358da07 100644 --- a/iqpilot/iq_maps/road_data/road_daemon.py +++ b/iqpilot/iq_maps/road_data/road_daemon.py @@ -1,11 +1,6 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos """ -# DISCLAIMER: This code is intended principally for development and debugging purposes. -# Although it provides a standalone entry point to the program, users should refer -# to the actual implementations for consumption. Usage outside of development scenarios -# is not advised and could lead to unpredictable results. - import threading import traceback @@ -13,26 +8,27 @@ from openpilot.common.realtime import Ratekeeper, config_realtime_process from openpilot.iqpilot.iq_maps.road_data import debug_road_data from openpilot.iqpilot.iq_maps.road_data.iq_road_layer import IQRoadLayer +ROAD_LAYER_HZ = 1 +ROAD_LAYER_CORES = [0, 1, 2, 3] -def excepthook(args): - debug_road_data(f'IQ maps threading exception:\n{args}') + +def _log_thread_exception(args) -> None: + debug_road_data(f"IQ maps threading exception:\n{args}") traceback.print_exception(args.exc_type, args.exc_value, args.exc_traceback) -def live_map_data_iq_thread(): - config_realtime_process([0, 1, 2, 3], 5) - - live_map_iq = IQRoadLayer() - rk = Ratekeeper(1, print_delay_threshold=None) - +def run() -> None: + config_realtime_process(ROAD_LAYER_CORES, 5) + layer = IQRoadLayer() + rk = Ratekeeper(ROAD_LAYER_HZ, print_delay_threshold=None) while True: - live_map_iq.step() + layer.step() rk.keep_time() -def main(): - threading.excepthook = excepthook - live_map_data_iq_thread() +def main() -> None: + threading.excepthook = _log_thread_exception + run() if __name__ == "__main__": diff --git a/iqpilot/iq_maps/update_vendor_version.py b/iqpilot/iq_maps/update_vendor_version.py index a5eb7d238..757355902 100755 --- a/iqpilot/iq_maps/update_vendor_version.py +++ b/iqpilot/iq_maps/update_vendor_version.py @@ -1,94 +1,74 @@ #!/usr/bin/env python3 """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +Maintainer utility: pin a new pfeiferj/mapd release tag and refresh the checked-in +binary hash. Not used at runtime. """ import argparse import os import re +import sys -from openpilot.iqpilot.iq_maps.vendor_mapd_installer import get_file_hash from openpilot.common.basedir import BASEDIR from openpilot.iqpilot.iq_maps import VENDOR_MAPD_PATH +from openpilot.iqpilot.iq_maps.vendor_mapd_installer import ( + VENDOR_RELEASE_TAG, + sha256_of_file, +) -MAPD_HASH_PATH = os.path.join(BASEDIR, "iqpilot", "iq_maps", "tests", "mapd_hash") -MAPD_VERSION_PATH = os.path.join(BASEDIR, "iqpilot", "iq_maps", "vendor_mapd_installer.py") -RELEASE_SYMBOL = "VENDOR_RELEASE_TAG" +_RELEASE_SYMBOL = "VENDOR_RELEASE_TAG" +_INSTALLER_SRC = os.path.join(BASEDIR, "iqpilot", "iq_maps", "vendor_mapd_installer.py") +# public: the checked-in hash the version test compares the installed binary against +HASH_FILE = os.path.join(BASEDIR, "iqpilot", "iq_maps", "tests", "mapd_hash") +_HASH_FILE = HASH_FILE +_TAG_ASSIGN = re.compile(rf'^{_RELEASE_SYMBOL}\s*=\s*["\'][^"\']*["\']', re.MULTILINE) -def update_mapd_hash(): - mapd_hash = get_file_hash(VENDOR_MAPD_PATH) +def rewrite_pinned_tag(new_tag: str) -> bool: + with open(_INSTALLER_SRC) as f: + src = f.read() - with open(MAPD_HASH_PATH, "w") as f: - f.write(mapd_hash) + patched, count = _TAG_ASSIGN.subn(f'{_RELEASE_SYMBOL} = "{new_tag}"', src, count=1) + if count != 1: + print(f"could not locate the {_RELEASE_SYMBOL} assignment in {_INSTALLER_SRC}; nothing written") + return False - print(f"Generated and updated new mapd hash to {MAPD_HASH_PATH}") + with open(_INSTALLER_SRC, "w") as f: + f.write(patched) + print(f"pinned {_RELEASE_SYMBOL} -> {new_tag}") + return True -def get_current_mapd_version(path: str) -> str: - print("[GET CURRENT MAPD VERSION]") - with open(path) as f: - for line in f: - if line.strip().startswith(RELEASE_SYMBOL): - match = re.search(rf'{RELEASE_SYMBOL}\s*=\s*[\'"]([^\'"]+)[\'"]', line) - if match: - ver = match.group(1) - print(f'Current mapd version: "{ver}"') - return ver - else: - print(f"[ERROR] {RELEASE_SYMBOL} line found but no quoted value detected.") - return "" - print(f"[ERROR] {RELEASE_SYMBOL} not found in file!") - return "" +def refresh_hash_file() -> None: + digest = sha256_of_file(VENDOR_MAPD_PATH) + with open(_HASH_FILE, "w") as f: + f.write(digest) + print(f"wrote binary hash {digest} -> {_HASH_FILE}") -def update_mapd_version(ver: str, path: str): - print("[CHANGE CURRENT MAPD VERSION]") - - with open(path) as f: - lines = f.readlines() - - found = False - new_lines = [] - for line in lines: - if not found and line.startswith(f"{RELEASE_SYMBOL} ="): - new_lines.append(f'{RELEASE_SYMBOL} = "{ver}"\n') - found = True - new_lines.extend(lines[lines.index(line) + 1:]) - break - else: - new_lines.append(line) - - if not found: - print(f"[ERROR] {RELEASE_SYMBOL} line not found! Aborting without writing.") - return - - with open(path, "w") as f: - f.writelines(new_lines) - - print(f'New mapd version: "{ver}"') - print("[DONE]") - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description="Update mapd version and hash") - parser.add_argument("--new_ver", type=str, help="New mapd version") +def main() -> int: + parser = argparse.ArgumentParser(description="Pin a new mapd release tag and refresh its hash") + parser.add_argument("--new_ver", type=str, help='e.g. --new_ver "v2.1.0"') args = parser.parse_args() if not args.new_ver: - print("Warning: No new mapd version provided. Use --new_ver to specify") - print("Example:") - print(" python iqpilot/iq_maps/update_vendor_version.py --new_ver \"v1.12.0\"") - print("Current mapd version and hash will not be updated! (aborted)") - exit(0) + parser.print_help() + print(f'\ncurrently pinned: {VENDOR_RELEASE_TAG} (unchanged)') + return 0 - current_ver = get_current_mapd_version(MAPD_VERSION_PATH) - new_ver = f"{args.new_ver}" - if current_ver == new_ver: - print(f'Proposed mapd version: "{new_ver}"') - confirm = input("Proposed mapd version is the same as the current mapd version. Confirm? (y/n): ").upper().strip() - if confirm != "Y": - print("Current mapd version and hash will not be updated! (aborted)") - exit(0) + target = args.new_ver.strip() + if target == VENDOR_RELEASE_TAG: + reply = input(f"{target} is already the pinned tag — re-run anyway? (y/N): ").strip().lower() + if reply != "y": + print("aborted; nothing changed") + return 0 - update_mapd_version(new_ver, MAPD_VERSION_PATH) - update_mapd_hash() + if not rewrite_pinned_tag(target): + return 1 + refresh_hash_file() + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/iqpilot/iq_maps/vendor_mapd_installer.py b/iqpilot/iq_maps/vendor_mapd_installer.py index 69e9f4f51..96090d4e6 100755 --- a/iqpilot/iq_maps/vendor_mapd_installer.py +++ b/iqpilot/iq_maps/vendor_mapd_installer.py @@ -1,21 +1,24 @@ #!/usr/bin/env python3 -import hashlib """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +Provisions the `mapd` routing binary authored by Jacob Pfeifer (github.com/pfeiferj/mapd). +The binary itself is his work; this module only fetches, verifies and stages it on-device. """ +import hashlib import logging import os import stat import time -import traceback -import requests from pathlib import Path -from urllib.request import urlopen + +import requests from cereal import messaging +from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params -from openpilot.system.hardware.hw import Paths from openpilot.common.spinner import Spinner +from openpilot.system.hardware.hw import Paths from openpilot.system.version import is_prebuilt from openpilot.iqpilot.iq_maps import VENDOR_MAPD_BIN_DIR, VENDOR_MAPD_PATH import openpilot.system.sentry as sentry @@ -23,17 +26,25 @@ import openpilot.system.sentry as sentry VENDOR_RELEASE_TAG = "v2.0.6" VENDOR_RELEASE_URL = f"https://github.com/pfeiferj/mapd/releases/download/{VENDOR_RELEASE_TAG}/mapd" +_VERSION_PARAM = "MapdVersion" +_HASH_FILE = os.path.join(BASEDIR, "iqpilot", "iq_maps", "tests", "mapd_hash") +_HTTP_TIMEOUT_S = 60 +_FETCH_ATTEMPTS = 5 +_NET_PROBE_ATTEMPTS = 10 +_NET_PROBE_INTERVAL_S = 2 + + +def sha256_of_file(path: str) -> str: + """Hex SHA-256 digest of a file on disk.""" + digest = hashlib.sha256() + with open(path, "rb") as handle: + for block in iter(lambda: handle.read(1 << 20), b""): + digest.update(block) + return digest.hexdigest() + def stamp_vendor_version(version: str, params: Params | None = None) -> None: - if params is None: - params = Params() - - params.put("MapdVersion", version) - - -def _expected_vendor_hash_path() -> str: - from openpilot.common.basedir import BASEDIR - return os.path.join(BASEDIR, "iqpilot", "iq_maps", "tests", "mapd_hash") + (params or Params()).put(_VERSION_PARAM, version) class VendorMapdInstaller: @@ -41,141 +52,130 @@ class VendorMapdInstaller: self._spinner = spinner_ref self._params = Params() - def fetch(self) -> None: - self.ensure_directories_exist() - self._download_file() - stamp_vendor_version(VENDOR_RELEASE_TAG, self._params) - - def check_and_download(self) -> None: - if self.download_needed(): - self.fetch() - - def download_needed(self) -> bool: - if not os.path.exists(VENDOR_MAPD_PATH): - return True - if self.get_installed_version() != VENDOR_RELEASE_TAG: - return True - return not self._binary_hash_matches() - - @staticmethod - def _binary_hash_matches() -> bool: - try: - hash_path = _expected_vendor_hash_path() - with open(hash_path) as f: - expected = f.read().strip() - except Exception: - return True - if not expected: - return True - try: - return get_file_hash(VENDOR_MAPD_PATH) == expected - except Exception: - return True + # --- externally consumed surface ----------------------------------------- + def get_installed_version(self) -> str: + return str(self._params.get(_VERSION_PARAM) or "") @staticmethod def ensure_directories_exist() -> None: - if not os.path.exists(Paths.mapd_root()): - os.makedirs(Paths.mapd_root()) - if not os.path.exists(VENDOR_MAPD_BIN_DIR): - os.makedirs(VENDOR_MAPD_BIN_DIR) + for directory in (Paths.mapd_root(), VENDOR_MAPD_BIN_DIR): + os.makedirs(directory, exist_ok=True) - @staticmethod - def _safe_write_and_set_executable(file_path: Path, content: bytes) -> None: - with open(file_path, 'wb') as output: - output.write(content) - output.flush() - os.fsync(output.fileno()) - current_permissions = stat.S_IMODE(os.lstat(file_path).st_mode) - os.chmod(file_path, current_permissions | stat.S_IEXEC) - - def _download_file(self, num_retries=5) -> None: - temp_file = Path(VENDOR_MAPD_PATH + ".tmp") - download_timeout = 60 - for cnt in range(num_retries): - try: - response = requests.get(VENDOR_RELEASE_URL, stream=True, timeout=download_timeout) - response.raise_for_status() - self._safe_write_and_set_executable(temp_file, response.content) - temp_file.replace(VENDOR_MAPD_PATH) - return - except requests.exceptions.ReadTimeout: - self._spinner.update(f"ReadTimeout caught. Timeout is [{download_timeout}]. Retrying download... [{cnt}]") - time.sleep(0.5) - except requests.exceptions.RequestException as e: - self._spinner.update(f"RequestException caught: {e}. Retrying download... [{cnt}]") - time.sleep(0.5) - - # Delete temp file if the process was not successful. - if temp_file.exists(): - temp_file.unlink() - logging.error("Failed to download file after all retries") - - def get_installed_version(self) -> str: - return str(self._params.get("MapdVersion") or "") - - def wait_for_internet_connection(self, return_on_failure: bool = False) -> bool: - max_retries = 10 - for retries in range(max_retries + 1): - self._spinner.update(f"Waiting for internet connection... [{retries}/{max_retries}]") - time.sleep(2) - try: - _ = urlopen('https://sentry.io', timeout=10) - return True - except Exception as e: - print(f'Wait for internet failed: {e}') - if return_on_failure and retries == max_retries: - return False - - return False + def check_and_download(self) -> None: + if not self._binary_up_to_date(): + self._provision() def non_prebuilt_install(self) -> None: - sm = messaging.SubMaster(['deviceState']) - metered = sm['deviceState'].networkMetered - - if metered: - self._spinner.update("Can't proceed with mapd install since network is metered!") + if self._on_metered_link(): + self._say("Metered connection detected — offline maps engine will not download here.") time.sleep(5) return try: self.ensure_directories_exist() - if not self.download_needed(): - self._spinner.update("Offline maps binary is ready.") + if self._binary_up_to_date(): + self._say("Offline maps engine already present and current.") time.sleep(0.1) return - if self.wait_for_internet_connection(return_on_failure=True): - self._spinner.update(f"Downloading vendor mapd [{self.get_installed_version()}] => [{VENDOR_RELEASE_TAG}].") + if self._block_until_online(): + self._say(f"Retrieving offline maps engine [{self.get_installed_version() or 'none'}] -> [{VENDOR_RELEASE_TAG}]") time.sleep(0.1) - self.check_and_download() + self._provision() self._spinner.close() + except Exception as exc: # noqa: BLE001 + self._announce_failure(exc) - except Exception: - for i in range(6): - self._spinner.update("Failed to download OSM maps won't work until properly downloaded!" + - "Try again manually rebooting. " + - f"Boot will continue in {5 - i}s...") - time.sleep(1) + # --- internal ------------------------------------------------------------ + def _expected_hash(self) -> str: + try: + with open(_HASH_FILE) as f: + return f.read().strip() + except OSError: + return "" - sentry.init(sentry.SentryProject.SELFDRIVE) - traceback.print_exc() - sentry.capture_exception() + def _binary_up_to_date(self) -> bool: + if not os.path.exists(VENDOR_MAPD_PATH): + return False + if self.get_installed_version() != VENDOR_RELEASE_TAG: + return False + reference = self._expected_hash() + if not reference: + return True + try: + return sha256_of_file(VENDOR_MAPD_PATH) == reference + except OSError: + return False + + def _provision(self) -> None: + self.ensure_directories_exist() + if self._retrieve_binary(): + stamp_vendor_version(VENDOR_RELEASE_TAG, self._params) + + def _retrieve_binary(self) -> bool: + staging = Path(f"{VENDOR_MAPD_PATH}.part") + last_error: Exception | None = None + for attempt in range(1, _FETCH_ATTEMPTS + 1): + try: + with requests.get(VENDOR_RELEASE_URL, stream=True, timeout=_HTTP_TIMEOUT_S) as resp: + resp.raise_for_status() + with open(staging, "wb") as out: + for chunk in resp.iter_content(chunk_size=1 << 16): + out.write(chunk) + out.flush() + os.fsync(out.fileno()) + os.chmod(staging, os.lstat(staging).st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH) + staging.replace(VENDOR_MAPD_PATH) + return True + except requests.exceptions.RequestException as exc: + last_error = exc + self._say(f"offline maps fetch attempt {attempt}/{_FETCH_ATTEMPTS} did not complete ({exc})") + time.sleep(0.5) + staging.unlink(missing_ok=True) + logging.error("offline maps engine could not be fetched after %d attempts: %s", _FETCH_ATTEMPTS, last_error) + return False + + def _on_metered_link(self) -> bool: + sm = messaging.SubMaster(["deviceState"]) + return bool(sm["deviceState"].networkMetered) + + def _block_until_online(self) -> bool: + for i in range(1, _NET_PROBE_ATTEMPTS + 1): + self._say(f"Waiting for a usable network connection... [{i}/{_NET_PROBE_ATTEMPTS}]") + if self._link_reachable(): + return True + time.sleep(_NET_PROBE_INTERVAL_S) + return False + + @staticmethod + def _link_reachable() -> bool: + try: + requests.head(VENDOR_RELEASE_URL, timeout=10, allow_redirects=True) + return True + except requests.exceptions.RequestException as exc: + logging.debug("network probe failed: %s", exc) + return False + + def _announce_failure(self, exc: Exception) -> None: + for remaining in range(5, 0, -1): + self._say(f"Offline maps engine unavailable; navigation stays online-only. Boot continues in {remaining}s...") + time.sleep(1) + logging.exception("vendor mapd install failed") + sentry.init(sentry.SentryProject.SELFDRIVE) + sentry.capture_exception(exc) + + def _say(self, text: str) -> None: + self._spinner.update(text) if __name__ == "__main__": spinner = Spinner() - install_manager = VendorMapdInstaller(spinner) - install_manager.ensure_directories_exist() + installer = VendorMapdInstaller(spinner) + installer.ensure_directories_exist() if is_prebuilt(): - debug_msg = f"[DEBUG] This is prebuilt, no vendor mapd install required. VERSION: [{VENDOR_RELEASE_TAG}], Param [{install_manager.get_installed_version()}]" - spinner.update(debug_msg) + spinner.update(f"[DEBUG] Prebuilt build; vendor mapd install skipped. " + f"target [{VENDOR_RELEASE_TAG}], param [{installer.get_installed_version()}]") stamp_vendor_version(VENDOR_RELEASE_TAG) else: - spinner.update(f"Checking if vendor mapd is installed and valid. Prebuilt [{is_prebuilt()}]") - install_manager.non_prebuilt_install() - - -def get_file_hash(path: str) -> str: - """Hex SHA-256 of a file's contents.""" - with open(path, "rb") as handle: - return hashlib.file_digest(handle, "sha256").hexdigest() + spinner.update(f"Verifying vendor mapd install. prebuilt [{is_prebuilt()}]") + installer.non_prebuilt_install() diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/.gitkeep b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/.gitkeep new file mode 100644 index 000000000..03cd105ca --- /dev/null +++ b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/.gitkeep @@ -0,0 +1,2 @@ +# NNFF models removed pending retraining on user data. +# latcontrol_torque skips NNFF entirely when this dir has no matching model. diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/ACURA_RDX_3G.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/ACURA_RDX_3G.json deleted file mode 100644 index 68c6079ae..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/ACURA_RDX_3G.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.319796],[0.8197253],[0.2695665],[0.042975243],[0.82591987],[0.8242552],[0.82166827],[0.7989035],[0.78012997],[0.7541669],[0.727379],[0.042928882],[0.042931043],[0.04292182],[0.042691696],[0.042392965],[0.04186602],[0.041271493]],"model_test_loss":0.026207376271486282,"input_size":18,"current_date_and_time":"2023-08-05_00-22-46","input_mean":[[26.074522],[0.02839493],[0.0066744387],[0.002057746],[0.02693295],[0.026884235],[0.027213756],[0.03047188],[0.032183405],[0.03682154],[0.037578877],[0.0020827646],[0.0020767434],[0.002068271],[0.0019987107],[0.001959759],[0.0019052405],[0.0017531246]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.040739167],[2.3032],[0.12316159],[-0.2659433],[-0.14477858],[2.5866256],[0.007428121]],"dense_1_W":[[-0.00041187002,-0.43338582,0.00060599507,-0.1214792,0.11413983,-0.5961203,0.28133482,0.20372222,-0.3518884,0.004369656,0.059917737,-0.8609317,0.057816904,0.6169038,0.3990334,0.008638719,0.40356407,-0.16347249],[2.204209,-0.6977474,0.0003794136,-0.029842956,0.42360333,-0.03850665,0.77470416,0.13669024,-1.1576334,-0.2837559,0.290581,-0.20709048,0.06827377,0.39236906,0.2664924,-0.070944384,0.061474152,-0.18787181],[0.0027994395,1.1713752,3.9056025,-0.2533814,-0.5706249,-0.31465232,-0.28078023,0.9239433,0.8800892,0.45323586,-1.5842354,1.1251147,0.001203793,-0.631376,0.17771868,-0.5216376,-0.3776946,0.2864524],[-0.45875242,-0.35037747,-0.0044959267,0.2115901,0.49776042,0.40634266,0.16292186,0.085123494,-0.9553305,-0.6551008,1.0865217,-0.71530885,-0.122710146,0.41569617,0.053198084,-0.013457165,0.36482632,-0.3238176],[-0.002217434,1.7620963,-1.2475897,0.2861537,2.5786693,1.6882615,2.2971427,0.5035391,-3.1869397,-3.7319245,-1.4041471,-1.1169863,-0.17736337,0.21103925,0.1615338,-0.7596914,0.4106967,0.9845423],[2.4344306,-0.5410767,0.0015357351,-0.4139311,-0.2258391,0.22010726,-0.43920308,0.3511928,0.9479655,0.80018866,-0.516027,0.007953332,0.033446178,-0.082440384,0.35339966,-0.26683265,-0.33867463,0.3848125],[-0.006754755,0.48652485,-0.00026165723,-0.07224382,-0.032497358,0.3571908,-0.30286846,-0.38309038,0.36634418,0.2480767,-0.20110212,0.7545479,0.11547977,-0.7146525,-0.018818611,-0.31016228,0.010726242,0.2242711]],"activation":"σ"},{"dense_2_W":[[0.5528864,0.008744154,0.6015725,0.22935376,-0.51005757,-0.5996119,-0.061544895],[-1.4023882,0.050312754,-0.09053194,-0.5902193,0.3458193,-0.14508769,0.946796],[-1.1020836,-1.510418,0.81544393,-0.40635344,-0.4560999,-0.2849373,1.1164322],[-0.4434681,-0.6467564,0.35384342,-0.4493043,-0.23754148,-0.24804021,0.9237547],[-0.27906877,-0.9630674,0.42410734,-0.76862967,-0.59738564,-0.70335937,-0.18449919],[-0.50024533,-0.013576657,0.25596973,0.105690226,-0.52567744,0.80972326,0.7098216],[-0.8556806,-0.14960146,-0.14877279,0.25888273,-0.18901795,-0.16515623,0.7054368],[-1.041555,0.5246004,0.87523067,-0.4851678,-0.5188004,1.3508142,1.344452],[0.83991337,0.54517484,0.09614608,0.028868627,0.35332617,0.22425945,-0.24393064],[0.48884755,-0.6723522,0.161554,-0.18337585,0.010732531,0.042358696,-0.94669324],[0.7589174,0.44016284,-0.21002136,-0.7584538,-0.1012028,-0.44348133,-0.34792235],[0.68993133,-0.13230318,-0.20205282,0.33807474,0.2551999,-0.7216631,-0.9246813],[0.55567986,0.92921287,-0.3879664,-0.06419992,0.44321644,0.34334105,-0.7811811]],"activation":"σ","dense_2_b":[[0.009339096],[-0.027214382],[-0.19324711],[-0.1799901],[-0.3219004],[-0.0076973503],[0.031202752],[0.1887236],[-0.10121091],[-0.21036065],[-0.02065366],[-0.068702094],[0.096490316]]},{"dense_3_W":[[0.5728007,-0.3089611,0.28924087,-0.5445901,0.35486373,-0.44516575,-0.5423116,0.1779453,0.58426845,0.66963387,-0.31166366,0.6550927,0.50334716],[-0.40078798,-0.027345562,-0.5357739,-0.5126658,-0.5254064,-0.32021227,-0.44433862,-0.79833746,-0.10665151,0.20663711,-0.17090832,0.98109436,0.78809434],[-0.17410587,0.23138371,0.66809905,0.2743278,0.096785605,0.5667218,0.52852666,0.4389385,-0.4016732,0.05424836,-0.7506198,-0.71257013,-0.20795672]],"activation":"identity","dense_3_b":[[0.02470415],[0.1408834],[-0.05001292]]},{"dense_4_W":[[-0.3242929,-0.272474,0.8721407]],"dense_4_b":[[-0.046378713]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/AUDI_A3_MK3.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/AUDI_A3_MK3.json deleted file mode 100644 index 61fac1337..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/AUDI_A3_MK3.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.821153],[1.1607649],[0.47132117],[0.042723242],[1.137403],[1.1458488],[1.154415],[1.1424824],[1.1269064],[1.1112212],[1.0889144],[0.04246643],[0.04255451],[0.042637058],[0.04284904],[0.04293054],[0.04296549],[0.04289919]],"model_test_loss":0.010373540222644806,"input_size":18,"current_date_and_time":"2023-08-05_01-15-19","input_mean":[[22.519371],[-0.051268775],[0.008842468],[-0.0062438333],[-0.049525455],[-0.050104525],[-0.050982136],[-0.044812053],[-0.03977025],[-0.029485626],[-0.022126574],[-0.00628094],[-0.006273981],[-0.00626523],[-0.006110039],[-0.005949586],[-0.0056778532],[-0.005516688]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.145696],[-2.4282207],[-0.0467647],[0.10926833],[0.0520818],[0.04222916],[-0.5462429]],"dense_1_W":[[0.89382285,0.05062796,0.92885584,0.07922598,0.5873072,1.1331865,-0.91537136,-0.13934332,0.17509349,-0.017687947,0.1421727,0.07907387,-0.43241176,-0.29524758,0.64221257,0.25150946,-0.05171897,-0.2579187],[-0.98185164,0.15350275,0.9519401,-0.09016293,0.5030077,0.777908,-0.5172474,-0.1343053,0.060967423,0.059980214,0.10476908,0.17575294,-0.20688392,-0.37559837,0.5713468,0.08849066,0.06383742,-0.21201873],[-0.0056540756,0.34154844,-0.0002563853,0.1807267,0.48449796,1.7143611,-1.3936676,-0.35775846,-0.5523075,-0.15023966,0.5988954,0.72132236,0.18023057,-0.46348006,-0.3817839,0.23941651,-0.06494792,-0.41726813],[-0.01459551,1.354641,6.4718165,-0.45382518,-0.35718468,0.69441503,-0.12716621,-0.10042224,-0.016146144,-0.4092775,-1.1707406,0.24052495,0.18990588,-0.1906599,0.070675336,0.2473157,-0.13808818,0.048208434],[-0.0009390727,1.1310523,0.0082692,-0.10876187,0.25259772,1.0159874,-0.72615826,0.107342415,0.0071694367,-0.065621555,0.13799563,-0.24110964,-0.073862016,-0.496919,-0.3644365,0.16880687,0.13885318,0.15355359],[-0.0016120744,-1.5514591,-0.000675083,0.40327275,0.8975076,-0.8923279,0.7910547,-0.40612024,-0.35091725,-0.101295106,0.38604048,-0.3228168,-0.17239958,-0.3530256,0.58767676,0.15752153,0.060442753,-0.32661223],[0.028779855,2.903487,-0.022664804,0.67652136,0.86524385,1.6721133,1.4576133,1.4279684,0.98554605,0.5130255,-0.469917,-0.0684012,0.4178242,0.3712093,-0.7501333,-0.06791517,0.33725083,-0.09968473]],"activation":"σ"},{"dense_2_W":[[0.72010493,-0.22845428,0.34250122,-0.10947913,-0.09878085,0.19209231,0.3437535],[-0.19205496,-0.07013072,-0.7416267,0.25280657,-0.1804019,0.4552836,0.12560841],[0.3121345,0.351005,0.5316866,0.03252624,-0.057188597,-0.9498188,0.07712814],[-0.16806532,0.25612888,0.43424875,-0.24325378,0.23957624,-0.14204793,-0.13016012],[-0.02399125,-0.71077454,0.03666176,-0.044081435,-0.495433,0.2724298,0.22011437],[-0.24902506,-0.59004927,-0.13717845,-0.5492086,-0.8540712,1.7531782,-0.18482044],[0.045421652,0.13694939,0.35765722,-0.28403643,0.13330263,-0.053298414,0.07322283],[-0.34804162,-0.38957596,-0.1432544,0.071290284,-0.538751,1.1790421,0.29278603],[0.45716798,-0.3516285,-0.2764383,0.4446462,0.76846844,-0.7801458,0.49539566],[0.07269321,-0.15379232,-0.8779124,-0.92490155,-0.91285044,1.7692323,0.028679641],[-0.763075,0.17418097,-0.2823778,0.04659932,-0.030475633,0.37596756,-0.66006523],[-0.30286422,-0.03590232,-0.012065834,-0.16185908,-0.2584895,0.3575371,-0.36891615],[-0.39941847,0.09128256,-0.32452282,-0.36513522,0.06978018,0.028525386,-0.7303688]],"activation":"σ","dense_2_b":[[0.048172507],[-0.07530213],[-0.340101],[-0.022203589],[0.009521725],[0.46328664],[0.004919447],[0.022925986],[-0.15940326],[0.40359482],[-0.14555077],[-0.02970779],[-0.24673922]]},{"dense_3_W":[[-0.32974115,-0.5017099,0.5581341,-0.22340928,-0.03365036,-0.20835784,0.537433,0.5391966,-0.36658195,-0.5869503,0.17776869,-0.013170913,0.49127203],[-0.29820803,0.28987518,-0.24515595,0.25772423,-0.04187076,0.69620353,-0.3389867,0.12667182,0.150237,0.5090255,0.49386412,-0.3637399,-0.01771473],[0.5784079,-0.0028831854,0.43896967,0.60790384,-0.4540079,-0.45909828,0.046820417,-0.56937873,0.530507,-0.1309796,0.32449916,-0.49291292,-0.07336644]],"activation":"identity","dense_3_b":[[0.0460099],[-0.07466251],[0.050609488]]},{"dense_4_W":[[0.13093115,-0.7773025,0.81287336]],"dense_4_b":[[0.057754416]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/AUDI_Q3_MK2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/AUDI_Q3_MK2.json deleted file mode 100644 index 04a37fb73..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/AUDI_Q3_MK2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.7137036],[0.9591701],[0.43025136],[0.042929597],[0.94636554],[0.9494532],[0.9542092],[0.9331239],[0.92229235],[0.90257126],[0.88295245],[0.04270026],[0.042758208],[0.042818923],[0.042808957],[0.04270763],[0.04245825],[0.04215921]],"model_test_loss":0.013933051377534866,"input_size":18,"current_date_and_time":"2023-08-05_03-45-12","input_mean":[[22.835394],[0.021439364],[0.0072024865],[-0.030873412],[0.021618834],[0.022110935],[0.02246376],[0.027221544],[0.027849164],[0.028268991],[0.032981515],[-0.030950077],[-0.030914158],[-0.030886404],[-0.030796975],[-0.03080609],[-0.030815149],[-0.030869272]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.04303998],[0.18157572],[-0.08682473],[2.9495513],[1.4374219],[0.6783021],[-2.7817473]],"dense_1_W":[[-0.0047104284,-0.6137708,0.002341153,0.0833492,0.08768307,-0.81527835,0.6300508,-0.16833228,-0.25419337,-0.031592067,0.122596905,-0.10794349,-0.06970466,0.1521993,-0.04051286,0.059251916,-0.11607053,0.024402162],[-0.06346717,-0.8082159,0.0040190252,0.3896669,0.06872366,-0.7609862,1.0698833,-0.06101861,0.1457311,0.19787341,-0.21086167,-0.07617529,-0.40358907,0.012452437,0.10700336,0.3594503,0.025611963,-0.14057784],[-0.010002668,-1.4602287,-5.6766963,0.03532623,-0.3498076,-0.005860239,0.092076786,-0.22858407,-0.4043539,0.277433,2.0291262,0.044144016,0.06367758,-0.2504535,0.3463553,-0.27935135,0.18728429,-0.15520296],[1.595175,1.1790471,0.33827057,-0.36523697,-0.028244315,0.88139707,-1.6474634,0.3107364,-0.13230316,0.019280735,-0.015979009,0.5001427,-0.13290524,-0.15675303,0.12809546,-0.09519324,-0.046115097,0.14121765],[0.01943066,0.3716076,-0.048877437,-0.3783698,0.8343788,-0.51018566,1.0465596,-0.123417296,-0.446517,0.0398392,0.5281696,-0.3002102,-0.4030578,-0.23385769,0.45266014,-0.15139927,-0.084088355,-0.8366423],[-0.05169121,0.34580684,-0.0006902231,-0.0828817,-0.67921466,1.1092558,-0.4253136,0.008052844,-0.08571924,0.14040273,-0.057995982,0.5459289,-0.1640265,-0.24621837,-0.44702664,0.25875458,-0.16363451,0.07772843],[-1.5420308,-0.0795151,0.32449803,0.09269649,-0.12254087,0.95711464,-0.32903105,0.03880426,-0.24505275,0.3849109,-0.085893035,0.1646195,-0.14589338,-0.44051296,-0.05752575,0.38210398,0.32775694,-0.34554252]],"activation":"σ"},{"dense_2_W":[[-1.1991313,-0.99167293,-0.51472193,0.16773303,0.02101984,0.2913248,1.2563334],[0.50807565,0.2559231,0.3110827,-0.7911515,-0.2996264,-0.76801026,0.21431924],[-0.85551465,-0.3015842,-0.283833,0.5011012,-1.0202202,0.6740454,0.972628],[0.98223805,1.0016109,-0.09864264,0.13172226,-0.12697673,-0.40963414,-0.35780042],[-1.1385525,-0.88758576,-0.2415131,1.0169281,-0.37200353,0.83228046,0.58273304],[0.21168564,-0.01694945,-0.13944875,0.12901805,-0.58597475,-0.23450175,0.07449124],[0.6887359,0.49634412,-0.4524045,-0.5046205,0.80216706,-0.37323585,0.15390924],[-0.86359656,-0.8294278,-0.10975485,-0.111551575,-0.21511969,1.1387116,0.014124521],[0.6704329,0.7197621,-0.16924202,-0.03436297,0.3256051,-0.6220993,-0.3785999],[0.88013136,0.211954,0.26013535,-0.5998456,-0.14124529,-1.0012022,0.30486783],[0.8889406,0.25632593,0.029823503,-0.6760066,0.40066594,-0.6796646,-0.42230535],[-0.09985791,-0.6314821,-0.6048359,-0.28479984,0.022334062,-0.11070772,-0.50172895],[-1.0790496,-0.81828046,-0.26459435,-0.15203167,-0.10264537,0.7340549,0.6219628]],"activation":"σ","dense_2_b":[[0.07743759],[-0.08656865],[-0.028110785],[0.011056744],[0.33631137],[-0.33865649],[0.093462616],[0.28041044],[-0.1485106],[-0.10288075],[-0.118501574],[-0.19659644],[0.23902157]]},{"dense_3_W":[[-0.21247761,-0.3863918,-0.35711917,-0.15159392,-0.3087554,0.27256498,0.059494548,0.79742235,-0.6449726,-0.3814191,-0.6635471,0.14567713,0.6240987],[-0.60485286,0.36261612,-0.3062913,0.5288856,-0.8237054,0.14184983,0.36521724,-0.6798562,0.19129165,0.76819366,0.3231601,0.028053993,-0.89101535],[0.5106036,-0.047764797,0.003893947,0.122273564,-0.616694,-0.30744067,0.10899531,-0.98274595,0.045314062,0.3392997,0.15401444,0.406467,-0.3275237]],"activation":"identity","dense_3_b":[[0.0072817504],[0.054671016],[0.3754705]]},{"dense_4_W":[[0.18990728,-1.0539979,-0.04924367]],"dense_4_b":[[-0.04299712]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/BUICK_LACROSSE.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/BUICK_LACROSSE.json deleted file mode 100644 index dcd89c815..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/BUICK_LACROSSE.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.227712],[1.1068953],[1.0287797],[0.031075474],[1.0763543],[1.0856286],[1.0965383],[1.126149],[1.1471479],[1.1817935],[1.207976],[0.03088383],[0.030962178],[0.031021496],[0.031159075],[0.031329848],[0.031462345],[0.031319857]],"model_test_loss":0.004972144495695829,"input_size":18,"current_date_and_time":"2023-08-31_18-04-43","input_mean":[[24.297255],[0.05408088],[-0.024366971],[0.017203888],[0.04666708],[0.049268622],[0.050475407],[0.05590255],[0.04882452],[0.04647568],[0.05159426],[0.017288238],[0.017341834],[0.017397404],[0.017483119],[0.017647635],[0.018217644],[0.018788869]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.022334022],[-0.100295104],[-0.110021666],[-0.37309307],[-0.18126963],[-0.90585893],[-0.5534994]],"dense_1_W":[[0.0030549474,1.145932,-0.09721581,0.18435507,-0.2573822,-0.19281419,0.43596926,0.1603594,0.10032455,-0.051014125,0.4603509,0.38878915,-0.22585483,-0.29935592,-0.04472448,-0.15199424,0.44078583,-0.19637495],[0.007835068,0.57188964,0.18070067,-0.2610156,-0.17529912,0.14483498,-0.23499107,0.4929414,0.10448897,-0.45648035,0.029684572,0.1314099,-0.16433047,0.2065975,0.07887834,-0.0060373824,-0.20691155,0.13691476],[-0.005327477,1.7886202,2.9505506,0.09841906,-1.9402149,-1.3852259,-0.043792397,0.660079,0.60579574,0.24349208,0.29671067,0.08202194,-0.13981113,0.36684915,0.057882063,-0.41412312,0.31871474,-0.02327852],[1.0903977,-1.1873779,0.14879608,0.040507846,0.040393896,0.13455993,0.9753803,0.085223004,-0.06493875,-0.20206894,0.18746802,-0.24526027,-0.08939371,0.2430548,0.13119027,0.15268146,0.20207612,-0.083613925],[0.0021948,3.2657847,-0.18798442,-0.12689658,-0.30403885,0.3367026,0.91909635,1.7143666,0.045331903,-0.31545398,-0.051042344,-0.3529171,0.29837632,0.09466574,-0.8073861,-0.0039647045,-0.1720164,0.5201512],[1.0928359,1.2096838,-0.14703602,0.018953208,-0.03811592,-0.2855322,-0.8143947,0.05326237,-0.066094,0.064099275,-0.06976516,-0.06933611,0.34876755,-0.25860986,-0.14344722,-0.07053271,-0.20750608,0.025129952],[-0.0055736825,0.64105284,0.10726179,-0.17012087,-0.001185817,0.5677425,-0.93299127,0.09094073,0.0109323105,0.2228847,-0.16700141,0.30421817,0.13674305,-0.49573237,-0.13086164,0.31447932,0.15766789,-0.16813341]],"activation":"σ"},{"dense_2_W":[[0.27341422,-0.47601527,-0.6289435,1.3114856,-0.18440256,-0.69279665,-0.58332384],[-0.34085867,-0.29880068,-0.9368486,0.2080702,0.6225143,-0.6358373,-1.1943169],[0.6918406,0.15412113,0.04159215,-0.6581899,0.24066101,-0.043641392,0.045506563],[-0.026726253,-0.81909335,0.16420767,0.00291583,-0.3189569,-0.5359374,-0.7172654],[-0.8483084,-0.35060802,-0.41203314,-0.5305087,0.47287297,-0.28290507,-0.8737458],[0.35316753,0.90733016,-0.2770915,0.20165613,0.20155826,0.36213335,-0.24496384],[-0.5022167,-0.5612638,0.38854852,-0.018215526,-0.19334692,-0.4468064,-0.86793435],[0.47059315,0.23489894,0.41844767,-0.08509097,-0.31178007,0.11894885,0.5030957],[0.24172585,0.24865924,-0.15847187,-0.7011813,0.48085362,0.14869425,0.23137042],[-0.618487,0.12818213,-0.6849712,0.29365247,0.20846452,-0.063214555,0.125115],[0.5387756,0.06612413,-0.4151303,-0.63775194,0.5008791,-0.059868183,0.5720243],[-0.32397416,-0.08635292,-0.4818767,-0.67876416,-0.5552992,0.2187673,-0.4787086],[-0.89717907,-0.42284042,0.31489655,-0.8514086,-0.7674914,-0.41609457,-0.006730729]],"activation":"σ","dense_2_b":[[0.44311488],[0.11209076],[-0.0894076],[0.1847591],[-0.1593725],[-0.022556875],[0.21991341],[-0.05744998],[-0.057585794],[-0.2627398],[-0.054548565],[0.105285086],[-0.19715697]]},{"dense_3_W":[[-0.35089782,-0.39416888,-0.30615157,-0.46847108,-0.26617768,0.43837857,-0.485962,-0.2902945,-0.17870793,0.2757293,0.6125576,-0.24665116,-0.21227285],[-0.37411463,0.19765407,-0.014807391,0.06321688,0.37360784,0.22288837,-0.116587795,0.029183213,0.6631047,0.11275381,-0.27042058,-0.44573787,0.14713542],[-0.50715375,-0.38213205,0.5145017,-0.6412086,-0.39256987,0.058481824,-0.437418,0.30487192,0.5463277,-0.17863718,0.47274628,-0.5652254,-0.2641463]],"activation":"identity","dense_3_b":[[0.0534896],[0.01632865],[0.023216043]]},{"dense_4_W":[[0.3922371,0.50241,1.2339215]],"dense_4_b":[[0.022297831]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_BOLT_EUV.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_BOLT_EUV.json deleted file mode 100644 index f228dcfa1..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_BOLT_EUV.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.281861],[1.8477924],[0.7977224],[0.047467366],[1.7969038],[1.8168812],[1.8351218],[1.785757],[1.7335743],[1.6658221],[1.5893887],[0.047346078],[0.0473731],[0.047383286],[0.047291175],[0.047300573],[0.04712479],[0.046799928]],"model_test_loss":0.027355343103408813,"input_size":18,"current_date_and_time":"2023-08-05_05-11-44","input_mean":[[21.655252],[-0.07694559],[-0.006081294],[-0.007598456],[-0.07309746],[-0.075890236],[-0.07804942],[-0.076106496],[-0.07184982],[-0.06528668],[-0.060404416],[-0.0077262702],[-0.0077046235],[-0.0076850485],[-0.007687444],[-0.007708868],[-0.0077959923],[-0.008017422]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.35776415],[-0.126288],[0.007988413],[0.03850029],[-0.056796823],[0.0072075897],[0.17376427]],"dense_1_W":[[0.010538558,6.7293744,-0.007391298,-1.035045,-0.47446147,1.0940393,0.08225446,-0.5795131,0.573115,1.82923,-0.16999252,0.8818023,0.03560901,-0.9470653,-1.042151,1.1532398,1.9009485,-1.2265956],[0.009010456,-1.3618345,0.039026346,0.22943486,-0.6669799,-0.768271,-0.16828564,-0.13406865,0.19760236,-0.18953702,-0.019137766,0.1468623,0.26367718,0.4732375,0.73679143,0.62450147,0.30198866,-0.93340015],[-0.044318866,2.2138615,9.620889,-0.66480356,-0.06849887,-0.038568456,-0.30580127,-0.088089585,0.31187677,0.5968372,-1.1462088,0.13234706,0.29166338,-0.69978577,-0.01790655,-0.097928315,-0.56950736,0.7560642],[1.3758256,0.8700429,-0.24295154,0.20832618,-0.7735097,1.0379355,-0.60753095,-0.5457418,-1.0892137,-0.6708325,0.24982774,0.09251328,0.08596103,-0.58034134,-0.3046114,-0.19754426,0.006461508,0.5989185],[0.06314328,-2.492993,-0.28200585,0.49902886,0.8513198,-0.5704965,1.0960953,-0.08426956,-0.76074624,0.10669376,0.02775254,-0.42194095,-0.34657434,-0.10863868,0.17019278,0.0963825,-0.10169116,0.21243806],[0.007984091,-1.9276509,-0.0013926353,0.04057924,1.4438432,1.3440262,-2.506722,1.700801,0.72410774,0.13471895,-0.18753268,0.7303607,0.018133093,-0.71643597,0.07050904,-0.30161944,0.085108586,0.061202843],[0.9413167,-0.9954305,-0.19510143,-0.4711845,-0.12398665,-0.45175523,1.0616771,0.28550953,-0.55543137,-0.21576759,-0.2364377,-0.012782618,-0.050565187,0.257694,-0.20975965,0.00022543047,-0.08760746,0.4983852]],"activation":"σ"},{"dense_2_W":[[-0.71804935,0.017023304,-0.099854074,-0.3262651,-0.402829,-0.12073083,0.13537839],[-0.44002575,-0.1071093,-0.58886194,-0.17319413,-0.21134079,0.23135148,0.0006880979],[-0.55711204,-0.8693639,-0.6443761,-0.7382846,0.18980889,-0.6082511,-0.63103676],[0.11338112,-0.5327033,0.2856197,0.32239884,-0.72682667,0.5302305,-0.45094746],[-0.35197002,-0.14440043,-0.025249843,-0.48697743,0.3340018,-0.25992322,0.0050561456],[0.34757507,0.15670523,-0.14263277,0.50704384,-0.020171141,0.6408679,-0.3074123],[0.40258837,-0.59363264,0.35948923,-0.060853776,-0.0072541097,0.89743376,-0.49789146],[-0.63476,0.29580453,0.1689314,-0.5061521,0.24901053,-0.23218995,0.57968193],[-0.66173035,0.50861925,-0.5845035,-0.6602214,0.8341883,-0.31437424,0.8046359],[0.038493533,0.15464582,-0.04848341,-0.57820857,-0.25891733,-0.47527292,0.21441916],[-0.15464531,-0.07454202,-0.8215851,-0.12614948,-0.5924209,0.00017916794,0.24154592],[0.6091424,-0.112086505,0.1144111,-0.31035227,-0.9237534,0.041003596,-0.3542808],[0.2989792,-0.23780549,0.116059326,-0.6056522,0.5499526,-0.9001413,0.5200723]],"activation":"σ","dense_2_b":[[-0.2638964],[-0.24607328],[-0.15493082],[-0.0071187904],[-0.23515384],[-0.09098133],[-0.034066215],[0.03609036],[-0.03842933],[-0.042302527],[-0.2439947],[-0.16342077],[-0.01030317]]},{"dense_3_W":[[0.45771673,-0.2084603,0.3570187,0.35835707,0.13684571,-0.582958,0.29889587,0.43543494,0.11841301,-0.26185623,-0.4988437,0.5752996,-0.28057483],[-0.19594137,0.050280698,-0.29057446,-0.2829161,-0.16987291,-0.21278952,-0.59946907,0.21295123,0.7040468,0.53549695,-0.52553934,-0.19560973,0.6233473],[-0.19091003,0.08669418,-0.5792192,0.57799137,-0.36263424,0.6037143,0.27898273,-0.30951327,-0.3572644,0.46720102,-0.5403428,0.32415462,-0.60570025]],"activation":"identity","dense_3_b":[[-0.0047377176],[0.023170695],[-0.021546118]]},{"dense_4_W":[[-0.12453941,-1.006034,0.96776205]],"dense_4_b":[[-0.02351544]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_SILVERADO.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_SILVERADO.json deleted file mode 100644 index fe64977fe..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_SILVERADO.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.111214],[1.4682485],[0.57526964],[0.04511676],[1.4448825],[1.4523145],[1.460504],[1.4530647],[1.436759],[1.409998],[1.3768793],[0.04496706],[0.044998076],[0.04501952],[0.044998042],[0.04498694],[0.044818893],[0.04446676]],"model_test_loss":0.022049037739634514,"input_size":18,"current_date_and_time":"2023-08-05_05-39-06","input_mean":[[24.08155],[0.011368711],[0.0031438756],[-0.0055672466],[0.01115314],[0.0110932905],[0.010956869],[0.013351914],[0.012678603],[0.010665299],[0.007861591],[-0.0056356518],[-0.0056050173],[-0.005582452],[-0.0056302436],[-0.0057524433],[-0.0058822],[-0.006047828]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.4668645],[0.0061378293],[0.14334162],[-1.507637],[-3.6057515],[-0.045111466],[0.18928593]],"dense_1_W":[[0.6566544,0.7743814,0.18751603,0.04858998,0.7569071,0.25307912,-2.068015,0.9910395,0.86449015,0.5162737,0.17964111,0.73959017,-0.13406877,-1.2188785,0.051854312,0.557273,0.42717713,-0.4706351],[0.025763594,2.3271172,7.5912685,-0.59063435,-1.0175278,0.07860616,-0.39720893,-1.3828933,0.27263463,0.5794174,-0.941214,0.5112712,0.31876096,-0.38133666,-0.17985544,0.50390506,-0.42106378,0.24962576],[0.05800794,4.917338,-0.050065108,0.5062318,2.31812,2.2346003,0.97258455,2.237544,3.1694891,3.0328865,2.4481356,0.87150276,0.23922867,-0.27206227,-0.76175624,-0.59474605,0.022229204,0.18751834],[0.91351914,0.42640725,0.21792875,-0.6499657,0.42711547,0.46455538,-0.7128904,0.6972329,0.07784378,0.15792462,0.86492527,0.16739717,0.3357893,-0.1592361,0.10722909,0.21031618,-0.019191844,-0.031056747],[-1.390049,0.89916164,0.30032212,0.0886132,0.81011575,-0.3205005,-2.085708,1.6698592,1.496016,0.86138624,0.12484511,0.47975743,-0.41812262,-0.7270122,-0.06460007,0.9231981,0.42574838,-0.64465237],[-0.001402944,-1.1569467,0.0005942974,0.063189715,-0.09013453,-1.2986813,1.6477252,-0.4343868,-0.08533708,-0.27364805,0.21535206,-0.34249792,-0.48679602,0.6684111,0.16701448,0.39430234,0.2199159,-0.27228448],[-1.1195272,0.015763488,-0.200724,0.05122529,0.40223718,0.5024332,-1.402779,-0.47795737,-0.24807225,-0.70503217,-0.21363245,0.76604843,-0.14105192,-0.4387646,-0.28273064,-0.21595778,0.03305617,0.22701742]],"activation":"σ"},{"dense_2_W":[[1.7721981,2.2011127,0.29388586,0.38426542,0.83704543,-2.9152303,0.5229557],[-0.36864644,0.42984635,-0.41658726,-0.041540317,0.18798253,0.38724944,-0.65996665],[-0.52116436,0.2358491,-0.2220775,-0.032654468,-0.48732167,0.3548198,-0.45838025],[-0.2911298,-0.46853513,0.03141412,-0.795555,-0.18514551,-0.08353839,-0.33849046],[-0.67049307,0.10367472,0.4490753,-0.55316794,-0.48152244,0.31841356,-0.14415056],[0.28696507,-1.2001104,-0.55151457,0.95023096,-1.3845363,-0.3174642,-0.3309214],[-0.6142683,0.0910831,-0.18282256,-0.44715023,0.37679994,0.44533804,0.027039269],[0.14790064,-0.27130985,-0.18719442,-0.13985236,-0.22100836,-0.6535676,-0.19135725],[-0.4416883,-0.37975168,-0.43114612,-0.07862877,0.20007153,0.95488816,-0.52858645],[-0.17171355,0.2863653,0.4144529,0.679835,0.34844747,-1.2170105,0.29281953],[0.06252894,0.095131,-0.13292563,-0.6726018,-0.39990836,-0.68776375,-0.36863],[0.7808943,-0.8408942,0.13730413,0.102169715,0.1682241,-0.5337488,1.5183735],[0.11278698,0.10173518,0.10506139,0.4002509,0.16067709,-1.1565727,0.75811535]],"activation":"σ","dense_2_b":[[-1.5210099],[-0.0006081214],[0.021954967],[0.032652497],[0.19418235],[-0.42663833],[0.11631468],[-0.27090475],[0.18836942],[-0.4026297],[-0.3532125],[-0.095932305],[-0.094078794]]},{"dense_3_W":[[-0.08552111,0.15208419,0.3206692,-0.46672416,-0.0039158463,-0.05807648,-0.5021984,0.15186986,-0.59495836,0.2405156,-0.5498271,0.070102595,0.26428217],[-0.63763195,0.14358082,0.45475405,0.4365134,0.5539486,-0.44107583,0.46288002,-0.1564132,0.39014947,-0.55990654,-0.05062592,-0.5582297,-0.45318148],[0.57558644,-0.5381224,-0.6278913,0.21171339,-0.06526249,-0.1312582,0.3146726,-0.45940813,-0.15466015,0.11860342,0.36926913,-0.16175088,0.17500523]],"activation":"identity","dense_3_b":[[-0.03552377],[0.059005316],[-0.037881076]]},{"dense_4_W":[[0.43992618,-0.9712287,0.43158254]],"dense_4_b":[[-0.04844147]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_TRAILBLAZER.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_TRAILBLAZER.json deleted file mode 100644 index d81339bae..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_TRAILBLAZER.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[10.263361],[1.5407822],[1.6990757],[0.031916086],[1.4340314],[1.4340314],[1.4340314],[1.4340314],[1.4340314],[1.4340314],[1.4340314],[0.031784274],[0.031784274],[0.031784274],[0.031784274],[0.031784274],[0.031784274],[0.031784274]],"model_test_loss":0.050728149712085724,"input_size":18,"current_date_and_time":"2023-09-28_17-19-10","input_mean":[[21.170568],[0.0028904085],[-0.01997667],[-0.011566885],[0.0088682],[0.0088682],[0.0088682],[0.0088682],[0.0088682],[0.0088682],[0.0088682],[-0.011584887],[-0.011584887],[-0.011584887],[-0.011584887],[-0.011584887],[-0.011584887],[-0.011584887]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.8283137],[-0.6380811],[-0.14581172],[0.21757337],[-0.17584349],[-0.15822433],[-0.04526756]],"dense_1_W":[[-0.12061483,-2.6186888,-5.533526,1.2848519,0.10997799,0.09768942,0.29055217,-0.4338942,0.45353734,0.40870407,0.74510694,0.035301626,0.1254258,0.06881082,-0.43392724,-0.6579088,0.12848276,0.10206295],[0.47858974,1.0521514,0.13895132,-0.11845431,-0.6055809,-0.30129787,0.10536316,0.36635193,0.062468443,0.16439146,0.7524098,-0.08773286,0.08453637,0.14768569,0.054678865,0.04296218,-0.1013483,-0.017113626],[1.5098917,0.5894743,0.59322363,-0.40857914,-0.04409986,-0.059111845,-0.22999583,0.13513245,0.20424314,0.8996403,0.6257698,-0.012137316,-0.26447135,0.33300093,0.5780546,0.11556365,-0.21325883,-0.11405065],[-0.09270235,4.2095594,-0.03419901,-0.85176253,-0.792438,-1.1375993,-0.95709634,-0.5417718,0.13269264,0.34799594,0.8776221,0.23166949,0.25684002,0.14214455,0.31949127,-0.1842014,-0.048224565,0.06972774],[-0.07368613,7.987101,-1.5705101,-2.7268257,-1.6060512,-2.2150717,-1.7734491,-1.0044583,-0.9965295,-0.53904784,-0.71252525,0.82295734,0.079120055,0.8620408,0.040507376,0.5511871,0.57866305,-0.3000211],[-0.19393307,1.3685007,-0.81581175,-0.65915656,-0.26665,-0.18225093,-0.2348052,-0.613443,-0.4242962,-0.1411918,-0.40366364,0.14329708,-0.15040468,0.111927874,0.35063627,0.2598781,0.044979107,-0.13300987],[-0.15487364,1.5682242,-0.39758956,-1.613167,-1.2005973,-1.3606614,-1.4602566,-0.8778308,-0.8630755,-1.1338134,-1.5346371,0.44767708,-0.07334435,0.46988532,0.38771385,0.18633042,-0.31606805,0.49087706]],"activation":"σ"},{"dense_2_W":[[0.08773213,1.118686,-0.19026187,-0.18222769,0.05527968,-0.51330656,-0.036496755],[-0.5858637,-0.4254996,0.021144927,-0.08652764,-0.21240492,0.2946317,0.2629631],[0.20821263,-0.6136043,-0.2656985,-0.11885001,-0.23193532,0.573116,0.19101338],[1.3147112,0.8279403,-1.8892661,0.22684072,0.5924725,0.18479976,1.5572529],[0.09764118,0.8507632,0.54017293,-0.14499734,-0.08574703,-0.8551757,0.525648],[-0.63802594,-0.65069646,0.26210403,-0.24471927,0.48373717,-0.2968227,0.06695796],[-2.1634326,-0.6064817,-1.8872,1.6661983,0.24116987,-1.8317598,-1.4297333],[0.030689137,0.045585413,-0.619795,-0.3127205,0.00026456476,-1.2520658,-0.021226548],[-0.43981192,-0.6087822,0.26009014,-0.41205314,0.10397853,0.30045325,0.15389265],[-1.4882747,1.6382228,0.1060073,1.4234135,2.3527496,-1.4529006,-0.6220931],[0.32924128,-0.7916863,-0.16856577,-0.49799073,-0.3400066,0.34466445,0.47758287],[-0.3820367,-0.07035885,-0.770717,-0.08017813,-0.4997505,-0.5413408,-0.22099844],[-0.5534209,0.15586813,0.46922186,-0.285645,-0.43601796,-0.5457336,-0.09376932]],"activation":"σ","dense_2_b":[[-0.07499287],[0.056654293],[-0.033568453],[0.012748798],[-0.16169988],[-0.031001234],[0.4491975],[-0.18781444],[-0.022485357],[-0.4145325],[0.05514316],[-0.17725536],[-0.027867718]]},{"dense_3_W":[[0.48439038,0.11946673,-0.10710485,0.2569157,0.55854136,0.69526154,-0.045092683,-0.22340369,-0.057273377,-0.43256047,0.51690865,-0.45954293,0.5041862],[-0.39225766,0.5658039,0.13191655,-0.26512942,-0.45468462,0.029447814,-0.7955542,-0.47096017,0.19746478,-0.40087095,0.6816974,-0.313998,-0.2719639],[-0.20068921,-0.29952648,0.34961987,-0.66211593,-0.47286674,-0.1865282,0.25309294,0.27628332,0.5233655,0.30510098,0.5197866,-0.51454246,0.46288064]],"activation":"identity","dense_3_b":[[0.055204097],[0.070561714],[0.057622224]]},{"dense_4_W":[[-0.5929016,-1.4001877,-0.6662524]],"dense_4_b":[[-0.06424638]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_VOLT.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_VOLT.json deleted file mode 100644 index 881f47c90..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHEVROLET_VOLT.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.342214],[1.5915664],[0.60113484],[0.048193663],[1.5680411],[1.57577],[1.5836853],[1.5711677],[1.5445132],[1.5007596],[1.4529978],[0.047915205],[0.04800539],[0.04808892],[0.04822398],[0.04817677],[0.047881734],[0.047405947]],"model_test_loss":0.019342588260769844,"input_size":18,"current_date_and_time":"2023-08-05_06-09-11","input_mean":[[22.757933],[-0.016342578],[-0.001405228],[-0.014619173],[-0.018091483],[-0.018382493],[-0.019270267],[-0.018759886],[-0.019559544],[-0.017848592],[-0.020014366],[-0.014564899],[-0.01457757],[-0.014600966],[-0.014757987],[-0.014915743],[-0.015121007],[-0.015359475]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.045577038],[-2.8160777],[-0.21418032],[2.9552083],[-0.06852827],[0.029141279],[-0.053249933]],"dense_1_W":[[0.0010664682,1.3813498,-8.153277,-0.009101015,-0.1484779,1.0008405,-1.5930991,-1.195274,0.6136762,0.3560462,-0.30077773,0.93531257,0.14550218,-0.40074933,-0.21716364,0.13834935,-0.0658936,-0.49427196],[-0.7338253,-0.037501235,-0.49922377,-1.0526338,-0.46141604,-1.3649396,0.7309814,-0.91667104,0.044683233,-0.18628967,-0.20878822,-0.2678598,0.48446324,0.51164204,0.09547851,0.41491362,-0.4524314,0.16594785],[-0.0032175342,3.5451593,-0.11421584,-0.2511033,0.27893174,0.6384996,0.80790603,1.3835542,1.8000495,2.249461,1.4026878,0.7851167,-0.35052946,0.041820426,-0.39790183,0.45703772,-0.30459648,0.18287674],[0.72289664,-0.77138704,-0.5025135,-0.49323097,-0.39893976,-0.8779149,0.6848096,-0.58729875,-0.16643623,-0.14427555,-0.15013328,-0.11467142,-0.27280045,0.48508415,0.52080667,-0.0029569597,-0.28170735,0.06367212],[0.00014026981,-2.0353239,0.0060915067,0.4794941,1.1882906,-1.512865,0.80642134,-0.26044324,-0.56213886,-0.365122,0.55078083,-0.34897435,-0.32031298,0.46106994,0.37792024,-0.14116105,0.15597256,-0.32811671],[0.0011494387,1.9060265,8.3941965,-0.3078165,-0.9530427,0.6589645,-1.2487054,-0.541133,0.13451256,0.2805466,-0.33187166,0.9900705,0.2821258,-0.51270896,-0.5130031,-0.28222615,0.042734932,0.27233443],[-0.0014444552,-1.0933362,0.003359957,-0.15052961,0.37165833,1.7087307,-1.4971043,0.673802,-0.108465396,-0.088505454,0.21561684,0.6252258,-0.15019403,-0.34727478,0.08958758,-0.1723621,-0.25557828,0.29778987]],"activation":"σ"},{"dense_2_W":[[0.20810607,-0.13481373,-0.15003344,-0.6067625,-0.31937903,-0.37380016,0.4666911],[0.71834767,0.15669753,-0.11389502,0.27131546,-0.060118295,0.039282244,0.52961355],[-0.27200606,0.43380752,-0.106262706,-0.49363258,0.35659012,-0.01706296,-1.0807354],[-0.79583454,-0.66428274,-0.42157334,-0.52979547,-0.2803004,-0.57637554,0.084149174],[0.1230394,-0.57023287,0.28639448,-0.506744,-0.9920808,0.7510901,0.8584937],[-0.41256845,0.35423175,0.13009231,0.5198333,0.7576573,-0.7053181,-0.3390053],[-0.15090485,0.33375353,-0.64164793,0.57386595,0.25700107,-0.15245672,-0.49020413],[-0.50120676,0.5210849,-0.3282951,0.4276323,1.0257447,-1.0398436,-0.8911315],[0.11402861,-0.41491523,0.247507,-0.39776865,-0.6089287,0.20646147,0.6692102],[0.09411492,0.31819808,0.41330767,0.024243973,0.2314893,0.08529045,0.14911193],[0.5179265,0.20473345,-0.36762783,-0.009045922,-0.19436747,-0.548099,-0.08656279],[-0.69121784,-0.14201449,0.3887621,0.10787631,1.0371574,-0.64747447,-0.73437464],[-0.07860244,-0.597764,0.019551078,0.010199122,-0.7493642,0.66619915,0.121666186]],"activation":"σ","dense_2_b":[[-0.04259814],[-0.053309314],[-0.28045595],[-0.23801634],[0.00944943],[-0.109921046],[-0.037457183],[0.24627604],[-0.0069056284],[-0.04725389],[-0.03361769],[0.044101644],[-0.0009850285]]},{"dense_3_W":[[-0.19631335,-0.47722518,-0.019853225,-0.29363275,-0.625923,0.35145283,0.62401354,0.14337404,-0.25707108,-0.51310915,0.2565006,0.61742216,-0.07952821],[0.5868974,-0.36786363,-0.0177682,-0.45121866,0.68608487,-0.55178356,-0.35236016,-0.7226455,-0.015394288,-0.10650332,0.5391039,0.17791761,0.34196886],[0.16821232,-0.35580373,0.26906335,0.41736925,-0.6979869,0.41801625,0.34707317,0.7784011,-0.10002936,0.32485273,-0.3644285,0.49092358,-0.43872768]],"activation":"identity","dense_3_b":[[-0.019481273],[0.031026587],[-0.03595322]]},{"dense_4_W":[[-0.72340566,0.21244061,-0.67248434]],"dense_4_b":[[0.026229527]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2017_HYBRID.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2017_HYBRID.json deleted file mode 100644 index 3f3339df3..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2017_HYBRID.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.330973],[0.76358914],[0.44177866],[0.03320337],[0.7486537],[0.75224125],[0.7557512],[0.75438327],[0.7465672],[0.74091655],[0.72914463],[0.0329607],[0.03301792],[0.033070814],[0.03301661],[0.03287754],[0.032609064],[0.032365352]],"model_test_loss":0.017960982397198677,"input_size":18,"current_date_and_time":"2023-08-05_11-13-44","input_mean":[[26.671413],[0.058293253],[0.0043816683],[-0.009296047],[0.051497567],[0.053402483],[0.055134997],[0.052773204],[0.048979968],[0.049683023],[0.049251523],[-0.009440276],[-0.009414148],[-0.0093886675],[-0.009580273],[-0.009747584],[-0.0099527575],[-0.010216651]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.0565631],[-0.21411526],[0.8872178],[-0.73335165],[0.15017867],[-0.11148372],[-0.47569525]],"dense_1_W":[[0.3191545,0.60174775,0.28932345,-0.22362822,-0.29199237,0.8730365,-0.521551,0.33030298,0.11159445,0.13276689,-0.38501248,0.6321162,0.3564933,0.05880718,-0.9028309,-0.1717296,-0.26462427,0.5646279],[-0.023215095,-0.07631244,-6.183804,0.4336958,-0.626333,-0.124013826,0.87823963,0.39341283,-1.2711039,-0.14306393,0.85833305,-0.31328923,-0.0057761483,-0.45113772,-0.13151798,0.48965174,-0.36885157,0.3205572],[-2.0049603,0.2562212,0.0074997903,0.15363267,-0.39047363,0.31743163,0.21375915,-0.08397038,-0.018758992,-0.03530787,0.008622982,-0.12050882,0.1763159,-0.0045240982,0.037064075,-0.22826771,-0.13217667,0.04430793],[1.9245242,0.17275631,0.007043335,0.38269743,-0.0008547418,0.339189,-0.33623248,0.24801533,-0.05911935,-0.28433016,0.1669682,0.35657904,-0.114900894,-0.49049523,-0.009977193,-0.22768717,0.10655727,-0.07729294],[0.087077305,-0.6003964,-0.1793809,0.25290787,0.029625213,-0.19629402,0.31878904,-0.08061085,-0.21837004,0.20829839,0.08959171,-0.30037507,0.05254617,-0.03698672,0.101752795,0.042104118,-0.12350318,0.0102602765],[0.0048545175,-0.21292417,0.016375653,-0.053975366,0.13703452,-1.074619,0.58369935,-0.17510407,-0.09377952,-0.14615338,0.07890737,-0.15442717,0.22381516,0.0459976,0.11773441,-0.018902443,0.06373771,-0.104368865],[-0.09855327,-0.1122513,-0.37817958,-0.008812584,-0.5383468,0.15305355,-0.7411861,-0.4013825,0.30445403,0.2985024,-0.095201105,0.47804987,-0.17235969,-0.47166833,0.08742673,-0.13090365,0.016420232,0.102743514]],"activation":"σ"},{"dense_2_W":[[0.15356968,0.03880223,-0.0033031541,0.71969205,-0.5551066,-1.2770053,0.852479],[-0.5814842,-0.4205401,-0.44136125,-0.20208618,0.62991315,1.2533134,-0.07128404],[-0.85485667,-0.27133262,-0.18317062,-0.5872431,0.0009068991,-0.8143884,0.24185239],[0.485521,-0.12876768,0.13680507,0.5191915,-0.33198348,-1.0602576,0.5135775],[0.9131491,-0.41206366,-0.11229955,0.8287815,0.013217909,-0.9175312,0.48983303],[-0.20012985,-0.18931809,-0.43908978,-0.2832052,0.8635579,0.22567339,0.18861422],[0.018180205,-0.3399698,-0.79971874,0.03282556,-0.17152967,0.065363236,-0.11356214],[-0.90014875,0.04525059,-0.62574875,0.21017492,-0.2622857,-0.64767957,-0.17940037],[0.053192608,-0.6683769,0.5183324,0.3161827,-0.43558958,-0.7137959,0.50653154],[-0.084774315,0.02843045,0.11588221,0.48853788,-0.6368693,-0.9299525,0.7869719],[0.12993711,0.85281557,-0.52333623,0.47304502,0.3320428,0.84226716,-0.51683784],[-0.24643111,0.40814662,-0.45649922,0.021663502,0.7520966,0.5363597,-0.51477396],[-0.30198774,-1.0936731,0.5198244,-0.6298923,-0.47961158,-0.46270132,0.17015655]],"activation":"σ","dense_2_b":[[-0.030014591],[0.112632275],[-0.38837513],[-0.009132882],[0.32848948],[0.05313135],[-0.1084323],[-0.38779393],[-0.17182945],[-0.17182226],[0.08077316],[-0.009312498],[-0.20723443]]},{"dense_3_W":[[-0.7191352,0.82575274,-0.4208178,-0.42105228,-0.12746234,0.6060775,-0.36437324,0.011044404,-0.06605932,-0.23161481,-0.07892281,-0.2586107,0.22741254],[-0.03922699,0.28218865,-0.08608041,-0.49147275,-0.75184256,0.37435916,0.46016482,-0.0026176786,-0.28095058,-0.18674251,0.6548586,0.23019525,-0.66313064],[-0.70486027,0.67592573,0.31197107,-0.25772044,-0.32144958,0.59903663,-0.013240984,-0.097765416,-0.4100128,-0.39269626,0.3077929,0.50466055,-0.20290402]],"activation":"identity","dense_3_b":[[0.06820397],[0.04168449],[0.03600891]]},{"dense_4_W":[[-0.5796537,-0.81390715,-0.64433306]],"dense_4_b":[[-0.04506098]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2018_HYBRID.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2018_HYBRID.json deleted file mode 100644 index f8074bf93..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2018_HYBRID.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.210334],[0.9762297],[0.46461004],[0.04707402],[0.9570847],[0.962571],[0.9688103],[0.9626872],[0.9493875],[0.93438673],[0.91365314],[0.046885576],[0.04696745],[0.047010563],[0.047022652],[0.047106303],[0.047075313],[0.0468335]],"model_test_loss":0.01662263832986355,"input_size":18,"current_date_and_time":"2023-08-05_06-34-39","input_mean":[[24.433825],[0.027294964],[-0.007775845],[-0.008583761],[0.028062655],[0.026877884],[0.025869267],[0.024155349],[0.025895124],[0.02763769],[0.028466335],[-0.00856314],[-0.008589166],[-0.008611988],[-0.008814955],[-0.008984508],[-0.009198656],[-0.009352716]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.01408288],[1.6081693],[-0.06155718],[-1.54345],[-0.24193887],[-2.5958166],[-2.5204089]],"dense_1_W":[[0.0027263653,0.8206801,-0.0032928735,0.13611287,-0.076531366,1.5959642,-1.2799904,-0.06996241,0.03039119,0.02152609,0.0963275,0.5368505,0.14871612,-0.3396571,-0.2039869,-0.6619022,-0.039203983,0.4320533],[1.0668212,-0.75284845,0.1227131,0.26535362,0.13527365,-0.2295604,1.1708634,-0.021281645,-0.15021786,0.39643094,0.74283296,-0.3838045,0.003083275,-0.19208938,-0.0017936465,0.703765,-0.092454515,-0.31097198],[0.0027553164,0.7843536,4.634527,-0.26233014,-0.5298467,-0.5220332,-0.74772763,0.2625032,1.8427289,0.32081687,-1.2304753,0.90846735,0.22365782,0.250327,-0.6063961,-0.39930865,-0.18285267,0.079409026],[-1.1514753,-1.0265552,0.13074096,0.38378564,0.7118709,-0.35103342,1.0191414,-0.004307897,-0.1731455,0.13679343,1.0576029,-0.40426365,-0.26618227,0.048847493,0.23475589,0.2227605,0.085375875,-0.30894497],[-0.0047089225,-0.5524328,-0.0045054047,0.66928285,0.064004675,-1.3554454,0.75827724,-0.44520453,-0.070583,0.2953706,-0.17199413,-0.52929235,0.076917104,0.5385476,0.43512538,-0.24582133,0.1710678,-0.17150968],[-0.85862017,0.34829536,0.10180492,-0.16177164,-0.70526654,0.610196,-0.51517403,0.19511817,0.5740542,0.4342128,0.10650083,-0.08206996,-0.14800107,-0.11421001,0.25861365,0.49271822,0.13999887,-0.38721174],[-0.852335,-0.32791263,-0.10090505,-0.21708132,0.70464164,-0.4129493,0.19680835,-0.0039844504,-0.58808166,-0.5447895,-0.055174615,-0.009039755,0.3263737,0.39800122,-0.43388817,-0.2980978,-0.109957084,0.34861532]],"activation":"σ"},{"dense_2_W":[[-0.8770086,-0.024234872,-0.29209283,0.2774463,0.24086247,-0.38808098,0.76261544],[0.7931689,-0.4432339,0.5408512,-0.40607476,0.018381504,0.22573993,-1.2025113],[0.2774073,-0.28390488,0.48924458,-0.10028617,-1.1787524,0.55241233,-0.31903595],[1.187657,-0.90130055,-0.11544119,-0.48425758,-0.5087712,1.5533149,-0.44771603],[0.58252364,-0.7203072,0.46005324,0.2731612,-0.67982006,0.15357131,-0.57816696],[-0.9171702,0.37134174,-0.41417953,0.17179497,0.39356327,-0.10935133,-0.09958233],[-0.66176236,0.14740363,0.07868582,-0.40370503,0.3730389,-0.06752067,0.5966177],[0.057574127,-0.085722245,0.09327541,0.19917345,-0.112103276,0.4723292,-0.71419835],[-0.3262963,-0.03496345,-0.18610413,0.28829092,0.5575449,-0.96931815,0.2509937],[-0.14358501,-0.53553015,0.102502294,0.38049912,-0.011593848,-0.10357873,0.38666174],[1.0979931,-0.5266687,0.011019552,-0.36888388,-0.36552617,0.7437136,-1.0329511],[-0.99298805,0.033587284,-0.0815785,0.2939779,0.17858009,-0.36309564,0.7169502],[0.1916819,-0.3956481,0.23111235,-0.19816011,-0.79406476,0.9587695,-0.5586975]],"activation":"σ","dense_2_b":[[-0.08816166],[0.23371251],[-0.22228523],[-0.015670193],[-0.03642067],[-0.008211963],[-0.17989649],[0.0062512616],[-0.030759228],[-0.15077485],[0.01450626],[-0.07085153],[-0.13338038]]},{"dense_3_W":[[-0.13808444,0.27692232,0.13246109,0.13561308,-0.050800115,-0.3225275,-0.5869831,0.64456654,0.19247706,-0.48861238,0.47843403,-0.009448491,-0.38144258],[-0.18783484,-0.17080472,0.36493075,-0.6014318,-0.6958318,0.33951765,0.06917564,0.34324136,0.5521416,-0.65650636,0.07141213,0.48251265,-0.095275834],[0.67380184,-0.285928,-0.43182224,0.052221615,0.0014595015,0.21199639,-0.06704697,-0.40021017,0.5456471,0.4511299,-0.31108952,0.5755762,-0.41977003]],"activation":"identity","dense_3_b":[[0.05807602],[-0.052454475],[-0.061056226]]},{"dense_4_W":[[0.47078133,-0.7455223,-0.98688024]],"dense_4_b":[[0.054955926]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2019_HYBRID.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2019_HYBRID.json deleted file mode 100644 index e00c5807e..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2019_HYBRID.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.150079],[1.133713],[0.43403986],[0.044542935],[1.116597],[1.1228739],[1.1282343],[1.1087918],[1.0829574],[1.0503302],[1.0201406],[0.044353947],[0.04440376],[0.04444536],[0.044435233],[0.044352584],[0.04415751],[0.04374931]],"model_test_loss":0.021649373695254326,"input_size":18,"current_date_and_time":"2023-08-05_13-22-16","input_mean":[[28.718779],[0.027420705],[-0.0010486431],[-0.006476941],[0.03194379],[0.030714247],[0.029522395],[0.031175172],[0.03329464],[0.03204752],[0.030367676],[-0.006409366],[-0.0064388723],[-0.0064642774],[-0.006523428],[-0.0065177125],[-0.006653054],[-0.0068931]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.1557553],[0.15239237],[-0.7883996],[0.21607175],[-0.10778271],[-0.110362194],[-0.0008402114]],"dense_1_W":[[-0.39730522,-1.2665217,-0.018751338,-0.36011004,0.06413814,0.13557298,0.675142,-0.58107,-0.71815616,-0.67207223,0.8874161,-0.21224383,0.3109732,0.11582158,-0.10825705,0.20035155,0.13655844,-0.11123461],[0.08248368,-0.9288284,0.006650333,-0.3600497,0.048258215,-0.4385164,0.7812643,-0.36598027,-0.17953908,0.0043003927,0.14774609,-0.2284627,-0.15616533,0.35386756,0.5318769,0.081253365,-0.030911509,-0.12792926],[-0.012793936,-0.95197654,0.0013175827,0.4850853,0.06403457,-0.60757506,1.0891476,-0.15639184,-0.07080147,-0.141186,0.14856425,-0.6297083,-0.09511309,0.13792045,-0.003489132,0.39871147,0.23734719,-0.41034752],[0.036720853,-1.1706092,-0.0117205065,0.22939475,0.06332086,-0.27194244,0.6138069,0.0057003004,-0.23597574,-0.20802614,0.23779614,-0.2707945,-0.065516055,0.16179438,-0.1341947,0.014489582,0.27160132,-0.19034316],[-0.017165367,-0.31984007,-5.1292553,-0.09900438,1.891005,1.522304,1.3964776,-0.27762464,-3.1030765,-1.4986553,0.23631042,-0.58467907,-0.44058293,0.4239101,-0.07130837,0.06697376,0.22419664,0.49982306],[-0.029110994,-0.78375465,0.030992711,0.09522315,-0.32218152,-0.18287186,0.20446928,0.2509469,-0.32046452,-0.69563234,0.43957192,-0.2393486,0.0034883572,0.3692833,-0.1480584,-0.21708085,-0.04099675,0.16072796],[0.011984756,0.4372055,0.00038938643,-0.3804347,-0.14191024,0.83822465,-0.75622463,0.1774374,-0.15122366,-0.08789587,0.1162553,0.36315253,0.019167189,-0.015732778,-0.21518882,-0.17138954,-0.06687768,0.16531232]],"activation":"σ"},{"dense_2_W":[[-0.66123444,0.053167176,-0.67734295,-0.43834037,0.30200854,-0.6062845,0.49393648],[-0.5499434,-0.5910183,-0.04735582,-0.9205705,0.29150906,0.18296994,0.49427703],[-0.3087813,-0.6735604,0.1032743,-0.7492757,-0.47998416,0.38746807,-0.3792903],[0.22218491,-0.37423322,-0.68595016,-0.3057585,-0.67376715,0.18519343,0.26224977],[0.12493204,-0.6740838,-0.48158708,-0.11590075,-0.6646322,0.3766876,0.5211831],[0.033400588,-0.37467673,0.13653982,-0.7425377,-0.58915126,-0.44702393,0.15368707],[-0.03525442,0.6467697,0.27980375,0.53180575,0.5175674,-0.2184231,-1.3612056],[-0.26941165,0.034494866,0.54393685,0.823304,0.91855395,-0.5912671,-0.16972241],[0.5912191,0.50708044,0.8906907,0.4043412,-0.6052221,0.9453074,-0.9854745],[-0.1847966,0.29045746,-0.35760128,0.2358291,0.08363469,-0.28862038,-0.6393691],[0.082734466,-0.20940094,0.1263725,-0.61631376,-0.29357114,-0.22268835,0.48448983],[0.008772746,-0.3295119,-0.77102983,-0.37905028,0.1420826,0.19744958,0.12742513],[-0.34957173,-0.4635609,-0.6658351,-0.074581586,-0.137647,-0.031496365,0.17163728]],"activation":"σ","dense_2_b":[[-0.011190517],[-0.11420608],[-0.11911637],[-0.047058385],[-0.05209559],[-0.0067813573],[-0.6960103],[-0.2218484],[-0.638528],[-0.1287715],[-0.13393182],[-0.13222918],[-0.08612358]]},{"dense_3_W":[[-0.56854904,-0.004440354,0.20522526,-0.5189793,-0.5598319,0.004857475,0.7723675,0.08466752,0.3211879,0.22073807,-0.50451374,0.14052922,-0.15547366],[0.4760816,0.49406376,0.28560668,-0.27424216,0.0395443,0.63189626,-0.5996514,-0.59683996,-0.2216528,0.065270856,-0.40737736,0.13047104,-0.32319623],[0.35351506,0.5386659,0.32769755,0.12265874,0.56839216,0.5655456,-0.034122158,-0.18965866,-0.329834,0.10452169,-0.11418242,0.32698897,0.31875592]],"activation":"identity","dense_3_b":[[0.17258255],[-0.16791473],[-0.16998908]]},{"dense_4_W":[[-0.9664698,0.46322697,0.7462367]],"dense_4_b":[[-0.17601651]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2020.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2020.json deleted file mode 100644 index 555843209..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/CHRYSLER_PACIFICA_2020.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[5.693015],[1.1106057],[0.4839505],[0.047381964],[1.0865142],[1.0940344],[1.1007035],[1.0835435],[1.057553],[1.0248959],[0.99939334],[0.047141436],[0.047186267],[0.047211904],[0.04706877],[0.046951234],[0.04684611],[0.04661448]],"model_test_loss":0.013941051438450813,"input_size":18,"current_date_and_time":"2023-08-05_08-16-38","input_mean":[[28.37103],[0.03974344],[-0.014893848],[-0.00037599605],[0.044908416],[0.043708824],[0.042289667],[0.039325528],[0.043006305],[0.04660932],[0.04483933],[-0.00043650295],[-0.0004215664],[-0.0004140165],[-0.0003983723],[-0.00044116066],[-0.00051853625],[-0.00058758573]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.1451855],[-0.15737621],[-0.060310073],[0.6073345],[-0.05780308],[-0.16048814],[-0.23519869]],"dense_1_W":[[0.69470924,-0.6133493,0.0012405561,0.019553972,0.06448226,-0.73440015,1.0196836,-0.032631803,-0.21402587,-0.03535706,0.08963821,-0.4151518,0.04951377,0.21540186,0.08403593,0.30007103,0.0721286,-0.21808833],[-0.0055281483,-0.97871476,0.053892706,0.29578617,0.24488142,-0.9456837,0.31968737,0.23062654,-0.3851994,-0.14804605,0.12488454,-0.59180176,0.1747962,0.582284,-0.056728594,0.052842837,-0.25234208,0.08868016],[0.19908331,-0.23178522,-0.00033343132,0.29788065,-0.2630549,-0.9329808,0.9836051,-0.025557669,-0.046352006,0.021415278,-0.10175714,-0.44916221,0.41586125,-0.027728092,-0.11277255,0.28242412,-0.4416653,0.19147082],[0.49298579,0.29445317,0.0024654444,-0.034087177,-0.32976052,0.7320162,-0.13650697,-0.18142147,0.048409745,0.3485382,-0.1782508,0.17317066,0.0046146074,-0.455786,0.23675595,0.17629597,-0.2908207,0.05100971],[0.0025918921,0.60664314,0.08437282,0.0038275314,-0.26773483,0.7368417,-0.8442401,0.35636544,0.09660225,0.06810851,-0.23716143,0.15216075,0.4089829,-0.25967675,-0.5667884,-0.037151016,-0.22253121,0.35003844],[-0.0069139847,0.5928849,5.9585037,-0.2729994,-1.1027155,-0.5361705,-0.39928573,-0.21191321,1.6408015,0.88942456,-0.5805952,0.711463,1.0614796,0.75551856,-0.25333017,-1.0107019,-0.6404496,-0.4423781],[0.77807605,0.4254286,-0.0070603983,0.13885634,-0.11155952,0.92952013,-1.1097448,0.25786868,0.18906161,-0.19558257,0.03620436,0.5284809,0.28771606,-0.39166483,-0.412538,-0.41851315,-0.53765815,0.6955264]],"activation":"σ"},{"dense_2_W":[[0.14673255,-0.25427318,-0.41763714,-0.57974076,-0.56608886,-0.18331228,0.027660826],[-0.22915831,-0.55615884,-0.4508235,0.34225336,0.5593746,0.40537748,0.7960525],[0.21956417,-0.07734256,0.27312982,-0.3854605,-0.08650003,-0.27906924,0.26293612],[-0.77091247,-0.7756027,-0.9580333,0.765381,0.32493275,-0.51463944,0.7389473],[0.5907749,0.26036587,0.5915251,0.1214773,-0.029054264,-0.13793655,-0.038385104],[0.2536978,-0.44341302,0.088218234,-0.07722079,-0.69654363,-0.04497505,-0.37380072],[0.1492596,0.50270057,0.46113217,0.08208802,-0.44300494,-0.049104072,-0.38107514],[-0.033503003,0.31365246,-0.23077266,-0.51006895,0.10363347,-0.780032,-0.6072311],[0.19008167,0.41587985,0.41156146,-0.36104697,-0.25369507,-0.020715002,0.101388365],[-0.12538931,-0.93145704,-0.38526508,0.757801,0.4460356,0.22134012,0.059445396],[-0.010972688,-0.04331066,-0.5205074,-0.61291635,-0.38937822,-0.5410802,-0.776376],[-2.1453147,-0.70847136,-1.2064056,-0.31943244,0.13231355,1.2215211,-0.11054935],[-0.57651573,-0.17007175,-0.34664136,0.4060285,0.8317285,0.13207953,0.11835387]],"activation":"σ","dense_2_b":[[-0.10427355],[0.11536775],[-0.10146174],[0.08055071],[-0.1175017],[-0.09294055],[-0.12414659],[-0.12894793],[-0.122823305],[-0.0023050748],[-0.09449869],[-0.25891626],[0.0091852965]]},{"dense_3_W":[[0.018232554,0.26810202,0.2565264,0.30350316,0.51860917,0.3029135,0.5572722,0.37361154,0.45107833,-0.48839125,0.3939663,-0.0054893196,0.054042112],[0.4726983,-0.7600223,-0.2362871,-0.7305271,0.3979434,-0.16793822,0.08976205,-0.10595847,-0.5852833,-0.20750386,-0.19634347,-0.16581649,-0.49387524],[0.102563694,-0.77121973,0.49441037,-0.74888134,0.4121642,0.45769525,-0.36120865,0.5654234,0.5058435,0.45810163,0.20354177,-0.564163,-0.42752033]],"activation":"identity","dense_3_b":[[-0.09124249],[-0.07674238],[-0.08837357]]},{"dense_4_W":[[-0.9619778,-0.7475,-0.82428706]],"dense_4_b":[[0.088022344]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GENESIS_G70.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GENESIS_G70.json deleted file mode 100644 index 3e3f833b7..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GENESIS_G70.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.6771574],[0.8306398],[0.44399694],[0.03148828],[0.82453376],[0.82558274],[0.8276523],[0.8249276],[0.82540375],[0.8268513],[0.8293405],[0.031258367],[0.031317297],[0.031381857],[0.031565305],[0.031729955],[0.031927522],[0.031937882]],"model_test_loss":0.0016914892476052046,"input_size":18,"current_date_and_time":"2023-08-05_15-54-16","input_mean":[[25.397608],[0.061366253],[-0.004759293],[-0.017377611],[0.063574664],[0.0629952],[0.06279838],[0.06257633],[0.0642723],[0.06428019],[0.06443743],[-0.017316736],[-0.01732337],[-0.017324336],[-0.017258912],[-0.017273892],[-0.01738509],[-0.017547127]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.5071787],[-0.011610117],[-0.25543153],[-0.2288577],[0.3640026],[-0.20951404],[-0.018084347]],"dense_1_W":[[-0.32076025,0.5609776,0.06455551,0.4650965,-0.3128346,0.29808214,-0.068447836,-0.080615535,-0.1533624,0.086725675,0.0019198896,0.38526085,-0.33096933,-0.4344235,-0.24709408,-0.21656084,0.12910959,0.10089391],[-0.013731939,-0.37048897,1.5160967,1.216611,-0.026065614,-0.012039334,-1.7950301,-0.6103514,1.727483,2.0623763,-0.9575297,0.39149958,-0.218174,-0.51533777,-0.76304054,-0.3384101,-0.10145121,0.34581316],[0.014144666,0.22945884,-0.45639136,0.08440587,-0.19207898,-0.5290964,0.54655564,-0.07094287,-0.41206077,-0.23082434,0.77867293,-0.83082336,-0.31685916,0.3376802,0.18800995,0.28112486,0.5808552,0.0882255],[0.55997515,-0.45515752,-0.3620537,-0.21491247,-0.12751056,0.6437451,0.4513876,0.14484537,-0.012545343,-0.70398337,-0.03420965,0.5712778,-0.34471962,0.2639977,0.15245198,-0.09942475,-0.52654004,-0.39195266],[0.16048487,-2.0932982,0.060834095,-0.43821463,-0.12897933,0.8929607,0.08955616,1.5023427,0.47960326,-0.24697156,-0.2284945,0.3664966,0.36733755,-0.70950145,0.25744,0.16433853,-0.4799496,0.3186391],[0.0031760861,-0.32184288,-0.033980735,-0.4582301,-0.07663507,-0.7593102,0.50883085,0.22713356,-0.20064494,0.3521629,-0.22366937,-0.07778892,-0.2534047,0.56217426,0.41395634,-0.12142341,-0.0027042534,0.03405264],[-0.0017348339,-0.29796287,0.062474936,-0.11221718,-0.23059554,-0.626899,0.10690498,0.5434746,-0.05614545,-0.061325278,-0.2274304,0.29413497,-0.38511482,0.10846904,-0.15861528,0.35446325,-0.38156375,0.18584998]],"activation":"σ"},{"dense_2_W":[[0.08477807,-0.35302192,-0.40779448,-0.5867174,0.13918135,-0.6664157,-0.3491646],[0.3792094,-0.030590685,-0.21691003,0.13814875,-0.22226094,-0.66838443,0.11945859],[0.114434734,0.3219143,-0.65471864,-0.5160347,-0.10297699,-0.546052,0.23859331],[0.4386374,-0.13452144,-0.0146616185,0.408655,0.29078993,-0.45133266,-0.6718732],[0.04953622,-0.309141,-0.028895855,-0.081540965,-0.04211146,0.19563156,0.1549496],[-0.07437576,0.18886302,-0.11578516,-0.02629349,0.5117754,-0.8601534,-0.27231035],[0.07671942,0.0293902,-0.5813721,0.3454169,-0.053973634,0.046247624,-0.35544363],[0.22220099,-0.53176254,0.49601117,0.16283734,-0.41594207,0.14338993,-0.23063558],[0.50082463,0.3444267,-0.5869549,0.31520668,0.3332609,-0.5623406,0.0112578],[-0.05211133,-0.24212956,-0.37504154,-0.24755752,-0.61364114,0.61201805,0.5261763],[0.16144137,-0.5551527,-0.27000764,0.48719284,-0.20183928,0.4279106,0.5559925],[-0.38015607,-0.17513199,0.0054852753,0.49040842,-0.5847223,-0.315286,0.41083756],[0.027273893,0.37111732,-0.29921013,0.35153958,0.6107227,0.058014646,-0.48178723]],"activation":"σ","dense_2_b":[[-0.13192527],[-0.11472918],[-0.2398955],[-0.012978796],[-0.24606323],[-0.16946991],[-0.09656156],[-0.011122704],[-0.13971844],[0.025623204],[-0.01150639],[0.031865247],[-0.14259984]]},{"dense_3_W":[[-0.49097103,-0.38446474,0.19654791,-0.04500209,-0.353884,-0.59052265,-0.26697198,0.25850582,-0.4691939,-0.3658384,0.49351692,-0.21503085,0.43769556],[-0.49650973,-0.24257205,0.27875185,0.056984637,-0.084106766,0.21747197,-0.14523055,-0.062517725,-0.12865941,-0.4967132,-0.47404718,-0.39828455,0.20428851],[0.51754504,0.44354475,-0.12756172,0.60820955,-0.16570193,-0.24837321,0.3779718,-0.12072089,0.33560675,-0.29205063,0.42597872,-0.57351613,0.275068]],"activation":"identity","dense_3_b":[[0.03487869],[-0.013982357],[-0.02665594]]},{"dense_4_W":[[-0.40196383,0.97064435,0.88333386]],"dense_4_b":[[-0.019127952]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GENESIS_GV60_EV_1ST_GEN.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GENESIS_GV60_EV_1ST_GEN.json deleted file mode 100644 index 8d39b0612..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GENESIS_GV60_EV_1ST_GEN.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.8682947],[1.3247597],[0.52117354],[0.053211],[1.3196762],[1.321261],[1.3220409],[1.3065661],[1.2855599],[1.2555516],[1.221194],[0.05287544],[0.052969508],[0.053053025],[0.053157352],[0.05310392],[0.052811027],[0.052315235]],"model_test_loss":0.004652302712202072,"input_size":18,"current_date_and_time":"2023-08-05_17-08-23","input_mean":[[25.097141],[0.030100366],[0.008127931],[0.0017367124],[0.025092127],[0.026649075],[0.027925659],[0.031518627],[0.031421654],[0.03279364],[0.028935509],[0.0016365603],[0.0016674129],[0.0016875914],[0.001713633],[0.0017992958],[0.0018609823],[0.0017497891]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.01906636],[-0.026147846],[-0.06956214],[-0.12893584],[3.3396657],[-0.11347563],[3.4662268]],"dense_1_W":[[0.0016520686,0.43010652,-0.016737647,-0.5847046,0.42132026,0.6080183,-0.36023164,0.04929399,-0.05639926,0.055730373,0.07496767,0.40559384,0.5495037,-0.78057534,-0.3052922,-0.4512687,-0.15058433,0.049945023],[0.0036362763,0.904483,0.001981453,-0.33253717,0.25831643,0.7194124,-0.29999894,-0.4751608,-0.22190008,0.22535524,0.18900982,-0.04392861,0.30455038,-0.40629083,0.551194,0.3208965,0.2746982,-0.6420702],[-0.0013973061,-1.2801182,-4.660272,-0.2299565,0.5036499,1.121957,0.6687826,0.08227576,-0.87890655,-0.816766,0.5726014,-0.48010656,-0.7163965,0.08434925,0.26663804,0.6864054,0.38185596,-0.08777598],[-0.024978189,0.45179686,-0.43001783,-0.19626012,-0.145855,0.3520434,-0.9694731,0.11912776,-0.069412105,-0.65245837,0.3938456,0.88234675,0.2711265,-0.09912691,-0.12296636,0.14305602,-0.12646228,0.12271214],[0.6889864,-1.4383845,-0.5985031,0.43910387,-0.14574279,-0.5830182,0.28500378,-0.18694921,-0.5173389,-0.15667093,0.1595579,-0.3700834,0.11795122,0.28467125,-0.20037529,0.44890952,-0.43353197,0.15507948],[-0.016126553,-0.5084034,-0.3446227,0.13306846,0.16979276,-0.6851119,0.97122914,-0.11992911,-0.38304567,-0.3581892,0.4410937,-0.085785575,-0.17046288,0.43981537,0.31712607,0.29649833,0.20096925,-0.42831364],[0.70960057,1.176625,0.618315,-0.35273266,0.50546986,0.41693547,-0.30839127,0.19819334,0.5911515,0.2822198,-0.22344977,0.06145853,-0.052926417,0.008550686,-0.02682976,-0.34092346,0.41492197,-0.16889408]],"activation":"σ"},{"dense_2_W":[[0.3105403,-0.13943449,-0.5671977,0.7278831,-0.9538581,-0.53992945,0.2537109],[0.25039518,-0.19284537,-0.33849826,0.19139016,-0.13403177,-0.07362739,-0.71186584],[0.077256136,-0.6989092,-0.236067,-0.53454214,0.4003753,0.3068613,-0.50189966],[-0.3387507,0.08022835,-0.13841416,-0.21556431,-0.16097516,0.82565576,-1.0068827],[-0.5129783,-0.64633214,0.6501237,-0.31724972,-0.41725558,0.6616404,-0.8662519],[0.4270751,0.67877465,-0.30108768,-0.16842516,-0.82080853,-0.8198072,-0.14678568],[0.42951444,0.47302562,-0.59648263,0.50122297,-0.4004039,-0.8508191,-0.5640101],[0.31044075,0.4447596,-0.0133176055,0.39672032,-0.13207492,-0.1053544,0.3750294],[-0.49185774,-0.6246744,0.2108288,0.036430668,-0.19068871,-0.684725,-0.5135398],[0.6451895,0.15162985,0.35664967,0.539209,0.24193677,-0.0060984846,-0.38601643],[0.33735067,0.48711634,0.3457868,0.40235066,-0.5442683,-0.8894964,0.083602294],[0.6303491,0.47514284,-0.25302443,0.048399102,-0.6309426,0.071017355,-0.42443976],[-0.028995385,0.6780545,-0.48130322,-0.10078704,-0.35888222,-0.038346574,0.21966858]],"activation":"σ","dense_2_b":[[-0.16421281],[-0.0066147824],[0.2712916],[-0.037723377],[0.009121119],[-0.24584663],[-0.17050697],[-0.28670987],[-0.15715508],[-0.09428354],[-0.21343407],[-0.17752221],[-0.17326371]]},{"dense_3_W":[[0.39673528,0.5029898,-0.77688295,-0.20485383,-0.69867265,0.52573097,0.5760262,-0.057309195,0.38914645,0.11605935,0.3120174,0.22832489,0.5434368],[0.49983713,0.12314057,-0.23971559,-0.29951656,0.01370866,0.3070287,-0.101687245,0.34138146,-0.15633298,-0.5573778,0.6135126,-0.24733001,-0.3987656],[0.041431323,-0.5985834,-0.5442451,-0.052750558,-0.7950125,-0.18662111,0.56161785,0.04896858,-0.3108859,0.44375634,-0.21281773,0.40877533,0.062354703]],"activation":"identity","dense_3_b":[[-0.08339912],[-0.0697586],[-0.070846304]]},{"dense_4_W":[[0.82060516,0.39197603,1.0617381]],"dense_4_b":[[-0.07490547]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GENESIS_GV70_1ST_GEN.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GENESIS_GV70_1ST_GEN.json deleted file mode 100644 index 66e4c7dda..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GENESIS_GV70_1ST_GEN.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[10.192138],[1.2619681],[0.99538904],[0.03173082],[1.390097],[1.3528733],[1.3105861],[1.0981697],[0.9660985],[0.83304054],[0.73382217],[0.031833883],[0.031806096],[0.03176805],[0.031585068],[0.031403936],[0.031049846],[0.03052816]],"model_test_loss":0.08113811910152435,"input_size":18,"current_date_and_time":"2023-09-01_15-46-16","input_mean":[[17.870602],[0.06094058],[0.76994574],[-0.018258877],[0.07383096],[0.06954971],[0.06553388],[0.045131978],[0.034243006],[0.017750643],[0.0021489365],[-0.018112624],[-0.018160766],[-0.018217338],[-0.018421978],[-0.018636575],[-0.018845296],[-0.019152297]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.60173887],[-1.2184482],[-2.5489855],[-0.13953118],[0.6530774],[-1.9541978],[0.6348104]],"dense_1_W":[[0.9151844,-0.69396037,-0.0015744013,0.13417375,0.47273952,0.053828586,-0.2703337,-0.06767218,-0.06996197,0.33860308,0.6809081,0.062160317,0.20090835,-0.39224413,0.20620485,-0.011424855,0.16862637,-0.2757232],[0.28972548,-0.02519699,-0.0015914065,0.16588296,0.18867342,0.054137114,0.08766244,-0.10144043,-0.00023482303,0.035658572,0.3292638,0.025065169,0.02802059,0.040422786,-0.28468195,0.014785016,-0.040343814,0.020054903],[-0.88864183,0.81139094,0.005142466,0.07717855,-0.3736464,-0.48089615,-0.33839747,0.72515595,-0.20632601,0.2192427,0.6845602,0.045920767,-0.0058251703,-0.10204114,0.0328523,0.1720919,0.22784986,-0.39458126],[0.04597544,-0.5142907,-0.039751884,-0.1760501,-2.0647182,-2.079671,-1.7764702,2.893614,2.1160357,0.62820613,-0.58175343,0.13933943,-0.07837348,0.2579554,-0.21817936,0.058899857,0.0867017,-0.2388197],[1.008347,0.6241744,0.0006175654,0.24427246,0.3880548,-0.71216303,-0.08657326,0.43654963,-0.002103242,-0.35102853,-0.72472453,-0.14762312,0.058478996,-0.27061918,0.08358053,-0.05671504,-0.39794087,0.38000095],[-0.75398517,-0.31240758,-0.0035077638,0.042402916,0.03954997,0.38596287,0.3007671,-0.71371967,0.24568759,-0.18542135,-0.63920254,0.012125213,-0.13132948,0.1092853,-0.09679227,-0.19704841,-0.06888792,0.28378332],[-0.2624838,0.19304885,-0.0020451967,-0.42735267,0.5025606,0.020195944,-0.100870304,-0.38624248,-0.1858948,0.15579382,0.32803276,0.24784385,0.31001303,-0.23803873,0.1500903,-0.2607993,0.30487004,-0.11202888]],"activation":"σ"},{"dense_2_W":[[-1.2400194,0.17729802,1.6934681,0.7075426,-0.11226228,-0.83732116,0.33559176],[0.5745533,-0.80457217,-0.6967583,0.08430375,-0.5941207,0.6564719,-0.70027584],[0.013842665,-1.1106777,0.12004836,-0.7758639,-0.7202531,2.1383853,-0.26417783],[0.53778696,-0.9851601,-0.16901778,-0.63449734,-0.5228541,1.452694,-0.5041905],[-0.5252082,0.9113041,0.96822953,-0.2888941,0.19632195,-0.06139024,0.23265024],[0.8556627,-0.5657162,-0.92154366,-0.028895194,-0.5141267,0.72371626,-0.751295],[0.75094503,-0.17778125,-0.7352838,-0.43035126,-0.514307,0.9411462,-0.9285261],[-0.23282954,-0.20877087,-0.41192415,-0.89742875,-1.3174541,-0.15595351,-0.15537289],[-0.7422097,0.3961414,0.3959817,-0.16982703,0.80190444,-0.8246868,1.0364479],[0.84093606,-0.5901947,-0.6232177,-0.35342738,-0.49815804,1.1040002,-0.95394325],[-0.97321624,1.2088536,0.85022783,0.002327647,0.43647796,-0.4797704,0.095545724],[-0.75402004,0.8438213,0.258789,0.092278235,0.5893333,-1.1115283,0.98487294],[0.4652842,-1.1645225,-0.80774826,0.1144249,-0.14423822,0.46821204,-0.4388547]],"activation":"σ","dense_2_b":[[-0.29847553],[0.11241894],[-0.03942593],[-0.045420405],[-0.1453599],[-0.002497385],[0.035479035],[-0.20913747],[-0.13740407],[0.07032733],[-0.21931723],[-0.09019325],[-0.07747503]]},{"dense_3_W":[[-0.3440359,0.13350633,-0.2793149,0.06343626,0.46869245,0.35055122,-0.29592252,0.56705844,-0.35353094,-0.16574235,-0.4968441,0.23517826,0.2515689],[0.034386467,-0.9523351,-0.6150173,-0.43728954,0.3108096,-0.14083374,-0.5916635,-0.62779754,0.5980072,-0.72700554,0.7860504,0.84748363,-0.5247365],[0.67116046,-0.74161327,-0.18781546,-0.6720034,0.46030635,-0.91020125,-0.81438667,0.05195494,0.5849977,-0.87362975,0.42857662,0.74513984,-0.15408307]],"activation":"identity","dense_3_b":[[0.08475188],[0.005057218],[0.099355556]]},{"dense_4_W":[[-0.005187234,0.74306834,1.0122273]],"dense_4_b":[[0.092436805]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GMC_ACADIA.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GMC_ACADIA.json deleted file mode 100644 index 419f3b62e..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/GMC_ACADIA.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.589161],[1.6526152],[1.0296179],[0.04015747],[1.6503558],[1.6541231],[1.6558622],[1.6062601],[1.5521498],[1.4774255],[1.3901185],[0.04013376],[0.040141042],[0.040149838],[0.04013493],[0.040134083],[0.040017467],[0.03965995]],"model_test_loss":0.07666975259780884,"input_size":18,"current_date_and_time":"2023-09-01_17-07-09","input_mean":[[19.16097],[0.00023039858],[0.024997516],[0.0015251928],[-0.006199064],[-0.00511049],[-0.0036440035],[0.008816405],[0.013828324],[0.023007024],[0.03203006],[0.001499254],[0.0015097901],[0.0015188308],[0.0013762622],[0.0012122631],[0.000992458],[0.00083205965]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.8661245],[-1.5837955],[0.037068017],[0.004549992],[-0.0406839],[-3.848253],[-0.14788117]],"dense_1_W":[[1.2300965,2.5310688,-0.033882245,0.9913731,-1.4768931,-0.7604761,-0.016176367,1.7826718,0.97190374,-0.3524215,-0.12235129,0.7071725,0.08818652,-0.7926816,-1.0068728,-1.0829469,-0.41093853,0.41296145],[1.0410483,-2.4898872,0.031385656,-0.8418668,1.7300308,0.6604722,-0.22182828,-1.4516648,-0.7956896,-0.0052562924,0.3286437,-0.90743065,0.20010695,0.67364526,0.8678244,0.9458278,0.45917323,-0.4489016],[0.0042952006,-3.7682223,0.03752664,4.481959,-0.025753722,0.30079904,-0.80541074,-0.8990208,-2.967934,0.3142363,-2.034866,-0.29074013,-0.10882145,-1.6433034,-2.345314,0.3792549,0.5183762,-0.3828322],[0.0351331,0.4335407,-0.72822434,-1.1574517,0.33417597,-0.78198606,-1.2777231,0.73203385,0.5243073,0.3935317,1.6471862,-0.66806847,-1.2980176,-0.995225,0.578557,1.5086068,1.178342,0.093525246],[-0.034333024,0.2399623,0.7163214,0.4258642,0.051805,-0.27961543,0.13171966,-0.043525357,-0.11124441,0.7758175,-2.7231858,1.9812765,0.95424885,-0.516098,-0.3156276,-0.42034206,-0.43856654,-0.9159853],[-3.23608,0.62202907,-0.93510664,-0.31767273,-2.2818325,-0.97344154,-0.47527224,0.8959574,-0.07933676,-1.693229,0.29464307,1.5444574,0.3701407,-0.7764469,0.8500272,1.3425361,-1.7767322,-2.944946],[0.006447974,0.48928446,0.5253896,0.9540034,1.3740003,0.38989055,-0.19158112,-0.6142965,-1.4193783,-0.640289,2.1344078,-0.42348352,-0.5467218,0.13846552,-0.060432374,-0.4456313,0.39513004,-0.17451167]],"activation":"σ"},{"dense_2_W":[[0.75902075,1.1818918,0.018134926,-0.23670888,0.58994615,-0.3951398,1.2811865],[-0.08184867,0.43210924,0.42716455,-0.7389914,-0.42377943,0.07209329,0.11910895],[0.31956765,-0.7480974,-0.19422513,-0.552509,0.07628548,0.6062507,-0.7245184],[0.44447437,-0.041922443,0.13054374,0.43873626,0.6574541,-0.19836801,0.14220871],[-0.0037564328,-0.023460802,-0.6449217,0.5678689,0.5152597,-0.3669055,0.08844841],[0.409556,-0.89736575,0.58308125,-0.16765638,-0.2244067,-0.19765973,-0.13677762],[-2.7548218,3.2813652,1.3716445,-0.96946454,-0.47919014,0.23553993,-0.7080141],[-1.617764,-1.0463123,-0.82542264,0.027710665,0.9964338,-0.6431054,0.35499138],[0.742922,-0.4490962,-0.4472653,0.3055844,-0.051618654,0.53054106,0.6369738],[0.5263451,0.72935253,-1.4179851,-0.7053557,0.10821838,-1.4098617,0.006451496],[-0.32364398,0.039208733,0.77577096,-0.9521098,-1.4651095,-0.26427552,-0.2297292],[-0.5094321,-0.17350426,-0.05012927,-0.42607546,-0.0424127,-0.1761333,-0.87716746],[-0.07377011,-0.38419786,-0.05855057,-0.5455437,-0.9797012,-0.30153883,0.23297796]],"activation":"σ","dense_2_b":[[0.28105608],[0.062468283],[-0.008618305],[-0.010698113],[-0.022834778],[-0.19800517],[0.1661619],[-0.59834546],[0.022396281],[-0.39137623],[0.30498576],[-0.03527624],[0.02751272]]},{"dense_3_W":[[-0.0075695775,-0.27568746,0.09120304,-0.3263692,-0.4094352,-0.0785218,0.37749985,-0.3643959,0.5081887,-0.34113538,0.13756286,-0.17055227,0.43868554],[0.25493667,-0.3818253,-0.41074437,0.32864282,0.3402426,-0.13885908,-0.5030987,0.19186679,0.65157133,-0.14876194,-0.5428901,-0.08314285,-0.57639486],[0.57302797,-0.51000684,-0.18249922,-0.07923711,0.3147604,-0.16800596,-0.7434311,0.7116399,0.39529055,-0.40308496,0.15564886,-0.41269818,-0.55772877]],"activation":"identity","dense_3_b":[[0.033527393],[0.026104666],[0.027110972]]},{"dense_4_W":[[-0.087499,1.1460565,0.99249434]],"dense_4_b":[[0.025334533]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_ACCORD.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_ACCORD.json deleted file mode 100644 index bb7963bab..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_ACCORD.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.558472],[1.1135993],[0.35501274],[0.045823593],[1.1077218],[1.1080649],[1.1080468],[1.0821772],[1.0575596],[1.0226434],[0.98659563],[0.045627955],[0.045635287],[0.04563911],[0.045467082],[0.045263745],[0.04491611],[0.044533264]],"model_test_loss":0.039052750915288925,"input_size":18,"current_date_and_time":"2023-08-05_18-06-12","input_mean":[[26.136148],[0.014033704],[0.008476357],[-0.007713262],[0.014445406],[0.015386044],[0.016355403],[0.020506991],[0.024135882],[0.026870549],[0.02935421],[-0.007780166],[-0.007770314],[-0.0077639683],[-0.0077210055],[-0.007739751],[-0.007798479],[-0.00789042]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.1487079],[4.2139845],[-0.5853092],[0.3086539],[0.032987785],[-4.7810106],[0.016952101]],"dense_1_W":[[0.033758555,1.0444518,3.6611536,-0.40075377,0.7095827,1.3611814,-2.1352289,0.96489286,1.8126475,-0.62583995,-1.966803,-0.1734821,0.15852115,-0.3967776,-0.14440706,0.8157315,0.17390618,-0.23260796],[2.1500878,-0.45053038,1.2581933,-0.05246604,0.5019536,1.7019817,-1.8193591,1.3068173,1.0780432,0.6126558,-1.1160796,0.19838658,-0.084695324,-1.2091074,0.5595109,0.74877197,0.30207658,-0.6453137],[0.458296,-0.21370786,0.0019734737,-0.30963984,0.8088786,-1.7420303,0.60466176,0.14915113,-0.12689793,0.052364115,-0.042618364,-0.5170238,0.26220888,0.18760274,0.37973043,0.15806,0.0022146539,-0.07045257],[-0.66763306,-0.4096175,-0.0016955894,0.04425929,0.21008201,-1.7331837,0.9467672,0.58569306,0.23827136,-0.2415081,-0.15301658,-0.28669143,-0.2599793,-0.11007419,0.6052918,0.17952923,0.24594603,-0.31397706],[1.0145541,-0.3317505,-1.4991609,0.013690285,-0.9575213,-1.383604,0.028956244,0.41788918,0.24457058,-0.094164655,-0.13030116,0.17948826,-0.03794582,0.01309437,0.35534826,-0.26917398,-0.29215142,0.27303904],[-2.7000756,0.31637338,1.4000112,0.08876083,0.6678543,0.9836755,-1.5750684,1.1129849,0.9943397,0.5684742,-1.1145275,0.5888766,-0.13174123,-0.9658693,-0.413828,0.7263344,0.11292254,-0.23350726],[-0.12401558,5.324601,7.171819,-0.19341947,2.5473533,3.2746146,3.0563648,3.367963,2.8771386,2.6749191,2.9917984,-0.14726077,-0.13394955,-0.76174796,1.426001,1.2234408,-0.7090158,-0.6628128]],"activation":"σ"},{"dense_2_W":[[0.5621434,0.992517,-0.6983796,-0.91716,-0.054338105,0.607339,0.45212823],[0.22474639,0.22895367,0.6111215,0.046989255,-0.030409865,-0.61481434,0.10029722],[0.16454774,-0.29756203,1.1110828,0.59235257,-0.18411039,-0.6023632,-0.23720202],[-0.3528499,-0.6570399,0.49941105,0.47395417,0.27583507,0.08116056,0.20804141],[0.07139761,-0.070093624,0.5590774,0.7634218,-0.49971566,0.5975401,0.7334796],[0.44444433,1.8885437,0.35532534,-0.82639766,1.279296,-0.86160696,2.6706583],[0.44448185,-0.24610248,-2.495731,-0.89490926,0.11747124,0.62402964,0.5182057],[0.23551048,0.42742857,-0.5775537,-0.6272091,-0.27731383,-0.09396491,-0.51651603],[0.42865852,0.32447976,-0.29923168,0.340756,0.013832209,0.41082326,0.21667421],[-0.32736444,0.4769656,0.977129,0.5856738,0.10249221,-0.54967755,-0.2428743],[0.25369433,-0.2204579,-1.0649059,-0.2733619,-0.049029216,0.4437149,-0.11450898],[-0.24868779,0.44613084,-0.27166238,0.5614397,0.5230158,-0.24676293,0.17946567],[-0.2634003,-0.48613355,-0.04385666,-0.65893304,-0.30746424,0.15454659,-0.53632504]],"activation":"σ","dense_2_b":[[0.19822486],[0.017528722],[-0.010497578],[-0.06445187],[-0.039755665],[0.17356244],[0.025937805],[0.023149397],[0.002431535],[0.006409766],[0.0033689209],[-0.057484128],[-0.2775116]]},{"dense_3_W":[[-0.647888,0.20968881,0.6033078,0.67215437,0.20472567,-0.14839841,0.13453817,-0.14604588,0.00843544,0.2830037,-0.54673946,0.60688186,-0.4934583],[-0.18505706,0.2708935,-0.37541804,-0.3327015,-0.14934263,-0.59043384,-0.5975454,-0.34455526,0.34356502,-0.1237087,0.032155972,-0.11825379,0.032004077],[-0.12307207,-0.14105205,-0.69863325,-0.65025413,-0.45728275,0.5245935,0.46122637,0.372422,0.2177389,-0.6267706,0.32869118,0.34049797,-0.5515101]],"activation":"identity","dense_3_b":[[0.028380467],[0.04344171],[-0.028022127]]},{"dense_4_W":[[-1.151408,-1.0946046,0.9045305]],"dense_4_b":[[-0.033447456]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CIVIC.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CIVIC.json deleted file mode 100644 index debdaaf7d..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CIVIC.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.880729],[1.3764424],[0.4036752],[0.044919465],[1.357929],[1.3648189],[1.3701559],[1.3636794],[1.3427843],[1.3031353],[1.2558507],[0.044844456],[0.04486737],[0.044886783],[0.044833656],[0.044710048],[0.04439941],[0.044009637]],"model_test_loss":0.03750712797045708,"input_size":18,"current_date_and_time":"2023-08-06_03-39-56","input_mean":[[23.76268],[0.025191484],[-0.0054714084],[-0.010682941],[0.027966013],[0.026647689],[0.025542766],[0.022714077],[0.020973299],[0.023003811],[0.02802845],[-0.010661417],[-0.010671549],[-0.010681824],[-0.0107730925],[-0.010828986],[-0.010959005],[-0.011070088]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.5776205],[-0.23610623],[0.105955176],[0.07035416],[-0.44049412],[-4.875287],[0.95284677]],"dense_1_W":[[2.6162603,0.96552926,-1.1709021,0.68316555,-0.83422256,-1.2780359,0.2215925,-0.363209,0.3182224,0.050232545,-0.16977811,0.15275992,0.01305875,-0.24862735,-0.3824611,-0.32907623,-0.08854755,0.29336992],[-0.033986192,-0.4997676,-3.4389174,0.7424149,0.664207,0.14749247,0.5930936,-0.7861187,-1.5643623,-0.66575646,1.7639327,-0.63187826,-0.30908775,0.22797343,0.36383292,-0.43728524,-0.08584815,0.0859059],[-0.399227,0.95630413,-0.00024232137,-0.15680003,-0.657746,0.88117325,-0.28739563,-0.40365663,0.13200954,0.17651056,-0.119062886,0.5858267,-0.21834603,-0.06490571,-0.011869801,-0.46006832,0.055071417,0.16692579],[-0.5654201,-0.9509558,0.00096591073,-0.043163724,0.4077403,-1.0859221,0.6999001,0.40714318,-0.08873732,-0.07508248,-0.009093482,-0.46344966,-0.19199978,0.4810677,0.48018777,-0.28993973,0.41181335,-0.27362508],[-0.027356783,-4.2967224,-0.03678484,-0.32151344,-0.73972255,-2.5777402,-3.2287362,-2.5549042,-1.4497441,-0.43103775,0.6453438,-0.17506233,-0.31516784,0.5563384,0.85075074,-0.57829696,-0.19835036,-0.024371902],[-2.47195,1.7926816,-1.1769953,0.16563822,-0.82507175,-1.0493809,-0.32214803,-1.1703736,0.2470295,0.2510944,-0.11734796,0.13303131,0.030326199,-0.00082738034,0.023316598,-0.33300236,-0.31752133,0.38321474],[2.1512134,1.7400922,-1.7055479,-0.3629506,-1.7764045,-0.28031406,-1.3791944,-0.80302006,-0.122044094,0.8002589,-0.3441996,-0.07645867,0.23166081,-0.38216463,0.64409703,0.11736102,0.22685654,-0.30116174]],"activation":"σ"},{"dense_2_W":[[-0.52089065,-0.064282656,0.9368965,-0.78820074,0.18612167,0.050849117,0.27317494],[0.71986425,0.006931284,-0.083075926,-1.1616415,0.027728708,-0.928848,0.83347905],[0.8144789,0.20632064,-0.71373665,-0.06819771,0.9545801,-0.4286985,0.42867258],[0.71121395,0.06992666,-0.8302117,0.07830932,0.25297147,0.0047203694,-0.0066684796],[-0.5690574,-0.14917742,-0.3785819,0.9758459,0.28018865,0.41372767,-0.21782406],[0.13315567,-0.4577933,-0.1426717,0.19464079,0.008886417,-0.116589725,0.08225403],[-0.9950312,-1.3679215,0.091107205,0.9272021,1.1016536,-1.3227009,-1.2095336],[-0.3986191,-0.9487305,0.38871515,-0.08156303,0.95174986,-0.6304789,0.13525334],[0.2225127,-0.2169731,0.9058736,-0.5802039,-0.24850035,-0.28582534,0.3907818],[-0.5881804,-0.044960845,-0.90182215,0.8056298,0.5574692,1.0463717,-0.5374416],[-1.2164664,-0.40320966,0.53783023,0.27278855,-0.49228838,-0.14903766,-0.8090045],[-1.2831542,0.4933893,0.021853147,0.071227364,-1.4159098,0.76011354,-0.8172033],[0.078262046,-0.5118518,0.22079428,-0.02778036,-0.222457,0.23040481,-0.66731334]],"activation":"σ","dense_2_b":[[0.05072228],[-0.1091474],[0.1004324],[0.021801215],[0.03440032],[-0.07559257],[0.18204498],[-0.008477362],[0.033497173],[-0.15622234],[-0.088286996],[-0.1264465],[-0.09580737]]},{"dense_3_W":[[-0.49234378,-0.12957415,0.5802615,0.4467619,0.590399,0.24340731,-0.5555279,-0.66425663,-0.4981453,0.60517937,-0.56258386,-0.26889455,-0.35886267],[-0.60045487,-0.55883497,-0.3071459,0.07875048,0.5536381,-0.32903612,0.14948905,0.46808386,0.28372547,0.3629737,0.22399715,-0.5433762,-0.15223768],[-0.46732837,0.03954109,0.09032384,-0.38590652,0.39412647,-0.153768,0.03560084,-0.11765058,0.35194537,0.3046047,-0.094702706,0.3176626,-0.32317603]],"activation":"identity","dense_3_b":[[0.051931284],[0.06253407],[0.04909886]]},{"dense_4_W":[[-1.265387,-0.37792373,-0.20574242]],"dense_4_b":[[-0.04775983]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CIVIC_2022.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CIVIC_2022.json deleted file mode 100644 index 4a5872bce..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CIVIC_2022.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.358706],[1.0686424],[0.34114116],[0.044889364],[1.068699],[1.068358],[1.0675814],[1.045456],[1.0242518],[0.99177456],[0.9590156],[0.04477875],[0.04480059],[0.04482342],[0.04474932],[0.04458978],[0.044322193],[0.043946933]],"model_test_loss":0.035726360976696014,"input_size":18,"current_date_and_time":"2023-08-06_06-15-03","input_mean":[[24.615007],[-0.03660665],[0.0016246386],[-0.006489807],[-0.0361033],[-0.035993658],[-0.036171526],[-0.03401853],[-0.031212736],[-0.02772113],[-0.025683384],[-0.0064613656],[-0.0064720884],[-0.006487653],[-0.0065700756],[-0.0065773614],[-0.0066702664],[-0.0067906133]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.9387486],[1.7947302],[-2.419479],[-0.046714567],[-0.07710784],[-0.011005453],[2.2013001]],"dense_1_W":[[1.5500982,-0.562216,0.82173073,1.1276568,-1.1044303,2.0344303,-0.5962017,0.43611562,0.6137577,0.54552734,-0.40140414,0.13477002,-0.33703992,-0.995159,-0.5198411,0.6988811,0.23579559,-0.43389362],[1.9096831,0.4647536,-1.062686,-0.18994598,-0.7350096,1.1260368,-1.2783738,-0.017420385,-0.32890928,-0.6363917,0.1548712,0.10676455,0.18015237,-0.0953862,-0.13519493,0.2339727,0.07321837,-0.04309801],[-1.3224562,0.034447707,0.7349111,0.15789251,-0.54802585,0.91166073,-0.5362905,0.5046039,0.30484954,0.5900371,-0.38941008,0.33457753,-0.27889228,-0.6909375,-0.14148402,0.97603106,-0.13406259,-0.30469695],[-0.0017459231,-0.09968895,-0.014508084,0.23403876,0.836069,-1.5712544,0.19792208,0.34136322,0.15050764,-0.2420643,-0.05131571,-0.09686847,-0.47325152,0.21186271,0.033762608,0.17737845,0.0014673215,-0.12473483],[0.00029148505,-0.6372151,-0.0053334557,-0.05010357,0.99977154,-1.0182008,-0.14067085,0.3974594,-0.2723742,0.04584643,0.073329695,-0.34156838,-0.11684916,0.11896246,0.34009737,0.6478362,0.13086675,-0.43019354],[-0.0077469624,-0.1509263,-3.2484512,0.16014525,-0.5749223,-0.9640095,0.9543776,-0.7414716,-0.7872326,0.2741354,1.5463,-0.3455074,0.08961764,0.027934242,0.045294646,0.23221987,-0.1519019,8.7261986e-5],[2.0402718,-0.72642046,1.1085396,0.08754884,0.35070625,-0.522105,1.2273571,-0.049034014,0.7027618,0.56165534,-0.22607273,0.21941654,0.19681507,0.25899538,-1.0231488,-0.19570431,-0.065851234,0.37131593]],"activation":"σ"},{"dense_2_W":[[-0.60671103,-0.10295715,-0.2275175,0.703453,0.5107893,-0.019612279,0.060930736],[0.32735822,0.09359731,1.1961514,-0.5468047,-0.6979488,-0.8116451,-0.8816686],[0.28230911,0.26441634,0.32522315,-0.2709414,-0.97729933,-0.1853032,-0.6816012],[0.85672635,0.40473634,0.06306575,0.043324664,-0.09925389,-0.6707503,0.48766825],[0.3574693,0.24644808,0.8436976,-0.73305976,-0.87197644,-0.17207824,-0.34952453],[1.2755688,1.0824895,0.84866655,-0.5946056,-0.93967986,-0.64516634,0.18630773],[0.2624753,-0.12604286,-0.24697196,-0.36811814,0.14403982,0.43120542,0.1445742],[0.44066232,0.1534366,0.25932267,-0.65874845,-0.26324567,-0.31705675,-0.831388],[-0.030025106,-0.31389698,0.17181242,0.3696615,0.008856971,-0.5338608,-0.019544462],[0.053924862,0.46772835,0.94262034,-0.71287125,-1.2770078,0.48717985,0.09874367],[-0.5596553,0.1355415,-0.6685472,0.5694037,0.5835357,-0.050862506,-0.30772945],[0.26585215,0.15441975,-0.27715218,0.17482373,0.30534902,0.13441981,0.24543025],[-0.700537,-0.30525044,-0.40211698,0.23966432,-0.07130374,0.3517828,-0.30104256]],"activation":"σ","dense_2_b":[[0.0006462817],[-0.045901865],[-0.08447791],[0.018081808],[0.028199553],[0.15011074],[0.024169737],[-0.07767265],[0.003401174],[-0.09530233],[0.026245346],[-0.019555494],[0.029535577]]},{"dense_3_W":[[-0.4269903,0.38330346,0.3818396,-0.104428,-0.010993002,0.25576162,-0.14891353,0.5712297,0.43450522,-0.18818101,-0.40029064,0.113605164,-0.41539222],[-0.4444491,0.6585591,0.5286078,0.014278995,0.3499434,0.3896106,-0.37057588,0.058567323,-0.5987489,0.35249916,-0.5103405,-0.0007771231,-0.20807561],[-0.5559521,0.25394833,-0.35546854,0.4645985,0.3801913,0.20466149,-0.20871717,0.37793857,-0.093845844,0.5868493,0.12606087,-0.4579316,-0.5141172]],"activation":"identity","dense_3_b":[[-0.039426688],[-0.038285036],[-0.0388908]]},{"dense_4_W":[[0.98477775,0.89640814,0.94241107]],"dense_4_b":[[-0.040733967]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CIVIC_BOSCH.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CIVIC_BOSCH.json deleted file mode 100644 index 2d65f4400..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CIVIC_BOSCH.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.261368],[1.1474106],[0.37148234],[0.044279538],[1.1430647],[1.1446478],[1.1447154],[1.1187278],[1.0942419],[1.0602791],[1.0217831],[0.04425829],[0.044268712],[0.04427185],[0.044111896],[0.04397081],[0.04367603],[0.043223266]],"model_test_loss":0.041262850165367126,"input_size":18,"current_date_and_time":"2023-08-05_23-22-02","input_mean":[[24.15998],[-0.008219966],[0.004739006],[-0.013221193],[-0.008523361],[-0.008609849],[-0.007986069],[-0.006765848],[-0.006281763],[-0.008096367],[-0.011848589],[-0.013220585],[-0.013206273],[-0.013198256],[-0.013279306],[-0.0133954],[-0.01351665],[-0.013652078]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.011715764],[-0.16971639],[0.44084886],[1.8919995],[-0.57473946],[0.3265129],[0.665929]],"dense_1_W":[[-0.035294082,0.58739567,0.0068268306,0.5267725,-1.3068384,2.0108788,-0.8904008,-0.86464506,0.8847079,0.49210623,-0.27763724,0.6851789,-0.11328691,-0.61491024,-0.7021547,0.0578637,0.082666315,0.0749281],[-0.08059325,-0.77528465,0.93356776,-1.1226226,0.030571632,1.2159668,-0.3739228,2.0636218,1.051139,0.24026142,-0.8241013,0.51684606,0.45198372,-0.85868824,0.9150932,0.14920434,0.0996434,-0.23813146],[1.05331,0.6632812,0.586634,0.10609487,-0.16541673,1.0143963,-0.6739981,0.43193975,0.5483419,0.020105261,-0.2659555,0.27416015,0.3780343,-0.38164294,-0.04144785,-0.49568477,-0.6130558,0.6570192],[1.4749159,0.076626115,-0.88682747,0.046201207,-0.23487571,-1.1125354,0.055821165,-0.57242775,-1.03109,0.059293248,0.2898471,-0.65886724,0.19274879,0.39950013,-0.10046821,0.34578046,0.20585975,-0.28454834],[-1.0492898,0.8025768,-0.019681327,0.11809792,-0.3740394,1.1517578,-0.6477998,-0.59586203,-1.4050065,-0.8667816,0.755093,-0.04370645,0.32285377,-0.16848978,-0.21646905,-0.34349748,-0.28047857,0.49415973],[0.056685824,0.9262534,-5.3872395,0.7328496,-1.2155392,-1.1581563,-0.12605561,-1.2297785,-0.95465136,1.0993868,1.4996752,-1.0285505,-0.33488074,0.33622772,0.34516957,-0.14087252,0.36723128,-0.2868416],[0.9570638,0.24864312,-0.017469333,0.54736155,-0.49265823,1.0806886,-0.30185512,0.02353294,-1.477074,-0.70588714,0.615638,-0.07056425,0.046274792,-0.32864115,-0.3693316,0.0012585309,-0.105926886,0.20974532]],"activation":"σ"},{"dense_2_W":[[0.79805297,0.07995367,0.33311036,-0.1088086,-0.28585342,-0.11676164,0.3217794],[-0.6564382,-0.650472,-0.32395652,0.48536372,-0.39954782,-0.9293625,-0.3131151],[0.065390795,-0.36014688,0.035044394,-0.47919765,-0.21676321,-0.68095744,-0.58225524],[-1.4269842,-0.22010052,0.762021,1.5709931,-0.39910436,1.7860814,1.1529905],[0.81025195,-0.19804797,0.2811143,-0.13832566,0.21581413,-0.2242298,0.10002656],[-2.4172528,-2.9861536,-2.1297307,-2.3552132,2.0055087,3.841171,-1.6320437],[-0.15224119,-0.008424982,-0.7476414,-0.7229817,0.34834322,-0.62080944,-0.6412587],[-0.32463408,0.056613863,-0.013071884,-0.057739817,0.5155227,0.12653896,0.14592259],[-0.5659917,-0.43365908,-0.31137735,-0.3897718,-0.26343766,0.8946887,-0.6234644],[-1.2267396,0.0675833,-0.036197066,-0.0106164375,-0.65109164,0.3789509,-0.7397455],[-0.47206897,-0.3735633,-0.4683122,0.17489713,-0.69122815,-0.68286866,-0.23052849],[0.92053163,0.41530177,0.23816848,-0.3726253,0.27367908,0.71565676,0.19845398],[0.22949272,0.53540593,0.100375816,0.39428094,0.19491827,-0.0047999,-0.036115997]],"activation":"σ","dense_2_b":[[-0.080741115],[-0.098717436],[-0.04195425],[0.57887644],[-0.0376275],[-0.7313109],[-0.15826389],[-0.03734272],[-0.17071353],[0.06530881],[-0.16700919],[-0.10229606],[-0.0077384445]]},{"dense_3_W":[[0.6059949,0.4993691,-0.0014475341,0.40003,-0.44542313,-0.71407944,0.2787467,0.16292632,-0.4138824,0.27650607,-0.27067518,-0.14248835,0.17812036],[0.13085166,0.48013842,0.34201995,0.64287025,-0.600294,0.86557233,-0.14552544,-0.08809264,0.41238344,0.7531989,0.587104,-0.4580716,-0.6428474],[0.61981463,-0.5255673,0.47925967,-0.6429044,0.02112309,0.09041386,0.27671653,-0.054121528,-0.24291937,-0.610705,0.07889088,0.042044822,0.39591196]],"activation":"identity","dense_3_b":[[0.007450639],[-0.024559],[0.020729255]]},{"dense_4_W":[[0.2550702,-1.0187347,1.2050446]],"dense_4_b":[[0.021735787]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CLARITY.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CLARITY.json deleted file mode 100644 index 6a5716e62..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CLARITY.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.17857],[0.44787604],[0.5243947],[0.032028187],[0.44404522],[0.4443511],[0.44520274],[0.45595846],[0.4604483],[0.47209886],[0.4884655],[0.03209721],[0.03205],[0.03203256],[0.03195497],[0.031864975],[0.03177169],[0.03154828]],"model_test_loss":0.0009851785143837333,"input_size":18,"current_date_and_time":"2024-01-04_15-35-20","input_mean":[[21.90655],[-0.29117808],[-0.08760989],[-0.009034546],[-0.2664771],[-0.27346689],[-0.2819304],[-0.3144748],[-0.33650345],[-0.36093968],[-0.38976616],[-0.009162463],[-0.009145338],[-0.009107736],[-0.008843513],[-0.008647824],[-0.0083346395],[-0.007997973]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.06760431],[-0.2907365],[-0.4082806],[-0.20224898],[0.29265383],[0.26244283],[0.15451357]],"dense_1_W":[[0.014618384,0.37313232,0.035592113,-0.3403019,0.033235013,0.24829742,-0.49047577,0.28937504,-0.2026583,-0.2760167,0.21064562,0.08079155,0.11982211,0.042024616,-0.052886724,-0.06286289,-0.13398048,0.13160145],[-0.0048215007,0.30684328,0.020128243,-0.41616872,-0.20515934,-0.2511921,-0.13518195,0.37878683,0.26875132,0.113668166,-0.27679917,0.66174066,-0.052989658,-0.1855979,-0.02353523,-0.30120054,0.091657996,0.09602743],[-0.0042930744,-0.15373556,0.08812353,-0.31896785,0.019456651,-0.20545581,0.05433538,-0.23081444,0.43445846,0.11084425,-0.0024109932,-0.6938004,-1.024248,-0.4391781,-0.0550922,0.07583203,0.79354477,-1.8509296],[0.04390958,-0.18022121,-0.08688032,0.19231437,-0.14530687,-0.27636525,0.4690427,0.4344902,0.16017663,-0.25027603,-0.2452524,0.5537437,0.13898967,0.038036723,0.6355534,0.5031342,1.3155322,-0.14124991],[-0.006398488,-0.7886078,0.03451426,-0.054085355,0.25506452,0.4975867,1.0672406,-0.27192074,-0.91774124,0.2306121,-0.3410087,-0.16050793,0.15241678,-0.17949696,-0.31961542,0.22702731,0.419533,0.00035671022],[-0.0077034663,-0.78213346,-0.016133381,0.10805307,0.14032482,0.36524558,0.12367749,0.24540052,-0.059624504,-0.3247948,0.021967877,-0.039682694,-0.2721095,-0.10098841,0.21639878,-0.22641253,0.14136238,0.19991797],[-0.048534065,-0.20369655,0.07626118,-0.31831193,0.2750742,-0.2912584,0.088218614,0.09158782,0.06355577,-0.23128918,0.2086949,-0.44672933,0.2343581,-0.052767944,-0.26756912,-0.29403126,-0.0006949583,-0.3037349]],"activation":"σ"},{"dense_2_W":[[-0.19747548,0.3752813,0.005352072,0.22516197,-0.279574,-0.29499897,0.514051],[-0.23818707,-0.442092,0.21234472,-0.5240696,-0.666385,0.13287802,-0.70440364],[-0.12623425,-0.12563375,0.17045951,-0.4611073,0.13094379,-0.2603494,-0.578133],[-0.3201878,-0.472269,-0.45254824,-0.17459284,-0.13989829,-0.07893383,-0.15434109],[0.6313669,0.59430647,0.029979968,0.40872103,-0.6338095,-0.48483965,-0.16215326],[0.12921973,-0.35855725,-0.6317136,-0.24155544,0.018117908,0.6665686,-0.09261251],[-0.5263865,-0.500698,0.26361403,0.1989874,0.16189028,0.4017576,-0.50330746],[0.19345485,0.0116930995,-0.1151553,0.38370124,-0.51925737,-0.66009927,0.54345274],[-0.10049859,-0.07803794,-0.05125394,-0.5760374,0.22012971,-0.4562151,-0.24986024],[-0.035831526,0.17925176,0.08670547,-0.6276373,-0.24000542,0.09890566,0.005909479],[0.026487896,0.10827987,-0.5441871,0.10627476,-0.12671272,0.25334272,0.090102024],[0.11269248,-0.5982834,-0.20034944,-0.4165159,0.48223287,0.06892533,0.32945293],[0.14122471,-0.84526354,-0.102686554,-0.42417887,-0.056950103,-0.013891049,-0.043740742]],"activation":"σ","dense_2_b":[[0.021066276],[-0.18323943],[-0.08896128],[-0.059529945],[0.01516111],[-0.03864309],[-0.01915316],[0.0072613885],[-0.13141903],[-0.1963338],[-0.20056123],[-0.0918762],[-0.09109566]]},{"dense_3_W":[[-0.5145814,-0.15164766,0.41466355,0.5054458,-0.56660354,0.37653998,0.2958398,0.1300162,0.15582272,-0.14694406,0.089647524,0.0200251,-0.6487758],[0.18533824,-0.14857687,0.36485723,-0.25733942,-0.5232801,0.39276004,0.36414713,-0.54408604,-0.4820063,0.19759995,-0.12671192,0.39148358,0.189427],[0.5235357,-0.23839255,0.41131777,-0.43199104,-0.042662866,-0.042696618,-0.30467755,-0.119463064,-0.49081296,0.2406254,-0.07923712,-0.0021057576,-0.42410713]],"activation":"identity","dense_3_b":[[-0.036107603],[-0.036152013],[0.03689696]]},{"dense_4_W":[[-0.48288086,-0.87119794,0.8186898]],"dense_4_b":[[0.0358588]],"activation":"identity"}]} diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CRV_5G.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CRV_5G.json deleted file mode 100644 index 56b5e6782..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CRV_5G.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.079519],[1.117335],[0.32821873],[0.04513038],[1.1160785],[1.1158687],[1.1147403],[1.0893666],[1.0659956],[1.0314285],[0.99783367],[0.04497426],[0.044967793],[0.044959538],[0.04481279],[0.044600893],[0.044237226],[0.043830905]],"model_test_loss":0.05013991519808769,"input_size":18,"current_date_and_time":"2023-08-06_08-46-45","input_mean":[[24.945726],[0.056781527],[-0.006332743],[-0.0054867254],[0.057909872],[0.057552766],[0.05728289],[0.054190118],[0.05235296],[0.048357345],[0.0448629],[-0.005489833],[-0.005468405],[-0.005448704],[-0.005441959],[-0.0055107307],[-0.0055533946],[-0.005588048]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.3742944],[2.0560386],[0.070786394],[0.08766052],[-7.2637663],[4.9462605],[0.020425294]],"dense_1_W":[[-0.88963157,0.47497272,1.1810282,0.6939777,-0.36621186,1.347931,-0.7933228,0.85621536,0.66951233,-0.11786804,-0.6730566,0.112765215,-0.28919625,-0.33895963,-0.62124485,0.25326887,0.21473351,-0.12489331],[1.223516,-0.036567718,-1.247157,0.09799731,-0.97558075,0.16902182,-1.0449882,-0.046705905,0.29223862,0.30116007,-0.09839103,0.46722287,-0.0449582,-0.39868206,0.07668579,-0.11536017,-0.0691049,0.10267897],[0.018545184,0.81794965,3.4399781,0.052234847,-0.4958513,0.38696352,-0.638153,0.87363166,0.86702484,0.7031613,-1.9006683,0.85754114,0.8998447,-0.52486235,-1.0076646,-0.66781485,0.2555468,0.17366274],[0.0037442108,1.4584165,0.0061913775,0.24082592,-0.7234466,1.0945269,-0.21835686,-0.038823094,-0.20537247,-0.4526858,0.3522938,0.7368147,-0.4907756,-0.72209734,-0.3003073,0.24139397,-0.27028123,0.28593597],[-3.720445,0.5471661,-2.9256604,-0.84999114,-0.35371152,-1.650107,-0.30913082,-1.5157434,-1.4253404,-0.5012027,1.8229349,-0.22352915,0.07850824,1.2852895,-0.17709053,0.0015369024,0.4303836,-0.3013633],[2.7063103,0.4795686,-2.1412866,-0.37747622,-0.52522975,-1.1443468,-0.3860132,-0.81000876,-0.8656079,-0.38408586,1.1732165,-0.33476815,0.35176495,0.67967117,-0.24029131,-0.15793729,0.59702957,-0.33229384],[0.003850781,1.0522044,0.0023779364,1.4077666,-0.2233461,-1.323892,0.2490657,0.9962225,-0.21043883,-0.48657963,0.0066762604,-0.8950598,-0.65639627,-0.10381974,-0.033756495,0.3061354,-0.09620744,0.075370125]],"activation":"σ"},{"dense_2_W":[[0.01117936,0.6720228,0.39750826,0.30468678,-0.34063298,0.11394216,-1.026796],[-0.07938874,-0.29046267,-0.15366286,-0.94418544,0.72881997,-0.072467156,1.1634737],[-0.7841681,-0.38053507,-0.48102236,-0.7339148,-0.94196475,-0.09320883,0.17724545],[-0.11575878,0.41173506,0.7931331,0.7659729,0.45459372,-0.4762705,0.04162107],[-0.54039043,-0.6239058,0.12097131,-1.0940313,0.6270558,0.8035503,0.8422599],[-0.006883268,0.1846561,0.4628913,0.89182067,-0.281233,-0.5460564,-0.49594778],[-0.37237987,-0.50528663,-0.34381047,-0.9888458,0.66827786,0.75729847,0.9049922],[-0.6351278,-0.39599782,-1.7942646,0.2172901,1.2180948,-1.0186263,-0.29467586],[0.098499954,-0.7321613,-0.4204465,-0.5589947,-0.49682683,0.02701407,-0.56642413],[-0.055568255,-1.0158917,-0.13512869,-0.75265217,0.32634935,-0.10900366,1.1009233],[0.9196104,-0.29001886,0.27778128,0.40752462,-0.71603805,-0.78771234,-0.2509219],[-0.27494332,-0.27294615,-0.87608117,-0.5456548,0.23442413,0.46402624,0.4014235],[-0.0657572,0.39627385,-0.032163464,0.37446278,0.30043706,-0.3939967,-0.17288771]],"activation":"σ","dense_2_b":[[-0.12896457],[-0.06757774],[-0.29207176],[0.057776056],[0.03819644],[-0.0075618257],[0.022483658],[-0.30520216],[-0.30780953],[-0.22291888],[0.073764615],[-0.11618854],[-0.0932309]]},{"dense_3_W":[[-0.20723751,0.46280366,0.37977389,-0.28764504,0.56071246,-0.42746708,0.743715,-0.41921702,0.39859435,0.35315046,-0.18542276,0.28128248,-0.18067148],[-0.6656129,-0.15142722,-0.022595402,-0.48696524,0.37018472,-0.6183299,0.50862163,0.035134673,-0.46468532,0.35520592,-0.6777795,0.2590716,0.46181098],[-0.32565305,0.33916017,-0.4280441,-0.21963115,0.6359937,-0.44887698,0.2442765,0.13551079,-0.47778323,-0.4541174,-0.59640217,0.13698937,-0.27695638]],"activation":"identity","dense_3_b":[[-0.07102677],[-0.02868969],[-0.030784609]]},{"dense_4_W":[[-1.024929,-0.3087716,-0.3174253]],"dense_4_b":[[0.053275082]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CRV_HYBRID.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CRV_HYBRID.json deleted file mode 100644 index afdbdefee..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_CRV_HYBRID.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.167076],[0.8396103],[0.39224938],[0.038149882],[0.83500266],[0.8364939],[0.83795094],[0.8280286],[0.82101065],[0.80936265],[0.79514086],[0.03816296],[0.03813872],[0.0381162],[0.037860528],[0.037643477],[0.03726596],[0.036896862]],"model_test_loss":0.019166288897395134,"input_size":18,"current_date_and_time":"2023-08-06_11-19-09","input_mean":[[24.623522],[0.012142224],[-0.0077460455],[-0.0040752436],[0.01259905],[0.011912992],[0.011499013],[0.008575823],[0.006231978],[0.001843956],[-0.0011071449],[-0.0041566766],[-0.004162808],[-0.0041667568],[-0.0041206917],[-0.004187086],[-0.004389174],[-0.0045910473]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.10681055],[-0.05877009],[-5.810432],[0.108804524],[5.817238],[-1.4135033],[-0.04275369]],"dense_1_W":[[-0.010944928,0.298581,-0.0004137291,0.46320775,-0.68514436,1.5652411,-0.62197584,-0.70986384,-0.07209713,0.14426921,0.09893353,0.2957121,0.24033338,-0.63492715,-0.24635397,0.21067435,0.16446242,-0.4790833],[-0.002262276,-0.7669907,0.0011565682,0.2969979,0.11738408,-1.199179,0.32905388,0.35275638,-0.34200913,0.22103965,-0.188085,-0.00050096336,-0.36091766,0.18886286,0.356193,0.50661796,-0.18447432,-0.3530909],[-2.7729337,-0.046491493,-2.223908,0.51880556,-1.5391709,-1.8928696,1.8811203,0.22442053,-0.20638244,0.44581792,-0.10464485,-0.11026335,-0.41476744,0.71887964,-0.6184063,0.07461815,-0.70264786,0.5291843],[0.088751696,-0.7015499,-2.262332,0.07993792,-0.5452428,0.36403584,-0.888494,0.26214746,0.52286375,0.47499555,0.12439757,0.32842526,-0.22486946,-0.2082452,0.2083624,0.20134373,-0.26366135,0.040187743],[2.7838297,0.36513317,-2.2177417,0.17293313,-1.3490273,-1.395796,0.7361196,0.024529908,0.0147317415,0.50988925,-0.16947655,-0.14311421,-0.13544203,0.6211999,-0.28396562,-0.19654925,-0.4721205,0.44046035],[-1.0456268,0.006558085,0.029179003,-0.24681818,0.33209732,-0.31439346,1.0280732,1.6322477,0.33988294,-1.1288414,-0.7784953,-1.3079332,-0.922044,-0.7579679,-0.7932985,0.090359144,2.2930832,3.7051785],[-0.032393374,0.15797108,2.6865292,-0.022740832,0.7215196,0.9335919,-0.9160322,0.63953984,-0.10847628,-0.41109005,-0.58336747,0.8728414,0.2319681,-0.77523047,-0.6650054,-0.19625007,-0.0422657,0.4323157]],"activation":"σ"},{"dense_2_W":[[-1.0469242,2.310652,2.5330374,-1.1560289,0.87019974,-0.24008566,-2.4145112],[-1.5431111,1.6602669,1.4227277,0.44263628,2.124669,-0.881401,-1.636305],[-0.7812676,0.3887846,0.046831988,-0.0021416398,0.0068075457,0.26359168,-0.40856928],[0.5853211,-0.020535953,0.1977803,0.11166494,-0.7388882,-0.6265164,0.19296904],[-1.4384844,-0.07708128,-0.62513274,0.1822617,-0.83729374,-0.20433801,0.08106154],[0.79002935,-0.51513207,-0.17725268,0.70090765,-0.37455943,-0.00461776,0.6140211],[0.38233972,0.11824663,-0.048423085,-0.22234191,0.071728714,0.09328836,0.5405535],[1.0066482,0.12065403,-0.67822254,0.91310203,0.3381496,-0.46563134,0.6765602],[-0.058819644,0.04884941,0.44360304,-0.16011114,-0.493316,-0.18134312,0.31395072],[-1.1391008,1.2845155,0.65725374,-0.75513005,1.1359249,-0.5923027,-0.46509168],[-0.28455976,0.122011006,0.19924502,-0.016063396,-0.19426562,-0.7366286,-0.30496517],[-1.1961275,-0.44696903,0.2981926,-0.6047452,0.60021174,0.7954056,0.67303944],[0.66179645,-0.35565352,0.4263759,-0.23354627,-0.5218455,-0.14847569,-0.45979464]],"activation":"σ","dense_2_b":[[-0.70381194],[-0.41715994],[-0.18704335],[-0.20373428],[-0.23588026],[-0.022451308],[0.010537296],[0.10221664],[0.014627381],[0.060474735],[-0.033638965],[-0.051280532],[-0.20772089]]},{"dense_3_W":[[0.15796849,0.6079072,0.5830924,-0.5528727,-0.1478945,-0.27996355,-0.30358565,-0.6117205,0.22281085,0.6154891,0.0165758,0.616245,-0.5880501],[-0.1846488,-0.46482992,-0.33469623,-0.15623315,-0.20466302,0.642436,0.34555972,0.60815287,0.43956748,-0.5986671,0.3041771,-0.26802206,0.03272353],[-0.88071394,-0.01339668,-0.4710771,-0.08369313,-0.47736472,-0.29117015,0.5252153,0.36675686,0.37659007,-0.38053805,0.07111416,-0.030936832,-0.3208197]],"activation":"identity","dense_3_b":[[-0.04642651],[0.037014484],[0.055794742]]},{"dense_4_W":[[-0.5493109,0.48931855,0.5176042]],"dense_4_b":[[0.04616592]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_HRV.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_HRV.json deleted file mode 100644 index 87a91229a..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_HRV.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.1964235],[0.87585396],[0.34334365],[0.04189015],[0.88570154],[0.8828632],[0.8788816],[0.85152715],[0.8326557],[0.8105437],[0.790872],[0.041831378],[0.04184441],[0.041850727],[0.041653063],[0.041487437],[0.041109927],[0.0406368]],"model_test_loss":0.016751321032643318,"input_size":18,"current_date_and_time":"2023-08-06_13-52-18","input_mean":[[27.281948],[0.057562165],[0.025426663],[0.001435362],[0.049740613],[0.051872276],[0.053928934],[0.06504589],[0.07349952],[0.08201744],[0.088106535],[0.0013536362],[0.0013746973],[0.001394585],[0.0014019185],[0.001435841],[0.0014179434],[0.0013371226]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.0041493755],[0.21777502],[0.7115575],[-2.2624984],[0.10148076],[-1.9139864],[-2.6148589]],"dense_1_W":[[0.0027682746,-0.5923534,-0.0008324875,-0.96639884,-0.43687794,1.0992304,0.44394565,-0.15681875,-0.19448969,0.23627451,0.027064066,1.0438472,0.38998574,-0.3910353,0.07241692,-0.3872127,0.24487913,-0.00981091],[-0.0063605076,0.41579154,4.60037,0.15178576,-0.41990525,-0.9291791,-1.8990772,-1.2513685,1.3644165,1.6527833,0.822613,0.6267062,0.3986885,-0.65917814,-0.68864816,0.038168486,-0.43694118,0.5313064],[0.1826715,0.21753219,2.6482086,0.49831605,0.04197241,0.48248503,-0.85676134,-0.088123225,0.5933527,-0.101084374,-0.07996661,0.39820936,-0.25201222,-0.5013944,-0.18441774,0.085484736,-0.20741902,0.15278186],[0.20413034,0.7558973,0.0039974884,0.09515875,0.023952896,0.12318843,-0.24863702,0.28330338,0.598279,-0.0031794424,0.12692909,0.26882735,0.002343814,-0.20356114,-0.4958486,-0.2599618,-0.3243958,-0.15502147],[0.0008160921,-0.75155866,3.2958338,0.18005188,-0.48001406,-0.37221822,-0.014907395,0.34556574,-0.36695525,0.5220802,0.9252095,-0.6326275,0.31536806,0.40089336,-0.24786693,-0.16599582,0.26964852,-0.11618827],[-0.6374511,0.50671804,3.4275095,0.45084175,0.014429362,0.16759996,-0.40217194,-0.1596027,0.27413476,-0.020348325,0.03291187,0.29519597,0.0606238,-0.77494323,-0.04082934,-0.019097991,0.021767832,0.017387142],[0.24087234,-0.5286611,-0.0010711186,0.50206137,-0.37612498,-0.065321624,0.3152248,-0.3156515,-0.31909347,-0.5960725,0.07865838,-0.57626325,-0.28874642,0.36706463,0.55150944,0.021375967,0.53079313,0.0685934]],"activation":"σ"},{"dense_2_W":[[-0.61061996,-0.3219788,-0.61355484,-0.41679764,0.9514292,0.089833274,-0.08153515],[0.5216678,0.35865775,0.14493388,0.75064963,-0.9559691,-0.11178071,-0.26124665],[-0.07039463,-0.54774076,-0.7926992,-0.28961974,0.25917596,0.06013633,0.6089615],[-0.29096878,-0.55007404,-0.6435847,0.022112146,0.31680974,-0.22504552,0.35249886],[-0.6804567,-0.94920105,-0.8136485,0.3378733,0.597489,0.46872833,0.28344125],[-0.8909486,0.17668937,-0.50494355,-0.51266,0.76238817,-0.08368523,0.21360965],[-0.08500846,-1.3190831,-0.40328535,0.17221951,0.9102355,-0.42406878,-0.14185876],[0.41169032,0.12483639,-0.43139625,1.0178162,-0.7741975,0.49720922,-0.0029358894],[-0.11413294,0.35335183,0.5509884,0.60089856,-0.07613763,-0.18951175,-0.5859379],[-0.30574977,0.66385657,0.29187888,0.15835138,-0.13989422,0.93255055,0.16954228],[0.9125405,0.33926046,-0.45827863,0.20637102,-1.3337029,0.99624145,-0.6220122],[1.0066077,0.5247419,0.3793085,0.006325064,-0.7290911,-0.32310325,0.17187376],[-0.6349526,-0.62067527,-0.291574,0.05529339,0.7121756,-0.08375974,0.22644123]],"activation":"σ","dense_2_b":[[0.04084762],[-0.06363596],[0.024858473],[0.10673008],[0.13199006],[0.10104594],[-0.008044478],[-0.10162189],[-0.15080203],[-0.11178794],[-0.24866438],[-0.17219713],[-0.008406249]]},{"dense_3_W":[[0.40549794,-0.4494019,0.2861901,0.37104332,0.5890352,0.58301944,0.40222168,-0.49054152,-0.31034032,-0.07984426,-0.5973653,-0.20854333,0.5224267],[-0.6481895,0.81970197,-0.5651685,-0.54807013,-0.5982727,-0.21111657,-0.7437358,-0.18910314,-0.22034706,0.69472176,0.7825804,0.5047144,0.30723065],[-0.2815957,-0.25135168,-0.03530872,-0.47208393,-0.14322938,0.72277945,0.027914466,-0.113597095,-0.31811848,0.057283014,0.22687551,0.074457414,0.35829133]],"activation":"identity","dense_3_b":[[-0.064762406],[0.042542093],[0.06525171]]},{"dense_4_W":[[-1.0957879,0.49216008,-0.0023324802]],"dense_4_b":[[0.054476205]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_ODYSSEY.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_ODYSSEY.json deleted file mode 100644 index 760d358b6..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_ODYSSEY.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.67131],[1.0606116],[0.3141555],[0.047306955],[1.0598024],[1.059542],[1.058586],[1.0353245],[1.0132898],[0.98134106],[0.9488499],[0.0472228],[0.047223553],[0.04722212],[0.047007233],[0.04672726],[0.046201415],[0.045611456]],"model_test_loss":0.030893046408891678,"input_size":18,"current_date_and_time":"2023-08-06_16-03-17","input_mean":[[24.826109],[-0.0015730427],[-0.0024845933],[-0.006542893],[-0.0021615939],[-0.0027822834],[-0.0034116579],[-0.002972936],[-0.0019527061],[-0.0018800201],[-0.00055315095],[-0.0066206236],[-0.0066137947],[-0.0066051884],[-0.0065096957],[-0.00645474],[-0.0064896797],[-0.0065450436]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.0666385],[-2.1265264],[-0.009373159],[2.1585333],[0.037653618],[-0.017867725],[3.2116225]],"dense_1_W":[[1.1914837,-0.5645276,6.58303e-5,-0.11589882,0.37734768,-0.27381,-0.19863185,0.824706,0.4373293,-0.20449224,-0.15180561,0.35472932,0.3237236,-0.10154249,-0.578405,-0.2772973,0.10017485,0.25640446],[-1.0303509,0.29729548,1.9708672,-0.5768468,-0.028354015,0.42035812,0.3361436,0.3343814,0.37328744,0.8638404,-0.2677837,-0.15447378,0.49736965,-0.08687722,-0.66492444,-0.032154877,1.1899335,-0.48110774],[0.01983638,-0.24834296,-3.3855686,0.6749708,0.07187869,-0.024789268,0.37607005,-0.47755113,-1.0089839,-0.81658024,1.3305435,-0.97285813,-0.6226301,0.6422294,0.9579225,0.49827808,-0.48402268,-0.29993263],[1.2045997,0.62863886,0.0019727307,0.17700921,-0.8630537,0.98878884,-0.16361095,-0.29803157,-0.7254775,-0.15229262,0.3722205,-0.22486125,-0.06222317,-0.37571073,0.4424153,0.06388154,0.5859267,-0.56900877],[-0.013524671,0.31598365,0.0006406281,-0.25858632,-0.27701482,0.7357323,-0.35521507,-0.4483451,0.44878978,0.2829642,-0.2362616,0.62810344,-0.121423006,-0.38609955,0.0749125,-0.17727378,-0.38110465,0.35318217],[-0.0052065155,-0.5593012,0.002159691,-0.08422028,0.23008162,-1.022624,0.32955936,0.431307,-0.1006895,-0.030441636,-0.08401783,-0.3437167,-0.22863047,0.7158902,-0.17199361,0.09197799,0.19186375,-0.1833609],[1.4867296,-0.15920977,2.3333318,-0.23857078,-0.0040042745,1.2148064,0.10699171,0.22722282,0.5444096,1.349413,-0.47866884,0.40205494,-0.11314535,-0.5150614,-0.4630753,0.030254288,0.7952247,-0.2603006]],"activation":"σ"},{"dense_2_W":[[-0.17723514,-0.23341042,0.57393736,-0.4927488,-0.927548,0.58540887,-0.5868284],[0.66296387,0.29695207,0.20052847,-0.62608564,-1.0550549,1.0728254,0.0891513],[-0.16829221,-0.0679403,-0.36510104,0.23858383,1.1178643,-0.6089432,-0.31060657],[-1.8900537,-0.27381107,-0.5241167,-0.7089269,-1.1469728,-0.0641088,-0.41346708],[-0.51642907,-0.43836012,-0.31121448,0.47541407,1.169322,-0.2952497,-0.37012473],[0.8616518,0.12941492,-1.1983941,1.7177894,1.0778812,-1.3677566,1.5917606],[-0.407816,0.042307053,-0.53986156,0.5610484,0.7355027,-0.8320296,0.05677452],[1.4589415,-1.2519528,0.8708634,0.6212387,-0.9204132,1.7146589,0.13543351],[-0.055101812,-0.19029272,0.013408977,-0.46497017,-0.92594385,0.9864242,0.13991055],[0.5894197,-0.28149623,0.41216704,0.216877,-0.51424307,0.83235174,0.14314461],[-2.6734824,2.668342,-1.7240498,-1.0608208,0.54306996,-1.3263385,-0.19313851],[-0.82157856,-0.23220612,1.0158018,-2.0316136,0.06581752,0.7996686,-1.5219475],[0.5740489,0.18412288,-0.14555724,-0.5847231,-1.1873335,1.0647899,0.008006016]],"activation":"σ","dense_2_b":[[-0.29801813],[-0.25020108],[-0.022192547],[0.026752593],[-0.027117254],[0.30578387],[0.053404447],[0.23486306],[-0.07118241],[-0.09914868],[-0.18535325],[-0.32233533],[-0.04571355]]},{"dense_3_W":[[0.43566743,0.43129563,-0.6076586,-0.46461692,-0.40563574,-0.60545087,0.47773033,0.15361485,0.54101425,-0.14459106,-1.1077414,0.30648795,0.5856095],[0.07340811,-0.49523342,0.6213182,0.19087262,0.06972069,0.8834424,0.5443848,-0.50467765,-0.38180703,-0.4638601,0.65264165,-0.8575672,-0.5819035],[0.33573294,0.619451,-0.046216093,-0.66367626,-0.64414126,-0.084879674,-0.60994107,0.5997581,-0.2552046,0.10798684,-0.29609105,0.45087123,-0.3904423]],"activation":"identity","dense_3_b":[[0.064981125],[0.043677732],[-0.029785963]]},{"dense_4_W":[[-0.35612056,0.9586297,-0.2525408]],"dense_4_b":[[0.03888263]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_PILOT.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_PILOT.json deleted file mode 100644 index 713bb4a0c..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_PILOT.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.118591],[1.012343],[0.30252126],[0.04747358],[1.0110137],[1.0105052],[1.0093575],[0.98329234],[0.96060896],[0.93123335],[0.90310067],[0.04717917],[0.047231637],[0.047265887],[0.047122534],[0.046797972],[0.046346754],[0.045773227]],"model_test_loss":0.03557046875357628,"input_size":18,"current_date_and_time":"2023-08-06_17-27-23","input_mean":[[24.204573],[-0.024622405],[0.0015252293],[-0.0032674451],[-0.023904368],[-0.02417538],[-0.024461435],[-0.023585865],[-0.021832237],[-0.020321053],[-0.019801456],[-0.0032891335],[-0.0032849729],[-0.0032711467],[-0.0032068372],[-0.0030881383],[-0.0030222118],[-0.0030280964]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.7401334],[-4.296874],[0.051964045],[-1.5580355],[0.59131175],[0.9876563],[-0.059906512]],"dense_1_W":[[0.39198807,0.14618506,-0.0005603469,0.5384161,0.583554,0.90904,-0.9356289,-0.347572,0.054832783,-0.01266942,0.20926124,0.40405145,0.26462293,-0.5968776,-0.4170079,-0.24383324,-0.36820978,0.23693004],[-1.4237757,0.44019157,1.7405101,0.107415356,0.73406404,0.38215244,-0.6587738,0.6303781,0.9956125,0.3772358,-0.60114783,0.28546256,-0.21894793,-0.5291562,0.028785085,-0.0466827,-0.02260468,-0.14874777],[-0.011811628,0.5467675,3.1406043,-0.5367604,0.16197537,0.72486085,-1.0583096,0.6693704,0.23038347,0.16671906,-0.6996211,0.9920219,0.24508859,-0.8121351,-0.11340726,-0.124802016,0.0040163123,-0.03318359],[-0.89146703,-0.43514004,-1.1770084,-0.113605686,-0.2791039,-0.6336671,0.52206266,-0.37517008,-0.583943,0.13963065,0.10783694,-0.019744247,0.09936149,0.34897432,0.077529624,-0.12277383,-0.21316914,0.31482303],[-0.5459662,0.6174858,-1.5395053e-5,0.23975974,0.1680196,0.6688479,-0.5717515,-0.2257085,-0.37668842,0.37691414,0.016556103,0.5753194,0.43969232,-0.63690066,-0.79015404,0.094646364,-0.26196766,0.13351451],[1.219549,0.6434229,1.5366393,0.29663944,-0.1569686,0.1139518,1.0193243,0.13182868,0.1257156,0.4684622,-0.33492422,-0.1404477,-0.20704125,0.21394883,-0.60481495,0.20762968,-0.2884613,0.04056693],[0.0022561958,-0.10740119,-2.973164,-0.24940717,-0.11246171,-0.017514866,-1.2795074,-0.021132804,0.8575916,0.07600141,-0.029272523,0.5688567,0.09931985,-0.10324848,-0.2901189,-0.37775588,0.39807785,0.3334187]],"activation":"σ"},{"dense_2_W":[[0.5666278,0.1050696,0.5731484,-0.6657482,0.57242334,-0.6813752,0.650503],[-0.3233396,-0.44350263,-0.16690572,0.123169236,-0.8172176,0.5242723,-0.45013273],[-0.1649446,0.012782408,-0.80965835,0.28827253,-0.6245722,0.2006493,-1.087686],[0.96152276,0.35989368,0.22035821,-0.80648047,0.4686015,-0.6329297,-0.0023717843],[-0.11855806,-0.91366136,-0.90975124,0.47533065,0.41179633,0.05490874,0.1064329],[-0.73532724,-0.6584749,-0.5160826,0.34969312,0.062357668,0.13114415,-0.32903922],[-0.72250515,1.2826318,-1.2006475,0.9427826,-1.371755,0.20815341,-1.0248761],[-0.4109795,-0.64342046,-0.22680378,0.12261962,-0.15706545,0.4520076,-0.09530116],[0.5485182,0.3166386,0.60656774,-1.0352023,0.35866728,-0.37757927,-0.37554651],[-0.7688577,-0.31978396,-0.42268845,0.59393954,-0.4435929,0.47090167,-0.31540674],[-1.0920306,-1.0558451,0.11860894,0.49140632,-0.10677766,0.47734076,-0.398253],[-0.030640373,0.41173688,-0.98270494,0.5081087,-0.5071277,-0.3028872,-0.8938836],[0.4381069,0.943475,0.6218088,-0.742083,-0.38795125,-0.054727156,0.31301942]],"activation":"σ","dense_2_b":[[-0.09199342],[0.03208081],[-0.04846608],[-0.1532128],[-0.012221367],[-0.15162058],[0.14393868],[-0.17525378],[-0.38610223],[0.03283754],[0.02243522],[-0.046554077],[-0.10267613]]},{"dense_3_W":[[0.76260686,-0.14955303,-0.07697563,0.795136,-0.5793355,-0.39125565,-0.850312,0.054931063,0.53414947,-0.3139965,-0.5467518,-0.38860124,-0.034747276],[0.26200438,-0.37439495,-0.4377097,0.17163786,-0.30471745,0.30637982,0.06850715,-0.34865668,-0.35463956,-0.1303642,-0.39582416,-0.5477129,0.69954056],[-0.38012898,0.3671737,0.4092681,0.1147916,-0.33737427,0.28946012,-0.2992325,-0.067024715,0.4072253,-0.31171417,0.33009604,0.12577192,-0.27651602]],"activation":"identity","dense_3_b":[[0.05052462],[0.061525963],[0.01540329]]},{"dense_4_W":[[1.5063055,0.714805,0.00043001983]],"dense_4_b":[[0.047914207]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_RIDGELINE.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_RIDGELINE.json deleted file mode 100644 index 3e53360cd..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HONDA_RIDGELINE.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.957924],[1.0602055],[0.3483377],[0.044007655],[1.0696881],[1.0669217],[1.0629013],[1.022558],[0.99117285],[0.95355713],[0.91828537],[0.043950602],[0.043960184],[0.043955244],[0.04370865],[0.043465454],[0.04305762],[0.042518806]],"model_test_loss":0.03983215242624283,"input_size":18,"current_date_and_time":"2023-08-06_20-30-54","input_mean":[[24.622238],[0.017521156],[0.00757826],[0.0011451022],[0.016594924],[0.017204277],[0.018039215],[0.021406805],[0.02439622],[0.026556514],[0.028528417],[0.001193815],[0.0011970581],[0.0011935198],[0.0011202878],[0.001060377],[0.00095698517],[0.0008617843]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.07002942],[-0.16705358],[-2.9611764],[0.34919006],[0.515888],[-3.0217357],[-0.3703743]],"dense_1_W":[[-0.001037722,-0.23034889,0.00070932484,0.19091949,-0.35902733,-0.8921682,0.30972338,0.3144616,0.13060336,-0.1961081,-0.1309547,-0.729507,-0.079179555,0.49697357,0.02997426,0.37342516,-0.24386461,0.3236473],[0.9159012,-0.010550688,-2.401509,0.30691516,0.05056717,0.5097978,-1.1722806,0.17247927,0.34559217,-0.24330676,0.04055541,0.46409106,0.20967084,-0.82562864,-0.4943086,0.2081027,0.2530364,-0.0926206],[-0.93078494,0.5642841,2.5035574,-0.35270843,0.18849362,0.87544584,-0.2044937,0.73466784,0.47539774,0.07997192,-0.76057374,0.3159093,0.40554965,-0.5378864,-0.09868344,-0.3483285,0.16861473,0.19001411],[-0.8801367,-0.10308599,-2.2299495,0.04202499,-0.05023124,0.13920471,-0.78326404,0.39430746,0.23543742,0.14010431,-0.23845911,0.2567459,0.059797786,-0.57988393,0.113685064,0.14517607,0.16730362,-0.17216507],[0.14910753,-0.31030202,-2.4019601,0.1968272,-0.40163112,-0.23238596,0.6703164,0.07859055,-0.14317967,0.07362763,-0.04258365,-0.509903,-0.38269565,0.7657585,0.030617407,-0.11210979,0.30991936,-0.27056235],[-0.9013445,-0.74709606,-2.4476326,0.38786903,-0.3051019,-0.585037,0.06283271,-0.3787836,-0.61694026,-0.032208323,0.70738953,-0.2658627,-0.35824144,0.5567474,-0.033071913,0.1493693,-0.014829384,-0.16828252],[0.06442954,-0.869912,-2.9056792,0.1365006,0.16463475,-0.5906101,1.1546344,-0.06482889,-0.37295368,-0.1456135,0.2937723,-0.5213806,-0.57213086,0.38927227,0.49697468,0.21409509,0.63319594,-0.7391959]],"activation":"σ"},{"dense_2_W":[[-0.17591965,-0.07106175,-0.40103337,0.56516284,-0.6760929,-0.15387549,-0.89492965],[-0.45764968,-1.0195202,-0.41464484,-0.2810938,-0.028325718,0.09300495,0.35360244],[0.8125133,-0.54840755,-0.6930447,-0.89210993,0.56695956,0.44670337,0.5310144],[-1.0358114,0.33042994,0.11012975,0.23487902,0.24800783,-0.4299027,-0.46129325],[1.2276291,-0.5162977,0.22191486,0.16638434,0.23429595,-0.22487517,0.28309682],[1.0107075,-1.0881076,-1.008768,-0.5629702,-0.05878989,0.7923787,0.7309502],[0.49559563,-0.35230458,-0.7740999,0.02204071,0.24508348,0.075914145,0.75374156],[-0.21838671,0.42116773,0.5945599,0.30151197,-0.24432571,-0.46020442,-0.33258623],[-0.021219064,-0.25157404,-0.35190338,0.0668151,-0.6102883,0.1603531,-0.79725957],[0.0735072,0.5327899,-0.13316682,0.18007801,-0.7896261,0.08766711,-0.64606833],[0.6770077,-0.8900657,-0.26981142,-0.38599125,0.09799069,0.5758287,0.66643196],[-0.82503897,0.3003343,0.15965503,0.37416932,-0.644764,0.043236665,0.19912353],[-0.9234739,0.57710344,-0.4265305,0.3661275,-0.030128404,-0.4210636,-0.7627061]],"activation":"σ","dense_2_b":[[0.07509254],[-0.45370674],[-0.08009313],[-0.21234833],[-0.08377176],[-0.056009393],[-0.10460085],[-0.003972127],[-0.21230274],[-0.0108628925],[-0.14868702],[0.04881384],[0.053917274]]},{"dense_3_W":[[-0.43450725,0.28928438,0.63958466,0.26900065,0.59471947,0.045950003,-0.08964677,0.14317968,-0.1560713,0.4362775,0.6118739,-0.48017085,-0.17556131],[0.7623459,-0.3990245,-0.53529125,0.28715876,-0.25771093,0.25057483,-0.4946012,0.14644647,-0.02983568,-0.065986775,-0.55813897,0.34047204,0.29583102],[-0.093450435,-0.42808297,0.068437345,-0.1521326,0.11618435,0.6433002,0.44079673,-0.6619756,-0.2237737,-0.65349114,-0.118622996,-0.61334574,-0.14610668]],"activation":"identity","dense_3_b":[[-0.06914952],[0.05192733],[-0.03913266]]},{"dense_4_W":[[-0.4807093,1.1989409,-1.1321285]],"dense_4_b":[[0.044341844]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_ELANTRA_2021.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_ELANTRA_2021.json deleted file mode 100644 index bee1e8d93..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_ELANTRA_2021.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.738584],[1.5957829],[0.58238095],[0.048208784],[1.5838295],[1.5881729],[1.5908173],[1.5664002],[1.5340934],[1.4806168],[1.4221525],[0.047998115],[0.04803774],[0.048071872],[0.048102442],[0.04803064],[0.047811132],[0.04743304]],"model_test_loss":0.007402807008475065,"input_size":18,"current_date_and_time":"2023-08-06_22-19-42","input_mean":[[21.779322],[-0.078570016],[-0.0073580677],[-0.0065681813],[-0.07246284],[-0.0734754],[-0.07447408],[-0.07268334],[-0.069738925],[-0.06446174],[-0.057134904],[-0.0064781737],[-0.006475137],[-0.006476324],[-0.006474212],[-0.006491243],[-0.00650736],[-0.00642134]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.1603358],[-0.419876],[0.084331356],[-0.07068766],[2.0145605],[-0.63310754],[1.434537]],"dense_1_W":[[-0.31878927,-0.47954968,-0.260915,-0.23391017,-0.14123324,-0.16656223,0.34148905,-0.55040246,0.048909064,-0.084660634,-0.05452977,-0.14122179,0.19401318,0.18124454,0.29322624,-0.11721254,0.058719337,0.049679324],[1.2746987,0.53341556,-0.5038306,-0.3943573,-0.3552817,0.6985798,-0.7583908,-0.071790285,0.10988926,-0.1613498,-0.43469277,0.20283195,0.37326258,-0.2713744,0.053292856,0.12493837,0.112449214,0.071374826],[-0.005748887,0.4395075,-0.023206176,-0.00010381389,0.10724853,0.79803634,-0.10418732,-0.17200217,0.07352905,-0.04382284,0.12897137,0.27188876,-0.2986032,0.1732639,-0.43260622,-0.13877538,0.108885035,0.037624177],[-0.009819267,0.7978249,3.3524475,0.21963945,-1.1893661,0.12886666,-0.12307468,-0.0057551884,0.89947134,0.2433565,-0.7049134,0.41656977,0.5013669,-0.4488184,-0.19362147,-0.21371745,-0.12667105,-0.11616998],[0.5350432,-0.6518214,-0.29382524,-0.186406,-0.17762733,-0.1445377,0.13506992,-0.35136354,0.24111918,-0.36675584,0.021335155,-0.05516007,-0.15420103,0.4554361,0.4533603,-0.34406003,0.006251238,0.1428859],[1.1166015,-0.29759768,0.48270738,0.43025842,0.0056440467,-0.4213741,0.4217568,0.15726581,0.074272975,0.1225627,0.32488325,-0.059570342,-0.34078333,0.076991476,-0.26384223,-0.06351244,0.1692961,-0.21616662],[0.098687425,-0.3278237,-0.21179028,0.0031954458,-0.20943744,-0.13822405,0.548112,-0.34726304,-0.3400807,0.25883827,-0.17620128,-0.36422935,0.52832425,-0.1289231,-0.026027037,0.18089916,0.1012807,-0.07116273]],"activation":"σ"},{"dense_2_W":[[1.3021795,-0.4139669,-0.7120532,-0.74666166,-0.18984732,0.048739053,-0.25614926],[-0.45348325,-0.5127636,-0.35794353,0.021264847,-0.73585445,0.02490475,-0.37029886],[-1.0356512,0.21161588,0.15873429,0.17991234,-0.3031208,0.07505193,-0.33505473],[1.5017016,-0.31481206,-1.1198424,-0.40624765,-0.09357655,0.51827437,-0.055450503],[-0.6468184,0.053211562,-0.6933904,-0.13317326,-0.24886934,-0.3967814,-0.6371098],[-0.41236708,0.3045984,0.51569694,0.026683038,-0.66206634,0.038440548,-0.3386708],[-0.58338356,-0.09002029,-0.13582824,0.008655593,-0.69411683,-0.21923552,-0.3192624],[-0.6897999,0.12905283,0.67996913,0.1456075,0.25029323,-0.34134966,-0.6459057],[-0.252227,0.043475367,-0.9427369,-0.14302255,-0.10663869,0.31176025,-0.35857844],[0.22877508,-0.5189181,-0.41833526,0.20187113,-0.1781152,-0.16428699,-0.2800521],[-0.65191513,0.44252837,0.6581859,0.25468537,-0.9424999,-0.32678768,-0.8593621],[0.43401113,-0.24967693,-0.281952,-0.284015,0.7110927,0.27138582,0.9720163],[-1.1512148,-0.18058608,0.45996955,-0.5937282,0.31828657,0.15207982,-0.22012103]],"activation":"σ","dense_2_b":[[0.0048766164],[-0.056708604],[-0.123050824],[-0.07202907],[-0.25869218],[-0.20529492],[-0.091088444],[-0.091022156],[-0.32449347],[-0.17546864],[-0.0612454],[0.04344016],[-0.074389376]]},{"dense_3_W":[[0.25576973,-0.575117,-0.6076316,0.36512917,-0.41574427,-0.40301278,-0.4620185,-0.5097215,0.122016355,0.3936914,-0.041409556,-0.059126735,0.07365807],[0.29514056,-0.25677466,-0.18109803,-0.030853858,-0.029449929,-0.28013232,-0.025037538,-0.4706025,0.02876151,-0.48724273,-0.6757201,0.6601352,-0.20265144],[-0.7641006,0.21497111,-0.28698337,-0.379376,-0.31239873,-0.26711258,0.02512146,-0.31214246,0.077003516,-0.18367848,0.6396449,-0.61027414,0.5836878]],"activation":"identity","dense_3_b":[[0.047669664],[0.041923303],[-0.020977087]]},{"dense_4_W":[[-0.6845342,-1.0030532,0.7527504]],"dense_4_b":[[-0.03611581]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_ELANTRA_HEV_2021.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_ELANTRA_HEV_2021.json deleted file mode 100644 index 10e66ce04..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_ELANTRA_HEV_2021.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.910586],[1.4123459],[0.59487087],[0.03911551],[1.409979],[1.4115622],[1.411603],[1.3893355],[1.3640546],[1.3232217],[1.276401],[0.0390601],[0.039079115],[0.03908953],[0.039015334],[0.038927097],[0.038650174],[0.03832818]],"model_test_loss":0.007736066821962595,"input_size":18,"current_date_and_time":"2023-08-07_01-15-55","input_mean":[[22.795855],[-0.08798489],[0.01143446],[-0.009032234],[-0.09088829],[-0.090495676],[-0.09043885],[-0.08431701],[-0.0800931],[-0.07318552],[-0.065705255],[-0.009123672],[-0.009095005],[-0.009068311],[-0.008966204],[-0.008944961],[-0.008930321],[-0.008916563]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.1817923],[-3.718042],[-0.17253013],[1.0498631],[-2.7819123],[-0.40877423],[-0.1835958]],"dense_1_W":[[-0.051857583,1.3051457,3.4929137,-0.65374345,-1.1122645,-0.24794711,-0.3011514,-0.08444903,0.8605938,0.7186169,-0.99715984,0.579954,0.45131174,-0.5857832,-0.25104427,0.36404672,0.08432625,-0.118304946],[-1.1977811,-0.475098,-0.32292378,-0.4435726,-0.21691985,-0.45479798,0.93214303,-0.6325391,-0.057171293,-0.48693532,-0.058870036,0.043592565,0.29524007,0.19475447,-0.16399422,0.17714727,0.02705515,0.09614742],[0.0504194,0.37990266,0.039530136,0.04288842,0.036023762,0.50610423,-0.04245624,-0.08900527,-0.18667571,-0.136124,0.24658443,0.4461418,-0.21306992,-0.1905496,-0.24427558,0.019992698,-0.0458097,0.082212],[1.8970265,0.3291775,-0.45923525,-0.42205855,-0.4413092,0.022868842,-0.3697922,-0.2818066,-0.4076601,-0.3907717,-0.20571287,0.6031218,-0.23714252,-0.16817166,0.07743641,0.021997932,0.611759,-0.23154868],[-0.9974602,0.15397596,0.22610018,0.036102634,0.06823634,0.6489421,-0.41508022,0.35325828,-0.10202731,0.1711457,0.28493625,0.035079315,-0.4149946,0.08604628,0.117554076,0.10761524,0.08686444,-0.2359245],[-0.28764305,0.34052572,0.18389913,-0.017938213,-0.2068081,0.2519639,-0.7214537,0.29472184,0.27933893,0.27484724,-0.15843095,-0.037846185,0.316401,-0.09005458,-0.14835708,-0.19075473,-0.03951283,0.114958726],[-0.052516285,-0.16471781,0.17191207,-0.23444073,-0.022119049,-0.24730825,0.75023305,-0.40318617,-0.34178376,0.12554757,0.39539844,0.059354424,-0.44725272,0.4979164,0.060783666,-0.0009443115,0.11399086,-0.14107631]],"activation":"σ"},{"dense_2_W":[[0.15574715,0.106084,0.6234715,0.48498833,0.24288625,0.6844518,-0.61408937],[0.5661129,-0.5984536,0.79835355,0.3082054,-0.060715023,0.26763362,-0.016118767],[0.14648265,0.21900931,-1.1337527,0.16373587,-0.9757596,0.041679647,0.65339375],[-0.11193495,0.15425135,-0.22649455,0.4248423,-0.7341563,-0.15863545,0.44211566],[0.19026476,0.5881703,-1.0570571,0.34021673,-1.0282404,-0.26504597,0.28280511],[-0.8895008,0.8121495,-0.5693253,-0.77341056,0.33465576,-0.49232218,-0.11758821],[0.9326459,-0.36728933,0.24325472,1.0141891,0.16826893,0.2829455,-0.06759766],[-0.16648382,-0.44048628,0.39915726,0.06806857,1.0963099,-0.03239437,-0.6205627],[0.2911811,0.57449996,-0.9605739,0.043008372,-0.73384374,-0.6097065,0.45541903],[0.31353498,-0.08516989,0.8531249,0.013826798,0.6559815,0.18347614,-0.7929507],[-0.016170498,-0.18118915,-0.86683124,-0.34802145,-0.47758147,0.13393015,-0.17496912],[0.091279745,0.35503078,-1.1297911,0.2600009,-0.10615289,-0.7520532,0.5357286],[-1.2284657,0.86050045,-0.034789667,-1.018808,-0.06296706,-0.028193004,-0.4022851]],"activation":"σ","dense_2_b":[[-0.05504892],[0.01253799],[-0.062120188],[-0.051010966],[-0.08326587],[-0.2394042],[0.028907817],[-0.080568254],[0.03604939],[-0.12410697],[-0.01955361],[-0.051553864],[-0.18583551]]},{"dense_3_W":[[0.63645065,0.63501835,-0.66807485,-0.52668273,-0.28929064,-0.23005038,0.43932953,0.121157095,-0.7683699,0.4412728,-0.32547268,-0.71282554,-0.4370708],[-0.30129626,0.3909303,0.29454166,-0.1705362,0.48066851,0.06491059,-0.090611994,-0.08033778,0.3795498,-0.5508733,-0.32967407,0.38930234,0.2549319],[0.005347131,-0.5191341,-0.26486373,0.12736864,0.5334262,0.5237369,0.38844875,0.003590752,-0.26281914,0.01214623,-0.24618849,-0.056392476,-0.0030399126]],"activation":"identity","dense_3_b":[[0.015747098],[-0.13919984],[-0.0075076534]]},{"dense_4_W":[[1.3023344,-0.041308355,-0.00318671]],"dense_4_b":[[0.015396652]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_GENESIS.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_GENESIS.json deleted file mode 100644 index 25ea1b538..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_GENESIS.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.5459266],[1.3150389],[0.55143183],[0.0433077],[1.3103489],[1.3122923],[1.3130105],[1.2928256],[1.2722898],[1.2458807],[1.2160609],[0.043061666],[0.04310888],[0.043158278],[0.04318699],[0.043118294],[0.042912837],[0.042521223]],"model_test_loss":0.008513328619301319,"input_size":18,"current_date_and_time":"2023-08-07_03-22-20","input_mean":[[28.507357],[0.10861685],[-0.013601736],[-0.0064216373],[0.110937536],[0.10975514],[0.10922218],[0.10294279],[0.09506291],[0.08270148],[0.068715945],[-0.006518178],[-0.006483864],[-0.0064613186],[-0.0065263556],[-0.0066083767],[-0.0067466046],[-0.006989514]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.09213746],[0.07837435],[-0.127023],[-3.701971],[0.02127427],[-1.6431203],[2.2172556]],"dense_1_W":[[-0.015300604,0.5825342,-0.05051114,-0.18122214,0.07876552,0.9315104,-0.6162402,0.016129851,0.010469424,-0.020838048,0.1523773,0.15082102,0.090840556,-0.28110996,-0.1849562,0.15245719,0.22167133,-0.14279774],[0.02588672,0.32077435,-0.006722575,-0.011324345,-0.5431526,0.77720726,-0.32035637,-0.036528517,0.21234833,0.12834615,-0.15494944,0.5575763,-0.31280997,0.0010270807,0.14701857,-0.5796583,-0.3692745,0.5129307],[-0.0071143424,0.15858999,0.05704565,0.18143037,0.10665202,0.79463303,-1.0030777,0.2742014,0.20928839,-0.016834116,-0.14212018,0.18155766,0.4066399,-0.36911637,-0.50523275,-0.22205615,0.03395741,0.21754928],[-0.91471785,-0.0921693,-0.48348656,-0.14060836,0.024012497,-0.018223943,-0.12564234,-0.15323682,-0.3923083,-0.38660574,-0.31491503,0.011104942,-0.050269924,-0.032277748,-0.20858657,-0.018367982,0.19149122,0.10155454],[0.002645861,-0.8126742,-2.6549594,0.3429386,-0.20882957,-0.07800046,1.2651403,0.20753327,-0.7863295,-0.38006702,0.40243247,-0.76908433,-0.23738272,0.14581157,-0.38623288,0.39540884,0.04323188,0.56106085],[-0.9343576,-0.3586926,0.48885745,-0.13841353,0.17987157,0.061989535,0.46451867,0.29794976,-0.008585158,0.35067263,0.529655,0.51325566,-0.010691093,0.24579975,-0.5215634,0.0016024356,0.093200974,-0.031658597],[0.8293412,-0.20795242,-0.4017055,-0.533866,0.06481363,-0.26879504,0.3793856,-0.471539,0.023038805,-0.48921797,-0.22237803,-0.25630578,-0.039906733,0.666029,-0.0033022463,-0.31751958,0.26048532,0.09580422]],"activation":"σ"},{"dense_2_W":[[-1.0194138,-0.4770013,-1.6248175,1.692745,0.9337828,0.8437085,-0.54136294],[-0.52307904,-0.3975833,-0.6281236,0.08257637,0.27855587,0.43421826,0.45445123],[-0.20069543,-0.41561922,-0.44643855,0.07080084,-0.5047794,0.030606043,0.30134434],[-0.47260144,-0.7754414,-0.77397937,0.25201085,-0.07254463,0.658033,0.5073921],[0.3583858,0.10549722,0.5157753,-0.14047585,-0.617101,0.01266099,-0.6511524],[-0.9189057,-1.0387809,-0.5919117,0.46444207,0.1477566,0.459492,-0.2141334],[0.6823633,0.32230988,-0.13244073,0.2521329,-0.5877716,0.24724948,-0.416414],[-1.1259369,-1.071255,-0.25267237,-0.15611424,-0.36670506,0.8724834,0.70592606],[-0.3924353,-0.48566842,-0.89685357,-0.118145935,0.5531914,-0.012460924,0.78037065],[0.22028138,0.3253433,0.69419026,-0.08042979,-0.053916857,-0.2591152,-0.7299852],[0.37642446,0.15646371,0.73757994,-0.17530896,0.03673549,-0.35259926,-0.61480165],[0.6373535,-0.17438105,0.09731847,-0.37075844,-0.66817486,0.2684939,-0.48366025],[-0.8707067,-0.44384053,-0.44201162,0.51280767,-0.21291855,0.090648316,0.46247554]],"activation":"σ","dense_2_b":[[-0.3433028],[-0.031133696],[-0.06321145],[-0.19336915],[0.029136015],[-0.03043773],[-0.08612019],[0.05573746],[0.27088183],[-0.027076768],[-0.045460623],[-0.23163527],[0.058642514]]},{"dense_3_W":[[0.25786313,0.56292504,0.20988815,-0.11078339,-0.77840126,0.58619094,0.01413026,0.5725057,0.1304814,-0.74678564,-0.2714909,0.0549931,0.36715108],[-0.81611776,-0.17429464,-0.21161298,-0.10920066,0.2845192,0.3519452,0.42357373,0.09085552,0.41325328,0.05708694,-0.14555562,0.13213179,-0.20445172],[0.19899562,0.10822825,-0.4272676,0.613673,0.33998376,-0.17425252,-0.64963627,-0.19976379,0.64160216,-0.4531084,-0.40512505,-0.49072832,0.52435446]],"activation":"identity","dense_3_b":[[-0.05059222],[-0.15303764],[-0.035763595]]},{"dense_4_W":[[-0.9634106,0.023092944,-0.42669016]],"dense_4_b":[[0.04803448]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_IONIQ_5.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_IONIQ_5.json deleted file mode 100644 index 109e31675..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_IONIQ_5.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.469145],[1.4993936],[0.57071626],[0.04533063],[1.4846802],[1.4910924],[1.4950643],[1.4770368],[1.450109],[1.4059838],[1.3534893],[0.0450725],[0.04513867],[0.04519552],[0.04527874],[0.045279715],[0.045107212],[0.044762082]],"model_test_loss":0.011814278550446033,"input_size":18,"current_date_and_time":"2023-08-07_03-50-24","input_mean":[[22.163363],[-0.072142825],[-0.0025159488],[-0.006112024],[-0.069063514],[-0.06971331],[-0.0704586],[-0.0690143],[-0.06599702],[-0.060672827],[-0.053519193],[-0.006028869],[-0.0060502393],[-0.0060780053],[-0.006223877],[-0.0063924924],[-0.0066624186],[-0.006921035]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.1967828],[1.3245456],[0.103971295],[-1.2520714],[-0.16602024],[-2.0981002],[-0.14066501]],"dense_1_W":[[-0.4214301,0.103772216,0.8929513,-0.18447745,-0.2701103,0.30181846,-0.36284757,0.21057971,-0.018612964,0.0593094,-0.16024835,0.1416867,-0.15246183,-0.3907173,-0.08361737,0.2765874,-0.1042719,0.12791668],[0.2745816,0.9077304,-0.011180789,-0.113791615,0.3160003,0.6698024,-0.6092146,-0.40735677,-0.053869486,0.12563229,0.2932765,0.4824642,0.22824322,-0.60383517,0.30220488,-0.049962338,-0.10605018,-0.088415876],[0.057883058,-0.04662177,0.68351626,-0.26972455,-0.43764362,-0.3083863,0.90403295,-0.09680003,-0.1232865,-0.18376413,0.0876113,-0.32598537,0.17061934,-0.039507188,0.030940559,0.22072437,-0.15162866,0.08447131],[-0.4781647,-0.22644347,-0.89709544,0.010036355,0.10885899,-0.12831874,0.32772595,0.41050613,-0.5090009,-0.107521385,0.26115948,-0.30580103,0.59975356,0.21102095,0.12877508,-0.07514449,-0.22881992,0.021187356],[0.011980259,0.655078,0.042019397,-0.39598337,-0.041903555,0.066606015,-0.36221957,0.049460504,0.3256252,0.043578107,-0.21974392,0.42173225,-0.007631104,-0.024107013,0.045484435,-0.3227939,-0.42450958,0.39688012],[-0.3749303,1.2016063,-0.0067011383,-0.14846599,0.07785109,0.20617402,0.023736777,-0.21452771,-0.34367922,0.24584025,0.24662304,0.051978063,0.2859072,-0.12438496,0.35116002,-0.25033846,0.10243457,-0.23285078],[0.010329517,-0.67234844,-3.8885512,0.32423398,0.45072496,0.7296973,0.38731125,-0.056170475,-0.81186455,-0.70703673,0.57100385,-0.9289139,0.09747156,-0.16550198,0.57601154,0.15654263,0.26841167,-0.023330638]],"activation":"σ"},{"dense_2_W":[[0.12735078,0.7578463,-0.8394619,-0.16871296,0.67499816,0.50618064,-0.036082815],[-0.9349809,0.49174136,0.64577276,0.8777052,-0.27532703,-1.3241053,0.92440283],[-0.88465834,-1.2536055,0.3215816,0.9998298,-0.78880596,0.3562564,0.29056188],[0.38568902,0.47334033,-0.39721346,-0.4981637,0.029624036,0.738565,-0.1316896],[-0.054050677,-0.34113935,0.34908327,0.3195855,-0.82633394,-0.4289165,-0.2309725],[-0.6001114,-0.48455656,0.088143736,0.6083232,-0.19328989,-0.6810937,0.45793325],[-0.04838382,-0.6484051,-0.373168,-0.47354728,-0.71413493,-0.10174487,0.009353199],[0.8382851,0.78388906,-0.7335581,-0.45394737,0.45634454,0.032309055,-0.18919362],[0.29141206,0.25385764,-0.36612022,-0.35426342,0.6002645,0.6095089,-0.22014005],[-0.29009074,-0.96834266,0.6976368,0.3486304,-0.2684134,-0.94937044,-0.25426298],[0.11204245,-1.096992,0.3850058,0.012738441,0.02725583,-0.9902537,0.24397202],[-0.33665514,-0.9425791,-0.08292521,0.23680806,-0.41410118,-0.24981315,0.34143913],[0.014888026,-0.03633883,0.665913,0.18707138,-0.85576785,-0.8612555,-0.39374956]],"activation":"σ","dense_2_b":[[-0.017777005],[0.23545785],[-0.15226115],[-0.047002222],[-0.08956424],[-0.059980016],[-0.13794045],[0.0060922517],[-0.3427262],[-0.07332524],[-0.21932544],[-0.22186531],[-0.076186255]]},{"dense_3_W":[[-0.7212533,0.5909567,0.60852754,0.30440143,0.5012994,-0.24762858,-0.66177696,0.15439416,-0.22291721,0.4902901,-0.34424105,-0.119624294,0.09342594],[0.44096592,-0.49161512,-0.6518094,0.6872087,-0.59066635,0.55458814,-0.36470622,0.4769713,-0.045274016,0.15205328,-0.5337833,-0.3563202,-0.15947717],[-0.7922449,0.5979252,0.5463646,-0.42703834,-0.019785186,0.51403254,0.4312795,-0.45969784,-0.33491063,0.21159784,0.3650792,0.1885672,0.5103654]],"activation":"identity","dense_3_b":[[-0.11362524],[0.06490415],[-0.09258138]]},{"dense_4_W":[[-0.34753174,0.23976417,-0.86662257]],"dense_4_b":[[0.07719801]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_IONIQ_EV_LTD.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_IONIQ_EV_LTD.json deleted file mode 100644 index 0bb8fb0fe..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_IONIQ_EV_LTD.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[4.3663363],[1.0055081],[0.48724762],[0.041052617],[0.9967611],[1.000683],[1.0039185],[1.0006562],[0.9922954],[0.9760051],[0.96259797],[0.040620644],[0.040736996],[0.040861562],[0.041329786],[0.041552614],[0.04158318],[0.041458495]],"model_test_loss":0.007739691529422998,"input_size":18,"current_date_and_time":"2023-08-07_05-33-00","input_mean":[[21.149132],[0.04869401],[0.010550776],[-0.042260047],[0.04392769],[0.045757443],[0.04700402],[0.05030857],[0.046020832],[0.043477297],[0.04459311],[-0.042488344],[-0.042413425],[-0.042349935],[-0.0422564],[-0.042364012],[-0.04258541],[-0.042924497]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.2678127],[0.08612767],[-0.9489097],[0.706986],[-0.30796576],[-0.32985103],[0.080427095]],"dense_1_W":[[0.0036277466,0.51429325,1.0403895,-0.21717447,-0.43794936,-0.19047353,-0.64920795,-0.048046228,0.69371104,0.53239745,-0.7118019,0.6192604,0.5279617,-0.30141866,-0.19268416,-0.3834617,-0.04798644,0.15677519],[0.030118963,-0.13764045,-0.07282364,0.08246006,0.2705789,1.1211811,-0.57014453,-0.16758528,-0.2744678,0.09098098,0.30342337,-0.20622616,0.0074658724,0.117365144,-0.2300956,0.17353779,0.0072367247,-0.05224067],[-0.46240714,-0.814998,-0.15898485,0.23570561,0.2619672,-0.6533978,0.53975147,0.42714936,-0.15445922,-0.27475175,0.2855774,-0.6121087,-0.085973136,0.56669056,-0.24448115,0.47533005,-0.0016848596,-0.2630539],[0.48946816,-0.17746238,-0.16460344,-0.3096607,0.21007513,-0.51034343,0.029157858,-0.13090727,-0.09923416,0.38133857,-0.08658899,-0.37016922,-0.20602193,0.81421083,0.47483093,-0.30339777,0.043880396,-0.07612349],[0.010865774,-0.24699818,1.7088879,0.025180334,0.0171949,-0.8591754,0.41037732,-0.19206196,0.020423349,-0.07455425,0.17094779,-0.25438294,0.11110474,0.32507765,0.43417934,-0.011772227,0.14530338,-0.59843206],[0.027194558,0.63995826,-0.010129754,0.44069192,-0.1763659,-0.9194824,0.02155618,-0.12091762,-0.05442227,0.43881658,-0.3719806,-0.23903327,-0.20877454,0.41533244,-0.13582179,-0.14811464,-0.20708357,0.15655594],[-0.0028607307,0.34870997,2.821092,0.2508811,-1.035149,-0.465783,-1.5769824,0.18240027,1.7161161,1.8064464,-1.3023019,0.52437043,-0.00077510276,0.16097444,0.040497832,-0.045791112,-0.8714639,-0.1387739]],"activation":"σ"},{"dense_2_W":[[-0.4802455,-0.5064868,-0.2886249,-0.0686329,-0.27806887,-0.3524303,-0.80409414],[0.34504583,0.3495648,-0.7631179,-0.38251773,0.29856616,-0.26794648,-0.18538539],[0.6198588,-0.22676483,-0.35512465,0.12881657,-0.40367082,-0.9252802,-0.0002468375],[0.35880542,0.46389118,-0.8148363,-0.59149826,-0.5300025,0.20585157,-0.07116474],[-0.23429085,-0.62216985,0.59508204,0.4193159,-0.15182957,0.5141024,-0.41728604],[0.66723776,0.073733844,-0.070885584,-0.48375297,-0.45241132,-0.84997284,-0.031634018],[-0.5627967,-0.4777591,0.868787,0.17813006,0.21961252,0.14355378,-0.57126164],[-0.14685419,0.03656165,-0.7900763,-0.08400198,0.24159017,-0.85876423,-0.26216614],[-0.71358204,-0.689546,0.051773578,-0.0848018,0.18454298,0.22894992,-0.1594909],[-0.018925406,-0.706924,0.090921454,0.70733404,-0.1029515,0.4853316,-0.19676127],[0.3700011,0.58441055,0.019160673,-0.4851522,-0.5654224,-0.81087536,0.48571846],[-0.6824983,-0.010707942,-0.03845548,-0.24932735,0.10926147,-0.65549374,-0.13580413],[0.044423133,0.24843681,0.10453449,-0.5270328,-0.0071183904,-0.805887,0.016872479]],"activation":"σ","dense_2_b":[[-0.32894507],[-0.1402385],[-0.08289674],[0.058721446],[-0.08779582],[-0.08003288],[-0.0015345884],[-0.02523492],[0.00043462456],[-0.033334095],[-0.036279026],[-0.33189464],[-0.07644796]]},{"dense_3_W":[[0.13798034,-0.55931157,-0.057955276,-0.049440853,0.51565015,-0.01682391,0.30927873,-0.11561556,0.6672029,-0.07284992,-0.4854766,-0.14209567,-0.34877455],[-0.031582475,0.050488807,-0.24109462,-0.54226226,-0.22244236,-0.3798091,0.5201355,0.11588744,0.013117147,0.33739212,-0.23309216,-0.14616711,-0.5281888],[-0.076868005,-0.03763952,-0.29681742,-0.12974247,0.4806066,-0.04267054,0.51561165,-0.50798887,-0.13377365,0.61627406,-0.48184386,0.3136061,0.23230153]],"activation":"identity","dense_3_b":[[0.062304508],[0.06676691],[0.045753885]]},{"dense_4_W":[[-0.7684763,-1.1087472,-0.815416]],"dense_4_b":[[-0.05879514]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_IONIQ_PHEV.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_IONIQ_PHEV.json deleted file mode 100644 index 81deb9f47..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_IONIQ_PHEV.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.896002],[1.2703207],[0.4862841],[0.043405883],[1.2591066],[1.2634319],[1.2668407],[1.2588236],[1.2390842],[1.196458],[1.1518458],[0.04327276],[0.043316394],[0.043354623],[0.043371588],[0.043337632],[0.043194752],[0.04294343]],"model_test_loss":0.0052194190211594105,"input_size":18,"current_date_and_time":"2023-08-07_06-24-33","input_mean":[[21.445068],[0.09960828],[0.007299674],[-0.0005310989],[0.09852017],[0.09864108],[0.09867044],[0.10080879],[0.10140148],[0.09866842],[0.095603466],[-0.00043161964],[-0.0004366571],[-0.00044840755],[-0.00056364527],[-0.0007040198],[-0.0009044244],[-0.0011604802]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.09470449],[3.0432646],[0.03450416],[-0.46021092],[1.1594877],[0.029558277],[1.8363751]],"dense_1_W":[[0.005493746,-0.3358011,0.0037607898,0.29596448,0.3943874,-1.0717398,0.5701757,0.016112054,-0.3643242,0.23849818,-0.075061426,-0.56350166,0.061684538,0.23258829,0.3412455,-0.086815886,0.09234655,-0.08318382],[0.5553914,1.0832955,0.025380384,-0.42384112,0.25218967,0.2652197,-0.08185232,0.14480954,-0.08236447,0.41922125,0.03566944,0.47901392,0.27303162,0.23061423,-0.48810846,-0.049590047,0.055590317,-0.0777213],[0.020737711,-1.0003403,-4.471138,0.18066612,0.8972061,0.281358,0.63211244,0.037308935,-0.27867937,-0.5369628,0.02718618,-0.8628528,-0.5999772,0.41523072,0.23050354,0.6017408,0.07975743,-0.02996209],[0.13376372,-2.1679244,0.024798622,-0.6729938,-0.54384416,-1.0513178,0.8737397,-0.41420826,0.114922546,-0.99975115,-0.08032563,-0.5233528,-0.047853615,0.95928097,-0.67657197,-0.6571614,0.3954971,0.7528502],[1.0411915,0.2750806,-0.017673122,-0.287801,-0.5224428,-0.17964116,-0.7069524,-0.38134468,-0.040215928,-0.100667715,-0.22424145,-0.011132579,0.045741584,0.25371146,-0.41912347,-0.07781668,0.072858974,0.3702856],[0.006503676,0.31328365,0.7664561,-0.6728464,0.3802759,0.44000676,-0.5781886,0.107931,-0.15678358,0.1777509,-0.48083207,0.49993676,-0.26356068,-0.6739486,0.0690044,0.28473458,-0.08100241,0.2141241],[0.6557612,-1.1317073,-0.01985534,0.2997433,-0.3100224,-0.5334095,0.59377813,-0.11130485,0.11088933,-0.23197712,-0.15815854,-0.38820937,0.05915133,-0.4817993,0.3789274,0.16070421,-0.20570633,0.1632214]],"activation":"σ"},{"dense_2_W":[[0.4679878,0.2634842,-0.028860494,-0.21427041,0.14012837,-0.5288975,-0.42545995],[-0.6775605,-0.4815579,-0.454403,-0.07230136,0.009694609,0.59333,-0.62719697],[-0.6382057,0.6997013,0.36473322,0.2414489,0.13382578,-0.18536665,-0.90939593],[-0.8748301,2.3719103,-1.56188,-1.8237168,2.1302335,1.2548504,-0.031323623],[0.503896,-0.679211,-0.6008442,0.60013664,0.17343543,0.17834695,0.24348144],[-0.13778792,0.15866904,-0.76191425,-0.5750008,-0.69259375,0.40918577,-1.4637057],[-0.52587533,-0.25144148,-0.31243584,-0.1940254,-0.25742918,0.22230358,-0.21316433],[-0.29734585,-0.21217649,-0.4547587,-0.4792317,0.52856797,0.5213185,0.07181257],[-0.007364429,0.007793841,-0.71918666,-0.005362996,0.23980153,-0.49275202,-0.6564195],[0.27902287,0.11022579,0.09352632,0.18805945,0.30498815,0.03035562,0.31641266],[0.65705526,-0.5266016,-0.022429584,0.18331312,-0.32305643,-0.007786143,-0.26408496],[-0.4082327,-0.25355664,-0.5861339,0.31163412,0.25877875,-0.75417554,-0.30994046],[0.5602024,-0.5399794,0.34386253,-0.40272358,-0.48508552,-0.18899718,0.17928903]],"activation":"σ","dense_2_b":[[-0.010232577],[-0.00023857807],[-0.034300473],[0.46175855],[-0.028856292],[-0.191977],[-0.23886801],[-0.003576378],[-0.22439884],[-0.009154732],[-0.014472028],[-0.22065732],[0.0036408578]]},{"dense_3_W":[[-0.30743915,-0.5722211,-0.48067984,-0.108277574,0.29175866,-0.51613647,-0.52692574,-0.06551988,-0.0476114,0.3618537,0.05102852,-0.27722335,0.5223134],[0.30818227,0.17767535,0.5113013,-0.25676715,-0.058021083,0.4884727,-0.23518495,0.43626583,-0.42181972,-0.047644824,-0.1406492,0.23160899,-0.44818217],[0.45361012,-0.51555586,-0.5169346,-0.2632498,0.44542933,-0.15754463,0.30686757,-0.56882674,0.065441564,0.3283218,0.18038327,0.1817784,0.5348782]],"activation":"identity","dense_3_b":[[0.012215524],[0.0026582293],[0.008550247]]},{"dense_4_W":[[-0.97812647,-0.12224905,-1.2473096]],"dense_4_b":[[-0.009789151]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_KONA_EV.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_KONA_EV.json deleted file mode 100644 index bb7619308..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_KONA_EV.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.222069],[1.4015005],[0.5433659],[0.046245173],[1.3907557],[1.3952589],[1.3979354],[1.3851876],[1.3639251],[1.3265828],[1.2794514],[0.04593869],[0.04602148],[0.04609722],[0.046142124],[0.04606174],[0.04579012],[0.045302678]],"model_test_loss":0.009272297844290733,"input_size":18,"current_date_and_time":"2023-08-07_07-41-26","input_mean":[[21.305267],[0.004457678],[0.0094668595],[-0.012420628],[0.004529341],[0.005278159],[0.005986334],[0.00870795],[0.010163208],[0.009530685],[0.008663278],[-0.012377954],[-0.01237566],[-0.012378746],[-0.012456359],[-0.012550046],[-0.012720126],[-0.012910544]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.047097],[1.9158853],[0.17434227],[-0.97165537],[-0.10269022],[-0.9169131],[0.0008914754]],"dense_1_W":[[-0.88408405,1.235049,0.0426836,0.013424199,-0.08920125,-0.013397676,0.586178,-0.04885077,0.3810674,0.36573988,-0.3742023,-0.11406285,0.04956962,0.03306387,-0.10079546,-0.18288964,-0.018636217,0.16385865],[0.88075936,1.297032,0.032537315,-0.17033583,-0.09099818,0.4118023,0.12728553,0.14429076,0.1508224,0.15520132,-0.16594887,0.11192377,0.23395588,-0.301161,-0.2021957,-0.0027576552,0.08704741,0.086546],[0.7485217,0.44026893,-1.9140397,-0.17217009,0.059100352,-0.047859672,-0.5856153,0.44894385,0.22710915,-0.21913743,-0.29625463,0.322819,0.07943353,-0.022421572,-0.090653695,-0.444467,0.1394176,0.18164952],[0.4358342,-0.32757956,2.063401,0.20161365,-0.24610913,-0.3428621,0.6505693,0.016287383,-0.07427287,0.03351724,0.22633989,-0.3643204,-0.26658386,0.20206529,0.12288221,0.2783347,0.19327204,-0.36068434],[-0.0035009065,-0.72611684,-0.0082449615,-0.22654101,0.46806103,-0.34762052,-0.40569013,0.40099728,0.11805809,-0.16216965,-0.042650726,-0.89064217,0.21002078,0.642215,0.20523302,0.31924605,0.101329714,-0.13541093],[-0.41431567,0.11045769,2.0121331,-0.2800082,-0.054261006,0.11609053,-0.5194348,0.0039073634,0.18652305,-0.21063456,0.3278946,0.18608095,-0.043919813,0.063306555,-0.30901843,0.42117286,0.14100657,-0.16917707],[0.1144374,0.0647928,1.4224553,-0.33906898,-0.090644486,-0.5943667,-0.7509755,0.8212074,0.73758525,0.21148895,-0.4533185,0.18891388,0.058078196,-0.32458195,0.36525872,0.30673453,-0.21418211,-0.02886248]],"activation":"σ"},{"dense_2_W":[[-0.09611834,0.018518968,0.3276854,-0.29474196,0.07749839,-0.18393336,-0.108452864],[0.8463591,0.2765366,0.26273692,-0.542793,-1.3948811,0.38413918,0.13216402],[0.6448755,-0.9121937,-0.4041889,-0.44714126,-0.6450281,0.62885827,0.6442234],[-0.6492855,-0.59167993,-0.2413325,0.6629408,0.8960554,-0.16874227,-0.23902991],[0.25179657,-0.0052280165,-0.787087,-0.52129155,-0.7962139,0.5745307,0.5154668],[0.1658994,-0.14782484,-0.34189487,-0.24388146,0.26166263,-0.10471854,-0.98238224],[0.3014624,-0.11165519,0.1926479,-0.0071346364,0.12017147,-0.5179131,-0.42826292],[-1.3958447,1.0750867,0.51260227,0.5384232,-0.34655526,1.0435345,1.5503204],[0.40272388,0.12323784,0.24391593,-0.66794497,-0.92917013,0.24938683,0.35117647],[-0.37655634,-0.79549915,-0.7874939,0.049076214,0.16099943,-0.46943882,-0.46139815],[0.101291455,0.14885388,-0.42190292,0.31973553,0.7213091,-0.43006414,-0.27885658],[-0.32128662,-0.3569677,-0.5827871,-0.44924423,0.16653252,-0.70502335,-0.009819985],[-0.1346414,0.065946266,0.22599967,-0.71018034,-0.8050497,0.21156272,0.017037582]],"activation":"σ","dense_2_b":[[-0.15589215],[-0.28170976],[-0.38979664],[0.083457045],[-0.43890372],[-0.010706772],[-0.07441867],[-0.20225793],[-0.14819947],[-0.0007909137],[-0.0439504],[0.00047137964],[-0.0815142]]},{"dense_3_W":[[0.04960481,0.7185168,0.55996764,-1.1893424,0.63903844,-0.7087734,0.2795772,0.5947179,-0.12752935,-0.9978769,-0.25698617,-0.06704499,-0.04695985],[0.301456,-0.21193206,0.22014925,0.07238018,-0.24935168,-0.38614914,-0.53463185,0.41344443,0.122541234,0.4214228,0.2293029,0.506032,-0.25195587],[0.30665806,0.26296693,0.6493592,-0.4486736,-0.020275978,-0.3785944,-0.39404252,0.43909723,0.5369053,-0.4844059,-0.36188412,-0.6198387,0.2678705]],"activation":"identity","dense_3_b":[[-0.104795374],[-0.0101343505],[-0.022516306]]},{"dense_4_W":[[0.6437274,-0.14137705,0.8526488]],"dense_4_b":[[-0.020337932]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_KONA_EV_2022.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_KONA_EV_2022.json deleted file mode 100644 index 4e71fbb64..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_KONA_EV_2022.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.980772],[1.3223853],[0.9268239],[0.024433661],[1.4122427],[1.3833307],[1.3508096],[1.2307118],[1.1849836],[1.1415477],[1.0909376],[0.024418019],[0.024408164],[0.024402233],[0.024252728],[0.024191827],[0.024145853],[0.023861935]],"model_test_loss":0.010252699255943298,"input_size":18,"current_date_and_time":"2023-09-01_20-45-00","input_mean":[[16.563862],[0.1111928],[0.6683766],[0.015079002],[0.0854696],[0.09152668],[0.09758363],[0.121493205],[0.14106716],[0.15788953],[0.16946313],[0.015242839],[0.01523548],[0.015225873],[0.015277851],[0.015472722],[0.015790224],[0.015869608]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.9736897],[-0.14363614],[0.085171],[-0.55840254],[0.055252872],[2.0375261],[-0.18923905]],"dense_1_W":[[1.5419508,0.4347514,0.022342844,-0.13883114,0.2409088,-0.12417678,-0.53509873,0.20153597,0.17858733,-0.19925015,0.06234279,0.24006103,-0.19976556,-0.18627135,0.45923752,-0.15200825,-0.08930177,-0.0050552515],[-0.030591678,0.13387124,0.17806397,-0.13424215,3.5386305,1.7213475,0.84962314,-2.7109919,-1.8677185,-0.9485388,0.11587285,-0.52675563,0.16423121,0.09590165,-0.005669875,0.12117092,-0.3104153,0.34291723],[-0.040051196,-0.90900606,0.033305887,0.48924676,-0.05219214,0.16458692,0.23944448,-0.65811116,-0.14248033,-0.040640995,0.23316579,-0.11273267,0.26166895,-0.3892416,0.20361155,-0.32397175,-0.04944256,0.12745105],[-1.8584498,0.5795085,0.0001561481,-0.3926851,-0.62748444,0.32592124,0.26113057,-0.18676938,0.15465672,-0.039395984,-0.11589895,0.3461765,-0.16687828,0.007636779,0.34468338,-0.24718969,-0.08537343,0.095972665],[0.008184925,0.29720604,0.12834367,0.24606115,-0.050453648,-0.14317429,0.01469496,0.10121035,-0.15977393,-0.071321785,0.14336964,0.1700991,0.15197535,-0.16201954,-0.27186736,-0.18587373,-0.29943192,0.31800416],[1.3913352,0.09059665,-0.06279646,0.282595,-0.5809931,0.06669835,0.31247872,0.33775496,-0.5383088,0.59837353,-0.45551175,0.69241804,-0.26237598,-0.25280276,-0.23810647,-0.60125524,0.035016667,0.40757436],[-0.020792918,0.8449914,-0.31495875,-0.18665223,0.2601113,0.23361494,-0.20227535,0.23019418,-0.36623937,-0.52237487,0.2838479,-0.23221277,0.23532006,-0.1258153,-0.1928124,0.17601454,0.39783114,-0.15201832]],"activation":"σ"},{"dense_2_W":[[0.47221714,0.016886314,-0.33116162,-0.06792718,0.35775667,-0.52708566,0.5025349],[0.9420784,-0.7130284,0.091753036,0.014161378,0.35075215,0.23026218,0.2984281],[0.1440958,-0.022310976,-0.63004696,0.21640168,0.8508171,-0.16760021,0.13965653],[-0.051360242,0.4106794,-0.88011396,0.61412853,0.7515858,-0.2784069,0.19800848],[0.5194753,0.046521883,-0.864117,-0.34576842,-0.21068099,-0.09319121,0.52076554],[-1.8818634,0.99190366,-0.5483396,0.07163825,-0.53633076,0.30430192,-0.43019328],[-1.7481059,1.364397,-0.05183877,0.26558736,-1.0966011,-0.21229754,-0.33233747],[-0.30067447,-0.19872609,0.59686613,-0.5647894,-1.0501944,0.8325608,-0.43664268],[0.59113705,1.348725,0.6290724,-0.6959389,-0.8086151,0.6735704,-0.24954763],[-0.4161925,-0.09258512,0.60084736,0.50538963,-0.20283572,-0.10547142,0.25737134],[0.26642272,0.27427554,-0.86675686,0.3761756,0.13520287,-0.49277586,0.023729336],[-0.057346545,0.40247637,-0.96133965,-0.24963704,0.4294661,-0.0321745,0.3121117],[-1.1896358,0.47296816,0.2525738,-0.41773388,-0.91891223,0.53242177,0.026586607]],"activation":"σ","dense_2_b":[[-0.06391301],[0.10446307],[-0.07552547],[-0.03267669],[-0.08992916],[-0.3635667],[-0.4151249],[0.16962343],[0.17003855],[-0.014166557],[-0.009087415],[-0.12204086],[-0.021121267]]},{"dense_3_W":[[0.11135484,-0.110632345,0.19104497,0.45092243,-0.58294576,-0.22749306,0.0548284,-0.20707788,-0.07605733,-0.5409419,0.18328355,0.36243346,0.48439535],[-0.4690379,-0.19305366,-0.2964049,-0.77543974,-0.26955664,0.62021655,0.51425976,0.6449075,0.6932653,0.29448414,-0.5598454,-0.47247913,0.639388],[-0.086130135,0.0662881,-0.39795497,-0.05040378,0.051303852,-0.38565347,0.81593895,0.65294117,0.45629048,-0.2787272,0.3136061,-0.34606743,0.6333548]],"activation":"identity","dense_3_b":[[-0.0200204],[-0.028796887],[-0.06285456]]},{"dense_4_W":[[-0.10954055,-0.93173796,-0.32423872]],"dense_4_b":[[0.031629298]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_KONA_HEV.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_KONA_HEV.json deleted file mode 100644 index efc9e3a29..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_KONA_HEV.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.320446],[1.4674793],[0.55242187],[0.033747878],[1.4499153],[1.4551026],[1.4600143],[1.4764196],[1.4860643],[1.4978211],[1.5023137],[0.033594012],[0.033627346],[0.03367146],[0.033806257],[0.033919122],[0.03404663],[0.03421485]],"model_test_loss":0.0031593828462064266,"input_size":18,"current_date_and_time":"2023-08-07_09-20-56","input_mean":[[16.720589],[-0.3453631],[-0.01988461],[-0.011758546],[-0.33604637],[-0.33879158],[-0.34137574],[-0.34826595],[-0.34946606],[-0.35428008],[-0.36132792],[-0.011764421],[-0.011732091],[-0.0117199095],[-0.011728072],[-0.011719623],[-0.011750716],[-0.011823986]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.50939155],[0.3405257],[1.6462622],[-0.10843948],[0.285203],[0.037651468],[1.8082677]],"dense_1_W":[[0.024142604,-0.21203998,0.026902797,-0.026592031,-0.5052848,0.08084745,0.060381155,0.07824176,0.1476794,-0.31446207,-0.05622627,-0.24280141,-0.013746504,0.012400391,0.17171621,0.29621166,-0.28375784,0.05738833],[0.1768927,-0.29521623,-0.025311217,-0.092430666,0.28460526,-0.617111,0.49956995,-0.3885511,-0.2726708,0.20527962,0.14372464,0.26093155,0.14992015,-0.31772944,0.08945775,-0.09835619,0.31046915,-0.10769861],[0.97614205,0.4236573,0.38003942,0.49241897,0.51790404,0.053766027,-0.80027264,0.26498482,0.05449548,-0.26899186,0.087867126,0.12839077,-0.05710694,-0.66316336,-0.0033742453,0.2792481,-0.11627638,-0.041489422],[-0.0015497641,0.8673382,3.263093,-0.1707162,-0.6192832,-0.67156154,-0.04999914,0.14607337,-0.06100974,0.58493054,0.15063228,-0.05193594,-0.29414734,0.3289635,0.39314392,0.074083135,-0.25906774,-0.1849865],[0.047487535,0.6483187,-0.012538455,-0.38905606,-0.18153276,0.44709945,-0.5075622,0.21219371,0.068916075,0.25938293,-0.17245348,0.1482799,0.40387914,-0.40022132,0.06770608,0.36847785,-0.026828244,-0.16214016],[0.037951373,0.24962443,0.020283377,-0.0035552767,0.30666018,0.1413196,-0.38893646,0.35808158,-0.032923326,-0.071178645,-0.048781518,0.5162438,0.4610186,-0.7228655,-0.49375764,-0.21811645,-0.19861159,0.40984872],[0.9250359,-0.70112437,-0.36471853,0.0054842713,-0.09402759,0.082544014,0.30093822,0.16678151,-0.2748682,0.18376616,0.04107111,-0.25604424,0.42679307,-0.053103805,0.16130999,-0.40664944,-0.032497868,0.13323294]],"activation":"σ"},{"dense_2_W":[[-0.90112615,-0.4810132,-0.08950426,0.36772704,0.4500673,0.052173443,-0.77481836],[-0.3288408,-0.36183703,0.39837834,-0.19830135,-0.0052449205,-0.4256783,-0.3807343],[0.15238899,-0.52871466,-0.98836666,-0.46207833,-0.9737017,-0.7437858,0.3818713],[-1.0859724,-0.48526433,0.24535194,0.05596006,0.093554944,0.21621844,-0.53195745],[-0.7163611,-0.30886292,0.12716919,-0.4154194,0.37423986,0.9259443,-0.379039],[0.19235164,-0.15816337,-0.017028,0.31888407,-0.28815588,-0.8377302,0.39304262],[0.47231472,-0.08212948,-0.7769114,-0.7738407,-0.48245203,-0.7427551,-0.27572083],[0.2869671,-0.016490303,-0.70185846,-0.34122148,-0.2529159,-0.1406588,-0.40547752],[0.20577213,0.14548963,-0.52808815,-0.30710357,-0.35618016,0.13128263,0.33525097],[-0.17195134,0.3418375,0.095633924,-0.17584541,0.12383485,-0.8438437,-0.021029431],[-1.5742979,-1.0980865,0.13949709,1.2328507,0.30790532,-0.25942948,-1.8909296],[-0.11482437,-0.42623624,-0.34017542,0.49576285,-0.00045646817,0.61140454,-0.84245527],[0.03065336,-0.3165987,0.31627032,0.23499563,-0.5419005,-0.6005879,-0.44092956]],"activation":"σ","dense_2_b":[[-0.06588],[-0.24751721],[-0.036043685],[-0.08081857],[0.042379994],[-0.12687257],[-0.1196205],[-0.103857085],[-0.11169459],[-0.13132711],[-0.12644218],[-0.14405167],[-0.09716702]]},{"dense_3_W":[[-0.25552472,0.4888721,0.66748166,-0.059414074,-0.47127432,0.0070313723,0.562616,0.4663864,-0.12562452,0.27339113,0.011626089,-0.3627435,-0.31609577],[0.31728745,-0.048127633,0.3010577,-0.029504294,-0.633934,0.2603854,0.015562987,0.09305088,0.3503609,-0.30416068,-0.382153,-0.5815462,0.3423376],[0.512647,0.6342511,-0.7857153,0.26010734,-0.111801334,-0.24562247,0.19410154,-0.17319192,-0.4143214,-0.04857833,0.5264786,-0.41035476,-0.4759939]],"activation":"identity","dense_3_b":[[-0.053302422],[-0.044913977],[0.05779919]]},{"dense_4_W":[[-1.0770125,-0.37417558,0.8556539]],"dense_4_b":[[0.050846685]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_PALISADE.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_PALISADE.json deleted file mode 100644 index 9b5b6ebd4..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_PALISADE.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.083802],[1.4611669],[0.43209597],[0.045783427],[1.4580129],[1.4600974],[1.4606811],[1.4370847],[1.4046228],[1.3548353],[1.301345],[0.045653045],[0.045695912],[0.04572814],[0.0456723],[0.04552948],[0.045236606],[0.044802427]],"model_test_loss":0.010045606642961502,"input_size":18,"current_date_and_time":"2023-08-07_10-17-58","input_mean":[[24.140347],[-0.040326927],[-0.00495007],[-0.01144458],[-0.037586022],[-0.039033934],[-0.04007914],[-0.040745206],[-0.039911933],[-0.037505746],[-0.035948202],[-0.011471909],[-0.011470749],[-0.011468973],[-0.011477571],[-0.011519244],[-0.0115342615],[-0.011574338]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.0585553],[-0.8787027],[0.06662454],[2.4645643],[0.2145419],[0.14631574],[-0.0031928595]],"dense_1_W":[[0.01278659,-0.639175,-3.9059505,-0.26950234,0.48975742,0.053148586,0.06006899,-0.15871193,-0.35619113,-0.3069537,0.6460098,-0.3795686,-0.14707989,0.10753279,0.589496,0.054787833,0.26607925,-0.27329552],[-0.31426805,0.29352117,0.30446848,0.17738476,0.021804355,0.49185294,0.05479423,0.1745057,-0.0944745,0.35397518,0.3583849,0.06355244,0.3294988,-0.7301665,-0.1879947,-0.0022402736,0.104507774,-0.21638979],[-0.010307992,0.7934238,-0.0006794772,-0.1334464,0.02091189,0.47137254,-0.6551125,0.066525705,0.3651862,-0.07319468,-0.10373536,0.33364198,-0.039477788,-0.1740325,-0.17714831,-0.15961868,-0.0405952,0.074915186],[0.5847928,0.619816,0.4203029,-0.21235059,0.4265746,-0.1263166,0.009960476,0.11006678,0.6733238,0.42611405,0.19867067,0.45256436,-0.13085747,-0.36200306,-0.3105818,0.34042296,-0.31901485,-0.08410049],[-0.024490528,-0.65694225,4.6159083e-5,0.59398013,-0.025485305,-0.018133782,0.0042006616,0.10598254,-0.33271274,0.27812153,-0.08935339,-0.0016619482,-0.54040617,-0.14387926,0.5431834,-0.19388175,-0.13796277,0.058109537],[0.41040012,0.4720514,-0.542709,0.27897146,-0.21233134,-0.26147744,-0.7639464,-0.7849991,-0.8057104,-0.53855383,-0.26171803,-0.01974412,0.539449,-0.3167468,-0.058017753,0.100660756,-0.02376293,0.39652997],[0.0073618917,-0.6812269,0.00047164486,0.19503322,0.21642539,-0.3812711,0.54097396,-0.4161706,-0.13814282,-0.42284945,0.37063465,-0.22952643,-0.52888757,0.5929762,-0.282835,0.19850107,0.20221026,-0.1419231]],"activation":"σ"},{"dense_2_W":[[-0.34819424,0.13951385,1.2464662,0.28751788,-0.5187095,0.6976768,-0.62041533],[-0.41341007,0.2805276,0.6287094,0.6696396,-0.54532576,0.7615568,-0.6390846],[0.17430355,-0.57738274,-0.6883198,-0.18806155,0.3362078,-0.27881357,0.2574153],[0.34108973,0.22211717,0.459976,0.35180148,-0.33524066,-0.2489619,-0.8272582],[0.23007147,0.0818965,-0.6714039,-0.55786407,0.43846977,-0.3866686,-0.31287605],[-0.21214552,-0.6325544,0.042784553,-0.73854697,-0.072142266,-0.20286769,-0.17739548],[0.12742646,0.17059988,-0.30783626,-0.62666696,-0.36179522,-0.23354167,0.48441237],[0.070377834,-0.16169746,-0.01426584,-0.12767823,-0.36949772,-0.79047674,-0.5630477],[-0.3562291,0.82187784,0.6215501,0.7167505,-0.062617205,0.5100963,-0.31727344],[0.53031796,-0.74287415,-0.583841,0.35455438,0.5706749,0.34090075,0.40166008],[-0.041094325,-0.7450218,-0.34826657,-0.27569434,0.28963897,-0.6791988,0.4819029],[-0.45388228,0.8081112,0.19463012,-0.20301336,-0.8971776,0.51671964,-0.79728514],[-0.19061111,-0.41954494,-0.61557233,0.033694874,-0.4513763,-0.046573047,0.36615795]],"activation":"σ","dense_2_b":[[-0.05189404],[0.11612667],[0.03374365],[-0.09175077],[-0.118053235],[-0.009669963],[-0.24390511],[-0.42936447],[-0.13871671],[0.105076954],[0.060429294],[-0.08152692],[-0.32616025]]},{"dense_3_W":[[-0.5707046,0.15472998,0.32784146,-0.52660066,0.3508428,0.2326405,-0.12091264,-0.36666492,-0.16838528,0.60772735,0.5778285,-0.024338374,-0.4535548],[-0.18583268,0.4316364,-0.614212,0.296555,0.21492256,0.09027471,-0.22776076,-0.28093025,0.4677053,-0.2794905,-0.16121306,0.5220755,-0.49487323],[0.6430829,0.38659704,-0.25451958,0.014723727,0.23223996,-0.39363125,-0.48956293,-0.40315047,0.6391995,-0.611482,-0.321689,-0.52045226,-0.2960742]],"activation":"identity","dense_3_b":[[0.030546237],[-0.03303123],[-0.0085044755]]},{"dense_4_W":[[-1.0266056,1.0412261,0.11489299]],"dense_4_b":[[-0.03331707]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE.json deleted file mode 100644 index f24dc4e6d..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.17877],[1.560403],[0.55696404],[0.04819407],[1.5485493],[1.551602],[1.5542839],[1.5297074],[1.4964435],[1.447148],[1.3966106],[0.047890175],[0.04795589],[0.04801992],[0.048169263],[0.04813858],[0.04792505],[0.047557294]],"model_test_loss":0.008605924434959888,"input_size":18,"current_date_and_time":"2023-08-07_13-18-55","input_mean":[[23.527355],[-0.09660584],[0.002421769],[-0.007888363],[-0.09495723],[-0.09453526],[-0.09517964],[-0.092055276],[-0.089080565],[-0.08710217],[-0.08428994],[-0.0079021575],[-0.007904708],[-0.007907821],[-0.007890973],[-0.007831142],[-0.007820599],[-0.0077761114]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.4574037],[-0.31610072],[0.06254806],[0.1658765],[-0.04939922],[-0.04379439],[-2.3606904]],"dense_1_W":[[0.4884821,0.4447991,0.27062133,0.29461905,-0.15870245,1.0499299,-0.67113316,0.14727078,0.46701437,-0.11520939,0.27191386,0.25705224,0.20442817,-0.5996387,-0.11848767,-0.22629784,0.10268118,-0.05196918],[-0.94526833,-0.06731887,0.36105722,-0.06478468,0.7274551,-0.787373,1.067588,-0.11700762,-0.18113732,-0.009122022,0.6951359,0.121739894,-0.31221318,0.43686992,0.19358343,-0.60511017,0.31918147,-0.16998838],[-0.0064108563,-1.0363407,-0.3657711,-0.03648839,0.25623804,-1.0107207,0.5950102,0.13701187,-0.03058584,-0.09836868,-0.47335115,-0.19476067,-0.25847888,0.24020503,0.27251944,-0.16899313,-0.10614574,0.20120943],[0.99380904,-0.13568194,0.37884694,0.2061394,0.25694898,-0.39774755,1.0660007,0.098927006,-0.11071541,-0.06035235,0.6582728,-0.1862874,-0.36728743,0.686768,-0.007125964,-0.43512365,0.21848302,-0.19364962],[-0.013903772,1.6984495,6.334462,-0.24601908,-0.88126016,-0.07609073,-0.6559659,0.5171736,1.2477276,0.13804865,-1.6805384,0.5297336,0.50917196,-0.35361633,-0.43783256,-0.16315787,0.09916458,0.19899222],[0.0027724826,-0.266893,0.009900119,0.1370816,-0.14222518,-0.7747496,0.40045345,-0.1508628,0.31491798,-0.11310718,-0.10476674,-0.5071864,0.27966213,0.071040496,0.17133062,0.3316448,-0.09659847,-0.028956251],[-0.46976677,0.2529768,0.2631776,0.29406658,-0.014786802,0.54289156,-0.2263323,0.34719956,0.24145603,-0.02186343,0.2373878,-0.0400574,0.016907027,0.0852952,-0.45880318,0.07774477,-0.08953317,-0.009223345]],"activation":"σ"},{"dense_2_W":[[0.06098307,-0.40966874,-0.17987315,-0.40513036,0.27261987,0.08310855,-0.5536096],[-0.691275,0.35682058,0.36383852,0.5730693,-0.25348198,0.5048341,-0.5584882],[-0.62200207,0.34269363,-0.37620154,0.39508444,-0.18625513,0.5273465,0.15910348],[-0.66713977,0.52275723,0.2329843,-0.39003682,-0.68911934,0.54985297,-0.1009992],[-0.6867374,-0.17710596,0.25754964,0.4175933,0.13662146,0.6200632,-0.7861373],[-0.09777525,-0.32259175,-0.6726679,-0.5632263,0.38548172,-0.78029376,0.8176162],[-0.7648048,0.50501686,0.48810425,-0.30770826,-0.13032949,-0.21508694,-0.5890472],[-0.21938957,-0.20063238,0.5301691,0.3849949,-0.2938749,0.58915985,-0.40684512],[0.09535999,-0.3482573,-0.028670665,-0.2520647,-0.18944943,-0.30540437,0.45314667],[-0.2825183,-0.18183878,0.43335834,-0.44332805,-0.14940064,0.075128734,-0.1811318],[0.29664114,-0.030906495,-0.37812403,-0.046466183,0.101335004,-0.53401035,0.79996306],[0.9250361,-0.67517155,-0.52387106,-0.2634134,-0.20555083,-0.812342,0.7927995],[0.22187099,-0.4586634,0.14067167,0.16797097,-0.51517123,-0.25366476,-0.0075834477]],"activation":"σ","dense_2_b":[[-0.16339622],[-0.06992213],[-0.14530285],[-0.21909085],[-0.18955792],[-0.123597145],[-0.114407286],[-0.06403072],[0.07467113],[-0.11460133],[-0.014573581],[0.15221187],[-0.2008074]]},{"dense_3_W":[[0.079248965,0.63441527,-0.037408806,0.5250491,0.1454134,0.033214454,-0.07036471,0.56555814,-0.26066884,-0.18814188,-0.19420856,-0.33199486,-0.17070732],[0.48755273,0.5925755,-0.089609005,0.2881994,0.09301222,-0.36505923,0.11187905,-0.18813112,-0.4484195,0.45447895,-0.46645686,-0.48254833,-0.48081368],[0.28768483,-0.50610393,-0.3329078,0.1855142,-0.32382408,0.25712836,-0.3997252,-0.4541148,0.69257694,-0.36352545,0.36789265,0.8448238,-0.36968893]],"activation":"identity","dense_3_b":[[-0.099045075],[-0.08617516],[0.0972388]]},{"dense_4_W":[[-0.9874007,-0.54182595,0.95884216]],"dense_4_b":[[0.09515336]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE_2022.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE_2022.json deleted file mode 100644 index b80f8eb8d..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE_2022.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.994212],[1.3245196],[0.5245797],[0.042956702],[1.3203417],[1.3217984],[1.3220408],[1.2944245],[1.2665168],[1.2200946],[1.1748925],[0.0428153],[0.042849746],[0.042877868],[0.04289658],[0.042825807],[0.042584144],[0.042231884]],"model_test_loss":0.006699905265122652,"input_size":18,"current_date_and_time":"2023-08-07_15-02-41","input_mean":[[22.833767],[-0.0403752],[-0.023062065],[-0.003915003],[-0.03835354],[-0.039629113],[-0.04148385],[-0.050812945],[-0.058392923],[-0.07008045],[-0.08093289],[-0.0039168606],[-0.0039327657],[-0.0039458815],[-0.0040258327],[-0.0041203275],[-0.00426424],[-0.00439325]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.21267962],[-0.02729046],[-3.876878],[3.758936],[-0.094889574],[0.84803456],[1.0655135]],"dense_1_W":[[-0.01582406,1.491969,3.253744,-0.10518171,-0.19385417,0.78610295,-0.92538196,-0.33224037,0.3013307,-0.6688703,-0.19887793,0.114433184,0.15138905,-0.37872663,-0.26882437,0.53041375,0.5000704,-0.46208212],[0.0022284745,-0.44302207,0.0046756687,0.4405551,0.3678904,-1.3237227,0.94849795,-0.21979533,-0.354195,0.04168792,0.10481886,-0.14313328,0.09221937,0.62079024,-0.31655258,0.08006394,0.224768,-0.34386438],[-1.6695492,1.084495,0.12782213,-0.2916347,0.4173779,-0.012464437,-1.415515,0.46309748,0.14367689,-0.09085289,0.21108763,0.52149534,0.0030927972,-0.7394647,0.32236108,0.4132776,-0.08725703,-0.32379115],[1.7204846,0.99877,0.12921184,-0.5962452,0.11488813,0.7996907,-1.9083629,0.73996365,0.0138976555,-0.3083528,0.36691102,0.6522089,-0.30455202,-0.33463576,0.26659817,0.8397864,-0.53790885,-0.17022859],[0.01408686,0.30261004,0.021707801,-0.11919521,-0.11240657,1.2420307,-0.90936786,-0.13186933,-0.0830583,0.39522758,-0.15010051,0.67393625,0.37087741,-0.2007352,-0.70529145,-0.46263382,0.12367665,0.1901094],[0.22501494,1.2126215,-0.04891412,0.11348339,0.10659557,1.1126171,-0.6577273,0.0517829,0.034891758,0.16096263,0.016899597,0.53799254,0.19248869,-0.099386215,-0.24717341,0.1219544,0.1654292,-0.6051804],[0.29689962,-1.252187,0.051804602,0.028222922,-0.63980806,-0.693479,0.9105569,-0.05222635,-0.4362798,0.45733297,-0.29413572,-0.5301683,-0.6064637,0.42068645,-0.02681922,-0.020214137,0.22010683,0.34188196]],"activation":"σ"},{"dense_2_W":[[-0.6086301,0.2085108,0.37262338,-0.9238916,-0.39440706,-0.531614,-0.13330653],[0.3900694,0.25841695,-0.506336,-0.87635046,-0.23827943,-0.22281836,0.14377734],[0.39564994,-0.52945167,0.4045585,-0.22950102,0.66113174,-0.55567765,-0.7538522],[0.1472609,0.4034027,-0.39680183,-0.01948131,-0.06318282,-0.40607718,0.54647887],[0.40735146,-0.76506615,0.15106998,-0.04639545,0.2356493,0.34029764,0.58116305],[0.17658016,-0.48829883,0.8479261,0.103093006,-0.085700735,-0.05685383,0.12873933],[-0.58091015,-0.36427772,-0.119214594,-0.15918592,-0.77523655,-0.78004694,0.03406656],[0.42519712,-0.15369514,0.0024256515,0.7537345,0.12914199,-0.19718027,0.2781377],[0.38494098,-0.8098266,1.6810417,-0.4136923,-0.33961916,0.15786585,-1.5184373],[0.19256154,0.4130768,-0.31395087,-0.5005648,-0.51987,-0.34723067,-0.081991576],[-0.49874434,-0.6762422,-0.09994346,0.09899775,0.06528094,-0.75826293,-0.5126717],[-0.35837945,0.36765984,0.8528636,-0.3219268,0.03151658,0.19896397,0.34016657],[-0.20404705,0.35541695,0.0011049275,-0.0022879532,-0.64204615,-0.5036561,-0.035362314]],"activation":"σ","dense_2_b":[[0.036364183],[-0.00221331],[-0.117371835],[-0.097624525],[0.009239539],[-0.091520816],[-0.23231187],[-0.016982464],[-0.54738104],[0.04596814],[-0.24534227],[-0.005133318],[-0.022278212]]},{"dense_3_W":[[-0.6959402,0.31169927,0.53220147,0.19400354,-0.31628206,0.26289627,0.32454082,0.41816694,-0.31043547,-0.67317456,0.65171415,-0.30771238,0.09026865],[0.38488102,0.31554824,-0.70509696,0.3893292,-0.10749988,-0.40098265,0.18507135,-0.11758874,-0.0043080114,0.6012859,0.25160068,-0.42651844,0.48249626],[0.7162551,0.64301497,-0.36417845,-0.037450142,-0.45597866,0.15023938,-0.0077365125,0.0701791,-0.71762145,0.18638995,0.018750757,0.14510971,0.41565806]],"activation":"identity","dense_3_b":[[0.030530091],[-0.0479702],[-0.053273804]]},{"dense_4_W":[[0.5025325,-1.0537963,-0.85901815]],"dense_4_b":[[0.04645968]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE_HEV_2022.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE_HEV_2022.json deleted file mode 100644 index d11937978..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE_HEV_2022.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.261341],[1.0799276],[0.47439072],[0.035921823],[1.0769413],[1.0782329],[1.078946],[1.0603385],[1.0393461],[1.0079743],[0.97282183],[0.03575561],[0.03581589],[0.03587639],[0.035916228],[0.03587763],[0.03574848],[0.03554262]],"model_test_loss":0.00492028146982193,"input_size":18,"current_date_and_time":"2023-08-07_15-53-19","input_mean":[[21.97073],[-0.029600525],[0.0032512692],[0.0019785082],[-0.031247197],[-0.030642778],[-0.030970285],[-0.027264683],[-0.02531458],[-0.023465578],[-0.022579186],[0.001951127],[0.0019527602],[0.0019488906],[0.001962819],[0.001987138],[0.0018675312],[0.0017249424]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.245048],[3.3935277],[-0.15662995],[-0.014851185],[-0.09243428],[-0.004402729],[0.0380219]],"dense_1_W":[[-0.5481877,-1.1734215,-0.45120606,0.034027565,-0.12534843,-0.4320663,0.08604743,0.20808327,-0.46957174,-0.24812324,0.19450486,-0.2840027,-0.29063642,0.8850254,0.1337479,0.12512524,-0.11077451,-0.10846867],[0.55359775,-0.78132075,-0.45535302,0.04589877,-0.23332703,-0.6900583,0.27111268,-0.2906912,-0.26810634,-0.0014484213,0.012803484,-0.4214593,0.14392284,0.39275578,0.4591555,0.20790677,-0.47720864,0.03637555],[-0.001160366,0.07135902,0.020283442,-0.11026379,-0.3300407,1.1425788,-0.8465417,-0.14491843,0.10389491,-0.094203144,0.08786806,0.58249265,-0.31260887,-0.24686775,0.25243184,-0.12136195,-0.14665185,0.10891337],[0.00075157254,0.018735576,-0.015033022,0.2552897,-0.07354839,0.36636823,-0.5266892,0.12183493,0.06295568,0.08566852,-0.0952725,0.33919626,0.36296552,-0.376174,-0.39300168,0.07231392,-0.20756865,-0.050174374],[-0.000663185,0.6687934,-0.021183483,-0.20696321,0.28176227,0.8060634,-0.5820421,-0.17129976,-0.0828522,0.009332605,0.15914959,0.06899979,-0.071527235,-0.21463287,0.2533481,0.31726366,-0.07277975,-0.18115173],[0.0028130943,-1.0741395,-3.5949726,-0.08878999,0.21987598,0.103467554,0.6372202,0.32599628,-0.5349482,-0.4875307,0.49166214,-0.50000715,0.108137466,0.38457507,0.040603124,0.52961135,-0.122126095,-0.14863239],[0.0012397681,-0.8501431,0.004625623,0.39065698,0.3043851,-0.7930684,0.51580155,-0.047317076,-0.22162919,0.1124854,0.017583156,-0.33733293,-0.13366492,0.6077388,0.29493827,0.16720308,-0.41922003,-0.117570505]],"activation":"σ"},{"dense_2_W":[[-0.05502436,-0.66888684,0.065067135,0.53669417,-0.01893934,0.36197692,0.01791807],[0.59498864,0.6528727,-0.38318837,-0.45497322,-0.08562961,-0.31445232,0.69590557],[-0.41835263,0.04931508,0.0073655155,0.6559025,0.22435378,-0.42106333,0.13407917],[0.29046017,-0.09791975,-0.41265818,-0.49019828,-0.6872615,-0.26517653,-0.3567036],[0.13606516,0.44112694,-0.57032704,-0.13413966,0.0034367347,0.24891582,0.16898009],[0.011530882,-0.15070426,-0.46052173,0.5160092,-0.38340572,0.1328647,-0.18670098],[0.3382954,-0.22624794,0.028343266,-0.62450606,-0.059560556,-0.16521035,0.595776],[-0.5985326,-0.5175321,0.53653544,0.20450565,-0.12380274,-0.101402126,0.21046633],[-0.10918766,0.7896873,-0.6037477,-0.021383286,-0.36211497,0.5407418,0.30803818],[-0.38357767,0.13743253,0.5462274,0.33449608,0.58031,-0.44345102,-0.26854265],[0.5908161,-0.21907422,0.20983866,-0.4897011,-0.59968626,-0.065551214,0.5250327],[0.3375154,0.43778437,-0.31592417,-0.13451315,-1.0115412,-0.32253185,0.66413474],[0.09797849,-0.3698204,0.04279515,0.25717175,0.30788177,-0.25584602,0.19880241]],"activation":"σ","dense_2_b":[[0.003746753],[-0.08357698],[0.006304543],[-0.24605891],[-0.07121214],[-0.015032947],[-0.09400678],[-0.0024056516],[-0.010130554],[0.014799146],[-0.060003918],[-0.07540407],[-0.03000076]]},{"dense_3_W":[[0.017942075,-0.6212448,-0.12496728,0.14162916,-0.2248813,0.49471742,0.18174668,0.67305565,-0.181309,0.61732584,-0.27006516,-0.049796086,0.12735644],[0.3594483,-0.31422514,0.66338825,-0.41523233,-0.47088245,-0.28914762,-0.116269276,0.29540908,-0.6357099,0.3832997,-0.06724131,-0.5605163,0.09249603],[0.21089882,-0.26488605,0.433047,0.35239476,0.3053993,0.25026608,-0.4875768,-0.38531804,-0.30042005,0.68175066,-0.5961486,0.07390234,0.31267327]],"activation":"identity","dense_3_b":[[0.02659904],[0.034767646],[0.024563152]]},{"dense_4_W":[[0.6525578,1.0061679,0.50279385]],"dense_4_b":[[0.032301653]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE_PHEV_2022.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE_PHEV_2022.json deleted file mode 100644 index 7e4f989f0..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SANTA_FE_PHEV_2022.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.9325304],[1.0882362],[0.43774286],[0.04055885],[1.0919278],[1.0913655],[1.0900016],[1.0642537],[1.0437973],[1.014913],[0.9828307],[0.040379256],[0.04041959],[0.040456932],[0.04061512],[0.040622164],[0.040395677],[0.040053483]],"model_test_loss":0.012668303214013577,"input_size":18,"current_date_and_time":"2023-08-07_17-09-24","input_mean":[[22.347511],[-0.10092363],[0.011539685],[-0.024840366],[-0.10495763],[-0.104191564],[-0.103371926],[-0.0960919],[-0.088538796],[-0.081120916],[-0.073905],[-0.024927486],[-0.024909802],[-0.024889572],[-0.024763657],[-0.024654102],[-0.024695622],[-0.02485533]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.777723],[-0.21736239],[0.06858174],[0.028778331],[-0.1341363],[-3.286173],[0.05866324]],"dense_1_W":[[0.9532825,-0.57736486,-0.3511588,0.6824505,-0.024612838,-0.4149641,-0.2517366,-0.38986352,-0.041095104,-0.23648082,-0.22857088,-0.52361864,0.59133035,-0.016187055,-0.30439842,-0.008700108,0.37054965,-0.3851146],[-1.2131011,-0.040348757,-0.030648885,0.07944047,-0.5089448,-0.17325257,-0.35811424,-0.39610377,-0.3414392,0.13268204,0.036754124,0.244627,-0.18363807,-0.29357588,0.14597428,-0.07848809,0.117397904,-0.0066551454],[-0.33372527,-0.8653413,-0.0204796,0.15082183,0.21337464,-1.1272148,0.6884098,0.10593993,-0.21011119,-0.019475536,0.060115736,-0.7099037,-0.3675179,0.98888445,-0.0021350337,-0.0023339558,0.034033813,-0.08632464],[-0.0087699555,0.47234085,-0.003936672,-0.08932229,-0.15217909,0.76968,-0.6072722,0.19957112,-0.1826489,0.28319913,-0.11377978,0.5678719,0.0690483,-0.4572559,-0.256832,-0.19453537,-0.1292364,0.26785675],[-0.20146403,-0.6867957,-0.021399295,-0.09085224,-0.13374451,-0.95356876,0.7412253,-0.0020842238,-0.32998958,0.29012066,-0.12927385,-0.17273527,0.046919394,0.31265458,-0.0067970203,0.049638614,-0.1646258,0.1021922],[-1.0781149,-1.9831505,-0.39170006,0.6552042,0.2507927,-0.7482493,0.69903153,0.11317306,-0.44421217,-0.17660317,-0.19381957,-0.40258512,0.057917267,0.6132898,0.2122239,-0.68616545,-0.016808815,0.009621946],[0.07036603,0.6711271,3.090535,0.5774168,-1.0394694,0.01879839,-0.89210445,0.5525633,1.0586205,0.27921924,-0.4908341,0.3026311,0.51791734,-0.2981133,-0.38711485,-0.3440137,-0.20040374,-0.14860815]],"activation":"σ"},{"dense_2_W":[[0.053376287,-0.27212048,-0.592167,-0.66140467,0.123351865,-0.45312202,-0.5552815],[-0.15174036,0.3456475,-0.72808313,-0.16873683,-0.87532926,-0.19756816,0.010091597],[0.32735926,0.2430751,-0.49615663,0.71439725,-0.11260843,-0.43778282,0.48608312],[0.5652805,-0.25033778,0.47545195,-0.27911112,0.3687969,0.25403744,-0.3056421],[0.4027308,0.06937314,-0.008849847,-0.09499983,0.50666314,-0.021115543,-0.31085667],[0.15451042,0.16761723,0.14800774,0.6163942,-0.77986425,-0.58117247,0.40439337],[-0.52235144,0.37827665,-0.83033717,0.8296531,0.2544118,-0.37235376,-0.1002346],[0.09825943,-0.60037464,0.65948284,-1.2040564,0.6021252,0.091694914,0.21354105],[-0.31508094,0.2741653,-0.7038115,0.279092,-0.13322929,0.11963509,-0.14818548],[0.20600095,-0.076976694,0.21097696,-0.76661587,0.3835434,-0.05707485,0.10319275],[0.62171084,-0.24905708,0.5991603,-0.52393246,0.49378031,-0.1764447,-0.21842895],[-0.20955467,0.22948128,0.26585734,-0.95675725,-0.113945276,0.6225702,-0.500622],[0.16029201,0.49023697,-0.6596639,0.25944898,-0.21170011,-0.20044534,-0.0025964344]],"activation":"σ","dense_2_b":[[-0.2663133],[-0.10525206],[-0.011656664],[-0.15913439],[-0.09004699],[0.038266346],[0.051478483],[-0.2926297],[-0.24159859],[-0.120620705],[-0.11021781],[-0.33539078],[0.00798126]]},{"dense_3_W":[[0.16740364,-0.068965144,-0.3025593,0.50858945,0.5449389,-0.24625476,-0.49794698,0.29956707,-0.30424193,-0.008103076,0.58150756,0.0818273,0.01633671],[0.4533966,-0.42790514,-0.31081665,0.5545747,0.38430354,-0.67824066,-0.5380451,0.05798864,0.105315335,0.27879745,0.52759033,-0.06383929,-0.3282453],[-0.5254706,0.061006207,-0.26732418,-0.028615523,0.17779939,-0.3987639,-0.033597037,0.12323639,0.024477432,0.33606854,0.38722304,0.18485908,-0.4257627]],"activation":"identity","dense_3_b":[[-0.057745293],[-0.045989405],[-0.043302864]]},{"dense_4_W":[[-0.6202967,-0.6532501,-1.0174378]],"dense_4_b":[[0.047135167]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SONATA.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SONATA.json deleted file mode 100644 index 52798259a..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SONATA.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.547813],[1.7179168],[0.5423653],[0.04857022],[1.7059441],[1.7113246],[1.7139751],[1.6844511],[1.6431999],[1.577594],[1.5055375],[0.048473638],[0.048486643],[0.04849009],[0.048347536],[0.04814972],[0.047786575],[0.04731983]],"model_test_loss":0.011126813478767872,"input_size":18,"current_date_and_time":"2023-08-07_18-34-15","input_mean":[[22.614845],[-0.00978362],[0.007860732],[-0.004099437],[-0.010468512],[-0.010098754],[-0.009594586],[-0.0049946643],[-0.0015134194],[-0.0018012848],[-0.0024288695],[-0.0041544754],[-0.004141275],[-0.004129192],[-0.004074],[-0.004025116],[-0.0040029683],[-0.003983455]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.4171004],[-0.62944967],[-0.08636822],[-0.30957282],[3.1894078],[-0.18340014],[-4.048277]],"dense_1_W":[[0.7830174,0.40423092,-1.7773811,-0.25229105,0.0003897955,0.2650078,-0.94045377,0.057573486,0.43040198,-0.061492153,-0.42369962,0.2493666,0.35435918,-0.24786355,0.123617865,-0.15768188,-0.4915791,0.41757017],[0.619815,-0.15506315,1.7720731,-0.05022525,0.12061407,-0.23410659,0.26306555,0.18054493,-0.10822319,-0.23154925,0.4427835,-0.40612897,0.44821352,-0.035341486,-0.09733925,0.11400062,0.13623556,-0.1278016],[0.0040937522,0.5835935,1.5735953,0.27356768,-0.47593257,-0.19718215,-0.6375235,0.3991756,0.6010651,0.19663113,-0.2724361,0.35223562,-0.28804272,-0.37892044,0.06845918,0.056847498,-0.23999622,0.14147788],[-0.006181427,-0.23720662,-0.030143317,0.27507725,-0.11148783,-0.670752,0.1579785,0.26442546,0.11085281,0.24239433,-0.30806103,-0.5314182,-0.1411616,0.34547827,-0.0067492607,0.2582582,-0.13836917,-0.059036173],[1.3838778,-0.8232643,-0.65903485,-0.20286232,0.07595782,-0.2975871,-0.2668319,-0.03744175,0.113510124,-0.17166083,-0.08313555,-0.19053335,0.22615202,0.099687,0.11709183,-0.06939885,-0.0069061257,0.02360228],[-0.00030964141,-0.59983134,0.0024205807,0.29467705,0.14591737,-0.8452132,0.028352631,-0.06797188,0.13422364,-0.06122122,-0.033911128,-0.19677748,0.21639399,-0.129354,0.3151945,0.010129442,-0.27215233,0.23129506],[-1.5945044,-1.5621332,-0.7602714,-0.025857054,0.28057814,-0.49442625,0.22269996,0.06870841,-0.066471085,-0.1829744,-0.0109900115,-0.2925939,0.13089584,0.2586905,0.021742465,0.0035556427,-0.2523545,0.15750822]],"activation":"σ"},{"dense_2_W":[[0.38898003,0.28459147,-0.022235557,-0.05588795,-0.4079201,0.78092706,0.0055714543],[0.5199289,0.07141404,0.5414507,-0.5915534,-0.39409125,-1.0397701,0.052241296],[0.32463577,-0.49717766,0.90691876,-0.9024069,-0.0049516293,-0.23521297,-0.2842837],[0.06779803,-0.5377125,0.3489072,-0.6589233,0.59720504,-0.8664128,-0.46240392],[1.0705944,0.28698796,0.16739848,-1.4102764,-0.45103022,-1.1245655,0.02443754],[0.20335038,-0.35550895,-0.22385399,0.29430118,0.056962594,-0.32889187,0.2766028],[0.37825814,0.045224834,0.40632764,-0.71752423,-0.84244126,-0.29024214,-0.3171733],[-0.056005202,-0.73517215,-0.0016302611,-0.08258613,0.13173106,-0.25985387,-0.45403552],[0.31348822,0.22809805,-1.1925565,0.73849887,-0.015525387,0.27415907,-0.16705036],[-0.16721253,-0.42491084,-0.8744839,0.090021685,-0.09710444,0.04399626,0.08195919],[-0.4590442,-0.86837125,0.76154727,-0.09060192,-0.8167061,0.3736612,-0.8130611],[-0.59112096,0.09216977,-0.76166147,0.9278373,0.43625265,0.93052894,-0.07700069],[0.3458094,0.1986897,-0.7627924,0.16227825,0.63287425,0.23208074,0.6148371]],"activation":"σ","dense_2_b":[[-0.0482577],[-0.09234584],[-0.016399158],[0.12226299],[-0.018181449],[-0.35545182],[0.050414644],[-0.07713505],[-0.27168283],[-0.026214477],[-0.14412741],[-0.08454545],[-0.15548146]]},{"dense_3_W":[[-0.24532248,0.086403646,0.0035677804,-0.446846,0.3286197,-0.5002942,-0.36754543,-0.36412755,-0.3422447,0.5864908,-0.3555824,0.17768645,-0.16735056],[0.49285188,-0.5364999,-0.5982645,-0.60457116,-0.70168245,0.33897352,-0.5752503,-0.2724616,0.47930852,0.15553074,-0.31801456,0.7717742,0.6475729],[-0.54743356,-0.096405074,0.30723238,-0.14468278,0.25325117,-0.2991242,-0.32472578,-0.60785806,0.34220627,0.09930043,0.24098735,0.21893239,0.34784108]],"activation":"identity","dense_3_b":[[0.06423375],[0.04319534],[0.0022975653]]},{"dense_4_W":[[-0.5658915,-1.2441922,0.0075046057]],"dense_4_b":[[-0.047028013]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SONATA_HYBRID.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SONATA_HYBRID.json deleted file mode 100644 index e97167c48..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SONATA_HYBRID.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.904712],[1.4085329],[0.50820595],[0.046452872],[1.4017634],[1.4044306],[1.4055834],[1.3812906],[1.3511641],[1.3032484],[1.2478882],[0.046305403],[0.046340212],[0.04636982],[0.046317764],[0.04617617],[0.04582262],[0.045322053]],"model_test_loss":0.011622299440205097,"input_size":18,"current_date_and_time":"2023-08-08_00-09-02","input_mean":[[22.673122],[-0.031736072],[0.007969155],[-0.013558],[-0.032557942],[-0.03305167],[-0.03298927],[-0.029548688],[-0.026128702],[-0.023727983],[-0.020936318],[-0.013552669],[-0.013538184],[-0.013526184],[-0.013537751],[-0.013667655],[-0.013909288],[-0.01411971]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.9472544],[0.09100576],[0.07340574],[-0.6315094],[0.37090293],[0.18976328],[0.4189057]],"dense_1_W":[[-1.1817962,-1.553194,-2.9592962,0.64605,-0.7203815,-0.5482526,0.50757265,-0.721568,0.14788827,0.30028212,0.4398359,-0.5897631,-0.26421258,0.034407478,0.30330506,-0.15496844,0.25997123,-0.3066445],[0.058786348,-0.27546605,-2.8685112,0.26771522,-0.43513617,-0.2600268,0.58820564,-0.14542523,-0.08567567,-0.52094615,0.84956247,-0.0930839,-0.32848006,0.10680902,0.17591019,0.016146999,0.2344313,-0.24816336],[1.6007652,0.028163971,0.000641371,0.76986766,0.43884957,0.1650065,0.0068902513,0.05802695,0.027824534,-0.017033007,0.13403726,-0.42092884,0.06564483,-0.19293658,0.15149602,0.0152002005,0.4810689,-0.48326603],[-0.14626782,0.044463154,-0.030598573,0.09514202,0.029573362,0.5215925,-0.16921219,0.23771454,0.0925813,-0.22268316,0.1525121,-0.07805162,0.46790215,-0.34623843,-0.29796118,0.07368295,0.159104,-0.07751048],[1.5266113,-1.0623161,-0.0036699253,-0.033174455,0.05534692,0.58918065,-0.18993984,-0.4061732,0.1180316,-0.041908402,0.08485711,0.029580023,-0.2831808,-0.1555281,0.526601,-0.2898042,-0.45805973,0.31297514],[0.14919099,-0.9022488,-0.018481275,0.131622,0.17497712,-0.34224376,0.34405345,0.17506301,0.03541973,-0.12935044,0.048721306,-0.4446497,0.15578839,0.30417204,-0.111914314,-0.121121965,0.0929509,-0.017727112],[0.3040071,0.5304203,-0.0030280105,-0.020691369,-0.32636136,0.48215166,-0.24673954,0.032341566,0.1636895,0.13916636,-0.15661035,0.5669737,0.18278182,-0.6610388,-0.009479835,-0.2828995,0.15746541,0.07788113]],"activation":"σ"},{"dense_2_W":[[-0.34190053,-0.17745249,-0.15337539,0.27886426,0.69785804,-0.56094927,0.87852126],[0.4731782,0.33899984,-0.32553697,-0.5920245,-1.1791692,0.35757312,-1.2558827],[-0.17805865,-0.21635677,-0.082375415,0.42723528,0.44513035,-0.8980545,-0.15309213],[0.33529067,-0.05726452,-0.480721,-0.7930404,-0.69926023,0.8291907,-1.0018113],[-0.103077516,-1.2176032,-1.2135342,-0.18128513,-0.8239158,-1.0818433,0.37739542],[-0.016627673,-0.21135633,-0.07407072,-0.7603306,-0.2276791,1.0221021,-0.37553006],[0.31585032,0.14014794,0.72860646,0.022745533,-0.023529714,1.016683,0.16218413],[0.41354743,-0.30034938,-0.683525,0.302346,-0.41821057,-0.86687744,0.6552664],[0.1185467,-0.7869525,-0.43301994,0.2526739,-0.794169,-1.1868601,-0.19882572],[0.1250559,-0.57725024,-0.9392709,0.31270868,-0.6713074,-1.3244504,0.6004076],[-0.32635778,-0.025522923,-0.15778969,-0.76357174,-0.83400786,1.0821341,-0.69009364],[-0.18017006,0.31208438,0.18055223,0.13536966,0.37867144,-0.9807895,0.6815438],[-0.013808813,0.16385165,-0.34636796,0.37806544,-0.3967438,-0.69719434,0.17996557]],"activation":"σ","dense_2_b":[[0.067470364],[-0.26331186],[0.06993582],[-0.23382637],[-0.06892213],[-0.10123643],[-0.044926178],[-0.05964296],[-0.045392096],[-0.04618724],[0.16808233],[-0.003218339],[-0.07415678]]},{"dense_3_W":[[0.11602406,0.73329675,-0.17197938,0.64163977,-0.71038646,0.8112198,0.2608411,-0.6153334,-0.26859817,-0.67736506,0.33450362,-0.5620311,0.19605356],[-0.59497255,0.628338,0.24506254,0.019271871,-0.5683355,0.58888596,-0.36362818,0.41652063,-0.003895321,-0.26925486,-0.1982826,-0.32602772,0.5407099],[-0.57255495,0.2139631,-0.28807914,0.01145839,0.31905892,-0.15611991,0.47299016,-0.6717293,-0.11661602,0.32700828,0.41476637,0.13788031,-0.49381214]],"activation":"identity","dense_3_b":[[-0.023692269],[0.0855048],[-0.01574187]]},{"dense_4_W":[[-1.4620413,-0.09824631,-0.97454345]],"dense_4_b":[[0.0232099]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SONATA_LF.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SONATA_LF.json deleted file mode 100644 index 971897d6f..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_SONATA_LF.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.697617],[1.0609225],[0.4379445],[0.037631202],[1.0623844],[1.0616655],[1.0594143],[1.0256116],[0.99824595],[0.9636123],[0.927896],[0.037490875],[0.037519626],[0.03754297],[0.03749497],[0.037434172],[0.03738278],[0.03713714]],"model_test_loss":0.015784617513418198,"input_size":18,"current_date_and_time":"2023-08-07_17-59-15","input_mean":[[22.772198],[-0.015615957],[-0.00096197607],[-0.0010119482],[-0.010546596],[-0.010836963],[-0.011236375],[-0.011094289],[-0.012648121],[-0.013635343],[-0.017397134],[-0.0010358563],[-0.0010145861],[-0.0010011211],[-0.0010085123],[-0.0010529933],[-0.00111335],[-0.001285189]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.7229438],[-3.3683147],[-0.1282507],[-0.31550232],[-0.058664136],[-0.95240706],[-1.0986025]],"dense_1_W":[[-0.7789607,1.9123646,0.39085448,-0.76762176,0.14567389,0.8066052,-0.43277985,0.2297818,0.42394215,0.33902678,0.07674288,0.46162274,-0.30707216,-0.25233504,0.19915079,-0.3460779,-0.054854672,0.1426618],[-0.7302568,-1.7004513,-0.37651184,0.7811046,-0.6319955,-0.51594245,0.55498344,-0.18935819,-0.5285875,-0.24025975,-0.1379504,-0.2577349,0.15419608,0.12393667,-0.11645755,0.28632703,0.012518243,-0.093591586],[0.6120753,-0.042914443,-0.0007887555,-0.42378148,-0.44867167,-0.70841163,0.7576831,-0.0939431,0.27074918,0.111739814,-0.2615336,-0.97394973,-0.07050334,0.9536129,0.39760146,0.11356349,0.23691247,0.0036621983],[-0.012153974,2.5360656,3.6491127,-0.46920162,-1.7772331,-0.7169024,-1.3301034,-1.1953633,2.5687883,1.1499572,-0.9038787,0.6629773,0.34683412,-0.42444223,-0.25739744,-0.3469017,0.056961935,0.29270503],[0.017274002,0.5840407,-0.0023877379,-1.808923,0.3084969,1.3571715,-0.58538103,-0.2375718,0.09313133,0.6554645,-0.18251002,0.42035452,0.1955895,0.31606016,0.75343394,-0.13268644,0.11386261,-0.08166157],[-0.6063996,-0.5005416,-0.00912951,0.44437352,0.36323333,0.11949726,1.0753121,-0.31381848,-0.58282745,-0.09158226,0.44612095,-0.02124081,0.3982341,0.28105518,-0.5664151,-0.72633684,-0.068839945,-0.013206231],[0.8306485,0.08912472,-0.0052987277,0.64255923,0.7617923,0.7024269,-0.8749369,-0.058627207,-0.20296139,-0.30535534,0.43017447,0.85471725,-0.12971222,-0.4191892,-0.5445941,-0.6685368,0.036711175,-0.07217302]],"activation":"σ"},{"dense_2_W":[[-1.0357116,0.9065824,0.31460804,0.10403336,-0.74875206,0.45047748,-0.85107225],[-0.31625268,-0.4494891,-0.6104021,-1.392215,0.4076329,0.14704718,-1.4530859],[-0.42341897,-0.4814765,0.14645709,-0.46671197,-0.3856185,-0.13905132,-0.04437501],[-0.39645517,0.2137238,-0.42819747,-0.36393335,-0.40245435,-0.34181696,-0.02817246],[0.53853995,-0.4282784,0.22716291,-0.40256846,0.638609,0.15241797,0.37022516],[1.1081164,1.7182009,-0.90255654,-2.231287,-0.1349012,1.1165563,-1.5446924],[-0.5763982,-0.065446824,0.4192874,0.2743847,-0.90122163,0.02639325,-0.13482374],[-0.7385771,0.08592593,0.8796296,-0.23078102,-0.24460639,0.50752836,-0.08413138],[-0.10253753,-0.17410895,-0.73427474,0.27838975,0.50574356,0.08523981,0.3418018],[0.0016925063,-0.5907013,-0.85067403,0.30883756,0.4896555,0.11207346,-0.16476792],[-0.15516539,0.26878807,0.57642984,-0.83853066,-0.33322036,0.4774422,-0.9348281],[0.4693064,0.1862027,-0.6251714,0.25223947,0.41830084,-0.44884276,0.2828574],[0.10416213,-0.36627316,-0.822629,0.20704469,0.16795447,0.081779845,-0.4003506]],"activation":"σ","dense_2_b":[[0.20383972],[-0.31411672],[-0.22941822],[-0.028190762],[-0.031698458],[-0.6003632],[-0.15707792],[0.10450507],[-0.06457617],[-0.12753844],[-0.05697597],[-0.10512635],[-0.03311049]]},{"dense_3_W":[[0.6161703,-0.20014547,0.51343465,0.32414958,-0.4191405,-0.094090216,0.6916015,0.68653065,-0.46503648,-0.32374275,0.20278896,0.0272236,-0.40860736],[0.016187323,0.4218443,-0.39871958,-0.49440855,-0.20302232,0.7119994,-0.19964194,0.4442079,0.3104815,-0.5141474,-0.18292132,-0.009729394,-0.43212843],[-0.02621932,0.42008805,-0.41170013,-0.36279938,0.49049714,0.13969359,-0.38049182,0.22852893,-0.5885065,0.420613,0.49065357,-0.67078143,-0.24520677]],"activation":"identity","dense_3_b":[[-0.04161267],[-0.03253271],[-0.033194877]]},{"dense_4_W":[[-1.1191984,-0.70736027,-0.7379151]],"dense_4_b":[[0.038523376]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_TUCSON_4TH_GEN.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_TUCSON_4TH_GEN.json deleted file mode 100644 index 57b9f626a..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/HYUNDAI_TUCSON_4TH_GEN.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.4087214],[1.0962394],[0.552085],[0.045840405],[1.0842694],[1.0885813],[1.0920763],[1.0729834],[1.0586178],[1.0390083],[1.0111257],[0.04568487],[0.045708325],[0.045725018],[0.045583706],[0.045519102],[0.045363124],[0.04511732]],"model_test_loss":0.0031460165046155453,"input_size":18,"current_date_and_time":"2023-08-08_03-31-08","input_mean":[[22.685059],[-0.04596198],[-0.0031675429],[-0.010991076],[-0.04475341],[-0.04535443],[-0.04585154],[-0.045443647],[-0.042782683],[-0.043330435],[-0.042112358],[-0.011107673],[-0.011077235],[-0.011044265],[-0.010814458],[-0.010676653],[-0.010754372],[-0.010827275]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[5.1307755],[-0.22914484],[-0.08857657],[0.011367913],[-5.177985],[2.9143384],[1.9856763]],"dense_1_W":[[1.2700648,2.4509182,0.42634973,-0.043660536,0.07598462,0.6747098,-1.1844238,-0.047003433,0.04515124,0.38031095,-0.29778752,0.19533536,-0.08757439,-0.33965743,0.66066694,0.11041075,-1.1397349,0.1881033],[-0.018975187,0.86162823,3.7638307,-0.51357865,0.43678054,0.40158442,-0.9920606,-0.42070356,0.2959596,-0.43891278,-0.022803979,0.972302,-0.3332229,-0.17261001,-0.3463398,0.23325261,0.049253233,0.020867042],[0.013230203,0.20721851,-0.005705704,-0.05253921,0.31700867,1.174462,-0.7808391,0.113812,0.07265435,-0.14510319,0.16861048,0.7564678,-0.031058798,0.115615994,-0.5682336,0.123778,-0.68434507,0.43895295],[0.010290787,0.12781261,-0.0023238414,-0.41893026,-0.35603276,1.2424941,-1.300665,0.528987,0.19249827,-0.0497169,-0.10521977,0.3558453,0.17937179,0.042039894,-0.69474906,-0.3783733,0.48399767,0.008863078],[-1.2171276,1.6279436,0.41698736,0.040549632,0.39905706,0.23700579,-0.4378377,-0.0051275906,0.23958966,0.23730484,-0.23500912,-0.0059611434,0.14673305,-0.28380656,0.46382582,-0.36074856,-0.3228667,-0.12749387],[0.5837035,-1.46317,-0.0014780383,0.05828605,0.6278459,-0.7193519,0.7438587,0.97596496,0.31377402,-0.5242437,0.07906513,0.06160492,0.053548303,0.31995016,-0.07082522,-0.648382,-0.29354775,0.5114841],[0.7796686,0.82628,-0.0014781661,0.08306547,-0.45119047,0.8933981,-0.6380061,-0.66575885,-0.43284875,0.24002665,0.13119845,-0.038445093,-0.056063775,-0.4277078,-0.019120147,0.74485147,0.2288264,-0.4735436]],"activation":"σ"},{"dense_2_W":[[-0.77505285,0.44785905,-0.4859164,-0.69656503,-0.3268532,-0.043176193,0.30929434],[-0.533772,0.92544174,0.6345639,0.38062403,1.4165294,-1.2982454,-0.9251346],[-0.29203573,-0.23658712,0.76349384,0.56426525,0.22437766,-0.375684,0.379061],[0.3641449,0.05223953,-0.22189741,0.45458284,0.025595745,0.20614897,-0.5833691],[-0.912483,-0.95896566,-0.32421297,-0.28912008,0.70729816,0.22977747,-1.0203142],[-1.0123776,-0.8513916,-0.5037631,-0.2299052,0.7295842,0.08601015,-0.9566463],[0.32550806,-0.6377905,0.4949481,0.108062916,0.9683189,-0.37003064,-0.11962097],[-0.17852181,-0.39138564,-0.094003476,-0.18062831,-0.9090928,1.1256458,-0.014201421],[-1.4999908,-0.7281591,0.02269345,-0.42794332,0.49982706,-0.16169797,-0.2747838],[-0.23206441,-0.45395112,-0.50797534,0.039583728,-0.51249075,0.042664643,-0.37662345],[-0.10693958,0.07380252,-0.0014285411,0.24690871,1.4165428,-0.9269869,-0.034422167],[0.38615483,-0.5410777,-0.09538446,0.5820919,0.2631145,-0.26281682,0.02736992],[0.29233518,0.044993673,-0.016566137,0.47320673,-0.22927615,-0.55325514,-0.14620171]],"activation":"σ","dense_2_b":[[0.22806741],[-0.58099383],[-0.14560527],[-0.22234294],[0.23043375],[0.33217996],[-0.14389473],[0.2759481],[0.13984576],[-0.22704253],[-0.27780655],[-0.21868534],[-0.4021424]]},{"dense_3_W":[[-0.81395864,0.69009596,0.594186,0.3081578,-0.8761271,-0.9944457,0.26057324,-0.49558344,-0.02225669,0.42718655,0.4395653,0.36918622,0.12211585],[0.36394253,-0.2486054,0.21003513,-0.69946647,0.4221953,0.36324582,0.09421991,0.4322135,0.3120558,0.15996966,-0.38080767,-0.10931592,-0.27037248],[-0.120345704,0.63140625,0.41101453,-0.48626202,-0.93907106,-0.19290596,0.12457818,0.051282577,-0.86917734,-0.68639874,0.7245342,-0.21468553,-0.09911791]],"activation":"identity","dense_3_b":[[-0.0466283],[-0.09009529],[-0.011769824]]},{"dense_4_W":[[0.9855905,-0.11999337,0.6430469]],"dense_4_b":[[-0.037628047]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/JEEP_GRAND_CHEROKEE.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/JEEP_GRAND_CHEROKEE.json deleted file mode 100644 index cba87588f..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/JEEP_GRAND_CHEROKEE.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.254862],[1.1385337],[0.41576585],[0.043710105],[1.1287707],[1.132625],[1.1353652],[1.1196473],[1.0987684],[1.0703217],[1.0421079],[0.04358062],[0.043615773],[0.043639626],[0.04353495],[0.04332622],[0.04291046],[0.042309582]],"model_test_loss":0.014948678202927113,"input_size":18,"current_date_and_time":"2023-08-08_08-31-33","input_mean":[[24.234503],[0.023715263],[0.0013837352],[-0.016846638],[0.024842778],[0.024989845],[0.024956135],[0.025811702],[0.027098333],[0.02575938],[0.025799232],[-0.016848726],[-0.016819052],[-0.016790438],[-0.016748805],[-0.016675282],[-0.016660813],[-0.016719952]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.1555274],[-1.2548984],[-0.4566681],[-1.6319039],[-0.14648859],[0.13250285],[0.9906875]],"dense_1_W":[[1.3423415,-0.24642485,0.006111532,0.012378954,0.82595116,-0.17717491,0.24821205,0.42500618,0.6834485,0.018730227,-0.1565104,0.09215833,-0.36679584,0.0047377744,0.24215446,0.43317646,-0.18074779,-0.17103945],[-0.5176677,-0.7046031,0.0015316915,0.14099175,-0.0733852,-0.6077859,0.2935369,-0.076649874,-0.110761255,0.051375758,-0.0816902,-0.05404265,-0.17823854,0.2719146,0.047899935,-0.5356291,0.31465584,0.016353693],[-0.111515455,0.7519741,4.21518,0.05408819,-1.119347,-0.20324452,-0.08807333,-1.244985,1.5230471,1.5096039,-0.717811,0.2608386,0.15778817,0.23581202,-0.56306803,0.31904206,-0.38444847,-0.19765459],[-0.5268752,0.76404643,-0.0017947298,-0.3977187,-0.22531988,0.6545117,-0.038231295,0.07132816,0.14574783,0.020449052,-0.010587621,0.0513172,0.25084835,-0.10950242,0.26603368,0.061757516,-0.2410503,0.07645558],[-0.00076164474,0.7578842,0.010459518,-0.12878841,-0.36717027,0.2933262,-0.9912176,0.64869034,0.30009547,0.2382631,-0.4692174,0.9048082,0.089927815,-0.3356697,-0.620122,-0.5221165,-0.043559503,0.49379468],[-0.013825502,0.7339534,-0.0039100796,-0.055555224,-0.0005979433,0.83517665,-0.20551458,0.24547431,0.40483287,0.01048875,-0.1659191,0.37662286,-0.18053651,-0.5086211,-0.052123472,-0.2253914,0.26272738,-0.00324899],[1.4422294,0.10161895,-0.009221952,0.0001851067,-0.5961213,0.35581017,-0.40002102,-0.57796574,-0.72453356,-0.2504394,0.40512785,0.33791512,0.23944646,-0.5331633,-0.10079834,-0.14660199,-0.12033143,0.26091284]],"activation":"σ"},{"dense_2_W":[[-0.7369561,0.02455093,-0.46102518,0.1283071,-0.7312183,0.10579285,-0.6936246],[-0.7311419,-0.749299,0.3388481,0.18734214,0.79592025,0.29745373,0.17872249],[-0.22437106,-0.45606863,0.29539058,0.5096125,0.5026677,0.12546055,0.85000384],[-1.3382739,-1.1157519,0.10686484,1.3033385,0.385738,0.17410201,-0.19884275],[-0.1854942,0.42922994,0.28422222,-1.1910807,-1.0079081,-0.23142847,8.624731e-5],[-0.39573595,-0.7930596,-0.130986,0.841052,0.45527455,0.13693747,0.12886971],[-0.73722404,1.5512154,-2.526512,0.409384,0.048512198,-0.16389945,-1.4609332],[-0.5329282,1.3224562,-0.89408386,0.12158089,-0.8545148,-0.67364424,-0.5871783],[0.8857724,0.6694776,-0.603088,-0.26001891,-0.79026496,-0.23295787,-0.30123875],[-0.10273737,-0.6942836,-0.45611718,1.081006,0.4116631,0.74641204,0.097880006],[1.5226238,1.1838912,-0.7302709,-0.74710697,-0.15506236,-0.9069341,0.47763306],[0.41078228,1.0947998,0.33479145,-1.2295458,-0.73588777,-0.35713267,-0.4043876],[0.051438108,-0.25903246,0.011029442,0.29265,0.4014094,-0.55543566,-0.45906964]],"activation":"σ","dense_2_b":[[-0.23664342],[-0.20603849],[-0.17615202],[-0.3781619],[0.0006889099],[-0.081270784],[0.25464833],[0.013770528],[0.22249864],[-0.026060008],[0.62564516],[0.11952428],[-0.12836026]]},{"dense_3_W":[[-0.074207924,-0.505883,-0.40938795,-0.59246546,0.7246955,-0.35897088,0.79559946,0.4252552,0.53429896,-0.7682427,0.41834652,0.73031914,0.09650071],[-0.49922326,0.3795509,-0.38837686,0.6977958,-0.5670746,0.28678024,-0.24660635,0.4053855,-0.20115663,0.21688443,-0.26936162,0.17709436,0.43220088],[-0.2724911,-0.0043004784,-0.3452385,0.35134262,-0.31723148,-0.32032728,-0.33450916,0.66542053,0.58240664,0.0893131,0.18599492,0.4492229,-0.58078444]],"activation":"identity","dense_3_b":[[-0.072912164],[0.02573561],[-0.051938336]]},{"dense_4_W":[[-1.0250915,0.18725124,-0.05788247]],"dense_4_b":[[0.0649493]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/JEEP_GRAND_CHEROKEE_2019.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/JEEP_GRAND_CHEROKEE_2019.json deleted file mode 100644 index 2942415d1..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/JEEP_GRAND_CHEROKEE_2019.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[5.4780097],[1.2577926],[0.43811297],[0.051083397],[1.2457128],[1.2499636],[1.2529455],[1.2401595],[1.223894],[1.1997709],[1.1767297],[0.050826065],[0.0508941],[0.050945964],[0.050895486],[0.050689384],[0.05035568],[0.049934413]],"model_test_loss":0.011547946371138096,"input_size":18,"current_date_and_time":"2023-08-08_05-36-40","input_mean":[[27.111942],[-0.03980634],[-0.0022899704],[-0.006063226],[-0.03720769],[-0.03763983],[-0.038365092],[-0.03697022],[-0.03660629],[-0.03213649],[-0.029237831],[-0.0060009984],[-0.0060217986],[-0.0060452693],[-0.0060623847],[-0.0061068335],[-0.0060221725],[-0.006052836]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.12641694],[-0.33899814],[-0.25064033],[0.20345357],[-0.22338079],[-0.8124178],[0.16103578]],"dense_1_W":[[1.3942753,-0.3584407,-0.154166,0.022718882,0.5902439,-0.22766683,0.2832875,-0.22318293,-0.25568873,0.28416058,0.12970877,-0.500204,-0.5363517,0.45337692,-0.13542888,0.054177634,0.13246426,-0.022701526],[-0.005614037,-0.74243695,-0.024937803,-0.016466122,0.16694336,-0.79974186,1.0153489,-0.21336944,-0.3901125,0.23960757,0.0332596,-0.07577539,-0.42862704,0.4491737,0.17550863,0.31181923,-0.16353676,-0.07374046],[-0.0031423056,-0.57563585,0.017968522,0.3929503,-0.15378566,-0.63862056,0.15106781,-0.12307793,0.23466262,-0.24525358,-0.0012493497,-0.6446595,0.23389706,0.2918894,0.012215268,-0.17649019,0.35015333,-0.16645752],[0.04239965,0.5392046,4.068176,0.13729823,-0.68696815,-0.07966062,-0.088794686,-0.3782991,0.8575764,0.7636464,-0.54163724,0.9711964,-0.018747166,0.14241268,-0.38917318,-0.40814298,-0.3224793,-0.29323283],[0.8142449,-0.7080669,0.16443568,0.63644344,0.28831044,-0.24459267,0.6272347,0.22174281,0.1637401,-0.70512813,0.2843761,-0.16773595,-0.27920532,0.55365586,0.256064,0.11410076,-0.021043133,-0.39824295],[-1.6068854,-0.2603165,0.18158215,0.49356657,0.12779,0.17468308,0.25797316,0.08986019,-0.3094926,-0.6496034,0.49420497,0.34940144,-0.21054225,0.10816955,0.0055429307,0.37773353,-0.37752208,-0.09018268],[-0.7694553,-0.07489691,-0.16786428,-0.00053137547,0.4097508,-0.36562666,0.12501729,-0.19840546,-0.0126358615,0.039615765,0.18806833,-0.54327863,-0.51791424,0.0740618,0.22897214,-0.18245429,0.3604914,-0.09582553]],"activation":"σ"},{"dense_2_W":[[0.24724053,-0.8135549,-1.0432718,-0.47479427,0.23202157,-0.11595288,-0.8035583],[-0.3641042,-0.91288745,-0.17233254,0.062157948,0.012575541,-0.2614273,-0.5772882],[0.29817045,0.49287653,0.19307482,-0.8773637,0.06299248,0.41714546,0.44092533],[-0.22270527,-0.7510113,-0.320351,0.13680461,-0.70703113,-0.12383241,-0.13850203],[0.5840328,-1.1061023,-0.6563664,-0.8935429,-0.123855405,-0.70505697,-0.63111097],[0.99201673,0.9417266,0.9312267,-0.81133705,0.5478353,-0.04604467,0.02872271],[-0.26014936,-0.412083,-0.7116672,0.29321614,-0.5735676,0.29037717,-0.7531203],[-0.38308242,1.0270671,0.65335995,0.19699557,0.48486,0.23515755,-0.14074802],[-0.7378848,0.32173055,0.28095686,-1.3347943,-0.10628233,0.2015702,0.62443095],[0.47323346,-0.77164555,-1.1039329,0.018455347,-0.5227511,0.69003034,-0.2582299],[-0.7601159,-0.2633271,-1.0450773,0.6082064,-0.675639,-0.23727775,-0.028281933],[-0.72581375,-0.90512085,-0.6048286,0.46046877,-0.6226022,-0.07060259,-0.21025342],[0.216426,-1.0285689,-0.4780186,-0.22132304,-0.5840384,-0.53020334,0.15992962]],"activation":"σ","dense_2_b":[[0.15380488],[0.10775849],[-0.19009462],[0.13743988],[-0.026639858],[-0.07323958],[0.1744765],[-0.21176378],[-0.6805215],[0.025015425],[-0.07340503],[0.20637435],[-0.27417326]]},{"dense_3_W":[[-0.400137,-0.17929879,0.37570322,-0.41039902,-0.78768486,0.45827937,-0.33256137,0.5615223,0.31010586,-0.35362414,-0.12100718,-0.41779718,-0.6763564],[-0.029315872,0.38450587,0.65436715,0.5139883,0.5027268,-0.20125258,-0.6333471,-0.34089682,0.29030252,-0.47958472,-0.50353307,0.046102453,-0.1736601],[0.7619456,0.69776905,-0.5650997,0.6306316,0.2189477,-0.5332646,0.4607702,-0.63797,-0.0884034,0.2954164,0.25978985,0.40438277,-0.020070346]],"activation":"identity","dense_3_b":[[-0.039152775],[0.10458916],[0.05406968]]},{"dense_4_W":[[-0.4555721,0.005902641,1.1475917]],"dense_4_b":[[0.05754332]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_CEED.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_CEED.json deleted file mode 100644 index 56d771db4..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_CEED.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.128073],[1.9819432],[0.67647],[0.03768782],[1.9757774],[1.983661],[1.9863665],[1.9118274],[1.8144435],[1.6810344],[1.5267222],[0.037616044],[0.03765301],[0.037677314],[0.03763337],[0.037550315],[0.037358243],[0.036996108]],"model_test_loss":0.008689496666193008,"input_size":18,"current_date_and_time":"2023-09-02_03-20-12","input_mean":[[14.68071],[0.021380786],[0.46259907],[-0.004524958],[0.022391],[0.022068378],[0.021636909],[0.017254867],[0.01384061],[0.011885543],[0.0075867935],[-0.0047742473],[-0.004707863],[-0.004638913],[-0.004404541],[-0.0042158943],[-0.004056291],[-0.0040879687]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.1280082],[-1.1454269],[-0.5907967],[-0.09462522],[-1.5222621],[-0.06474111],[-0.18497786]],"dense_1_W":[[-0.7009141,-0.38039988,0.004431449,-0.012658321,-0.22134589,0.40167508,0.24670589,-0.16331027,-0.6081444,0.044047765,0.15884489,-0.28576955,0.5305393,-0.21158585,0.01631704,0.0164069,-0.04090381,0.03749079],[-1.2070944,0.33291462,-0.00065425114,-0.15011062,0.107518055,-0.18207166,-0.14097372,0.41454053,0.0068484033,-0.22716488,0.103904985,-0.09329521,-0.06751863,-0.041087177,0.60482687,-0.26763386,0.11107493,-0.1320544],[0.4323738,-0.7883933,0.018195441,0.1580461,-0.6474651,-0.6159256,-0.9379849,-0.37990838,0.68379474,1.044618,1.4096797,-0.40671948,0.1614424,-0.11615482,0.12993212,0.37938693,0.11391126,-0.3182603],[-0.13848633,0.090352476,0.01572969,0.3221026,1.8986752,1.4132906,1.0738622,-1.0810357,-1.1936059,-1.3231126,-0.6220339,0.24080239,-0.34178606,-0.17251074,0.07337686,-0.21869779,-0.14425553,0.15532547],[-1.3020873,-0.3577446,0.004843032,-0.19699144,0.61322373,0.27911437,0.032230213,-0.86169994,0.13983178,0.12466293,0.17854461,0.07389106,-0.24750361,0.07031268,0.20702806,0.16463912,0.10438393,-0.1978545],[-0.16901715,0.3392736,0.004554811,-0.27741778,0.45267153,-0.3854464,0.30139357,0.38105348,-0.54760116,-0.1830378,0.25936118,0.2037518,-0.045803245,0.18543306,-0.3661198,0.30218798,-0.18051952,0.088926606],[-0.04060996,-1.2018764,-0.0063867588,-0.1523224,-0.23714058,0.14187981,0.37231123,-0.21963619,0.48160625,-0.064321116,-0.08458865,0.098526716,-0.23027526,0.29377708,0.07306222,0.05420829,-0.027615033,0.032934707]],"activation":"σ"},{"dense_2_W":[[-0.9896441,-0.91121817,-1.3145435,1.5384254,-1.8210615,0.4096885,-0.6555594],[-0.5512578,0.706973,0.1739295,-0.2688923,0.0792371,0.2261899,-0.93914133],[-0.17643008,0.37539357,-0.52018803,-0.60483295,-0.40311056,0.00969808,-0.60566235],[0.5127232,-0.6856154,-0.38688743,0.5137769,0.043315798,-0.31914636,0.55572736],[-0.4251685,0.8384956,-0.44557106,-0.33929333,-0.2585186,0.5259269,-0.57586336],[-0.10946882,-0.59604675,-0.20513241,0.4133915,0.30031222,-0.061005022,0.73186797],[0.17562889,0.145244,-0.26974306,0.28159103,0.1361736,-0.8459545,0.5167652],[0.050689343,-0.7800611,0.38343653,0.51704615,-0.014367372,-0.110503346,0.6778625],[0.20051907,-0.08033896,-0.1346465,0.4862248,0.26726595,-0.49421996,0.058299515],[-0.6299042,0.62805223,-0.79595345,-1.3490283,0.5333974,0.47591394,-0.63695586],[-0.90749574,0.033430014,-0.9152016,-0.031571057,-0.5695399,0.42602757,-0.27167413],[-0.17134069,-0.100465134,0.49037132,-0.2590825,-0.40358037,0.59190834,-0.2740423],[0.4622381,-0.2463554,-0.19674955,-0.23713845,0.62164,-0.40453714,0.3900809]],"activation":"σ","dense_2_b":[[-0.16326958],[-0.049766444],[-0.07038124],[-0.11578319],[0.066625684],[-0.1020039],[-0.12042527],[0.06384306],[-0.14624113],[-0.08538901],[0.01569337],[0.09202553],[0.00027780043]]},{"dense_3_W":[[0.7518775,0.02956615,0.6283354,-0.04630323,-0.31706655,0.42018586,-0.10056567,-0.7526844,0.40103868,1.063733,0.057580598,0.4941196,-0.70732373],[0.27228886,0.64840984,-0.030330945,-0.5357204,0.562624,-0.42896906,-0.22066677,-0.5914074,-0.64570546,1.042475,0.021803057,0.59831506,-0.15360864],[-0.9862492,-0.22666612,0.13068162,0.7076782,-0.28517807,0.4069032,0.24799564,0.2690811,-0.46506408,-0.38062972,-0.8088552,-0.4484452,0.12431305]],"activation":"identity","dense_3_b":[[-0.09667684],[-0.03777417],[-0.07913758]]},{"dense_4_W":[[0.31394643,1.0359226,-0.3090591]],"dense_4_b":[[-0.04020227]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_EV6.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_EV6.json deleted file mode 100644 index 9e89e1b73..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_EV6.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.864324],[1.195729],[0.5000528],[0.045503624],[1.1876615],[1.1897441],[1.1915259],[1.1731166],[1.1543447],[1.1241426],[1.0919412],[0.045285385],[0.045317214],[0.045348417],[0.04523818],[0.044993326],[0.044672333],[0.044197746]],"model_test_loss":0.010650141164660454,"input_size":18,"current_date_and_time":"2023-08-08_10-38-45","input_mean":[[22.725025],[-0.055808485],[0.001137117],[-0.015166062],[-0.053198244],[-0.053012587],[-0.05277475],[-0.05324079],[-0.05459143],[-0.05888146],[-0.061499923],[-0.015064281],[-0.015065552],[-0.015068696],[-0.015092874],[-0.015163227],[-0.015276051],[-0.015225322]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.8403706],[1.9263608],[-0.02353573],[0.13397901],[0.053899422],[-0.64194036],[1.533293]],"dense_1_W":[[1.215834,0.5290091,0.0010350833,0.58499736,0.13186142,-0.31402144,-0.21469525,0.38816625,0.23431656,0.29439512,-0.31795207,-0.4929344,0.027251905,0.4290527,-0.27181652,-0.25157085,-0.13006414,0.19127874],[0.2723699,1.2427698,0.0014152995,-0.43297893,-0.48355135,1.1187311,-0.24734323,-0.09894979,0.11120238,0.28424853,-0.010035362,1.1629834,-0.19423008,-1.0324532,0.13956966,0.09991054,0.112085946,-0.1749808],[-0.19893286,-0.17605188,-0.0030688597,0.05146822,0.27002192,-0.7286609,0.43610734,-0.14199519,-0.0853716,-0.101905815,0.073544376,-0.46090946,-0.18160121,0.4364794,0.10960736,0.04185993,0.26554465,-0.31036776],[-0.011314031,0.4353308,3.653043,-0.05127646,-0.1675842,0.31245592,-0.18524799,-0.27518684,0.44928986,0.26701117,-0.52353877,0.41049197,-0.26632294,-0.028535297,-0.29766062,-0.048215423,-0.3651719,0.3764775],[1.5780559,-0.08976564,-9.765889e-5,-0.26617634,0.24203834,-0.8669704,1.1116273,-0.0742143,-0.2221292,-0.054146104,0.16106835,-0.92289317,0.365733,0.5554041,0.15667431,0.3766961,0.2937706,-0.38773754],[-1.6040205,-0.47703403,0.002361407,0.07246606,0.53856707,-0.90088457,0.95031244,0.007901789,0.048565075,0.0043789237,0.04390007,-0.9249038,0.1373752,0.6529523,0.4923536,-0.27184066,0.13291296,-0.11895679],[0.2517245,-1.1308137,0.0034714418,0.1780916,0.10587542,-0.8159195,0.4059062,-0.03472441,-0.04591407,-0.26056758,-0.016641837,-0.5397002,0.108333215,0.5678768,0.039879672,-0.132191,-0.21716514,0.2923616]],"activation":"σ"},{"dense_2_W":[[-0.48967394,-0.51389205,0.113997415,0.016403848,0.5711787,0.15113378,0.4878009],[-0.2635089,0.21487024,-0.7652375,-0.8594565,0.295536,-0.23716962,-0.41961473],[-0.88732815,0.43693033,-1.120157,1.132662,0.06735183,-0.01847645,-2.4321022],[0.01924355,-0.03326971,-0.11982994,-0.620888,-0.33939648,0.13469471,0.18667164],[0.3868043,-0.32892308,0.5205381,-0.04860096,0.63565564,0.5115548,0.18762778],[-0.617038,-1.3592334,-0.1403255,-1.1278222,0.28842503,0.97025603,-0.17546569],[-0.55640936,-0.90946704,-0.37307426,-0.58689624,-0.29243192,0.10891342,-0.54093736],[-1.3703765,-0.16418502,-0.823949,1.6223699,-1.0620314,0.53991866,-2.127252],[-0.009325325,1.5309258,-0.16605411,0.7356731,-0.34463426,-0.6377375,-0.29067755],[-0.39712206,0.07344511,-0.75337785,0.14594577,-0.71447504,-0.70417905,-0.90238726],[-0.5242973,-0.42696825,0.40271243,0.5059833,0.7945543,0.64832735,0.23148233],[0.3530504,-0.88467205,0.88836426,0.33030617,0.049364965,0.01906914,0.4844055],[-0.4703546,-0.24426712,0.7923177,0.36024544,0.0022455095,0.052522115,0.8682579]],"activation":"σ","dense_2_b":[[-0.17262366],[-0.14012913],[0.12171151],[-0.18287124],[-0.20833604],[-0.1185827],[-0.17963924],[0.059548587],[0.52694756],[0.41090366],[-0.200375],[-0.20045975],[-0.153012]]},{"dense_3_W":[[-0.07465968,0.15956515,0.46311855,0.014608014,-0.444435,-0.7115352,-0.30661452,0.73835003,0.8836145,0.9389069,-0.5226219,-0.41022688,-0.41954798],[-0.60114104,0.003818114,0.17285155,0.044011418,-0.4042057,-0.7233705,-0.45021132,0.0065049254,0.3945897,0.92667377,0.58642626,-0.5636264,0.041805413],[-0.40279514,0.053986654,-0.03796396,-0.01619937,-0.3810127,0.20270245,-0.16480388,-0.09316253,-0.31165186,0.23359255,0.42131686,0.16401958,0.35183364]],"activation":"identity","dense_3_b":[[0.10906697],[0.11099494],[0.09338066]]},{"dense_4_W":[[1.0284308,0.2183279,-0.010448182]],"dense_4_b":[[0.106538475]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_K5_2021.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_K5_2021.json deleted file mode 100644 index 5256a3e1b..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_K5_2021.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.854179],[1.1303082],[0.53015584],[0.03889556],[1.123932],[1.126327],[1.1281773],[1.1152551],[1.0980102],[1.0719626],[1.0425837],[0.038768984],[0.038817387],[0.03885716],[0.03881795],[0.03875846],[0.0386614],[0.038491134]],"model_test_loss":0.01249716430902481,"input_size":18,"current_date_and_time":"2023-08-08_13-08-15","input_mean":[[21.914545],[-0.06985225],[0.0069250595],[0.0074601127],[-0.072784856],[-0.07272125],[-0.07216228],[-0.06802319],[-0.062263846],[-0.055437304],[-0.047055077],[0.0074525527],[0.0074529466],[0.0074460334],[0.007305565],[0.0071349433],[0.006932451],[0.0067396]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.1328846],[-1.0045387],[-0.20393331],[0.34046453],[-2.9040704],[-0.88909465],[-1.0122662]],"dense_1_W":[[-0.009380342,0.39705235,-0.00044332718,-0.09147423,0.08871867,0.9096405,-0.59983367,-0.18780915,0.30827704,0.051737268,-0.026273916,0.1966064,-0.08228399,0.07654324,-0.22208402,-0.26681504,-0.0277596,0.20970288],[-0.61757046,-0.8588174,-0.23621607,-0.027208043,0.09026295,-0.43468106,0.6500065,0.006853881,-0.12466401,-0.47896266,-0.2195636,-0.4655939,0.2346326,0.25235915,0.21434762,-0.3650002,0.06806084,0.19297919],[0.010002054,-1.349585,-5.1705165,0.12756625,0.08521816,-0.98372036,0.43257916,-0.057569943,-0.54946965,0.96981055,1.5286827,-0.9813786,0.12952766,0.14352597,0.23754609,0.4159036,-0.0977373,0.048195776],[0.9575999,-0.14470491,0.31414202,-0.09178863,0.14425702,-0.61020595,0.9214482,-0.051314764,0.49639797,0.7580396,0.10446417,0.056817234,-0.1146647,0.19221032,0.121222705,-0.14470126,0.08769907,-0.25462785],[-0.88419044,0.9049013,0.3302875,-0.8633652,-0.44462034,0.61998045,-1.0550838,0.5917251,0.48678157,0.50562924,0.12007341,0.26738396,-0.017963672,0.30564892,0.19286638,0.40492755,-0.14467871,-0.2856948],[-1.3030186,-0.29781476,0.31140298,-0.17929639,0.12359713,0.34227288,0.38400793,-0.4179453,0.20848781,0.7742308,0.35219595,0.0028036782,0.4082305,-0.34966815,0.021426486,0.34787825,-0.19836852,-0.21195874],[-0.58479625,-0.23239343,-0.24123837,0.6287148,0.47498283,-0.7846575,0.8982925,-0.88446414,-0.22690499,-0.40089333,-0.053161245,-0.52477574,0.04346586,0.0012316491,-0.17584592,0.15376398,-0.23099528,0.21563265]],"activation":"σ"},{"dense_2_W":[[0.06019809,-0.17363435,0.009131735,-0.6226487,-0.26803654,-0.040024236,-0.56756294],[-0.14312544,0.49063408,-0.44845125,0.40217203,-0.18071179,0.4310444,0.43489814],[-0.24798368,-0.56137055,0.52847433,0.7304674,0.039464716,0.2093034,0.44131762],[0.811304,-0.7688727,-0.07781592,-0.26929495,0.06020161,0.10069685,-0.2413632],[0.5917001,-0.7344408,-0.7879752,-0.70411605,0.096649006,0.5307449,-0.5803427],[-0.17709559,0.57773626,-0.12374329,-0.39053938,0.05942479,0.36537674,0.3478097],[-0.57855505,0.43059486,-0.29216823,0.44024208,0.109462574,0.05103991,0.6366086],[2.143651,-0.36122483,-0.28893292,-1.1197438,0.8901433,-0.60585576,-0.6609203],[2.3569098,-1.4072812,0.41858813,-1.4579345,1.6088637,-0.65525293,-1.0169],[-0.4568836,0.46699843,0.4344656,-0.108972535,-0.5572416,0.22916758,-0.03445166],[0.726269,-0.7789017,-0.42420408,-0.6138444,0.5996936,0.19354253,-0.40971667],[0.16139944,0.33351776,0.44673514,0.25408468,-0.6194311,-0.102249816,0.24741264],[-0.2875433,0.15023352,-1.0662942,-1.5630789,0.52131546,0.17151031,-0.08705293]],"activation":"σ","dense_2_b":[[-0.056130372],[0.007243945],[-0.049758114],[-0.10406119],[-0.215356],[-0.033409223],[-0.003601784],[0.3017622],[0.28980875],[-0.08838445],[-0.027734138],[-0.04194128],[-0.18084925]]},{"dense_3_W":[[-0.3558706,0.27432942,0.24073915,0.4001887,-0.5080968,0.1751163,0.57690793,-0.34388652,-0.48687238,-0.15128407,-0.3315714,-0.41198158,-0.18070593],[-0.45770586,0.05980327,0.4270051,0.4770666,0.50269896,-0.25726086,0.48697513,0.34577233,-0.074373096,-0.40511134,0.45576844,0.02034731,-0.09106971],[0.4071002,-0.1986135,-0.46739143,0.5110455,-0.26348698,-0.15412426,-0.5601918,0.17882004,0.52172244,-0.3752082,0.43591946,-0.6359482,0.3153758]],"activation":"identity","dense_3_b":[[0.04088854],[-0.057896398],[-0.03347668]]},{"dense_4_W":[[-0.6996337,0.5206291,1.0165205]],"dense_4_b":[[-0.037676737]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_EV.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_EV.json deleted file mode 100644 index 915749356..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_EV.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.756613],[1.5469935],[0.5868461],[0.048539903],[1.5311569],[1.5367651],[1.5406994],[1.5197327],[1.4855404],[1.433774],[1.3787619],[0.048304897],[0.048386667],[0.048456155],[0.048535753],[0.048419178],[0.048049178],[0.047447804]],"model_test_loss":0.01072931382805109,"input_size":18,"current_date_and_time":"2023-08-08_14-01-31","input_mean":[[19.740038],[0.010453053],[-0.00983059],[-0.008197198],[0.011297055],[0.010507559],[0.009715306],[0.00675721],[0.005983052],[0.005432915],[0.0040853415],[-0.008249147],[-0.008247744],[-0.008244466],[-0.008281346],[-0.008300149],[-0.008453809],[-0.00865498]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.7556062],[-2.0698571],[-4.225762],[-0.15726951],[-0.30065513],[-1.0648031],[1.8342476]],"dense_1_W":[[-1.7290211,-1.5173091,-0.23002613,-0.37698144,0.016258085,-0.8270681,1.3781465,-0.7642315,-0.6422404,0.2824734,-0.110180624,-0.3257264,0.5549623,-0.032036513,0.43426138,-0.0714845,0.2864038,-0.21663748],[1.9184333,0.671971,0.04794123,-0.25451732,-0.10465885,0.5573552,-0.37439582,0.24595505,-0.06845002,-0.041696787,-0.05226348,0.22399874,0.03275794,-0.070917316,-0.22555944,0.1414704,-0.0041139866,-0.00024242824],[-1.8817899,1.5202969,0.2509318,0.51012284,0.62497395,0.032136127,-0.979242,0.6263891,0.70745003,-0.31345257,0.18674128,0.12859097,0.07685459,-0.46171176,-0.2280601,-0.33504027,-0.4022656,0.4169894],[0.04874895,1.0698912,-0.029439794,0.07341402,0.3300274,0.7930807,-1.2549204,0.0783156,0.44667515,-0.044906255,-0.043870416,0.46820083,0.10374188,-0.53068924,-0.48136172,-0.074282564,0.12173919,0.0077482965],[-0.04342037,1.5612729,3.16704,-0.28737867,-0.79875565,-0.07702065,-1.1260544,-0.43122292,0.9323476,1.0069447,-0.97308475,1.2108004,-0.18733604,-0.6011836,0.18945155,-0.30365372,-0.16747494,0.19430496],[-0.31009704,1.1274835,0.09042992,-0.03338503,0.018458644,0.5902667,-0.24463883,-0.06990637,-0.159641,0.30669054,0.05195872,0.40048352,-0.029881949,-0.021455474,-0.6194718,-0.10056458,0.027914932,0.17777753],[-1.7739217,0.33766812,0.043878227,-0.7079486,0.070119634,1.0434483,-0.68583184,-0.19537714,0.06398747,0.16186452,-0.09159792,0.9890885,-0.08469821,-0.27189568,0.09402364,-0.43951192,-0.060028143,0.3246841]],"activation":"σ"},{"dense_2_W":[[1.3462045,0.59007597,-1.0555073,-0.72884923,0.30742645,-0.7919825,-0.79060274],[-0.94850713,0.08338297,-0.14278129,0.8774979,0.573835,0.043590613,0.47284335],[0.6373134,-0.7411809,-0.33538958,0.14371277,-0.37772784,0.16757706,-0.5341049],[-0.16109301,0.74011505,-0.12572628,-0.123916484,0.87228954,-0.0765876,0.09092019],[0.75033695,0.0969066,-0.60294336,-0.23090811,-0.39634117,0.18033504,-0.8499323],[-0.9217793,0.014436126,-0.6526303,-1.0338821,0.44630024,-0.17751805,-0.63913804],[-0.090204455,0.4812081,0.26368377,0.015731392,0.9630277,-0.17355147,-0.11038842],[0.0126234675,-0.63450015,-0.5070031,0.14078641,-0.73571676,0.008089552,0.03479742],[0.80792475,-0.66766584,0.23032701,-0.33161584,-1.2037598,0.2125056,-0.15969864],[-0.2423005,-0.74057645,-0.5435483,0.044129636,-0.69188356,0.08389628,0.16697945],[-1.5361837,0.30874377,1.1789893,0.6659148,-0.69351107,0.4415424,0.6480144],[-0.07204271,-1.221483,-0.92439497,0.7499748,-0.035351105,0.5684253,-0.67117625],[-1.017458,0.48187095,0.2618596,0.97278225,-0.55749303,0.423465,0.33408752]],"activation":"σ","dense_2_b":[[0.1838596],[-0.28277993],[0.11383015],[-0.23923337],[0.14975849],[0.014726325],[-0.16617869],[-0.029415732],[-0.118649684],[0.27848494],[-0.45202333],[-0.1126877],[-0.33022732]]},{"dense_3_W":[[-0.29903474,0.096304685,-0.46381262,-0.0082688145,-0.34521008,-0.72311455,0.260216,-0.3090884,-0.632807,-0.635328,0.6114854,-0.52489674,0.5849963],[-0.1397393,0.7307058,-0.24962811,0.54387295,-0.42753673,-0.5538375,0.39787623,0.073375665,0.29743633,-0.4567702,0.4831776,0.17509066,0.23498277],[0.17090236,-0.29356945,-0.030084739,0.1615791,0.08188441,-0.01872784,0.24252425,-0.23374312,-0.050307382,0.2272926,-0.600093,0.61274093,0.07305241]],"activation":"identity","dense_3_b":[[-0.015210137],[-0.05734997],[-0.043353032]]},{"dense_4_W":[[0.7804087,0.5536279,-0.040379304]],"dense_4_b":[[-0.031827074]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_HEV_2021.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_HEV_2021.json deleted file mode 100644 index ce68ad35e..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_HEV_2021.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.597539],[1.589519],[0.8570558],[0.04863597],[1.6346245],[1.6241254],[1.6103257],[1.498106],[1.4157897],[1.3226876],[1.2293135],[0.048567627],[0.048607342],[0.04863673],[0.048688337],[0.0488638],[0.049082097],[0.049054746]],"model_test_loss":0.011536603793501854,"input_size":18,"current_date_and_time":"2023-09-02_06-52-47","input_mean":[[17.37028],[0.06026842],[0.506836],[0.00031705393],[0.06628794],[0.06474968],[0.0628686],[0.05320054],[0.04718131],[0.04658512],[0.051670313],[0.00045426827],[0.00041247738],[0.0003619111],[3.6777285e-5],[-0.00032301998],[-0.0005914742],[-0.00092334347]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.24682778],[-0.006299858],[0.0748293],[-0.5736973],[-0.256641],[-0.58670074],[-0.0044331043]],"dense_1_W":[[1.0383956,0.9127742,-1.7661572e-5,-0.119445495,0.33176455,0.03573714,-0.8297675,0.023340857,0.47458792,-0.40310016,0.05576016,0.45783523,0.14146096,-0.4043011,-0.40886042,-0.11232859,-0.08254774,0.23749773],[-0.010238037,0.30345035,0.11772968,0.042131707,0.3533758,0.16141611,-0.32165682,0.22163633,-0.44536677,0.12489661,0.11577652,-0.4645873,-0.17438301,0.28373742,0.5604936,0.18323892,-0.099337935,-0.2914466],[0.019332694,-0.9718337,0.1213718,-0.09318972,0.4252448,0.122399725,-0.18120395,0.11679359,0.08406331,-0.28711584,-0.055180494,0.3861118,-0.31324327,-0.20063293,-0.299365,0.17973764,0.18562388,0.011371533],[-0.011864931,-1.153027,-1.1015527,-0.09962848,0.015605152,0.3611728,0.13415214,-0.23815176,0.63666695,-0.11102109,-0.2912127,-0.53489137,0.41428724,0.08640866,0.18429007,0.3095773,0.068252586,0.18889964],[1.0551776,-0.36253345,-0.001785746,0.022279864,-0.25197285,0.18718459,0.10246457,-0.26064438,-0.30058408,0.2714863,0.002131989,-0.643216,0.37801188,0.10752107,0.50343543,0.07076738,0.08356163,-0.22799636],[-0.008646536,0.78340423,-1.1187115,-0.57623047,-0.35842294,-0.7300839,-1.0882407,1.38732,-0.015289124,0.102130026,-0.69328797,-0.026475098,0.11983873,0.14571564,0.058386486,0.48151672,0.45962128,-0.04454241],[0.0033251448,-0.377444,0.08040648,0.07891003,1.9698765,2.2291944,1.0210977,-1.7496017,-1.0250691,-1.4425315,-0.31541628,-0.023265995,-0.059444286,0.0109439315,0.27883554,0.19031176,-0.16854845,-0.020514654]],"activation":"σ"},{"dense_2_W":[[-0.024243228,-0.05255965,-0.7595463,-0.5176617,-0.0028400528,0.5175856,0.5519225],[-0.018462835,0.24686936,-0.51719195,-0.42296433,-0.2835181,-0.007122102,-0.1566434],[-0.8202002,-0.6762049,-0.21161737,0.6190111,0.8244078,-0.58753747,0.34383672],[0.7579045,0.30807158,-0.5150138,-0.39650717,-0.65510255,0.6530385,0.029368501],[0.19137707,0.47466335,-0.6506839,0.14364511,-0.9489478,0.21647897,-0.47036436],[-0.7764023,-0.48433128,-0.14451031,0.436359,0.86376953,0.06893752,-0.3654762],[-1.6003051,-1.3418225,0.8276233,0.10213565,-0.890929,-0.37858123,0.72083765],[0.28483543,0.26148677,-0.7699699,-0.5142481,0.13567218,0.5638172,0.44093132],[-0.79822946,0.13202399,-0.72469413,-0.28871945,-1.2221936,0.35103744,-0.97257113],[-0.43247938,-0.09032452,-0.71232784,-0.012452181,-0.36949623,0.040841173,0.21214984],[0.10710754,0.36228323,-0.47006533,-0.37733367,-1.2878665,0.47658426,-0.45390767],[0.24698155,0.2711014,0.075908944,-0.42958894,-0.23198445,-0.2069848,-0.3533442],[0.6337969,0.35413942,-0.7264216,-0.47986504,-0.21905626,0.6985329,0.2576043]],"activation":"σ","dense_2_b":[[-0.12635571],[-0.14632428],[0.038847096],[-0.07666457],[-0.1459678],[0.14029463],[-0.169782],[-0.23029572],[-0.10404744],[-0.142377],[-0.08718043],[-0.06485942],[-0.14547676]]},{"dense_3_W":[[-0.15735611,0.17262073,-0.8805252,0.51910555,0.2501827,-0.2835049,-0.11046073,-0.15481108,0.6115458,0.2226787,-0.03818101,0.042739924,0.53314],[-0.5296838,0.2718061,0.544608,-0.2170193,-0.30278963,0.3500211,0.77196777,-0.58984184,-0.3200903,0.25097454,-0.4622797,-0.41570127,0.052868128],[-0.103185855,0.026371501,0.77141577,-0.66143405,0.17981799,0.3885078,0.7312039,0.48614725,0.2583454,0.014793015,-0.5174716,-0.26699665,-0.017405592]],"activation":"identity","dense_3_b":[[-0.09996536],[0.10106084],[0.0681742]]},{"dense_4_W":[[1.3119884,-0.8955275,-0.28397295]],"dense_4_b":[[-0.096690625]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_HEV_2ND_GEN.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_HEV_2ND_GEN.json deleted file mode 100644 index c01244be2..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_HEV_2ND_GEN.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.548942],[1.1556146],[0.5686091],[0.04125714],[1.1739614],[1.1698171],[1.1636059],[1.1330084],[1.1195551],[1.0984498],[1.052436],[0.041275118],[0.041270234],[0.041261356],[0.041291114],[0.041279677],[0.041211747],[0.04119539]],"model_test_loss":0.021393293514847755,"input_size":18,"current_date_and_time":"2023-09-02_07-27-02","input_mean":[[19.183447],[-0.061503228],[0.31750193],[-0.009586182],[-0.07582464],[-0.07115664],[-0.066330835],[-0.050047584],[-0.04131674],[-0.034985147],[-0.023530383],[-0.00953319],[-0.0095485365],[-0.00957056],[-0.009637397],[-0.009661676],[-0.009702404],[-0.009817304]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.11971723],[-2.06865],[-0.9273426],[0.2350055],[-0.039275352],[-0.6935257],[2.1106303]],"dense_1_W":[[-0.023465969,1.0403687,-0.0064599384,0.088695236,-2.572482,-1.9478124,-1.171903,3.2940629,2.2462277,0.7168309,-1.1020683,0.20056015,0.27593887,-0.26641613,-0.14360692,-0.7400961,0.00034045885,0.4156913],[-0.93346083,-1.4239619,-0.006503616,-0.22113818,-0.2023531,0.5193814,1.0461832,-0.3782537,0.29444095,-0.15030141,-0.5023597,0.16464102,0.7242057,-0.27950695,-0.3696878,-0.30749488,-0.47764552,0.76080126],[0.7568762,-0.981843,0.016051132,0.19062184,-0.90861064,-0.7826231,-0.2727878,-0.23859741,0.5777361,0.8479089,1.3446846,-0.44860214,0.23954475,-0.01972305,0.022940347,0.21341267,-0.041809097,-0.08129695],[-0.09766348,-0.6063554,0.0062130643,-0.03661122,-1.70968,-1.8175805,-2.0428705,1.8160136,1.7936941,1.4172349,0.45122316,0.4655184,-0.21158199,0.27250418,-0.25827283,-0.39359215,-0.2081721,0.463419],[0.008593872,-0.58326274,0.007718574,0.30187526,-0.93341124,-0.077753805,0.021100318,0.051944837,0.48332676,0.46354106,-0.6830866,-0.4099744,-0.23816824,0.20651065,0.4611754,0.027589535,0.42457825,-0.38316107],[0.47711346,1.1507468,-0.012431412,0.080158405,1.1602942,0.88804525,0.068638526,-0.049588755,-0.9131459,-0.90958065,-1.0101755,0.19905831,-0.12530342,-0.19841798,-0.21211796,0.1636958,0.23769926,-0.20800415],[0.9961328,-1.143366,-0.007048344,-0.38564992,-0.14137669,0.97105956,0.28828618,-0.38741222,0.11933695,0.042133637,-0.5720996,0.8045794,-0.14538643,-0.06855614,-0.025645649,-0.65618575,-0.23211053,0.7001129]],"activation":"σ"},{"dense_2_W":[[-0.21309559,-0.2557323,-0.37976655,0.4364266,-0.058041357,-0.10421585,-0.108383834],[-0.7912269,0.5097253,0.20453687,-0.53811145,0.99982816,-0.61565036,0.4312177],[-0.21263213,0.48694882,0.18081997,-0.8577293,0.73699605,0.030947331,0.18210255],[-0.58780706,0.68300354,0.09398714,-0.5269206,0.73805976,-0.80878305,0.48335037],[-0.64852566,-0.39090246,0.58450216,-0.46928614,-0.50298375,-0.07994645,0.053112958],[0.1690405,0.5960562,0.35752842,-0.87621987,0.32022333,-0.55614614,0.7826676],[0.71447146,-1.0444664,-0.4509489,0.911557,-0.7412179,0.54971963,-0.7381729],[-0.62482494,0.039678216,0.56063163,-0.3121521,0.15650049,-0.09051405,0.09062955],[0.0126393195,-0.06729555,0.37268206,-0.9645424,0.835795,-0.8074821,0.59585595],[-0.048607614,-0.53631896,-0.19049186,0.7581371,-0.61508256,0.115542084,-0.5422532],[-0.08638583,0.37238285,0.4352934,-0.9093409,0.3891405,-0.3895383,0.22890623],[0.6520517,-0.27878258,0.0021966984,-0.23270349,-0.9914703,0.48241284,-0.16072732],[-0.29694274,-0.17202643,-0.45471925,-0.048209682,0.030067155,-0.20176966,-0.34706435]],"activation":"σ","dense_2_b":[[0.040295675],[-0.14250198],[-0.28739277],[-0.18335883],[-0.12844329],[-0.23011152],[0.2616699],[-0.1555895],[-0.27772397],[-0.0050205495],[-0.17576194],[0.06814319],[-0.17360274]]},{"dense_3_W":[[0.096177064,-0.17084734,-0.35130522,-0.51758367,0.15829244,-0.57115465,0.74830765,-0.119700745,-0.28673345,-0.016819801,-0.21919145,0.6545112,-0.14663658],[0.49742782,0.74625164,-0.2345321,-0.48559803,0.1774502,0.3355754,-0.7141915,-0.16827786,0.5395194,-0.7827569,-0.40440023,-0.6389728,-0.24930853],[-0.66462135,0.3956486,-0.40556067,-0.3123342,0.21790422,0.5589044,0.38879392,0.26195037,-0.36978155,-0.21154313,0.3580779,-0.06915874,-0.32115373]],"activation":"identity","dense_3_b":[[0.09647246],[-0.073265985],[-0.08355868]]},{"dense_4_W":[[1.1780397,-0.3744698,-0.1993529]],"dense_4_b":[[0.091160975]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_PHEV_2022.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_PHEV_2022.json deleted file mode 100644 index 204155f33..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_NIRO_PHEV_2022.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.716972],[1.5770903],[0.76125735],[0.035141002],[1.6173459],[1.608055],[1.5956668],[1.495505],[1.4262352],[1.3462695],[1.2594373],[0.035050083],[0.035089202],[0.035124455],[0.035208944],[0.035322115],[0.035380527],[0.035195734]],"model_test_loss":0.02083713933825493,"input_size":18,"current_date_and_time":"2025-07-15_19-46-38","input_mean":[[16.164469],[-0.030030865],[0.4530188],[-0.011929912],[-0.029048208],[-0.029084828],[-0.028234662],[-0.030135768],[-0.026924115],[-0.022959951],[-0.021531954],[-0.011769504],[-0.011809296],[-0.011859953],[-0.012107499],[-0.012191469],[-0.012183576],[-0.012161244]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.05593524],[-2.802646],[0.18381701],[2.7735913],[0.70043844],[-0.67402124],[-0.0306403]],"dense_1_W":[[-0.0060694856,0.708295,-0.0040300265,-0.14072545,0.86508894,-0.20933008,-0.47414628,0.13602145,-0.37351108,-0.1507088,0.8062229,0.32620648,-0.4413763,0.27845934,0.046796944,-0.20166004,0.2805364,-0.17857681],[-1.5183858,-1.1884525,0.012948404,-0.4015399,-0.4482837,1.2997682,0.74758935,-0.18140315,-0.08297701,0.43953654,-1.01308,-0.03576563,0.48874712,-0.35160765,-0.13189487,0.2400938,-0.02507816,0.16568868],[0.012290816,-0.3639789,-0.030819947,0.23707484,0.74310154,0.1940028,0.030501615,0.39026827,0.058221884,0.30168098,0.056437366,-0.20590998,-0.5798354,-0.48759502,0.19185027,-0.1474303,0.01184457,0.2231587],[1.5026484,-1.0851525,0.012162996,0.16663143,0.17487548,1.102379,0.4405227,-0.67651707,0.44908693,-0.2039782,-0.6490339,-0.35403496,0.20746203,-0.3432079,0.028647806,0.107211135,0.23621367,-0.08824623],[0.07099266,-0.93228585,1.2776774,0.0044325506,0.15857935,1.1165909,0.9740256,-1.5084538,-0.9056588,0.12456019,0.5993922,0.3822549,-0.13951926,-0.10822766,0.0038337011,0.18770072,-0.049219564,-0.076232985],[-0.0752,-0.20068114,-1.2384826,-0.049861677,0.4789055,1.0113648,0.5513206,-1.3342785,-0.92097133,-0.06880563,0.89944464,0.117162146,-0.5786451,0.1731132,-0.07269918,-0.08290825,0.61927795,-0.32732028],[0.00064757804,2.5136843,0.013637969,0.09395495,-0.7916261,-0.5194506,-0.6840161,0.43426317,-0.14782813,0.19477805,-0.35974234,0.1649517,0.25925198,-0.43630955,-0.5161664,0.34094948,0.0005879998,-0.01794689]],"activation":"σ"},{"dense_2_W":[[0.0914673,-0.116974674,0.6729949,-0.77771014,-0.41403642,0.14140436,0.73223853],[-0.42032346,0.49695835,-0.5017433,0.87220526,0.1466709,-0.094482444,-1.1789782],[0.680824,-0.33863154,0.41371307,-0.5763291,0.3732767,-0.6742655,0.05377676],[-1.0674618,0.8340688,-0.36008632,0.5650019,0.43301603,0.3166691,-0.33432913],[-0.29696158,-0.7246317,0.16882418,-0.09805153,-0.2640285,0.2763439,0.6544825],[-0.39634275,-0.18197323,0.012897031,0.7196241,0.73943686,0.6189228,-0.44182113],[0.61815614,-0.42130506,0.20303723,-0.53927803,-0.33029187,-0.14950582,0.60663986],[-1.241183,1.4418663,-0.05617688,0.21847261,0.67225105,0.55988765,-1.1410111],[-0.61954373,0.55230546,-0.048563246,0.4581752,-0.59391123,0.20338446,-0.41244057],[-0.56894773,0.7917731,0.059939034,1.0460548,0.0929983,0.5222918,-0.4436079],[0.28442153,0.50281626,0.12484341,0.087528534,0.24470627,-0.27797765,-0.6426289],[0.49003553,-0.2646059,-0.015263944,-0.0018261729,0.23279527,0.0076607405,0.69959176],[0.5684231,-0.27704594,0.45853093,-0.15373382,-0.4746461,-0.5218501,0.7240048]],"activation":"σ","dense_2_b":[[-0.03126267],[-0.10072103],[0.014238525],[-0.08748218],[-0.007306198],[-0.06704365],[-0.015472214],[-0.26747772],[-0.2887335],[-0.20642278],[-0.0904173],[-0.04132339],[-0.055377904]]},{"dense_3_W":[[0.48765612,-0.19100322,0.22134759,-0.21214958,0.017000003,-0.6330459,0.48456302,-0.56035495,-0.4338575,-0.15609962,0.17514223,0.12882961,0.2161585],[-0.2575735,0.010117811,-0.4424225,0.62049,-0.55049926,0.19114582,0.08136277,0.0047532627,-0.36334708,0.23096415,0.23023362,-0.477106,0.0447247],[-0.30809823,-0.56456196,0.18880828,-0.15554532,0.32209295,-0.39576378,0.6519796,-0.52746034,-0.43441087,-0.043550245,0.08788765,-0.019096207,0.4919662]],"activation":"identity","dense_3_b":[[0.026150323],[-0.020686748],[0.031266637]]},{"dense_4_W":[[0.8366031,-0.86834574,0.4038856]],"dense_4_b":[[0.025044668]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_OPTIMA_G4_FL.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_OPTIMA_G4_FL.json deleted file mode 100644 index a50b54aea..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_OPTIMA_G4_FL.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.072969],[1.0171603],[0.41435865],[0.03957447],[1.0044475],[1.008584],[1.0119401],[1.0073107],[0.9948095],[0.9757278],[0.95639443],[0.039412063],[0.03944304],[0.039477617],[0.03948857],[0.03934316],[0.03904568],[0.03871683]],"model_test_loss":0.00399219011887908,"input_size":18,"current_date_and_time":"2023-08-08_15-43-41","input_mean":[[24.085066],[-0.030361513],[0.01571064],[0.0007362445],[-0.03486706],[-0.033671357],[-0.032109205],[-0.027380893],[-0.02287623],[-0.021235751],[-0.01674745],[0.0006118474],[0.0006441443],[0.000670867],[0.00071249413],[0.0006996055],[0.0005505158],[0.00045551005]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.29917517],[2.1752317],[0.32517457],[-0.06200813],[0.008188257],[1.2145834],[-2.4042017]],"dense_1_W":[[-0.0036490457,-0.65203166,-3.709906,-0.16634864,1.2238234,0.1361604,0.240366,-0.0953384,-1.1778214,-0.7621931,0.9326918,-1.3709967,-0.15128233,0.2677267,0.46784538,0.9360938,0.58685464,-0.60191363],[1.0609311,0.5510001,-1.2266392,0.5077542,-0.5202491,-0.04500755,0.09848119,-0.3979558,-0.19270724,-0.5866649,0.46674842,-0.5607535,0.21799003,0.25507393,-0.1446887,-0.3699364,-0.26326817,0.43315932],[0.039737374,-0.43775582,-0.013289291,-0.05986628,0.21640529,-0.7568447,0.5309831,0.2114327,0.11197306,-0.40092763,0.14490385,-0.1755713,-0.15272588,0.46322745,-0.10017493,-0.06966308,0.32474706,-0.19110319],[-0.0077359895,-0.43185976,0.020387627,0.3265592,0.16767904,-0.9530752,0.1524309,0.20602113,0.034762584,0.45183882,-0.40128747,-0.9679819,0.09233684,0.69716626,0.0959531,0.20735793,-0.10194677,-0.14030074],[0.005168357,-0.21313071,0.020432683,0.21680814,0.47587946,-0.1672917,-0.123546526,-0.28546202,-0.004813474,-0.2626441,0.2583704,-0.83474374,-0.3071537,0.70293534,0.035514556,0.2111255,-0.03847577,0.2905034],[0.039810598,0.41122228,0.0123043675,0.21473739,-0.08381318,0.053156123,-0.22393204,-0.07659595,0.2492394,0.084608234,-0.1508309,0.27756575,0.06493508,-0.6980999,-0.10522976,0.33079267,-0.021852562,-0.09157679],[-1.0318242,0.3270962,-1.2316992,0.074966654,-0.18502301,-0.540268,0.3426544,-0.32328182,-0.15373465,-0.5543649,0.4255326,-0.54132384,0.019477716,0.59251136,-0.14564046,0.17376666,-0.41093257,0.3159194]],"activation":"σ"},{"dense_2_W":[[-0.4484687,0.33253923,-0.28966695,-0.4360591,-0.24771251,1.0544692,-0.3488148],[-0.29909408,-0.58351547,-0.3938109,-0.11950906,-0.29386395,0.45222434,-0.031188905],[-0.97125804,-0.47300208,-0.5902675,0.09844755,-0.16599008,-0.14055668,0.33186546],[0.81737274,0.7941663,0.38187075,0.057302717,-0.24998307,-0.4406886,-0.15471426],[-0.22012134,-0.4555382,-1.0191162,-0.7460106,0.0017525634,0.37398848,0.55178577],[0.6003996,-0.07378992,-0.4675678,-1.0309192,-0.51752794,0.7784243,-0.13258673],[0.22552104,-0.42843226,0.6672592,0.5094388,-0.0069568693,-0.588892,0.22089334],[-0.040460102,-0.20706566,-0.4015441,-0.049420606,-0.47037354,0.62529606,-0.3584826],[-0.15761071,-0.6566617,0.13922708,0.6777953,0.6173028,-0.5567125,0.55445105],[0.421519,0.0040071155,0.4716913,-0.402618,0.37349927,-0.79084456,0.7557055],[0.18809932,0.48851332,0.20340067,0.53080684,0.07949558,-0.32842007,-0.15802757],[0.29606518,-0.42963374,0.061094977,-0.6543071,0.17196162,0.013567186,-0.72136617],[0.27312186,0.011079551,-0.9998639,-0.99941546,-0.35501084,-0.013600225,0.5464308]],"activation":"σ","dense_2_b":[[0.13286552],[0.08703823],[-0.031739317],[-0.052825537],[0.031032594],[0.013313505],[-0.030027948],[0.14758036],[-0.17001471],[-0.3692113],[-0.033355612],[-0.051361687],[-0.11612391]]},{"dense_3_W":[[0.08565427,0.037936352,0.31202748,0.0936324,-0.3239269,0.21602823,-0.13447368,-0.25992858,0.57573473,0.22251351,0.5654894,-0.5865121,0.19499925],[-0.31933227,-0.5680997,-0.40374595,0.2146467,-0.23784715,-0.53895664,0.7452532,-0.5017336,0.32644337,0.19702537,0.4468465,-0.10311684,-0.27303612],[0.51040643,-0.20984694,-0.19069631,-0.41539454,0.4963756,0.2997042,0.44628504,0.45647708,0.13536462,-0.67746484,-0.40592772,-0.2442403,-0.14450295]],"activation":"identity","dense_3_b":[[-0.056019142],[0.060379148],[-0.009930268]]},{"dense_4_W":[[-0.04487324,-1.0755644,0.06984845]],"dense_4_b":[[-0.055896856]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SELTOS.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SELTOS.json deleted file mode 100644 index f68b17ada..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SELTOS.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.5043],[1.2473463],[0.53390634],[0.048283435],[1.2437444],[1.2446332],[1.2450808],[1.2284776],[1.2033198],[1.1706628],[1.1364652],[0.048133977],[0.048158456],[0.048181333],[0.048161115],[0.047940608],[0.047484715],[0.046831056]],"model_test_loss":0.00607825955376029,"input_size":18,"current_date_and_time":"2023-08-08_16-08-39","input_mean":[[22.575022],[0.051328536],[-0.006913471],[-0.01011988],[0.05268152],[0.05299266],[0.05207647],[0.048002362],[0.043245066],[0.03809434],[0.035212684],[-0.010153537],[-0.010121024],[-0.01008983],[-0.010034731],[-0.010037355],[-0.010153356],[-0.010373143]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.5531221],[-0.5509416],[-1.445181],[0.28771853],[0.22789262],[1.434991],[0.0080130715]],"dense_1_W":[[-0.072858766,-0.25066936,0.001488759,0.17555322,0.07657381,-0.9037761,0.3106683,0.08651254,0.067195155,0.15176873,-0.20259917,-0.21302752,0.28982407,-0.43658245,0.015916249,0.11262799,0.11793564,-0.059966978],[0.43427393,0.08093749,0.0133838765,0.1622592,0.09717405,-0.83871514,0.5765018,-0.31165177,-0.15231861,-0.16858198,0.16277543,-0.60361624,0.17700994,0.33473372,0.38939148,-0.20558326,0.45074964,-0.25900662],[-0.74159485,0.30163378,0.22673568,0.14877096,-0.47694537,0.4062525,-0.13229688,0.1764854,-0.156683,-0.07724261,0.12065852,-0.07211137,-0.008046468,0.105538025,0.03403057,-0.40424374,0.101804785,0.09886794],[0.056292683,-0.44537598,0.0066523813,-0.36948034,0.0020229202,-0.23440255,-0.1426723,0.044855885,0.21266802,-0.04769602,-0.07245297,0.095258914,0.14331557,0.06311263,-0.081638,-0.13354753,-0.10685418,0.2744694],[-0.4399394,-0.24742912,0.015261683,0.036726598,0.21024184,-0.56052953,0.2644335,0.22065622,-0.49486712,-0.22668484,0.26602116,-0.027812555,-0.26319936,0.4370143,0.30383864,0.05929112,-0.278868,0.19924623],[0.7735669,0.71460426,0.22413033,-0.16059706,-0.6686849,0.07259404,0.16731831,-0.019293515,-0.071510345,-0.132955,0.10057606,0.3232639,0.11988385,-0.38480517,-0.09152796,0.0526992,0.22566798,-0.07503419],[-0.013013475,0.9049779,4.2753534,-0.7142396,-0.40504238,-0.4914329,-0.67501336,0.25923017,1.06321,0.6865681,-0.7837867,0.6691853,-0.14117423,-0.25011092,0.2118381,-0.4131931,0.0050245565,0.23714177]],"activation":"σ"},{"dense_2_W":[[0.83081543,0.7152437,-0.9272331,-0.058508083,0.5601877,-1.0513786,0.34386688],[-0.40297586,-0.20603098,-0.02151336,0.27510563,-0.72458434,-0.33728045,-0.39708093],[-1.0368242,-0.39495397,-0.43345797,-0.44247583,-0.31836608,0.47316584,-0.5714821],[-0.57493865,0.08437657,-0.13061555,-0.76476145,0.03340725,-0.026223348,-0.12614326],[-0.55024046,-0.6168174,-0.028391553,-0.18474647,-0.26115215,0.12521398,0.35426983],[0.39255112,0.5900703,-0.22482665,0.5707256,0.5464044,-0.71590644,-0.002837547],[0.25933468,0.5432395,-0.25603205,-0.023391314,0.17869925,-0.030074507,0.05608481],[-0.40570793,-0.8749095,0.7643032,-0.95808434,-0.292604,-0.31031305,0.5525302],[-0.7991779,-0.5244842,0.7676792,-0.2169589,-0.35757715,0.3793689,-0.18556851],[0.27159563,0.47496906,-0.8455038,0.3217735,0.56621623,-0.37803704,-0.3152324],[0.34084067,0.4475718,-0.45190004,0.6034602,0.19615944,-0.74282926,-0.3698053],[-0.12877308,-0.040314443,-0.07347546,-0.022651967,-0.35362196,-0.25663686,-0.03716333],[-0.12629175,0.18490966,0.3493096,-0.12202217,-0.87659836,0.84210044,0.7154535]],"activation":"σ","dense_2_b":[[-0.37709257],[-0.36266398],[0.041201413],[-0.2759538],[-0.045757968],[-0.32502013],[-0.116910934],[-0.0555258],[0.13395292],[-0.11479294],[-0.12865],[0.0017155915],[0.03419236]]},{"dense_3_W":[[-0.21281184,0.025354605,-0.38931814,0.4332946,0.34886065,-0.5425068,-0.45385525,0.5249028,0.8241498,-0.0018914028,-0.71546686,0.37642565,0.6025195],[-0.10640655,-0.15879385,0.8035984,-0.0676657,-0.45838603,-0.16732062,-0.10961278,0.47199112,0.05652834,-0.273728,-0.5767416,-0.26667383,0.25352108],[0.2845616,-0.20691596,-0.0674403,0.26220548,-0.5230078,-0.013668718,0.14580722,0.21254358,-0.455578,0.6447261,0.39926735,-0.578386,-0.07932991]],"activation":"identity","dense_3_b":[[0.046802334],[0.06993807],[-0.054334518]]},{"dense_4_W":[[0.86223423,0.7466944,-0.5962639]],"dense_4_b":[[0.05574729]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SORENTO.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SORENTO.json deleted file mode 100644 index 7cba3a0bd..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SORENTO.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.225504],[0.9862146],[0.4786618],[0.044386055],[0.9911494],[0.98926777],[0.9868219],[0.9688941],[0.95759606],[0.945508],[0.93368983],[0.04445444],[0.044414494],[0.044370808],[0.044087693],[0.04393713],[0.04383826],[0.04361526]],"model_test_loss":0.007047169841825962,"input_size":18,"current_date_and_time":"2023-08-08_17-49-22","input_mean":[[22.136208],[0.070861906],[-0.03981052],[-0.010668343],[0.080718815],[0.07792175],[0.07505944],[0.058528677],[0.045737457],[0.03174954],[0.021063231],[-0.010688668],[-0.010692572],[-0.010689235],[-0.010696851],[-0.01084794],[-0.0111111775],[-0.011500895]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[3.4361866],[0.8604132],[3.8839195],[-0.3530098],[-0.60368276],[0.18975182],[-0.14933607]],"dense_1_W":[[1.77373,0.502524,0.0018965496,-0.110705666,0.3420213,0.22547789,-0.29762477,0.0047542676,0.14169078,0.4244286,-0.26493979,0.77021676,0.0050104316,-0.45031142,-0.0891641,-0.3238069,-0.27745253,0.43920958],[-0.4554037,0.55976075,0.0024382551,-0.52546054,-0.35694334,0.31670326,-0.42664233,0.5528438,-0.02553557,-0.25557682,0.018628456,0.5487123,0.07868527,-0.44713297,0.2761562,0.01487938,-0.19466569,0.13075072],[1.9630107,-0.8828655,-0.003229503,0.096722186,0.11981852,-0.59655976,0.20542483,-0.09582429,-0.035594583,-0.0051746666,-0.00012015179,-0.31307888,-0.4298206,0.48810238,-0.19152062,0.65658826,0.10284727,-0.3608829],[0.0509072,-0.08480384,2.396337,0.02690105,-0.36376664,0.108113885,-0.308852,0.44377556,0.45792276,0.30328622,1.0544075,0.88695085,0.12360692,-0.119185396,-0.18221413,-0.5859372,-0.31101158,0.7223309],[0.28265178,0.32164347,0.0010089057,0.030570894,-0.30268112,0.8745566,-0.7895676,-0.08777498,0.4583039,0.3052894,-0.36076066,0.817972,-0.2626141,-0.4675079,-0.3099327,0.0030562575,-0.1641152,0.23820297],[0.019067027,-0.14309163,-1.8227177,0.047291636,0.32350194,0.20237854,1.0319531,0.03287445,-0.7612191,-0.9520363,-0.2104849,0.18699706,-0.27343786,0.21203913,0.1552981,-0.075778924,0.033884183,0.004781352],[0.10389948,-0.48800257,0.0021118661,-0.07135153,0.009598374,-0.5138354,0.51288474,-0.36974624,0.07902618,0.0439172,-0.019653676,-0.36099622,-0.046752088,0.59683883,-0.17708305,0.32293355,-0.07517723,-0.042607766]],"activation":"σ"},{"dense_2_W":[[0.096298866,-0.023356602,0.24766381,-0.68317467,0.4726718,-0.31475353,-0.74931395],[-0.048710193,-0.088762455,-0.26215088,-0.68562347,-0.09474713,0.28614464,0.25585324],[0.088518575,-0.29647326,-0.5624382,-0.42151505,0.9982967,-0.40049326,-0.4974512],[0.36501676,-0.53366756,0.296159,0.35532963,-0.47745422,-0.34653178,0.71060693],[-1.2016175,-0.62754,-0.3136847,-0.11115397,-0.40962538,-0.6096405,0.84929377],[-3.0193913,-2.1009915,-0.42303616,-1.5302383,-0.37101474,1.7938634,1.6035624],[-0.5427815,0.09416961,0.18964134,-0.70530283,1.0021083,0.1920392,-0.037322704],[0.0019868647,-0.08528146,-0.067309916,0.12519653,-0.92892164,-0.20166376,0.95873517],[-0.7638899,0.35672405,-1.1621267,0.39103174,1.1349736,-0.65880626,-1.0431181],[-0.17016599,-0.42968458,-0.5383481,-0.1613195,0.84924465,0.09490495,-0.16490082],[-0.7958531,-1.0898287,-0.21342301,0.3154297,-0.662309,-0.11026381,0.43740568],[-0.21438372,-0.023171034,-2.4562607,1.4170244,1.4787751,-1.4303266,-1.7063339],[-0.8461705,-0.8368954,-0.6641428,0.07786552,-0.85198885,0.16422716,0.5509807]],"activation":"σ","dense_2_b":[[-0.04843994],[-0.11621983],[-0.15534192],[-0.1777891],[-0.13141605],[0.45782998],[-0.038693666],[0.120798975],[-0.2962059],[-0.112060666],[-0.19976714],[-0.08506511],[-0.19297417]]},{"dense_3_W":[[0.06841162,-0.38602033,-0.44655094,-0.095605254,0.09524266,1.5977386,0.055025216,0.92095596,-1.0016881,0.001653223,0.22546917,-1.4391123,0.5747701],[-0.112245455,0.27487016,0.09106065,-0.5642001,-0.3326845,-1.0173982,0.6527395,0.1291596,0.18963833,0.07579223,0.08202421,0.39516202,-0.5810091],[0.62696713,-0.4055594,0.3906188,-0.22678788,-0.6915645,-0.62307024,0.27116132,-0.23976414,0.59970427,0.59344476,-0.5686633,1.0074819,-0.6300193]],"activation":"identity","dense_3_b":[[-0.015245617],[0.021583866],[0.0017865004]]},{"dense_4_W":[[-0.4391859,0.34876132,0.45405573]],"dense_4_b":[[0.011228666]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SORENTO_4TH_GEN.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SORENTO_4TH_GEN.json deleted file mode 100644 index 36c28370c..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SORENTO_4TH_GEN.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.8233147],[0.9782015],[0.41718537],[0.035352696],[0.9691626],[0.9718523],[0.9732458],[0.9550015],[0.93631965],[0.9095138],[0.88053274],[0.035256404],[0.03528126],[0.03530267],[0.03523645],[0.03513863],[0.035011794],[0.03486604]],"model_test_loss":0.012016833759844303,"input_size":18,"current_date_and_time":"2023-08-08_16-59-47","input_mean":[[23.676199],[0.046169933],[-0.0024152591],[-0.00083978643],[0.052181892],[0.050630625],[0.049394105],[0.04861944],[0.04347715],[0.037709467],[0.029363334],[-0.00079315034],[-0.00083242205],[-0.00086724694],[-0.00093634427],[-0.0010770531],[-0.0011623197],[-0.0013536707]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.34205592],[-0.6101867],[0.025273371],[2.7362225],[-0.3362331],[-0.22314112],[-0.42840534]],"dense_1_W":[[0.70273304,-0.07699354,0.004216056,-0.049642496,-0.1173342,-0.1843091,-0.514,0.301412,0.120716415,0.14159362,-0.26860958,0.22482587,-0.22099495,0.25595915,0.07369682,-0.30280155,-0.022244852,0.19049275],[-0.31632742,0.40738678,-0.0030173576,-0.14833613,-0.5414197,0.9335088,-0.3921892,0.074954435,-0.09115997,0.2769111,-0.164147,0.14919339,-0.16596842,0.19945244,-0.38358882,0.23962471,0.037440404,-0.055190288],[0.28026038,0.53400266,0.0009745513,0.14234091,-0.017792422,0.35154557,-0.54393846,-0.041059464,0.23289026,0.2371453,-0.22173151,0.32878917,-0.34945992,-0.17935802,-0.030065529,0.05598791,-0.16419156,0.06693432],[1.0627971,-0.69044113,-2.8159893,-0.11743469,0.06090651,-0.3309259,0.61224234,0.15625772,-0.35828912,-0.20305863,0.19095968,-0.38171795,0.088828474,0.45887148,-0.2708491,0.1556519,-0.33625215,0.20122494],[0.46239635,0.53465575,2.211843,0.16536956,0.27959237,0.03331173,-0.73842824,0.19596708,-0.17479798,0.15080513,-0.030420419,-0.2798054,0.38705692,-0.3063825,0.33478513,0.013453584,-0.30902138,0.09854831],[-0.07509558,0.06009354,0.0014442373,-0.37906444,-0.18389311,0.9123579,-0.23291315,-0.098106,0.17996079,-0.38929048,0.2669226,0.37405357,0.0829103,-0.12002334,-0.082380034,-0.19149263,0.17356545,0.021014312],[0.83645344,-0.12868191,2.8339524,0.66849464,0.2345121,-0.25139904,0.62862474,-0.14285043,-0.101333186,0.18938905,0.027926499,-0.30594265,-0.25533596,0.050244536,-0.12834157,0.20466578,0.14557889,-0.25508425]],"activation":"σ"},{"dense_2_W":[[0.2385943,-1.2497817,-0.4320098,-0.69494075,-0.15682808,-0.7165265,0.33271864],[-0.5953695,-0.94797826,-0.75910956,0.15720847,0.16028434,-0.42265445,-0.06788467],[0.013007017,-0.65603364,-0.54143244,-0.18851374,-0.48472962,-0.567826,-0.21415836],[-0.12800428,0.6126203,0.48534265,-0.0439459,0.3090983,0.6686178,0.06581577],[0.086700656,-0.7233699,-0.8339351,0.57965523,-0.0795262,-0.60835373,0.6064965],[-0.16711766,-0.5194217,-0.3638064,0.0828189,-0.19742145,-0.74326986,0.32982042],[-0.60902363,-0.54570323,-0.9682073,-0.22863796,-1.0575902,-0.7974728,0.09679575],[0.65101296,0.2940795,0.91902715,-0.3448089,0.7953689,-0.01467941,0.49614373],[-1.0385482,-0.7393712,-1.3759025,0.18227631,-1.3805835,-0.31249633,-0.33556783],[0.34581456,-0.657716,-0.2713684,0.86821914,-0.16907854,-1.0973026,0.6021319],[0.06327717,-0.08374516,0.2938722,-0.21229501,-0.08540833,0.84707147,0.17620224],[-0.3019964,0.7991158,0.15228769,-0.2151937,-0.01442734,0.6086916,-0.46539715],[-0.17123166,-1.3208861,-0.53291464,-0.768727,-0.22558156,-1.1115304,0.9095279]],"activation":"σ","dense_2_b":[[0.025361877],[0.115043625],[-0.19263957],[-0.15302731],[0.16757403],[-0.13207324],[0.2047931],[-0.023633512],[0.12663384],[0.21831232],[-0.10527339],[-0.07977336],[0.16238554]]},{"dense_3_W":[[-0.6029877,-0.001360625,-0.64843386,-0.024384713,-0.31931442,-0.2223872,-0.41601577,0.40875682,-0.6390585,-0.18351403,-0.22626987,-0.16342458,-0.5330356],[-0.9919812,-0.3600715,-0.23596478,0.014639649,0.05383371,-0.0056866687,-1.0682598,0.45604205,-0.13326848,-0.33690926,0.050030075,-0.28139764,-0.4887333],[-0.035192277,0.53870684,-0.28763992,-0.64913034,0.61716443,0.020962728,0.5046917,-0.6201238,0.081873566,0.4083527,-0.44538507,-0.638268,0.28089696]],"activation":"identity","dense_3_b":[[0.05839103],[-0.06695255],[-0.039935347]]},{"dense_4_W":[[1.2304412,0.24217309,-1.3306029]],"dense_4_b":[[0.0467045]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SORENTO_HEV_4TH_GEN.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SORENTO_HEV_4TH_GEN.json deleted file mode 100644 index b3e5f0e36..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SORENTO_HEV_4TH_GEN.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.3644342],[0.84206194],[0.32837495],[0.0497152],[0.8371395],[0.8385447],[0.8395692],[0.829151],[0.8190757],[0.80348146],[0.7860103],[0.049369164],[0.04941689],[0.049452867],[0.0493644],[0.049244285],[0.04892234],[0.048490353]],"model_test_loss":0.012282345443964005,"input_size":18,"current_date_and_time":"2023-08-08_18-13-59","input_mean":[[18.745186],[0.058482915],[0.004100846],[-0.0101344995],[0.059071593],[0.060052983],[0.0608945],[0.058870878],[0.05506747],[0.051870324],[0.050613668],[-0.0101755485],[-0.010125563],[-0.010075055],[-0.010220342],[-0.010350309],[-0.01046635],[-0.010587991]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.26137024],[-0.8474335],[0.7221059],[-3.029152],[-3.0476334],[-0.50681853],[0.28089675]],"dense_1_W":[[0.118606314,0.25686783,-1.9051447,-0.7990428,-0.005979468,0.09638535,-0.8308289,0.51833004,-0.06402269,0.6971393,-0.6183026,0.6924021,0.12464697,0.043432377,-0.4148101,0.15270382,0.060744658,0.13626556],[-0.16419527,0.39643514,2.5732567,0.008115614,-0.28033996,0.43020484,-0.5210173,0.17210113,0.04305193,-0.15485092,-0.06430828,0.5110761,0.061184343,-0.39538494,-0.33624035,0.22553732,-0.36463583,0.28871256],[0.08022375,-0.1438102,2.275842,-0.34128058,-0.044324376,0.096882254,-0.010320051,0.23874547,-0.18070365,-0.08163477,-0.005464015,0.42233032,0.017914683,0.047668677,-0.22110505,-0.13801146,0.21807624,0.043199193],[-1.0983561,-1.3618904,-0.16421425,0.7119955,0.31953186,-0.022093425,-0.31532484,-0.20155048,-0.2332474,-0.5418476,0.23563766,-0.055656385,-0.3085361,0.27007875,0.12838498,-0.18988839,0.06709897,-0.1783812],[-1.1701652,1.2933975,0.1829548,-0.56762326,-0.21117829,0.32533327,-0.16175397,0.4003565,0.3450981,0.5221387,-0.26247823,-0.18100262,0.19747707,-0.020127997,-0.08322595,-0.06828175,0.17032392,0.079796456],[0.55186826,0.5894228,-0.0018529932,-0.14105065,-0.08741265,0.9153969,-0.5369019,-0.110670924,-0.1197868,-0.17400903,0.24264471,0.5258655,0.41813594,-0.97932565,-0.030922398,0.023046646,-0.2965142,0.17293993],[-0.53106797,0.6812101,0.003069036,0.013521579,-0.22647035,0.62607247,-0.21172582,-0.28151682,0.13779911,-0.18788983,0.14300823,0.5570215,-0.360614,-0.39254332,0.087255284,-0.17113407,0.00049219653,-0.022655595]],"activation":"σ"},{"dense_2_W":[[-0.5570222,-0.3558432,0.43228203,-0.69578755,-0.5209684,-0.3988039,-0.50713974],[-0.44423953,-0.5874194,-0.7323912,0.7715879,-0.41121703,-0.1318218,0.18571433],[-0.6390287,-1.387356,-0.36371973,0.9566006,0.119820826,-0.493032,0.24996151],[-0.18583159,0.6930251,0.17657615,-0.539559,0.16666687,-0.021469139,0.16992941],[-0.40057775,-0.42924806,0.31558606,-0.0009943814,-0.6159993,-0.6273195,-0.25029367],[-0.13757096,0.5006542,-0.21990159,-0.19693488,-0.39372584,-0.53963596,-1.0108879],[0.4223514,0.07548385,-0.010612892,-0.42543212,0.35533974,-0.11486922,0.89943194],[-0.16426279,0.6486941,-0.036648616,0.31983182,0.5339297,-0.086293764,-0.25488037],[0.3003831,0.17355344,0.20259908,0.3913868,-0.13287883,0.49564433,0.6325901],[-0.48450124,-0.122303,0.04608689,1.1349032,-0.7158418,-0.69535565,-0.4309579],[-0.017942823,-1.1588961,-1.7683665,0.11541567,0.7244163,-1.6989279,0.45806262],[-0.47665825,-0.6297304,0.14930177,0.03149848,-0.07129674,-0.594798,-0.27915043],[-0.69228166,0.49151105,0.71214664,-1.0289556,-0.55659735,-0.2014265,-1.69863]],"activation":"σ","dense_2_b":[[-0.24992906],[0.05137416],[-0.04471787],[-0.0656874],[0.03518997],[0.03586051],[-0.08755667],[-0.07071635],[-0.09519462],[0.38123006],[-0.14761746],[0.018471785],[-0.25193718]]},{"dense_3_W":[[0.17286126,0.5556709,0.46810713,0.4721513,-0.47047356,0.520569,-0.49622187,-0.49121454,-0.45540947,0.66542894,0.69841886,0.3982122,-0.25671947],[-0.22673589,-0.5611173,-0.089621924,0.1419429,-0.6225278,-0.1980974,0.45448488,-0.22727543,0.51839507,-0.101876915,-0.25131065,-0.25810936,-0.088802256],[0.07408502,-0.50601435,-0.07129802,0.68250656,-0.27145752,-0.33781096,0.42821127,0.10353291,0.29823735,-0.20758152,-0.16469304,-0.33839104,-0.72373396]],"activation":"identity","dense_3_b":[[-0.05540624],[0.050332494],[0.045503195]]},{"dense_4_W":[[-0.74805945,0.97596985,1.0388287]],"dense_4_b":[[0.04738765]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SPORTAGE_5TH_GEN.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SPORTAGE_5TH_GEN.json deleted file mode 100644 index e51a7bfd6..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_SPORTAGE_5TH_GEN.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.976727],[0.70075977],[0.5193822],[0.03042774],[0.69921887],[0.70013744],[0.7002965],[0.695902],[0.6933414],[0.67973745],[0.6627475],[0.030151172],[0.030225797],[0.0303137],[0.030544141],[0.03062558],[0.030789947],[0.030969843]],"model_test_loss":0.006343930959701538,"input_size":18,"current_date_and_time":"2023-08-08_19-27-16","input_mean":[[16.929798],[-0.07719816],[0.018166475],[-0.021377886],[-0.079235695],[-0.07809248],[-0.07658997],[-0.068645015],[-0.06328592],[-0.05931081],[-0.05909752],[-0.021333551],[-0.021345824],[-0.021356996],[-0.021575557],[-0.021667903],[-0.021827627],[-0.02195472]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.014880665],[-4.0546803],[4.039964],[-0.11868123],[0.15448645],[-1.107983],[1.1866902]],"dense_1_W":[[0.0020459956,0.33396527,-0.12089764,-0.09266742,-0.10447256,-0.9204386,0.6287741,-0.6056384,0.22843099,-0.036838837,0.06830062,-0.39476836,-0.25123098,0.16312656,0.52959627,0.44755596,-0.0060909246,-0.37075716],[-2.4018881,0.96303153,-0.011795681,-0.2927611,-0.56402475,0.09905826,-1.2417923,0.6909417,0.04634957,0.049870215,0.14829403,-0.24467021,0.098947786,0.60680634,-0.11770359,0.12915674,-0.28863087,0.106796],[2.4256525,1.437447,-0.012711781,0.2002033,-0.7284638,0.066629946,-1.2394707,0.30315024,0.19728456,-0.0064161224,0.16385247,-0.46458936,0.14064942,0.5783398,-0.52734655,0.12342225,-0.02771602,-0.024491971],[0.01097608,-0.027902901,-0.034374587,-0.3541097,0.5106101,0.76122844,-0.096962415,-0.6580167,-0.2428814,0.03086143,0.42839304,-0.1327025,0.22802521,0.23564328,-0.29380637,0.4714742,-0.12637857,-0.02005889],[-0.034812696,0.41839755,3.2609296,-0.42740518,-0.15298292,-0.00866209,-0.9877955,0.20124017,0.70070297,0.17947885,-0.23164096,0.28965604,-0.7283435,-0.2188886,0.7684531,0.19517736,0.2536015,-0.36128113],[-0.9371955,-0.44021863,-0.56623465,-0.32142237,0.72665215,0.002760211,1.794923,-0.5086798,-0.3332023,-0.46023577,0.28646132,0.021077845,-0.085969545,0.12202227,-0.0113952635,0.3216046,0.09244552,-0.3860546],[0.96695864,-0.30241808,0.58513,0.17075059,-0.22292358,-0.8550528,0.2879175,-0.43512177,-0.31959462,0.48480448,0.25879675,0.27618545,0.025451204,-0.122112915,-0.17442971,-0.3921672,0.06478193,0.40238667]],"activation":"σ"},{"dense_2_W":[[-0.044206314,-0.8398137,-0.64021885,-0.54042494,0.6175049,0.18352465,0.32354066],[0.43910313,-1.1964579,0.21669604,-0.65690404,-0.1722438,0.7105811,0.9846193],[-0.7918547,0.18124402,0.9972935,0.41970012,0.19829191,0.010471378,-0.43702286],[0.08539568,0.5138893,0.012154299,0.39407086,-0.2033074,0.2336377,0.07864137],[-0.57327664,1.5145365,0.055437118,0.44190773,0.09702478,-1.1895245,-0.6311017],[-0.44423488,1.5355299,0.024235807,0.16098042,0.29021573,-0.8679073,-0.9571557],[0.004154781,1.1336601,0.8133591,-0.50107414,0.031159671,0.22605118,-0.14536653],[0.007528867,-0.56511986,-0.3612175,-0.24699865,-0.3588984,0.07682657,0.65754634],[-0.23885256,0.037369203,-1.247802,-0.6006928,-0.26584128,0.70783955,0.31224442],[-0.7690314,0.500182,0.9671801,-0.31481332,0.67578256,-0.68111664,0.31868243],[0.6401129,-0.09492038,-0.6698544,-0.36198345,-0.5426654,-0.2671815,0.6592098],[0.7210531,-1.0498211,-0.22714017,-0.048228458,-0.37272957,0.26260805,0.70966876],[0.63982356,-0.29841152,-0.8246119,-0.47527993,-0.18812291,0.8096702,-0.06459521]],"activation":"σ","dense_2_b":[[-0.025994662],[0.15322399],[-0.07625017],[-0.02093097],[-0.5037285],[-0.3910864],[-0.2550051],[0.010986569],[-0.03674515],[-0.06740837],[-0.02110642],[0.203657],[-0.006955387]]},{"dense_3_W":[[0.13050179,-0.1750691,0.55030495,0.00817725,0.0064171855,0.037391666,-0.34142336,-0.3982381,-0.6864987,0.44729853,0.019040912,0.2000447,0.05393903],[-0.18140526,-0.7954796,0.4079409,0.11663361,0.7815968,0.6944582,0.29977924,0.37544534,-0.17576152,0.39384714,-0.40072137,-0.36830547,-0.2356481],[0.5863231,0.31058028,-0.7853302,-0.23653558,-0.35724676,-0.24529241,-0.29981402,0.3657695,0.7097211,-0.48353392,0.66631585,0.39028704,0.82543695]],"activation":"identity","dense_3_b":[[0.05991354],[0.027705792],[-0.10160021]]},{"dense_4_W":[[0.21156265,0.3147255,-0.69529635]],"dense_4_b":[[0.09139054]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_STINGER.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_STINGER.json deleted file mode 100644 index e902464df..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_STINGER.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.232792],[0.93400556],[0.47102702],[0.0364885],[0.9195544],[0.924241],[0.92906463],[0.92022413],[0.91261363],[0.9017492],[0.88828105],[0.036282632],[0.036326736],[0.036377504],[0.036556747],[0.03661433],[0.036583815],[0.036482345]],"model_test_loss":0.004662908613681793,"input_size":18,"current_date_and_time":"2023-08-08_21-56-04","input_mean":[[24.3614],[-0.1338536],[-0.00033556155],[-0.011434872],[-0.13066752],[-0.13287227],[-0.13457236],[-0.13018748],[-0.12908219],[-0.1285007],[-0.1288561],[-0.011373002],[-0.011407338],[-0.011437276],[-0.011411569],[-0.011443319],[-0.011484706],[-0.011544373]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.475858],[2.159764],[-0.061220553],[0.66681635],[-0.12575488],[-0.16302125],[-0.19944711]],"dense_1_W":[[1.086152,-0.8324169,-0.40090436,-0.69676965,0.07591572,-0.76153654,0.14704636,0.01003906,0.042237986,-0.13237216,0.010166433,-0.022998422,0.20724043,0.38396737,0.32619816,0.24285975,0.040859465,-0.15704209],[0.79297894,0.6081378,0.23360905,0.3370354,0.22393392,0.4906143,-0.30672908,-0.17856854,-0.25943467,-0.062457237,0.2529202,-0.0010873047,0.21262763,-0.5751331,-0.1401793,0.19357836,-0.55147094,0.32092294],[0.0029746895,-0.07445199,-0.009906404,-0.27658758,-0.3105713,1.3074434,-0.62331855,0.37446457,0.37921852,-0.076034345,-0.10986473,0.6444909,0.3060177,-0.34074512,-0.20372215,-0.4336765,-0.12278754,0.10387535],[-0.5095448,-0.72657496,-1.8959101,0.0026990066,-0.043687414,0.6157908,-0.9232839,0.5408708,0.51549035,0.19628379,-0.40704572,0.5014059,0.29025885,-0.7103715,-0.25765055,-0.30216625,0.5263961,-0.10350972],[-0.035269834,-0.043332044,-0.012723803,0.13811198,0.29201096,1.0091876,-0.8771376,0.18579352,-0.04488109,-0.17704397,0.23413378,0.19482689,0.20975055,-0.30010784,-0.35608566,-0.11924245,-0.050680783,0.22465675],[0.16372576,1.0684661,2.3885384,-0.4287634,0.70907384,0.0041387198,-1.4072537,-0.46730998,0.49696034,0.29660532,-0.27237156,0.50066346,0.015487968,-0.20723666,0.18176752,-0.10723471,-0.29568553,0.32300335],[-0.13845481,-0.49266118,-0.1540314,-0.26245895,0.5343135,-1.4516279,1.0021015,-0.034394637,-0.15333414,-0.23182547,0.20259102,-0.662138,0.034917697,1.1150106,0.17494841,-0.38734046,0.042199794,0.047024578]],"activation":"σ"},{"dense_2_W":[[0.16896504,-0.6318725,-0.24279357,-0.3490866,-0.46762058,-0.77701944,0.4309984],[0.3208485,-0.7041557,-0.71111524,-0.5957026,-0.13623692,-0.6515591,0.086047836],[-0.2776602,0.4528481,-0.17088494,-0.017503724,-0.32922515,0.08896287,0.44616765],[-0.5082411,-0.3947844,-0.3123438,-0.057989564,-0.27827948,-0.18070908,-0.18309323],[0.2809697,-0.37338483,0.65222776,-0.2953018,0.56409293,0.37588066,-0.1554319],[-0.56023234,-0.31079367,-0.08408593,0.20908839,0.10924668,-0.45463365,-0.6904562],[-0.80874884,-0.3383102,0.65157753,0.04253899,0.42724007,0.24657841,-0.5648559],[-0.3517047,-0.794073,-0.12099776,0.22774486,-0.23081534,0.2358734,0.24807717],[0.3229278,0.24695866,0.6025792,0.0022002668,0.32681346,0.54143,0.023995057],[0.45531654,0.27657107,-0.88627934,-0.57686245,-0.694657,0.27816367,0.3275702],[0.13451672,-4.2249675,-0.3837861,-0.6255863,-1.3373032,-1.6044973,3.5761082],[1.8231589,0.25132626,-0.5901763,0.246227,-1.138569,-0.8484137,1.5885205],[-0.32017943,-0.61674356,-0.49218202,-0.19713864,0.04268222,-0.5201525,-0.052188545]],"activation":"σ","dense_2_b":[[-0.052272886],[-0.11724032],[0.0015635947],[-0.00789324],[0.027887536],[-0.19823864],[-0.05784887],[-0.21397027],[0.004577288],[0.035433523],[0.12991314],[0.36998233],[-0.22823238]]},{"dense_3_W":[[0.2214185,0.117530905,0.07735763,-0.42819867,-0.40887833,0.053850636,-0.48472774,-0.2518017,-0.14455964,0.24991058,0.44975048,0.53486747,0.053818256],[0.4654577,0.13631766,-0.46057823,0.29975346,0.45944688,-0.43295076,0.47323555,0.55603576,-0.5924481,0.48736095,0.115073934,-0.056898475,-0.11687438],[-0.10070122,-0.5919317,0.3332405,-0.4515512,-0.44559675,0.47399083,-0.4619347,-0.37476748,0.5336691,0.34931633,0.3149243,0.08350989,0.5604568]],"activation":"identity","dense_3_b":[[-0.049824595],[-0.047182556],[-0.04280936]]},{"dense_4_W":[[-1.3079116,-0.3294201,-0.081988834]],"dense_4_b":[[0.051560275]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_STINGER_2022.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_STINGER_2022.json deleted file mode 100644 index 5bbf98eff..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/KIA_STINGER_2022.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.871551],[0.99076307],[0.5212804],[0.034033],[0.99273914],[0.99082446],[0.99025035],[0.97448325],[0.9654756],[0.9608115],[0.9527273],[0.033883817],[0.033910338],[0.033948522],[0.03404775],[0.03394733],[0.033679023],[0.033345345]],"model_test_loss":0.004427366424351931,"input_size":18,"current_date_and_time":"2023-08-08_20-41-47","input_mean":[[18.534761],[-0.107549384],[0.0060349857],[-0.004051211],[-0.10914043],[-0.109205954],[-0.10822495],[-0.1059477],[-0.10361664],[-0.10045632],[-0.105254054],[-0.0040303078],[-0.0040611844],[-0.0040791193],[-0.0039875545],[-0.003919938],[-0.0038113499],[-0.0038577982]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.10420359],[-0.1057817],[-0.39223936],[-2.3496768],[-0.28235236],[-2.4502673],[0.03921215]],"dense_1_W":[[0.074189,-0.46536532,1.0744638,-0.0955078,0.28618422,-0.7533586,0.43112066,-0.16309841,0.008819428,0.3651173,0.16028656,-0.111217655,-0.09443299,0.6007408,-0.26957542,0.0102762515,-0.211533,0.20011066],[0.01304878,-1.1999677,0.018503658,-0.372737,0.6353846,0.8292781,0.1719466,0.035132185,-0.10863397,0.08928544,0.19234443,0.36751947,0.06552409,0.09331779,-0.00076240604,-0.45366123,-0.218846,0.31527466],[0.01300137,-0.41192222,-0.25047097,0.6152148,0.2306633,-0.38328096,-0.5728854,-0.49195603,-0.593413,0.16746691,-0.19081128,0.9538493,1.0308561,0.66020083,1.0559919,0.5171979,0.52770406,-0.3480374],[-0.7787808,-0.008312755,-0.1780567,-0.48370415,0.35223204,-0.5498642,0.29583552,-0.7346698,0.10713884,-0.1704408,0.11306947,-0.02356725,0.21382311,-0.17346635,0.5998714,-0.07053526,-0.09073403,0.092191376],[0.012029196,0.011908107,-0.2484767,1.264593,-0.85373944,-0.26193362,-0.660338,0.74062943,-0.28554145,-0.702825,-0.16722941,0.46179152,0.9958684,1.0726779,0.44082853,0.5114168,0.29967558,-0.1432011],[-0.76869935,0.34115568,0.17525065,0.15999442,-0.49437794,0.87348694,-0.5276255,0.17559843,0.17176434,0.18722947,-0.12719314,0.17408907,0.051208638,-0.14185886,-0.4593266,0.11995127,0.20499156,-0.1721416],[-0.04674022,-0.38118473,-1.4628186,-0.047094345,0.7261122,-0.046270296,0.81954944,-0.19116434,-0.5375223,-0.33290347,0.15070404,0.02437715,0.10229408,0.08374787,-0.0230739,-0.4579543,0.19219628,0.0668545]],"activation":"σ"},{"dense_2_W":[[0.14351524,-0.46819293,-0.4224769,-0.00477388,-0.019241339,-0.293288,-0.1430304],[0.013082477,-0.26986554,-0.13183518,-0.019898584,0.26537928,0.006188077,0.11345527],[0.7385166,-0.95441747,0.025136676,0.2132236,0.18503574,-1.2178441,0.01919843],[-0.2702514,-0.11104125,-0.62654877,-0.5112985,-0.38709098,-0.28173804,-0.08601629],[0.6713761,-0.22839609,-0.06097961,0.58245105,-0.6278035,-0.72068113,0.45237026],[-0.15852696,0.64257956,-0.55724066,0.21575698,0.22704268,0.6273873,0.011703053],[0.2014989,0.5201913,0.0019037927,-0.26834032,0.3011644,0.3858986,-0.528807],[0.46606636,-0.7134467,-0.048275437,1.742678,-0.4659715,-0.6684311,-0.139159],[0.15509929,-0.30987412,0.30098167,0.29494023,-0.37981874,-0.5524831,0.48631984],[0.14930598,0.34096712,-0.40304628,-0.4632963,0.04036466,0.5767117,-0.5780966],[0.31667084,-0.6918976,-0.00022687673,0.6150214,-0.45327514,-0.47609383,0.52913016],[0.246736,-0.3391219,0.104266286,-0.5017469,-0.018542334,0.12372901,-0.40627465],[-0.3095181,-0.40006125,-0.012567477,0.85648316,-0.17277096,-0.6989313,-0.0026190844]],"activation":"σ","dense_2_b":[[-0.31950915],[0.013885399],[-0.11509819],[0.0267938],[-0.018023722],[-0.012910115],[-0.027250042],[0.14641029],[-0.038134225],[-0.025109382],[-0.07372913],[-0.010580315],[-0.11711807]]},{"dense_3_W":[[0.20788044,0.033924606,-0.49926776,0.60941577,0.01432724,0.5210565,0.4180843,-0.25332364,-0.57750213,0.44128165,-0.3681372,0.36565867,-0.42293212],[-0.41391054,0.49958703,-0.41073647,0.074788004,-0.42877886,-0.39288726,0.07698003,0.2999807,-0.5140176,-0.23761888,-0.041945565,-0.54366297,0.10134992],[-0.06092816,-0.03296278,-0.10772118,-0.49357474,0.4073531,-0.56182015,-0.27668962,0.4813049,0.43785417,-0.38696533,0.3007674,-0.30370563,0.076707035]],"activation":"identity","dense_3_b":[[0.042803183],[0.06512138],[-0.045637704]]},{"dense_4_W":[[0.67749745,0.58833116,-1.2096345]],"dense_4_b":[[0.04982903]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_ES_TSS2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_ES_TSS2.json deleted file mode 100644 index 57e7e301d..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_ES_TSS2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.041581],[1.1167691],[0.37027505],[0.04339891],[1.1085886],[1.1118982],[1.1143059],[1.1035876],[1.0856115],[1.0586617],[1.030805],[0.04334689],[0.043362875],[0.043374643],[0.04328665],[0.04312567],[0.04288237],[0.04255028]],"model_test_loss":0.00914697628468275,"input_size":18,"current_date_and_time":"2023-08-09_00-04-02","input_mean":[[24.044405],[-0.004445901],[0.0057743173],[-0.0008446529],[-0.0052520004],[-0.0049055307],[-0.004310624],[-0.0021481782],[-0.0005770088],[0.0025430974],[0.005762188],[-0.0008080605],[-0.00082908414],[-0.0008470768],[-0.0009064238],[-0.0009857891],[-0.0010071733],[-0.0010139564]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.3401184],[-4.1053653],[-0.010608114],[0.2289179],[-0.69536865],[-0.2987435],[-0.28003243]],"dense_1_W":[[1.7534523,-0.08379865,0.21821876,-0.111209184,0.18547846,0.70984817,-0.7669529,0.01540298,0.34365195,0.024990361,0.25576633,-0.04872505,0.058915216,-0.199681,-0.08895335,0.5293662,0.3860833,-0.47484013],[-1.6871309,-0.09608493,0.21602522,-0.25279704,0.15465249,0.53819185,-0.40238786,-0.01616075,0.06256271,0.22947508,0.23026761,0.24505456,0.014156367,-0.39275125,-0.00928132,0.6701992,0.068403155,-0.3019433],[0.004725199,-0.4235836,0.0013364913,0.15324596,0.42727017,-0.5808631,0.26156494,-0.20967181,-0.15404399,-0.09115835,0.18597606,-0.24034514,0.07084023,0.07770485,0.18210891,0.39121026,0.31440163,-0.5783728],[-0.19552681,-0.41310206,0.000722477,-0.0605445,0.701027,-1.3483342,0.5252242,-0.04271466,-0.11926105,0.18295698,-0.06785281,-0.47475234,-0.4607312,0.5883256,0.5187908,0.114911854,-0.25203437,0.08746814],[0.4152751,-0.14281093,0.7790405,-0.100202,0.28926933,-0.3125703,0.13834746,-0.3347568,0.43060276,0.55356705,-0.1735469,-0.11919702,-0.020521542,0.46576738,-0.06227651,0.036938347,-0.5694443,0.35215282],[0.3015953,-0.66961235,0.0007066811,0.419904,0.31045586,-0.9015735,0.7159605,-0.13024196,0.19127548,-0.18470418,0.06677055,-0.77706313,0.2998383,0.42251042,-0.21567652,-0.38658017,0.039470255,0.2681703],[-0.034314536,-1.076988,-3.4866838,-0.06330224,0.97281605,0.28214806,0.5845572,-0.5232068,-0.82733965,-0.2174799,0.6705298,-0.90485686,-0.048824865,0.40581775,0.6931158,0.17884906,0.25361615,-0.51271003]],"activation":"σ"},{"dense_2_W":[[-0.31351262,-0.32074958,0.8266476,0.8546215,0.3378021,-0.06759033,-0.46708575],[-0.8333776,-0.28922173,0.16795295,0.98310614,0.114590034,0.58432436,-0.13839144],[-0.6834294,-0.23853575,0.6451696,0.105569854,0.27903724,0.41774848,0.29000074],[-0.65618104,-0.20165549,-0.09106172,0.8227704,-0.23443276,0.53824764,0.47971424],[0.6953251,1.2419958,-0.79052114,-1.2340282,0.18634371,-0.6665756,0.107695915],[0.14654803,-0.19937792,-0.34062067,-0.7089461,0.40067112,-0.52197015,-0.085414894],[-0.2932009,2.5196638,-0.104791835,0.20051786,-2.2182112,-0.29118708,-2.7579544],[1.5122235,0.7356845,-0.89097416,-1.6861671,-0.033902757,-0.38292047,-0.13017933],[0.4886302,0.92094517,-0.91408855,-0.3532557,0.51951903,-0.95678043,-0.10919232],[-0.5293851,-0.20095,0.6889325,0.38757306,-0.377088,0.58944535,0.0955727],[-0.4349411,0.17035034,-0.15226962,-0.32203415,0.0838514,-0.059919562,0.04385721],[-0.26080495,-0.63391984,0.3301537,-0.1671539,-0.5050505,0.43088788,0.14715135],[0.45397362,0.3551525,-0.8346096,-0.65694994,-0.13430665,-0.31082925,-0.24663672]],"activation":"σ","dense_2_b":[[-0.15302955],[-0.15477453],[-0.1963815],[-0.2491886],[0.30184123],[-0.084158726],[-0.49648997],[0.67838836],[0.30030432],[-0.28645435],[-0.19416146],[-0.12059393],[0.36774662]]},{"dense_3_W":[[-0.30843228,-0.1345852,0.11176096,-0.5151945,0.29644585,0.12701263,0.0053969924,0.5684098,0.42676082,-0.370609,-0.16872759,-0.4540934,0.006954758],[0.43918204,0.6085673,0.51018596,0.6114487,-0.4061561,-0.1493339,-0.8047057,-0.18715277,-0.6292988,0.57502186,-0.1399395,-0.07194364,-0.8415874],[-0.39917964,0.53317773,-0.4621838,-0.015575044,0.50181717,-0.4820892,0.09182787,0.31296906,-0.39892152,-0.06316368,0.0068018823,0.37321454,-0.22843313]],"activation":"identity","dense_3_b":[[0.09777908],[-0.097871915],[0.098439135]]},{"dense_4_W":[[0.66679657,-0.8622704,0.007841214]],"dense_4_b":[[0.10087897]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_IS.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_IS.json deleted file mode 100644 index 322201260..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_IS.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.9971128],[1.0977883],[0.45730543],[0.04923891],[1.089019],[1.0908507],[1.0933481],[1.0831064],[1.0687581],[1.0477011],[1.0263152],[0.04910758],[0.04913805],[0.04915577],[0.04904069],[0.0488613],[0.048416592],[0.047898013]],"model_test_loss":0.0029971429612487555,"input_size":18,"current_date_and_time":"2023-08-09_04-46-36","input_mean":[[28.262257],[0.00053741777],[0.007980467],[0.0073362947],[-0.002916855],[-0.0013664461],[0.00021708602],[0.0032231822],[0.007565537],[0.010730909],[0.014714129],[0.007122549],[0.0071928487],[0.0072572897],[0.007378812],[0.007430641],[0.007424608],[0.0074211424]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.13015555],[0.037057668],[-0.23104249],[0.32127166],[-0.1253072],[-0.6277245],[-0.1822209]],"dense_1_W":[[0.0022739936,0.15201275,-0.018758008,0.15420967,-0.6103832,1.253523,-0.6429536,-0.095406406,0.457949,-0.061857425,-0.09967628,0.34019652,-0.0124527775,-0.46103212,-0.41929677,0.31853652,-0.3198645,0.26396248],[0.016219854,0.2708034,-0.1250583,-0.3348056,-0.83736426,0.3921742,-0.35075605,0.30172172,0.24997391,0.45135334,-0.43142125,0.22985688,-0.40631214,-0.111362845,-0.5208431,0.004493165,0.4684426,0.6794704],[0.018668292,-1.0140254,-3.2794235,0.15160404,0.028701765,0.23249008,-0.1426395,0.43393394,-0.07807302,0.5009389,0.17505689,-0.7776797,-0.038091138,0.7018249,-0.21396264,0.011046297,0.13001016,-0.10944152],[0.3585128,-0.14987485,-0.13354455,-0.004226716,0.24764334,-0.858648,-0.007176733,-0.046182733,0.1446194,0.14181069,-0.1651582,-0.2749394,0.70667934,0.37523896,-0.2320659,-0.2591826,-0.20168015,0.28267252],[0.26727927,-0.41644073,-0.05738287,-0.011317095,0.4693145,-1.0781763,0.47786325,0.13199824,-0.1208562,-0.16208106,0.18948868,-1.007483,-0.48438329,0.07924176,0.80360824,0.66245914,0.16595826,-0.23646787],[-0.5315527,-0.023200141,-0.14639618,-0.2272303,0.064140245,-0.9595354,0.4488574,-0.16073947,-0.10355826,-0.061561897,0.069149286,-0.40911204,0.44534415,0.50131905,0.32962856,-0.22854826,0.1118126,-0.10387003],[0.45086104,0.62962455,0.05797986,-0.27834865,-0.03647285,0.58516073,-0.50903237,0.31138107,-0.46869588,-0.109248996,0.1444298,0.6807234,0.24872255,0.33425596,-0.46959794,-0.30864963,0.083699554,-0.24581586]],"activation":"σ"},{"dense_2_W":[[-0.47314742,0.30918634,0.6835903,0.33214816,0.41032484,-0.2974307,0.48068962],[-0.44719142,-0.3584287,-0.42897063,-0.0863155,0.32148045,-0.37775746,-0.35045746],[0.10737237,-0.107548736,0.40882415,-0.37991515,-0.35765076,0.6178046,-0.6659961],[0.5089876,-0.0018523282,0.47517067,-0.4635432,-0.51244944,-0.7637346,0.111460224],[0.009865635,-0.3599542,-0.08200983,-0.8016887,0.049183395,-0.55783385,-0.4132886],[0.21302545,0.24237937,0.2559324,-0.37488487,-0.8143479,-0.034766164,0.63836616],[0.06948995,0.5238659,-0.5756278,-0.34593225,-0.31828138,0.020820161,0.8075781],[0.264537,0.35211742,-0.2987492,-0.68384147,-0.37824905,0.12441704,-0.027348615],[0.18194555,-0.2742205,-0.7859905,-0.45490405,-0.6359722,0.30547658,-0.40839928],[-0.27246395,0.3188016,-0.6105616,-0.93436897,-0.120215744,0.019431151,-0.5015701],[-0.29636648,-0.44186333,-0.34854856,0.44886306,0.5337103,0.5365127,-0.5632916],[-0.24954297,-0.22443992,-0.15179092,0.51437247,0.24013738,0.43259284,-0.70645374],[0.4928545,0.18550447,0.22762263,0.29510337,0.3720493,0.37416783,-0.3423796]],"activation":"σ","dense_2_b":[[0.01935374],[0.0050131385],[-0.05235093],[0.046759594],[-0.12632822],[-0.027490286],[-0.024787772],[-0.044414002],[-0.123556636],[-0.14718735],[0.005641118],[-0.084211506],[-0.06420933]]},{"dense_3_W":[[-0.21112725,0.09418867,-0.44935966,0.3675701,-0.24375933,0.5796755,0.3944582,0.37292123,0.102567196,0.10260466,0.12603773,-0.6052102,-0.4585192],[0.033743866,-0.039306644,0.35334656,-0.42215514,-0.05132556,0.31450647,-0.30604413,0.12684399,-0.30334032,0.5066069,0.2883161,0.018579826,0.19727296],[0.5773127,0.44458362,0.37894127,-0.67509955,-0.4648014,-0.3175859,0.25752234,-0.57122767,-0.052177746,-0.57985467,0.56134444,-0.38693938,-0.35289878]],"activation":"identity","dense_3_b":[[-0.019124614],[0.012149713],[0.02416865]]},{"dense_4_W":[[0.85411745,-0.44846243,-0.8711393]],"dense_4_b":[[-0.020497099]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_NX.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_NX.json deleted file mode 100644 index 7c13f097e..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_NX.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.6509843],[1.0640727],[0.43305442],[0.042583644],[1.0586958],[1.0597517],[1.0615927],[1.0452577],[1.0264294],[1.0022012],[0.97949535],[0.04246772],[0.042485926],[0.04249534],[0.042220093],[0.041864526],[0.041366912],[0.04084527]],"model_test_loss":0.009465457871556282,"input_size":18,"current_date_and_time":"2023-08-09_06-52-11","input_mean":[[24.357443],[-0.034125097],[-0.0049536517],[-0.011872438],[-0.03119763],[-0.03166454],[-0.03223406],[-0.03186475],[-0.030950857],[-0.030095048],[-0.03235388],[-0.011925372],[-0.011901585],[-0.01188047],[-0.011727326],[-0.011680916],[-0.011658311],[-0.01185102]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.1033378],[-0.26196438],[0.64087105],[0.0723818],[-0.033235934],[0.4940777],[-0.6624133]],"dense_1_W":[[0.17036144,0.70846754,-0.01288402,-0.31765887,-0.055238843,1.4783168,-1.0382427,0.09412714,-0.042508673,0.088409066,0.06366592,0.51934177,-0.2507901,-0.029035429,-0.40638945,0.18454157,-0.10026727,0.011903059],[0.0059481994,-0.4173155,-0.025032401,-0.17385283,0.42768398,-0.86849064,0.4772952,-0.28207323,0.45553952,-0.16625436,0.024320044,-0.3186513,0.04276512,0.058902144,0.67383,-0.41462952,0.32956126,-0.20091176],[0.50393635,-0.34078136,-1.1108505,-0.15240273,-0.34397945,-0.1046281,0.93492657,-0.0046718954,-0.35346282,0.18444361,0.09232944,-0.04991994,-0.43069664,0.04396726,0.5247936,0.38054457,-0.15464556,-0.072698794],[0.06292795,-0.49206024,1.0766574,0.3604547,0.33866602,-0.6243087,1.1562465,-0.22390123,-0.5481248,-0.046518486,0.25936723,-0.6421865,-0.103222616,0.3717842,0.18865198,0.22381376,-0.36329344,-0.12459951],[-0.018098533,1.1626849,7.7763515,0.3133824,-0.5978771,-0.6280122,-0.19266517,0.024776168,0.88816226,0.1488128,-0.4072811,0.8084272,0.2971273,-0.16158436,-0.36504307,-0.34449837,-0.5314731,-0.119041726],[0.12846576,-0.35670948,0.013853135,-0.075688206,0.18726085,-1.3245617,0.4279662,0.061345413,-0.11054695,-0.14311172,-0.0014835523,0.022838874,-0.11576593,0.39926448,-0.14371544,0.15646,0.11126016,0.03145696],[-0.31940654,0.05947834,-1.0866358,0.5663338,0.448577,-0.43552175,0.23205471,-0.35897624,-0.33488578,0.52830327,-0.011136929,-0.5225207,-0.56818086,0.44197837,0.20225807,0.1941536,-0.29525572,0.063295834]],"activation":"σ"},{"dense_2_W":[[-0.086325355,0.8016826,0.24832225,0.47240105,-0.46999067,0.6068118,-0.14119844],[-0.5582966,0.27016947,0.4639829,0.59999377,-0.37201896,0.7842096,0.28597522],[-0.27619955,-0.5730724,0.12383269,-0.3039288,0.123326324,-0.649525,-0.17117126],[1.4408953,-0.55869764,0.48217335,-0.18616202,1.0840948,0.16935517,-1.398959],[-0.66845334,-0.04818159,-0.3074986,-0.14507903,-0.382395,-0.22019714,-0.91304696],[-0.26608887,-0.5060071,-0.97440034,-0.35025296,0.8698175,-1.1775255,-0.030318461],[0.10986321,-0.8288251,-0.44233164,-0.3325045,0.2556111,-0.43471605,-0.35890812],[-0.1694278,0.047042966,-0.050367933,0.055317376,0.088589475,0.6182619,0.57370675],[0.93917805,-0.7993694,-0.21087216,-0.54964507,-0.060357884,-0.63951623,-0.236041],[0.40430954,-0.37087506,0.17056553,-0.9355302,0.12229527,-0.18960477,-0.10435068],[-0.05200265,-0.4987538,-0.31892672,-0.6532706,-0.6485076,-0.49172983,-0.77469736],[0.03723317,-0.48895985,-1.6575545,-0.027954731,0.53395647,-0.40768418,-0.80457896],[0.83523464,-0.9624459,0.10569231,-0.15287304,-0.58598167,-0.73237014,-0.28460762]],"activation":"σ","dense_2_b":[[0.02828117],[-0.05488203],[-0.27607742],[0.3004205],[-0.25380412],[-0.24068235],[-0.21541698],[-0.01097173],[0.21617699],[-0.081049286],[-0.12033645],[0.026889555],[0.32255155]]},{"dense_3_W":[[0.61514294,0.52475756,-0.3778977,-0.5686912,-0.56705767,-0.29328373,-0.14644307,0.5718381,-0.41984692,-0.19014074,-0.59977704,-0.64661556,-0.06085831],[-0.004403978,0.6136505,0.26742232,-0.14778873,0.28366107,0.0020191541,-0.17208292,0.33170637,-0.48983493,-0.3504383,0.26020375,0.0004651127,-0.8777239],[-0.25540027,-0.14768086,0.0147348475,0.34739557,-0.5552034,0.33083212,-0.25017375,-0.46695128,0.2878471,0.41177458,0.16511062,-0.06707549,0.49898487]],"activation":"identity","dense_3_b":[[0.062096752],[0.050615054],[-0.043884374]]},{"dense_4_W":[[-0.82545334,-0.75625134,0.20575939]],"dense_4_b":[[-0.053638227]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_NX_TSS2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_NX_TSS2.json deleted file mode 100644 index 99ea2be6b..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_NX_TSS2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.147084],[1.086054],[0.37127572],[0.041630004],[1.0729798],[1.0772483],[1.0815692],[1.0805902],[1.0708296],[1.0535992],[1.0337878],[0.041566238],[0.041577842],[0.041586876],[0.04155611],[0.04150528],[0.041361168],[0.041143257]],"model_test_loss":0.0067100683227181435,"input_size":18,"current_date_and_time":"2023-08-09_08-07-39","input_mean":[[24.872166],[0.003932426],[-0.010966269],[-0.008132051],[0.0087015005],[0.0073090056],[0.0060250014],[0.0013043662],[0.0013662752],[0.0015136959],[0.0025651027],[-0.00813054],[-0.008112211],[-0.008098942],[-0.008128093],[-0.008089364],[-0.008116192],[-0.0082015265]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.9054255],[-0.28507137],[1.4240875],[0.02306676],[1.52593],[0.051342566],[-0.1610418]],"dense_1_W":[[-1.2814169,0.04502527,-0.24452247,-0.04534104,-0.22521678,0.12426732,-0.5100604,-0.1931805,-0.1757783,-0.71891594,0.26680607,0.33749202,-0.23968601,-0.4898723,0.4347295,-0.16316435,0.25191417,-0.040637583],[0.026426677,-0.5180133,-0.054280188,0.2787388,0.11506753,-0.7289032,1.0191976,-0.20389938,-0.12718956,-0.012505079,0.11661954,-0.20947376,-0.33647072,0.08544779,0.09467619,0.33146363,-0.09642059,-0.12805226],[0.4297043,-0.01532184,0.17760155,-0.11004306,-0.32989568,1.2537458,-0.2505036,-0.0105941985,-0.011504197,0.4410887,0.0021856735,-0.005641636,0.29666585,-0.013274171,-0.13881417,-0.022560775,-0.034353882,-0.016772056],[0.115859054,-0.69582313,0.008139212,0.10011219,0.35110396,-0.4720546,0.5779868,-0.2903919,-0.21940863,0.0279369,0.17058563,-0.69917786,0.3002438,0.18366155,0.35467052,0.10840391,-0.17159945,0.018160818],[0.22031884,-0.7193572,-0.18843435,0.09803419,0.3082459,-0.81420296,0.3980327,-0.044523235,0.05807009,-0.26365182,-0.07507196,-0.40902695,-0.13396262,0.41380468,0.18925877,-0.30483818,0.19883342,0.001749679],[0.17746796,0.81731343,-0.008930264,-0.34225407,-0.5971375,0.803859,-0.56055987,0.22442165,0.043888506,-0.28582388,0.07147745,0.6224109,0.025271881,-0.21175076,-0.3498934,0.1339036,-0.2896505,0.22109397],[-0.045657806,-0.7590582,-6.4479246,-0.38063437,0.36719322,0.23610972,-0.21581803,-0.29967567,-0.2673017,-0.34047002,0.9861421,-0.6061893,-0.1955559,0.54208314,0.6973659,0.06787787,0.08896528,-0.23932248]],"activation":"σ"},{"dense_2_W":[[-0.20833433,0.61933535,-0.800919,0.22723371,-0.090565115,-0.7945698,-0.13987784],[0.28559738,0.26079953,-0.15632679,-0.12129952,-0.289886,-0.21938595,-0.14360459],[0.95100516,0.07814724,0.0031976546,-0.75894195,-0.94153005,-0.7928424,-1.4411982],[-0.42705938,-0.8987026,0.06752999,-0.8046098,-0.51792544,-0.42536137,0.09767677],[0.19683614,-0.36086804,-0.014388864,-0.76707953,-0.8514832,0.26960486,-0.21758303],[-0.17587733,-0.5193636,-0.13756172,-0.44829637,-0.65762174,0.29082942,-0.008277407],[-0.3183399,-0.1665803,1.2876375,-0.0728533,0.30167028,1.2605048,-0.57462007],[0.3546879,0.35146946,-0.56283337,0.6228679,0.5594427,-0.19124825,-0.5252673],[-0.00087872695,-0.73673224,0.26480362,-0.72668016,-0.4297641,0.3408679,0.43822297],[-0.6492434,-0.5402448,-0.056282554,-0.08095678,-0.24393153,-0.7988477,-0.1693451],[-0.47922924,0.30153432,-0.7007562,0.39001682,0.10440299,-0.5656516,0.30876267],[0.9030477,-0.75241685,0.30403712,-1.1863935,-1.5607433,-0.5210042,-1.2099376],[0.09520087,-0.024397036,1.1286579,-0.4269453,0.06613633,1.022576,-0.42460024]],"activation":"σ","dense_2_b":[[0.068604216],[-0.07214453],[-0.23128065],[-0.11810941],[-0.113441095],[-0.066630945],[0.14084376],[-0.0044738725],[-0.22459178],[-0.2939405],[-0.04563305],[-0.05732056],[0.122370996]]},{"dense_3_W":[[0.37704808,0.6223934,-0.46660277,0.2654992,0.20017228,-0.33366653,-0.24672645,-0.32106653,0.56422967,-0.13366485,0.15189694,-0.2369768,-0.14679962],[-0.733396,-0.48898083,-0.3152747,0.08094783,0.33034948,0.599701,-0.27930403,-0.5709238,0.5841461,-0.06343237,-0.35778514,0.12911445,0.2698867],[-0.030497754,0.38693696,0.59045714,0.39527935,0.27385178,0.100422375,0.50604045,-0.398048,-0.12326097,0.0054453975,-0.7562181,0.5377892,0.3636564]],"activation":"identity","dense_3_b":[[0.038279504],[-0.05277531],[-0.07727225]]},{"dense_4_W":[[-0.21258786,0.8358761,1.1302456]],"dense_4_b":[[-0.062789865]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_RX.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_RX.json deleted file mode 100644 index 254191864..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_RX.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.006951],[1.0661907],[0.4208536],[0.040620446],[1.0632395],[1.063527],[1.0637337],[1.0418845],[1.0213413],[0.9960982],[0.9659563],[0.04054981],[0.04057159],[0.04058309],[0.04049591],[0.040372174],[0.04013236],[0.039733175]],"model_test_loss":0.014225631952285767,"input_size":18,"current_date_and_time":"2023-08-09_14-33-01","input_mean":[[25.177166],[-0.026529262],[0.009477891],[0.0017629279],[-0.028283715],[-0.027773762],[-0.02699433],[-0.023891538],[-0.02269541],[-0.020438392],[-0.017402157],[0.0018114187],[0.0018036948],[0.0017961235],[0.0018093524],[0.0017814242],[0.0017387652],[0.0016870175]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.3488934],[-0.25318402],[1.3796363],[-2.4763696],[0.17862964],[-2.581063],[0.0374099]],"dense_1_W":[[-1.9565458,0.43680963,0.06587548,0.042409927,0.3682261,-0.32550198,0.3935391,0.34101823,-0.19819863,-0.09118507,0.072811775,-0.55412966,0.22973019,0.5704431,0.10271992,0.10906355,0.18409586,-0.25245637],[0.010017396,-0.23327492,-0.025723774,-0.06732227,-0.1377613,-0.9790948,1.1363516,-0.004057807,-0.09313964,0.054035064,-0.04986635,-0.6889519,-0.43221784,0.85702723,0.469375,0.3359073,0.1845464,-0.47437343],[2.133775,0.8436303,0.06543569,-0.19301523,0.7682015,-0.71488863,0.44514364,0.121126205,-0.5451813,-0.23265283,0.36209187,-0.10944904,-0.10013678,0.8461928,0.47840348,-0.4829053,-0.15971945,0.19538315],[-0.762671,0.8158483,0.11918508,0.11182312,0.045061667,0.5209565,-0.017836645,0.19029039,0.05993828,0.14132203,-0.14783566,0.21835268,-0.37212574,0.021008398,-0.07471657,0.23310561,0.30849415,-0.32095852],[0.012362058,1.1697396,4.896626,-0.6752607,-1.293956,-0.6969285,-1.2943544,0.48185518,1.9836872,0.80383307,-0.67689174,1.464715,1.0810806,-0.6226654,0.5317476,-0.97188056,-0.93535984,-0.07797605],[-0.76108575,-0.96115094,-0.12517042,-0.023074046,0.21048824,-1.0002247,0.1298013,0.017577004,-0.04171292,-0.13762209,0.09954114,-0.4320813,0.051972903,0.5637555,-0.20373943,-0.0645255,-0.17654338,0.17915705],[0.012589448,-1.178468,0.16960609,-0.042218912,-0.313776,-1.1033659,-0.3083642,0.04046465,-0.69654006,-0.5194823,0.22638294,-0.115158446,0.1719876,0.6620813,-0.27977157,-0.6041283,-0.16925894,0.5477763]],"activation":"σ"},{"dense_2_W":[[0.2714706,0.59053195,-0.0041459124,-0.41285,-0.3072934,0.30405983,0.29765671],[-0.05261304,0.61104286,0.083263226,-0.2729422,-0.15758975,0.3245751,0.08180204],[0.11750135,-0.9169556,0.16402717,-0.47221494,0.013237812,-0.9444454,0.07540947],[0.14767434,-0.2879568,-0.23108272,0.41553706,-0.022354566,-0.7293346,-0.44255376],[0.30335668,0.37456387,0.3885767,-0.7781797,0.03455829,0.701339,-0.088443086],[-0.1726601,-0.85276175,-0.42082515,1.3459167,0.014372793,-1.1087767,0.25560606],[-0.22434108,-0.61502177,-0.77391124,0.58211446,0.70793843,-0.44423535,-0.10059737],[-0.24011742,-1.1389203,0.13803475,0.5802644,0.4245233,-0.4964158,-0.06763477],[0.17082813,0.26018152,0.2441558,-0.798921,-0.34764507,0.53820854,0.4687339],[-0.142942,0.1200522,-0.2755005,-0.44287127,0.12139864,0.7061747,0.30685058],[0.26870826,0.27511376,0.013270598,-0.38270554,-0.25317055,0.5880916,0.38201085],[-0.51288533,-0.74000406,0.041218568,0.23942995,-0.61270565,-0.35922202,-0.41015244],[-0.31531772,-0.6721873,-0.0041211997,0.44185337,0.094147496,-0.532301,-0.09608283]],"activation":"σ","dense_2_b":[[-0.13420725],[-0.006237683],[-0.29298192],[-0.16996942],[-0.24118775],[0.39525142],[0.12012915],[0.079633266],[-0.14625302],[0.017826455],[-0.25199854],[0.08497193],[0.11287382]]},{"dense_3_W":[[0.3236856,-0.11585646,0.37450194,-0.3883134,-0.12542132,0.117089026,-0.33960536,-0.51633084,0.15317307,-0.46796653,0.22769703,0.14106414,0.37199378],[-0.46536645,-0.21581124,0.21901791,0.11581306,0.0037904275,0.20201044,0.76395154,0.2692143,-0.08054871,0.3889979,0.13807094,0.58494323,0.6641779],[-0.31520608,-0.5903212,-0.0585899,0.1499463,-0.49658206,0.3555356,0.734374,0.46968886,-0.6641194,-0.6121126,-0.57470906,0.48789984,0.46722496]],"activation":"identity","dense_3_b":[[-0.010275512],[-0.05716576],[-0.03483528]]},{"dense_4_W":[[0.05533481,0.9485316,1.0639691]],"dense_4_b":[[-0.04380799]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_RX_TSS2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_RX_TSS2.json deleted file mode 100644 index 4912d86a0..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/LEXUS_RX_TSS2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.48588],[0.9537726],[0.36582693],[0.043554034],[0.9464909],[0.94813603],[0.94916946],[0.9368726],[0.9235678],[0.90086037],[0.8777369],[0.043447778],[0.043471374],[0.043487635],[0.043498106],[0.043457054],[0.043319046],[0.043142088]],"model_test_loss":0.01665860041975975,"input_size":18,"current_date_and_time":"2023-08-09_17-03-58","input_mean":[[23.708097],[0.018138325],[0.0074228332],[-0.009125995],[0.016877966],[0.01722217],[0.017804503],[0.01873034],[0.018360198],[0.018759517],[0.02228655],[-0.009105863],[-0.009100863],[-0.0090915],[-0.009066759],[-0.009038707],[-0.009013525],[-0.008991696]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.010409239],[-0.0048437957],[1.1988333],[-0.13476348],[1.4858104],[-0.794262],[0.6790735]],"dense_1_W":[[-0.011625103,-0.3083069,-0.0026562517,8.90253e-5,0.24631822,-1.1913638,0.82102,-0.11153706,0.1505958,0.2899964,-0.27461168,-0.49880293,0.04710429,0.29354858,0.416012,-0.3435446,0.19979279,-0.12608024],[5.6495715e-5,0.28144145,0.42635885,-0.04114077,-0.0014621562,0.46131748,-0.5228703,0.41057003,0.33081797,0.34625557,-1.0916862,0.09432066,0.32492688,-0.056624148,-0.040471476,-0.5424953,-0.0072112447,0.28388345],[1.7090412,0.2002619,0.0026196167,0.26699355,0.071899444,0.049739193,0.1701057,0.42871216,-0.038330317,-0.011365764,-0.23889059,0.12167451,-0.393932,0.3747686,0.00017281089,-0.1975879,0.026008612,0.12001063],[0.0018485491,-1.0713278,-4.8827915,0.26486492,2.050632,0.16912486,-0.06104053,-0.11624062,-1.6869881,-1.0038092,1.237583,-0.84136367,-0.39167315,-0.30604422,0.44892347,0.5669582,0.034259807,0.35163558],[1.7980721,-0.4584174,-0.0022513545,-0.6307025,-0.14997724,0.72365683,-0.91590655,-0.31521827,0.11314583,0.38106278,-0.00602411,0.21668813,0.43501985,-0.45246387,-0.009387444,0.23703502,-0.14703332,0.0099657895],[-0.1358725,0.54878175,-0.0025949588,-0.12666118,-0.19501363,0.654152,-0.16454516,-0.08546684,0.1169596,0.49080434,-0.3239291,0.35493678,-0.10910667,-0.33374792,-0.24709627,0.114444494,0.27612403,-0.06697925],[0.13420698,0.50657654,-0.0042069573,0.045988888,-0.07106984,0.9937608,-0.6856747,-0.032089513,0.21678452,0.25315955,-0.18009213,0.6731982,-0.321046,-0.5262044,0.0499083,-0.21319143,-0.17084885,0.3188954]],"activation":"σ"},{"dense_2_W":[[-0.7456634,0.46501774,-0.6609165,-0.36825928,0.34470782,0.37473607,0.32698643],[0.8138239,-0.2721878,0.23626322,0.42493615,-0.49122226,0.11831825,-0.0014772185],[0.9073058,-0.24231595,-0.6257176,0.3009464,-0.9984163,-0.84967256,-0.9688514],[0.81139743,-0.3589047,-0.25483748,-0.008724137,-0.30143958,-0.55920064,-0.75189996],[1.2769561,-0.19255519,-0.5588862,0.4862281,-1.1403346,-0.9804591,-1.1165341],[-0.31463045,0.45179945,-0.24287948,-0.6230109,0.25823897,0.7043701,-0.22927245],[-1.008901,0.50820404,-0.73319477,-0.07753135,-0.3671213,0.6114657,0.06207998],[-0.5402591,-0.8133519,0.14899945,0.07088945,0.031132944,-0.13568036,-0.49520075],[-1.6630762,-0.06750191,-1.6710929,-0.14377673,-0.8075217,1.4285947,0.8853607],[-0.3978325,-0.20129038,-0.3479711,0.023103444,0.37153137,-0.3815196,-0.2664648],[0.22289358,0.35865685,-0.7157779,-0.28774455,-1.0286486,-1.0144361,-1.3272792],[1.084518,-0.7375414,0.45458505,-0.07111571,-0.6131045,0.0032512164,-0.5619188],[-1.4050175,0.33980614,-1.1927856,-0.46912205,-0.58342016,1.0496932,0.6457101]],"activation":"σ","dense_2_b":[[-0.06799501],[-0.14373808],[-0.1901882],[-0.15265658],[-0.22159524],[-0.07163111],[-0.12828404],[-0.37175685],[-0.48142236],[-0.34072894],[-0.10627754],[-0.048601486],[-0.29759893]]},{"dense_3_W":[[-0.04726544,-0.39426312,0.30152455,-0.13302766,0.118110485,-0.14255127,0.5374407,-0.020599457,-0.16083333,-0.14201048,0.047239352,0.38325223,0.15821639],[0.4946483,-0.34571862,-0.5582076,-0.5775158,-0.840619,0.24489452,0.33843094,-0.5029043,0.61864847,0.53716034,-0.54293144,-0.5770566,0.804303],[-0.68038666,0.06468416,0.5824173,0.06446385,0.5888793,-0.19427243,-0.3311894,-0.6022182,-0.77085805,0.42349538,0.5826747,0.58117974,-0.21141453]],"activation":"identity","dense_3_b":[[0.032147415],[0.045437515],[-0.028842183]]},{"dense_4_W":[[0.17054327,0.9154161,-0.7712217]],"dense_4_b":[[0.034591846]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MAZDA_CX5_2022.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MAZDA_CX5_2022.json deleted file mode 100644 index 3cb6a37b1..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MAZDA_CX5_2022.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.853577],[1.1593435],[0.49393934],[0.047530506],[1.1528559],[1.1569644],[1.1598135],[1.1245039],[1.0973833],[1.0626532],[1.0269637],[0.047361173],[0.047408417],[0.047455847],[0.047535572],[0.047536217],[0.04739956],[0.04713172]],"model_test_loss":0.017221078276634216,"input_size":18,"current_date_and_time":"2023-08-09_18-22-21","input_mean":[[23.515398],[0.012237509],[-0.0044900486],[-0.010730645],[0.013944725],[0.013308859],[0.012569497],[0.011769375],[0.010604365],[0.010843918],[0.011256869],[-0.0107458485],[-0.010734076],[-0.010720637],[-0.010731344],[-0.01076948],[-0.010765305],[-0.01082986]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.199587],[-0.25501987],[-0.5037064],[-0.23722672],[0.22343779],[0.14423445],[-0.07885718]],"dense_1_W":[[1.2625326,0.16327555,0.0066552805,0.44784018,-0.124741316,0.79189295,-0.37784576,0.21143824,-0.52783173,-0.20586084,0.23246923,0.1308419,0.11561832,-0.55449927,-0.11027749,-0.18869302,-0.2170536,0.08424656],[-0.006859232,-0.086538136,-0.03269977,0.13604829,0.24823508,-0.5691345,0.670277,0.040435724,-0.16860203,-0.41622674,0.25470176,0.02203289,-0.23012973,0.39989966,-0.47250885,-0.10986197,0.20646292,0.02149021],[1.3279617,0.25124303,-0.007813492,-0.72305727,0.06114258,-0.8571762,0.063125186,-0.25974143,0.4144009,0.60714114,-0.46617725,-0.2852775,-0.0355692,0.5701069,0.69028735,0.27851647,-0.26454824,0.07074926],[0.022198461,1.6731384,0.037180465,0.765974,0.030372338,-0.7625096,2.1497931,-1.2226309,-1.9869789,-0.91440254,0.9935744,-0.3478071,0.53434056,-0.08860992,-0.28544557,-0.29930937,-0.5889199,0.4349971],[0.2660301,-0.86187685,8.6956774e-5,-0.016676437,-0.3185729,-0.8080561,1.0541335,0.12288944,0.1756726,-0.14763017,-0.09342803,0.17633434,-0.24657024,-0.3275839,0.37692598,0.048297286,0.19601016,-0.20960684],[0.15503937,0.78893465,-0.0035333869,-0.0016546088,0.18449067,0.46749434,-0.7731415,0.33954102,-0.035273015,-0.3853616,0.23819815,0.34393597,-0.057135757,0.15562473,-0.3307375,-0.28002447,-0.14485608,0.3072072],[-0.002361901,-1.5429035,-5.8346395,0.50011724,0.42428496,0.7945255,0.49649864,0.34323424,-0.9758048,-0.9413602,0.64176863,-0.59547406,-0.009193582,-0.36598718,0.48848686,-0.27432454,0.047451578,0.28842512]],"activation":"σ"},{"dense_2_W":[[0.46865103,-0.60989743,-0.03747131,-0.39046776,-0.057409145,-0.39815053,-0.59903854],[0.3293413,0.5657211,0.58408237,0.09847331,0.6722225,-0.5966699,0.43323725],[-1.1938511,0.3152245,-0.7231345,0.36246085,0.17062272,-0.9542798,0.42241877],[0.95589864,-0.5171128,-0.20689346,-0.2149552,-0.17504925,1.4507052,-0.458539],[0.6998986,-0.5149185,-0.41500762,-0.34256452,-0.59194785,0.68115014,0.022985162],[-0.58739376,0.5298398,0.35696748,-0.09943707,1.0701959,-0.8042608,-0.25183183],[-1.7204717,-0.5559019,-0.9794375,-2.4412615,0.009480803,-0.2547261,0.2289718],[0.6462851,-0.7868944,-0.9317859,-0.62466663,-0.11116908,0.48139545,-0.1042982],[0.7837947,-0.31750438,-0.61143816,-0.53003997,-0.8487594,0.52839005,0.071558826],[-0.6952866,-1.0207022,-0.8329126,-0.23308934,-0.103428386,0.37906075,-0.95636684],[-0.4912487,0.16609176,0.38974765,0.5311249,0.8187408,-0.9927307,-0.1320584],[-0.50672543,0.5862622,-0.2999275,-0.0069663594,0.18914229,-1.3985909,0.35376993],[-0.8134264,0.55566525,0.6216377,0.7941298,0.6479907,-1.2260833,-0.31804174]],"activation":"σ","dense_2_b":[[-0.19038986],[-0.16041437],[-0.5408977],[0.30586013],[0.085234426],[-0.10838832],[0.22506814],[0.0007744643],[0.13522272],[0.03689445],[-0.13003486],[-0.27763245],[-0.092821054]]},{"dense_3_W":[[-0.65185815,0.54327095,0.10433931,-0.116812855,-0.55839425,0.6606599,-0.59668356,-0.1460392,-0.4181811,-0.8674938,0.51525503,-0.23707807,0.29755294],[-0.09864905,-0.65130895,-0.7366327,0.44178113,0.7440715,-0.18855122,0.5229587,0.648026,0.7389669,0.58856255,-0.29644322,-0.56690645,-0.47691458],[-0.028702423,-0.025029318,0.3560928,0.08559789,-0.5590178,-0.21502936,0.4283347,0.14829901,0.15673526,-0.36272648,-0.21479517,0.23683308,0.39158282]],"activation":"identity","dense_3_b":[[-0.08270337],[-0.04420589],[-0.00881405]]},{"dense_4_W":[[-0.259468,1.106187,0.007629875]],"dense_4_b":[[-0.03991197]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MAZDA_CX9.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MAZDA_CX9.json deleted file mode 100644 index 1464ff4df..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MAZDA_CX9.json +++ /dev/null @@ -1 +0,0 @@ -{"test_dict":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.68026423,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6623511,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.7894848,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.45772332,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.033177804,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.8652633,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.72988725,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.33481875,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.6028637,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.6341075,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.35337192,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5604581,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.49662757,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8983778,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8291683,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.21059237,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.3554733,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.61752445,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.008872215,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.82794446,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.722765,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.58601475,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.6585865,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.3415729,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.7593987,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.2533843,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.36514503,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.9955126,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.9061998,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.5863995,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.70988524,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.9357347,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.40801805,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.7080684,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8582784,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.051181857,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.32222438,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.68954885,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.81613845,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5503567,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.95135486,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.38768044,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.121791795,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.60388947,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.58747494,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.460676,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.07276039,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.7868223,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.45431036,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8425848,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.09901318,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.26556718,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.51706076,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.22000633,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.08331953,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.4225998,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.20729552,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.21171938,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8852378,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.9542402,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.2908706,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.33962357,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.587801,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.40549684,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.13055985,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.93948686,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1222087,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.2840799,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.41804174,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.8638405,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.3479214,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1160183,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.4250751,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.37797537,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.74481004,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0012709,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.5549363,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.013350483,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.59705853,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.32066464,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1208482},"input_std":[[4.758569],[0.7551621],[1.1411846],[0.024509063],[0.7418195],[0.74795926],[0.75277853],[0.7348531],[0.7328033],[0.7360365],[0.73419976],[0.024163457],[0.02427521],[0.024369553],[0.024361141],[0.024596939],[0.02470201],[0.024847152]],"model_test_loss":0.011168484576046467,"input_size":18,"current_date_and_time":"2023-07-16_15-31-09","input_mean":[[24.214306],[-0.068722084],[0.13368857],[-0.012954545],[-0.0908967],[-0.08666857],[-0.07849512],[-0.042653743],[-0.027166469],[-0.009568535],[-0.001553267],[-0.013330359],[-0.013247636],[-0.013182787],[-0.013015977],[-0.013002344],[-0.012768261],[-0.012813394]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"test_dict_zero_bias":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.63145995,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6819694,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8772025,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.55443954,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.024535596,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7776458,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.82169604,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.32655615,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.52833325,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.60248363,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.2712959,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.61627734,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.57438755,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8270569,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.89278406,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.2993996,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.39583528,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.6871477,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.0012517273,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.9093442,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.70719516,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.61919284,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.6058605,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.38305718,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.7314606,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.31522623,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.31417722,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.94576484,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.8632306,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.50871336,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.66870224,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0360692,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.3741793,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.7720997,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.7928454,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.09808446,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.31983182,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.63806283,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.88232887,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.60230434,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.874546,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.34882647,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.10547972,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.52212185,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.51409614,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.55887365,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.08741653,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8739745,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.42246366,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8930687,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.060002506,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.3024186,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.59369165,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.28634965,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.12954244,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.48957476,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.29448348,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.23015675,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.81391317,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0366076,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.26818705,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.34778464,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6359127,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.3900602,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.09257127,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0405408,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0238359,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.27612492,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.38687146,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.77963734,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.26859418,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0187957,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.4089293,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.38123727,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.83644295,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.9439602,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.60338587,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.04257779,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.5176249,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.38916177,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0254881},"layers":[{"dense_1_b":[[-0.39623764],[0.14138116],[-0.2588534],[0.44002953],[0.22150832],[-1.471221],[1.091665]],"dense_1_W":[[-1.3643335,-0.39512777,0.49481088,-0.160357,-0.11053611,0.5127148,1.944503,-0.519241,-0.1717221,-2.2519088,0.85069805,0.16777276,0.046915065,0.07825442,-0.19920808,-0.093078785,0.22527768,-0.015349518],[0.07033132,-1.2395316,-0.015185883,0.049182996,-0.8706203,0.08936256,1.192001,0.73432046,-1.0403839,-0.99523735,0.18716313,-0.46670943,0.36377695,-0.06476297,0.29031602,-0.046463974,-0.0934093,-0.027420614],[0.036429238,0.25500375,-0.050834823,0.007870147,0.013165975,-0.2152336,-0.50505584,-0.57315665,0.43266997,0.2960198,-0.2809415,-0.16854034,-0.22267757,0.38213494,-0.32983685,0.22851394,-0.1784995,0.29428333],[0.031305227,-1.7722394,0.0051150094,-0.2393632,-0.429712,0.9946768,0.57891685,0.84168047,0.44816926,-1.2334055,0.5619671,0.3394732,-0.09925409,0.1931788,-0.7158236,-0.64525104,-0.15853617,0.7985537],[1.4468489,-0.79758126,-0.5674579,-0.089146346,0.15503111,-0.050696775,-0.41808343,-0.9180651,1.1887319,0.7490674,0.2818292,-0.05504427,0.09847831,0.24017516,-0.100371055,-0.26661357,-0.015151299,0.14749247],[-0.011997275,-0.01629248,0.0023960476,0.46332273,1.1773943,0.047555875,-1.0831845,-1.1777227,0.50374424,0.94301,-0.43155685,1.6632808,1.0289724,1.3457992,-1.3981099,0.21298541,-1.3651799,0.4583753],[-0.012068792,0.6946306,7.008868,-0.38002566,-0.8078394,-1.8026941,-1.6721241,2.1546853,0.7563132,0.12844934,0.21244754,0.028632099,-0.13106985,-0.14665121,0.10708859,1.0625329,-0.18022399,-0.35517347]],"activation":"σ"},{"dense_2_W":[[-0.10200387,-0.76644456,-0.30197436,0.88119465,0.039803542,0.35588643,-0.11579556],[-0.4315598,-0.18163718,-0.8021966,0.3789305,-0.60908353,0.2092475,-0.15666024],[0.24648495,0.5248265,1.1183228,-0.54292357,0.37333378,-0.621473,-0.2185636],[-0.44479766,0.061370973,-0.80736274,-0.06727713,-0.03573045,0.4296817,-0.6225945],[0.7770457,0.870017,0.6628652,-1.3054526,-0.24000858,-0.5467027,-0.63892704],[0.6606621,0.5903391,0.74629235,-0.30811584,0.9074003,-0.25882754,-0.49689066],[-0.61885303,-0.27397686,-0.32425815,0.5231217,0.0016664385,0.029230833,0.36123073],[0.116919406,-0.080033116,-0.80068344,0.17488338,-0.59637207,-0.25136593,-0.052427128],[-0.6091415,0.036435083,-0.31513107,1.0636747,-0.8583667,-0.050638534,-0.42107514],[-0.688126,-0.28585485,-0.74282986,0.07060043,-0.11225189,0.10933011,0.1853165],[-0.02946559,0.42606872,0.8841502,-0.08186191,0.5265807,-0.48210683,-0.32932183],[-0.103848316,-0.44215712,-0.32014853,0.7133248,-0.46932107,-0.47233966,0.028100768],[0.2052363,-0.19803643,0.61784434,-0.6395137,0.54827636,0.16492388,-0.25312033]],"activation":"σ","dense_2_b":[[-0.04292812],[-0.0074691507],[0.02623448],[-0.12690178],[-0.127359],[-0.0627155],[0.03455701],[-0.020989824],[0.17505483],[-0.009170552],[0.047454033],[-0.009859283],[-0.08406351]]},{"dense_3_W":[[-0.101136126,0.2837724,0.069948,-0.07415262,0.34190154,0.24395382,-0.19586,0.41830686,-0.3893048,-0.19336349,-0.14812821,-0.107784435,0.22945514],[0.32129276,-0.047892366,-0.15199028,0.40463585,-0.2276267,-0.27818957,0.14533494,0.21502836,-0.4884599,0.10375174,-0.41882825,0.47495985,-0.23964486],[-0.33068216,-0.40646386,0.3537997,-0.28240827,0.695928,0.32007056,-0.27887765,-0.47764063,-0.44847566,-0.5544643,0.4358929,-0.68283004,0.16520141]],"activation":"identity","dense_3_b":[[0.017270878],[-0.049352214],[0.051928796]]},{"dense_4_W":[[-0.18483475,0.37186217,-0.97547895]],"dense_4_b":[[-0.04841734]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MAZDA_CX9_2021.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MAZDA_CX9_2021.json deleted file mode 100644 index bda8ada35..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MAZDA_CX9_2021.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.1377034],[1.0210788],[0.46911943],[0.04458394],[1.0146378],[1.0170907],[1.0187873],[0.99643576],[0.977885],[0.9539401],[0.9314358],[0.0443801],[0.044420015],[0.04446651],[0.04452825],[0.04450817],[0.04427827],[0.04390146]],"model_test_loss":0.016026578843593597,"input_size":18,"current_date_and_time":"2023-08-09_19-14-34","input_mean":[[26.721071],[0.05378143],[0.018124493],[-0.007393202],[0.048810303],[0.050282035],[0.052012227],[0.057080623],[0.05906103],[0.058861],[0.05875214],[-0.0075229136],[-0.0075009223],[-0.007483631],[-0.0074706767],[-0.0074925683],[-0.0075200107],[-0.0076175835]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.18089767],[0.49798125],[-0.24118638],[-2.1373975],[-0.16477053],[0.34568876],[-0.21016233]],"dense_1_W":[[0.074662894,-0.3669638,0.25222635,0.107843496,-0.10552656,-1.0399265,1.0163934,-0.48659247,-0.030600587,-0.11743266,0.14577629,-0.25742808,0.3170169,0.36954135,0.040227413,0.15968736,0.062263597,0.24831484],[0.08303395,-0.8697939,0.0030468423,0.15263641,0.107188724,-1.0068568,0.4416236,0.036292315,0.7619705,0.1695332,-0.57831824,-0.2111467,0.11940522,-0.041054823,0.35764664,-0.47026095,-0.069946416,0.27341142],[0.048043054,-0.31118855,-0.008299072,-0.11476858,0.33377898,-1.0105896,0.36259222,0.2396159,0.20328248,-0.12248921,-0.12638399,-0.4566413,0.09750506,0.07093791,0.55933607,0.010423586,0.10305094,-0.16882543],[-0.2943162,-1.6256222,0.0030186898,0.4355704,-0.11311622,-0.18757336,0.59179604,0.19876327,0.081539884,0.15316048,-0.29308975,-0.78554755,0.11605082,0.106179096,0.4265695,-0.16271093,0.005539031,0.02609059],[0.07329607,-0.8092628,0.25480765,0.29808077,-0.0061037876,0.42461434,-1.7734524,0.8508979,0.86776084,-0.23827028,-0.3394005,0.49403337,0.00061965705,-0.28957158,0.25209922,-0.109510385,0.030290708,0.40608874],[0.039265428,0.96887267,6.0339727,-0.10146958,-0.4268955,-0.99481356,-1.3445842,0.73430777,1.103279,1.2262536,-0.9347754,0.7603965,0.27957165,-0.72691447,0.079958566,0.21448162,-0.6384232,-0.037277497],[0.0016329347,0.16354942,0.002987302,-0.052555222,-0.22473752,-0.5058604,0.6229535,-0.047164608,-0.5693476,-0.26495168,0.29653648,-0.5010037,-0.11219094,0.25223202,0.52381283,0.6169986,0.023134451,-0.33158067]],"activation":"σ"},{"dense_2_W":[[-0.7412992,-0.7675937,-0.4397283,0.31320858,0.5621121,0.53991586,-0.35282382],[0.39020097,0.14299431,0.11215057,0.1305876,-0.9580759,-0.42531374,1.1606607],[-0.68442714,-0.5091107,-0.2732925,0.038994852,0.16016693,0.084352866,-0.40752736],[-0.3638797,-0.5586708,0.12934496,-0.89443725,0.3385314,-0.49931,-0.49778506],[0.15667213,0.2869896,0.11566534,0.8353921,-0.8303651,-0.67806315,0.37547386],[-0.44675717,-0.89146745,-0.51320916,-0.8497574,0.53292394,-0.22540878,0.27044648],[0.31874314,0.7925137,0.691313,0.43609503,-1.0456865,-0.121448435,0.54489106],[0.70710474,0.8615981,0.37050986,0.17309327,-1.0366682,-0.033383362,0.64695203],[-0.56060874,-0.75052696,-0.23543693,-0.5132341,0.22080141,0.1704808,0.16872974],[1.0095209,0.8009594,0.5537545,0.8833569,-1.1999682,0.31028512,0.18520752],[-0.9428297,-0.37537527,-0.59236115,0.33072037,0.26682293,0.41685763,-0.0841698],[-0.24776414,-0.16537917,-0.06624358,-0.47923082,-0.06637364,0.113684684,-0.5439529],[-0.83423465,0.46298993,-0.27318522,0.014554697,-0.37881574,-0.9102047,-0.4330378]],"activation":"σ","dense_2_b":[[-0.052797712],[-0.087834224],[0.14800552],[0.15060428],[-0.11083593],[0.17317224],[-0.16887216],[-0.27164057],[0.14738622],[-0.7614823],[0.007635959],[0.1378371],[-0.66434515]]},{"dense_3_W":[[0.36896288,-0.490786,0.16599391,0.47720614,-0.30545673,0.7379879,0.013581132,-0.32646582,0.558891,0.18879382,-0.37756246,-0.1875126,-0.124775544],[0.18666591,0.5846334,-0.10136687,-0.7394393,-0.2828246,-0.08108596,0.39981124,0.20680344,-0.37288138,0.27750582,-0.11473721,-0.57098895,0.4266538],[0.7361726,-0.58514285,0.7204545,0.106599934,-0.59268904,0.5647647,-0.45099103,-0.6198126,0.68592227,-0.25746143,0.43516034,0.27023137,0.36228538]],"activation":"identity","dense_3_b":[[-0.09970351],[-0.0810631],[0.07066309]]},{"dense_4_W":[[0.09306378,-0.5163019,0.9577329]],"dense_4_b":[[0.07198106]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MOCK.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MOCK.json deleted file mode 100644 index 68c6079ae..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/MOCK.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.319796],[0.8197253],[0.2695665],[0.042975243],[0.82591987],[0.8242552],[0.82166827],[0.7989035],[0.78012997],[0.7541669],[0.727379],[0.042928882],[0.042931043],[0.04292182],[0.042691696],[0.042392965],[0.04186602],[0.041271493]],"model_test_loss":0.026207376271486282,"input_size":18,"current_date_and_time":"2023-08-05_00-22-46","input_mean":[[26.074522],[0.02839493],[0.0066744387],[0.002057746],[0.02693295],[0.026884235],[0.027213756],[0.03047188],[0.032183405],[0.03682154],[0.037578877],[0.0020827646],[0.0020767434],[0.002068271],[0.0019987107],[0.001959759],[0.0019052405],[0.0017531246]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.040739167],[2.3032],[0.12316159],[-0.2659433],[-0.14477858],[2.5866256],[0.007428121]],"dense_1_W":[[-0.00041187002,-0.43338582,0.00060599507,-0.1214792,0.11413983,-0.5961203,0.28133482,0.20372222,-0.3518884,0.004369656,0.059917737,-0.8609317,0.057816904,0.6169038,0.3990334,0.008638719,0.40356407,-0.16347249],[2.204209,-0.6977474,0.0003794136,-0.029842956,0.42360333,-0.03850665,0.77470416,0.13669024,-1.1576334,-0.2837559,0.290581,-0.20709048,0.06827377,0.39236906,0.2664924,-0.070944384,0.061474152,-0.18787181],[0.0027994395,1.1713752,3.9056025,-0.2533814,-0.5706249,-0.31465232,-0.28078023,0.9239433,0.8800892,0.45323586,-1.5842354,1.1251147,0.001203793,-0.631376,0.17771868,-0.5216376,-0.3776946,0.2864524],[-0.45875242,-0.35037747,-0.0044959267,0.2115901,0.49776042,0.40634266,0.16292186,0.085123494,-0.9553305,-0.6551008,1.0865217,-0.71530885,-0.122710146,0.41569617,0.053198084,-0.013457165,0.36482632,-0.3238176],[-0.002217434,1.7620963,-1.2475897,0.2861537,2.5786693,1.6882615,2.2971427,0.5035391,-3.1869397,-3.7319245,-1.4041471,-1.1169863,-0.17736337,0.21103925,0.1615338,-0.7596914,0.4106967,0.9845423],[2.4344306,-0.5410767,0.0015357351,-0.4139311,-0.2258391,0.22010726,-0.43920308,0.3511928,0.9479655,0.80018866,-0.516027,0.007953332,0.033446178,-0.082440384,0.35339966,-0.26683265,-0.33867463,0.3848125],[-0.006754755,0.48652485,-0.00026165723,-0.07224382,-0.032497358,0.3571908,-0.30286846,-0.38309038,0.36634418,0.2480767,-0.20110212,0.7545479,0.11547977,-0.7146525,-0.018818611,-0.31016228,0.010726242,0.2242711]],"activation":"σ"},{"dense_2_W":[[0.5528864,0.008744154,0.6015725,0.22935376,-0.51005757,-0.5996119,-0.061544895],[-1.4023882,0.050312754,-0.09053194,-0.5902193,0.3458193,-0.14508769,0.946796],[-1.1020836,-1.510418,0.81544393,-0.40635344,-0.4560999,-0.2849373,1.1164322],[-0.4434681,-0.6467564,0.35384342,-0.4493043,-0.23754148,-0.24804021,0.9237547],[-0.27906877,-0.9630674,0.42410734,-0.76862967,-0.59738564,-0.70335937,-0.18449919],[-0.50024533,-0.013576657,0.25596973,0.105690226,-0.52567744,0.80972326,0.7098216],[-0.8556806,-0.14960146,-0.14877279,0.25888273,-0.18901795,-0.16515623,0.7054368],[-1.041555,0.5246004,0.87523067,-0.4851678,-0.5188004,1.3508142,1.344452],[0.83991337,0.54517484,0.09614608,0.028868627,0.35332617,0.22425945,-0.24393064],[0.48884755,-0.6723522,0.161554,-0.18337585,0.010732531,0.042358696,-0.94669324],[0.7589174,0.44016284,-0.21002136,-0.7584538,-0.1012028,-0.44348133,-0.34792235],[0.68993133,-0.13230318,-0.20205282,0.33807474,0.2551999,-0.7216631,-0.9246813],[0.55567986,0.92921287,-0.3879664,-0.06419992,0.44321644,0.34334105,-0.7811811]],"activation":"σ","dense_2_b":[[0.009339096],[-0.027214382],[-0.19324711],[-0.1799901],[-0.3219004],[-0.0076973503],[0.031202752],[0.1887236],[-0.10121091],[-0.21036065],[-0.02065366],[-0.068702094],[0.096490316]]},{"dense_3_W":[[0.5728007,-0.3089611,0.28924087,-0.5445901,0.35486373,-0.44516575,-0.5423116,0.1779453,0.58426845,0.66963387,-0.31166366,0.6550927,0.50334716],[-0.40078798,-0.027345562,-0.5357739,-0.5126658,-0.5254064,-0.32021227,-0.44433862,-0.79833746,-0.10665151,0.20663711,-0.17090832,0.98109436,0.78809434],[-0.17410587,0.23138371,0.66809905,0.2743278,0.096785605,0.5667218,0.52852666,0.4389385,-0.4016732,0.05424836,-0.7506198,-0.71257013,-0.20795672]],"activation":"identity","dense_3_b":[[0.02470415],[0.1408834],[-0.05001292]]},{"dense_4_W":[[-0.3242929,-0.272474,0.8721407]],"dense_4_b":[[-0.046378713]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/RAM_1500_5TH_GEN.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/RAM_1500_5TH_GEN.json deleted file mode 100644 index 4d77cc038..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/RAM_1500_5TH_GEN.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.8681383],[1.2917701],[0.42320544],[0.051469278],[1.2847253],[1.2883313],[1.2900517],[1.2667522],[1.242907],[1.2112364],[1.176482],[0.051301446],[0.051339414],[0.051366985],[0.05125917],[0.05098003],[0.05050668],[0.04989228]],"model_test_loss":0.022552745416760445,"input_size":18,"current_date_and_time":"2023-08-10_00-52-59","input_mean":[[25.508078],[0.034453202],[0.01726827],[0.00056943524],[0.031399224],[0.032966],[0.034444243],[0.04235863],[0.049242016],[0.057398297],[0.06200239],[0.0005415381],[0.000549214],[0.00055187126],[0.00063792604],[0.00062618323],[0.00070369913],[0.0007498945]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.107602455],[0.2592419],[-0.1010373],[0.34598154],[0.8561106],[-0.15246718],[0.9970168]],"dense_1_W":[[0.0071956124,-0.8389715,0.0016946977,0.37401447,-0.27382085,-0.5530695,0.5881284,0.12836976,-0.094520785,-0.060450573,-0.028743897,-0.04453258,-0.09910858,-0.051995493,0.017620616,-0.013560951,0.18469654,-0.013240006],[1.3669219,-0.2384396,0.08245142,0.14269358,0.22758602,-0.093947925,0.5673605,-0.045786478,0.036916874,0.38647193,-0.30818498,-0.4555334,0.29512686,-0.24807432,0.4348693,-0.34444955,-0.11027862,0.016942881],[0.013133192,-1.1178136,0.034996957,0.48028773,0.09731058,-0.693922,0.49429983,0.01820859,-0.037673093,-0.13616005,0.02270395,-0.69734114,-0.07626221,0.2784788,0.007214682,0.07223958,-0.011835337,-0.070404634],[0.0054024686,0.52874875,3.438241,-0.21533473,-2.068417,-1.530317,-2.6102667,-1.1109601,2.2420053,3.6071155,1.1157349,0.3809812,0.5365094,-0.52533704,0.02788547,0.4045346,0.24486302,-1.008144],[1.682156,-0.052193947,-0.09770653,-0.45150465,0.2333314,-0.5347695,0.09825678,-0.01992122,-0.1994097,0.116743915,0.16566196,0.20611681,0.6852969,-0.45614037,0.27821264,0.09751711,-0.02198396,0.04035941],[-0.002443684,-0.78855264,-0.014614094,-0.026071582,-0.10583151,-0.38199013,1.0572444,-0.18948583,-0.35938174,0.013804459,0.15949139,-0.7269957,-0.20543943,0.52785945,0.2962705,0.26196185,0.21384726,-0.39327204],[1.5940213,0.11492236,0.090780675,-0.32562405,-0.034105282,0.53610796,-0.4663451,0.38666242,-0.17008422,0.10295398,-0.2042109,0.31005463,-0.28528133,-0.21527892,0.22701246,0.018739212,-0.024669824,-0.04890493]],"activation":"σ"},{"dense_2_W":[[0.6139993,0.3757347,-0.1356616,0.085909925,-0.12511243,0.15788122,-0.031210706],[0.4353305,0.18801172,0.12204481,-0.118660524,0.31724608,0.7373148,-0.5507885],[-1.3431091,0.006327765,-0.48985648,1.2948128,-0.1034634,-0.6535869,1.5181615],[-0.89554805,-0.0707852,-0.38398325,-0.99453413,0.23394457,-1.3053,0.70568514],[-1.060718,-0.08779857,-0.34332564,0.93365616,-1.0663359,-1.5535986,0.9410223],[0.3106728,0.011034138,0.2690925,0.20874923,0.3430892,0.7928498,-0.7562942],[-0.9156255,-0.59965265,-0.23466443,1.0020962,-1.8364218,-1.0228359,1.0616008],[-0.6956375,-0.44040835,-1.0947623,0.5968099,-0.049048502,-1.2266653,1.1614286],[0.3183038,-0.35872775,0.13763095,-0.28848255,-0.050387893,0.39608815,-0.54269797],[0.5095539,-0.24931525,0.40140435,-0.27532217,0.13700272,0.57273823,-0.6925308],[-0.32013652,-3.1370046,-2.7840195,1.34559,-0.84404,-0.6845122,-0.5461476],[-0.72196037,0.038392793,0.057249792,-0.44615316,-0.0024790815,-1.1388366,0.36243963],[0.67724824,0.28425425,0.12925239,-0.22140531,0.5270677,0.15986088,-0.1314976]],"activation":"σ","dense_2_b":[[-0.14464946],[-0.15859996],[0.65735745],[0.28288272],[0.48416847],[-0.120317705],[0.17381315],[1.3373141],[-0.15882145],[-0.21813588],[1.288298],[-0.09495147],[-0.11485835]]},{"dense_3_W":[[0.52467114,0.573881,-0.37257165,-0.2885695,-0.73502827,0.5044393,-0.35882697,-0.32937768,0.40931723,0.33977678,-0.3444813,0.08750891,0.54127914],[0.0466505,0.44103855,0.41321534,0.5304071,-0.15150255,-0.293208,-0.13094401,0.05617865,-0.2815031,-0.25879386,0.09075154,0.71288633,-0.43692803],[-0.40456718,0.20321198,0.27640694,0.09131404,-0.27206296,-0.24663389,-0.60239804,-0.46262908,-0.07054595,-0.2889505,-0.20886894,-0.095937446,-0.075776964]],"activation":"identity","dense_3_b":[[-0.1063788],[0.09727621],[-0.08167072]]},{"dense_4_W":[[-1.0752603,0.4178708,-0.3472837]],"dense_4_b":[[0.10501918]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/RAM_HD_5TH_GEN.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/RAM_HD_5TH_GEN.json deleted file mode 100644 index 0b9abe7fb..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/RAM_HD_5TH_GEN.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[6.5132856],[1.3632272],[1.5413244],[0.03303396],[1.3259029],[1.3417274],[1.3554335],[1.3285728],[1.3114035],[1.2910824],[1.2723991],[0.03297938],[0.03299731],[0.033014063],[0.033058062],[0.033087354],[0.033028472],[0.032748375]],"model_test_loss":0.020962899550795555,"input_size":18,"current_date_and_time":"2023-09-02_21-03-03","input_mean":[[26.374321],[0.24099204],[0.0014719056],[-0.017563006],[0.24074426],[0.24266605],[0.2428761],[0.2323719],[0.23110531],[0.23507003],[0.24088627],[-0.017492866],[-0.01751848],[-0.017543415],[-0.01748686],[-0.01742368],[-0.017475272],[-0.01757139]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.079944834],[-0.3598381],[0.09434822],[-1.3233447],[0.1130735],[-0.45763284],[-0.6268566]],"dense_1_W":[[-0.073462725,-3.7294142,0.008516538,-0.1984018,0.6034948,1.8619602,2.1633458,-1.9060298,0.40978914,-0.37825182,0.611484,-0.36018258,0.27376932,0.3118703,0.036994077,0.21737134,-0.12771696,-0.040260702],[-0.20176645,0.57531285,-0.0084412275,-0.17881922,0.9809269,-0.16568676,-0.58166283,-0.1486564,0.70059836,-0.29893303,0.21570963,0.3508427,-0.3873581,0.06504418,-0.021596037,0.23897065,-0.22310819,0.10423835],[-0.06450743,-0.7734916,-7.4385157,0.34980673,2.380512,3.2428308,3.075309,-3.6599858,-2.5296397,-0.5446167,-0.94137996,-0.59157187,-0.07057616,0.11925076,0.08353299,0.38889635,-0.23567261,-0.1015343],[-0.28985357,-1.5797744,0.0060979226,-0.031419355,-0.400295,0.3806542,0.11740358,-0.0064864187,-0.12764077,-0.04428382,-0.07560065,0.17292799,0.12330137,-0.27197468,0.29182738,-0.2540429,0.13684034,-0.04889033],[-0.07832161,2.1902764,0.030133046,-0.30596706,-0.7210498,0.027130641,0.6432982,-0.046274744,-0.5472184,0.70929205,-0.24650635,0.53280306,-0.48029587,0.12250029,-0.11553079,-0.13253216,-0.029158924,0.18207467],[-2.8597453,-0.43466172,-0.18268725,-0.060400605,0.28060955,-0.18074062,-0.6875857,-0.38406757,-0.37214103,-0.9286758,-0.38446707,0.15134443,0.054654,0.48821846,-0.004988523,0.06868294,-0.033809625,-0.047231436],[-0.0017858031,-0.6662176,0.0051888903,-0.06294718,-0.90392506,-0.8541502,-0.16361657,0.08513459,-0.07875049,0.0790174,-0.13931915,0.0140639525,0.017838055,0.1625987,0.25675306,0.18861753,-0.18611054,-0.059609663]],"activation":"σ"},{"dense_2_W":[[-0.6968983,0.27608687,0.10406441,-0.024237338,-0.42272064,-0.013714595,-0.54531485],[-0.67445093,0.32921025,0.36817434,0.06642965,-0.042997025,-0.32730803,-0.5889611],[-0.340392,-0.03912806,0.46399808,-0.4680018,-0.49668282,0.16590515,0.21437873],[-0.46547934,0.07344197,-0.12238069,-0.0253223,0.49247265,-0.25569054,-0.57428217],[0.41493058,-0.27931592,-0.089011,0.08059608,-0.5250433,0.09186349,0.07772292],[-0.3727222,-0.15556182,0.3317168,-0.14912905,-0.17529897,0.48200855,0.6279147],[-0.31705967,0.10656132,0.34339988,-0.63882726,0.055984847,0.45991278,-0.6692897],[0.15874985,-0.119392134,-0.19742353,-0.60957354,0.18357219,0.28318337,-0.25417072],[-0.37113652,0.43916598,0.27193624,-0.520228,-0.2144683,0.3655652,-0.53570765],[0.83260417,-1.699712,2.6747808,1.3270547,-0.96657324,0.093039535,-0.45796528],[0.45241207,0.39900452,-0.50378394,-0.20505324,0.45373067,-0.19082053,-0.22071704],[-0.5270052,0.45971948,0.3313946,-0.29207435,0.1978061,0.19034018,-0.23600237],[0.9750541,-0.7961233,-0.0005789574,1.0066968,-0.9369118,0.042760722,0.18730567]],"activation":"σ","dense_2_b":[[-0.20384558],[-0.20811413],[-0.0037139736],[0.023454173],[-0.015772115],[-0.0065609645],[0.0068738465],[0.009471401],[0.003985857],[-0.9329477],[0.010725975],[-0.013339677],[-0.2815146]]},{"dense_3_W":[[-0.4011974,-0.33610415,0.13164108,0.33895674,0.06529623,-0.1580419,0.26291764,-0.24552977,-0.3933592,0.13941231,-0.35621086,0.5489147,-0.086336456],[0.1649218,-0.31881985,-0.48512995,0.2596072,-0.5807467,-0.19014847,0.5032025,-0.22611593,0.22070079,-0.30926946,0.35143164,0.12860067,0.1903238],[0.17895938,0.46517286,0.3067372,-0.06601107,-0.3844143,-0.499728,0.46086124,0.58410454,0.52920264,-0.4394692,0.23419406,0.01974897,-0.5022407]],"activation":"identity","dense_3_b":[[-0.0035552178],[-0.0043843286],[-0.0047028256]]},{"dense_4_W":[[0.80738455,0.86131907,1.2868857]],"dense_4_b":[[-0.0045010163]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_KAROQ_MK1.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_KAROQ_MK1.json deleted file mode 100644 index b4ce6b0ba..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_KAROQ_MK1.json +++ /dev/null @@ -1 +0,0 @@ -{"test_dict":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.5380118,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.5668384,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.49744788,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.1069546,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.022589128,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.87991786,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.3465033,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.35901418,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.74537796,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.0467105,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.40654802,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.22541186,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.39508894,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.5349423,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3032231,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.09337339,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.43609616,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.187037,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.03238472,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3256767,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.2560252,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.269817,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.90431225,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.39230934,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.3635288,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.9773381,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.329567,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.3380291,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.2777746,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.82472456,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7643237,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3661834,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.849533,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.1835219,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.2257897,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.032864716,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.32149622,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.88784707,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.523679,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.157843,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.81264627,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.847208,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.5404857,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.2102542,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.2051469,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.146302,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.4661444,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.49748513,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.0818156,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3345778,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.347531,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.8679907,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.29394773,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.09643532,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.19364843,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.1680533,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.17557147,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.21844473,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.50774,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3670707,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.40873116,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.35878894,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.60975885,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.55742276,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.505599,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3681715,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.5387529,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.35331953,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.60687315,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.86639714,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.27491,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.5394888,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.7878668,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5126742,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.3503757,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.439768,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.5785763,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.010508742,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.2693633,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.8410233,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.5314865},"input_std":[[7.989791],[0.7320975],[0.5846287],[0.035815567],[0.7283375],[0.7326722],[0.7346924],[0.7248922],[0.73135966],[0.7329609],[0.7217711],[0.03612053],[0.036042064],[0.035952937],[0.035485364],[0.03517163],[0.034833923],[0.034284007]],"model_test_loss":0.008391334675252438,"input_size":18,"current_date_and_time":"2023-07-16_20-00-17","input_mean":[[20.655447],[0.024584128],[-0.044770714],[-0.0072627976],[0.031237675],[0.029807081],[0.028027987],[0.009196148],[0.008076342],[-0.0015783679],[-0.0010444114],[-0.0072330763],[-0.0072172945],[-0.0072000716],[-0.007262945],[-0.0073047676],[-0.007441227],[-0.0077096256]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"test_dict_zero_bias":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.39948598,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6295606,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.65359616,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.2675315,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.061416015,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.76222944,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.4814665,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.33280456,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.5849962,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.0883316,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.20698664,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.33144438,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5527949,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.402524,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.1805307,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.094053596,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5350164,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.342611,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.12336916,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.4533029,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.2709537,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.2863967,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.85154873,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.55498785,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.2663321,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.8637229,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.23138924,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.3381034,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.3081448,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.69880867,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7338842,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.5125997,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.74419975,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.3198262,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.1027677,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.11119664,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.21705788,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.8385861,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.5986935,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.0079983,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.70014787,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.80401677,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.49810106,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.066942,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.0737326,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.2979757,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.56554705,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6396831,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.9987763,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3704159,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.17107952,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.89600575,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.48579958,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.18861425,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.36363924,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.3085387,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.048344463,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.3228795,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.3889711,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.5090332,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.35560045,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.45501107,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.70604444,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.50033605,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.37736052,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.5132567,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.4097024,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.40884608,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.5351974,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7473452,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.13379052,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.409246,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.7862364,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5806613,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.5019659,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.348442,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.69009113,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.08894949,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.1496372,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.9766548,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.4074421},"layers":[{"dense_1_b":[[1.2601088],[0.50795346],[-0.32973284],[-0.4278964],[-1.3286078],[0.99765503],[0.4339966]],"dense_1_W":[[0.39427435,1.5991782,0.0038050977,0.05548223,-0.04591027,-0.2224138,-0.627583,1.6541553,-0.17021364,0.0030925316,-0.277334,0.016327249,0.38390467,-0.043327343,-0.3199062,-0.24170461,-0.03311468,0.21610846],[2.0976179,-0.39388067,-0.02243466,-0.058260668,1.7147076,0.66427886,-0.5170263,-0.5367035,-0.5689552,0.20077214,0.29552126,-0.1721181,-0.46311033,-0.34615812,-0.0888081,-0.18715298,0.16055387,-0.35338402],[-1.5097122,0.621122,-0.105104305,-0.18648383,1.1042429,0.77002937,-0.6538228,-0.44171673,-1.0661969,-0.14405254,-0.44617876,0.24370627,-0.19782393,0.19933222,-0.35169846,0.094613805,0.40841854,-0.25420657],[-0.009321846,1.7888899,5.6288323,-0.05019591,-1.6935351,-1.3057272,-1.5961826,1.3134946,0.88433415,1.1306716,-0.14263214,-0.25278306,0.2156381,-0.15768535,0.17491388,0.10185023,-0.057640597,-0.037920576],[-0.6545767,-0.7725577,-0.043511603,0.39719597,0.44334525,-0.29454172,1.1796441,-0.43937585,-0.008846232,0.3591864,-0.6636783,-0.19979312,0.10855517,0.07740657,-0.16985726,-0.3615132,0.19928159,0.004342849],[0.43667847,-1.4340503,0.0061377757,0.02465778,-0.0052791275,-0.21163116,0.3254924,-0.83517593,0.3075678,-0.17314681,0.21212056,-0.5718453,0.25654393,0.030458353,0.27716112,0.18619251,-0.166307,-0.07792453],[0.6207286,-0.74188787,0.0014747722,0.19179606,0.21235986,0.023669226,1.3397173,-1.0746361,-0.6413778,0.07621638,0.2610392,-0.14456956,0.40803775,-0.25941938,0.1692598,-0.019315228,0.32499546,-0.2848976]],"activation":"σ"},{"dense_2_W":[[0.5846105,-1.1216323,0.012021069,0.519304,-1.2193648,-1.2420696,-0.9293579],[0.31864703,-0.029731255,0.39742234,0.43330926,-0.8345377,-0.45988193,-0.52471954],[-0.48068455,-0.14217594,-0.052064557,-0.05625134,0.531164,0.07339243,0.5302106],[-0.046448767,0.46001384,0.3322486,0.16847979,-0.012636936,-0.58880013,-0.039295547],[0.12264031,1.0059353,-0.25489268,-1.3256443,-1.3072578,-1.6475178,-0.24379867],[0.31735018,-0.26441798,-0.47050726,-0.44442534,0.295501,0.37262294,-0.3538891],[-0.16229963,-0.6157792,-0.3740346,0.06780694,0.21299857,-0.38519585,-0.64304954],[-0.57181144,0.0069005713,0.3935489,-0.05499202,0.48840258,0.091699615,-0.16876978],[-0.5405887,0.3622075,-0.65014505,-0.45285606,-0.744763,-0.6536307,-0.75167125],[-0.78169376,-0.41184205,-0.33792898,-0.32395944,-0.017056243,0.4648398,0.5686303],[0.75694907,-0.031489003,0.5235601,-0.03767089,-1.0404472,-0.4519171,-0.42058164],[0.7886114,0.5415332,0.15376541,0.5960243,-0.46606156,-0.8066629,-0.5520896],[-0.71171945,-0.42530975,-0.26570597,-0.23765114,0.702833,0.00345897,0.07370162]],"activation":"σ","dense_2_b":[[0.25844958],[-0.08529898],[-0.009525728],[-0.06614882],[-0.35542876],[0.0096092895],[-0.21220195],[-0.0058748396],[-0.17085731],[0.029518519],[-0.0972837],[0.04010498],[-0.0016747463]]},{"dense_3_W":[[-0.18374792,-0.50147384,-0.49204373,-0.5885765,0.39067307,0.540897,0.4194,0.56657135,0.32507578,0.05896129,-0.2124288,0.12981957,0.57857627],[-0.47317266,-0.6505695,0.60085654,-0.061350014,-0.4325399,-0.13409662,-0.28602767,-0.07301156,-0.21435276,0.73678,-0.27858484,-0.6291994,0.7327412],[-0.33367744,0.4530852,0.011034279,-0.47386295,-0.26150367,0.42310083,0.4337839,0.22710037,-0.19489768,0.16766186,0.013165514,0.4446457,0.35002133]],"activation":"identity","dense_3_b":[[0.026227264],[0.040914938],[0.029111717]]},{"dense_4_W":[[-0.19691564,-1.2166661,-0.37322426]],"dense_4_b":[[-0.03747132]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_KODIAQ_MK1.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_KODIAQ_MK1.json deleted file mode 100644 index a4416943e..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_KODIAQ_MK1.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.8827505],[0.8142013],[0.43200606],[0.0335122],[0.8031897],[0.80755675],[0.8117341],[0.7966046],[0.78498024],[0.76929677],[0.7570983],[0.033453178],[0.033477545],[0.033494856],[0.033401415],[0.033346288],[0.033206854],[0.033045664]],"model_test_loss":0.014859683811664581,"input_size":18,"current_date_and_time":"2023-08-10_08-29-12","input_mean":[[21.130602],[-0.03657342],[-0.007161284],[-0.014905003],[-0.031632286],[-0.032585967],[-0.03383271],[-0.03620179],[-0.033439096],[-0.028820572],[-0.025867859],[-0.014983235],[-0.014939225],[-0.014891624],[-0.014817177],[-0.014846561],[-0.014888054],[-0.015024225]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.058770206],[-0.4304619],[-0.95764273],[0.9789649],[0.3071246],[-1.0843322],[0.29053277]],"dense_1_W":[[1.1150838,0.26620921,0.25107178,0.17738831,-0.023969606,-0.25568375,0.642087,-0.07235758,0.50214267,0.158553,-0.09377773,-0.22190028,-0.2522553,0.41755903,-0.18087326,0.00043216505,0.30621696,-0.21445055],[0.015974922,-0.84892243,-5.3681054,-0.050087623,-0.2124193,-0.42669013,-0.114291534,-0.23167059,0.030389197,0.10423019,0.94438344,-0.23461752,-0.038574662,0.0118201375,0.1480159,0.12792908,-0.10750315,0.12776713],[-0.5820234,-0.46031782,-0.16132316,-0.0877754,0.45185134,-1.3221487,0.9612837,-0.026405975,-0.2516217,-0.06304958,-0.007870968,-0.45073366,0.26110536,0.3053481,0.032379672,0.058629666,-0.16963068,0.04947794],[0.55877084,0.8845751,0.083844095,-0.5641011,-0.32626018,0.87646186,0.018245557,0.0067298566,0.19446261,-0.108108655,-0.006403946,0.045923747,-0.2118138,0.297809,0.30262896,-0.26306453,0.10386135,0.05455493],[1.2901627,-0.3996759,-0.28787684,0.18365255,0.053760547,0.09131756,-0.5133632,0.09711644,-0.6057078,-0.13895018,0.07327148,0.005111278,-0.07828046,-0.12552834,0.103638284,-0.18598253,0.030758386,0.011194429],[-0.4342015,0.51031667,0.1613037,-0.030471211,-0.47826028,0.91528296,-0.59053975,0.06803067,0.2916587,0.011835373,-0.01411119,0.39738727,-0.3548122,0.093028545,-0.5990489,0.45427456,0.20879458,-0.16441117],[0.24265775,-0.87913877,-0.073302165,0.13811685,0.17514472,-0.79730994,0.32166055,-0.056882083,-0.15787257,-0.026820026,0.09571887,-0.09280119,-0.31957984,0.5578229,-0.14536849,0.12825605,0.16227205,-0.22222283]],"activation":"σ"},{"dense_2_W":[[0.4287232,0.05141774,0.08859513,0.16694608,-0.25920102,-0.2550965,0.045888633],[-0.9586875,0.465085,-1.0644909,0.51924497,0.9285218,0.19630893,-0.8210365],[0.9428464,1.0110649,0.0912787,0.45720592,0.062315438,0.06551054,0.21646087],[-0.07554614,-0.20435923,1.3854393,-0.21705866,0.371234,-0.29250124,0.62470865],[-1.2622341,-2.4971948,0.16009766,-0.7064093,-1.3925549,0.670143,-0.65157413],[-0.2641713,0.1407864,-0.7451972,0.05855014,0.46847665,0.5723797,-0.2294421],[-0.2798032,-0.28557223,-0.9484105,0.7195964,0.5352625,1.0608548,-0.7886381],[0.85884315,0.05392705,0.63131255,-0.55358535,-0.62303364,-0.9995628,0.95493674],[-0.25178987,-0.46490377,-0.7359025,0.15180402,0.27750358,1.2637253,-1.2951062],[-0.16450088,-1.0085304,-0.35299447,-0.53890646,-0.97189784,0.22255774,-0.34916818],[0.017366037,-0.47484067,-0.9362656,0.73510003,0.57900065,1.098403,-0.34750253],[1.0237606,1.1220717,0.5213622,0.46244594,0.1062727,-0.8956484,0.4866493],[-0.54411316,-0.14556162,-0.49516523,-0.41195434,-0.012445791,0.29190034,0.08672975]],"activation":"σ","dense_2_b":[[-0.14722908],[0.09051571],[0.0073402002],[0.049312294],[-0.10615275],[-0.09993395],[0.14013591],[-0.09219207],[-0.04097555],[-0.44420165],[0.23860474],[0.12013257],[-0.11851125]]},{"dense_3_W":[[0.012701052,-0.76359975,-0.11508211,0.8544662,-0.78156996,-0.3141182,-0.53640413,0.8538724,-0.2971632,-0.16812785,-0.5316125,0.75913155,-0.26657495],[0.2436656,-0.53503543,-0.0021990442,0.45916784,-0.1381139,0.4441993,-0.05345697,-0.33151543,0.0037798227,-0.5038917,-0.15709756,0.02627418,0.5737324],[0.004380816,-0.7665436,0.4899415,0.62682587,-0.6219003,-0.4759317,-0.62745434,0.6913393,-0.47453716,0.23334874,-0.62208974,0.22364703,-0.43715024]],"activation":"identity","dense_3_b":[[0.13937238],[-0.015101592],[0.007283584]]},{"dense_4_W":[[-0.5961717,-0.32134253,-0.7058984]],"dense_4_b":[[0.008483538]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_OCTAVIA_MK3.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_OCTAVIA_MK3.json deleted file mode 100644 index 4f65316dc..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_OCTAVIA_MK3.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.094625],[0.9343503],[0.47275993],[0.039587528],[0.91534966],[0.92308986],[0.92961305],[0.9121938],[0.894315],[0.8712891],[0.84302557],[0.039629184],[0.03963656],[0.039634563],[0.039580777],[0.03957161],[0.039473023],[0.039480753]],"model_test_loss":0.010150332003831863,"input_size":18,"current_date_and_time":"2023-08-10_11-03-32","input_mean":[[21.930943],[-0.009137672],[0.004150357],[0.006063881],[-0.012747505],[-0.012902961],[-0.012921325],[-0.0107959015],[-0.009959326],[-0.007661503],[-0.0022189163],[0.005970253],[0.0059734355],[0.005978737],[0.0060841083],[0.0061559486],[0.006342566],[0.006470583]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0016042],[0.30121937],[0.5243282],[-0.37925154],[0.09780045],[-1.280653],[0.939577]],"dense_1_W":[[1.9456844,-0.23871988,-0.00096057716,-0.120664135,0.6110457,0.9801692,-0.49786648,-0.3335355,-0.16192155,0.2149353,0.18063189,-0.060477342,0.32169268,-0.21911122,-0.31224453,-0.06690952,-0.348577,0.2574717],[0.8044473,0.40910536,-0.00077739207,-0.1332547,-0.44118187,0.09815779,-1.422512,-0.1586437,0.00079494115,-0.27336416,0.036574032,0.10625827,0.2505548,-0.37372994,0.04841167,0.24479657,-0.18796268,0.14709403],[-1.9839507,-0.07971294,0.0019432222,-0.1465764,0.47511905,1.4785819,-0.6126462,-0.8653647,-0.006930718,-0.05133041,0.4208154,0.3623695,-0.07688759,-0.46326146,0.049198236,-0.29932696,-0.10871309,0.13249245],[-0.01090139,1.4570909,2.8342102,-0.48148742,0.35504207,0.8265004,0.22427893,-0.44684047,0.87371486,0.41123086,0.05926164,-0.3498932,-0.20314151,-0.4126248,0.6597188,0.18670116,-0.13712086,0.04479702],[-0.017381541,-0.7597381,-3.9741704,0.966278,-0.8725842,-1.0976232,1.3351153,0.36389372,0.6396286,-0.28108513,0.5655249,-0.3259955,0.2685084,0.3538014,-0.99265057,0.0020220215,0.08644423,-0.016739462],[-0.4040077,1.5493203,-0.0015337409,-0.057152465,-0.4507684,1.1744777,-0.84242934,0.26143765,0.5450927,-0.16338348,-0.12852266,-0.04006952,0.61630785,-0.35684994,-0.26787806,-0.173013,0.1754258,-0.055330947],[0.14463891,1.3947294,0.0005817746,-0.11709302,-0.47823873,0.9985025,-0.5435925,0.28843075,0.4257345,-0.07990765,-0.15169789,0.049027964,0.32417342,-0.14295861,-0.21804018,-0.1728184,0.25523916,-0.118601166]],"activation":"σ"},{"dense_2_W":[[-0.13598546,0.48721725,-0.8770504,-0.10435272,1.2942611,-0.6188507,-0.77000535],[0.2963742,-0.06368987,-0.6158674,0.5706844,-0.62964815,-0.6725343,-0.70922905],[-0.65155697,-0.40622166,0.22409256,-0.5447109,0.30369374,-0.6313153,-0.47783092],[-0.25578108,-0.23481992,0.6473863,-0.4388097,-0.16786619,-0.24785686,0.13121009],[-0.7862219,-0.51441395,0.14683217,0.16958761,0.822131,-0.8929698,-0.9890509],[-0.11013757,0.13794002,-0.2200882,-0.5511851,-0.7512739,-0.34854394,-0.20708162],[-0.26325488,-0.068378806,0.30052987,0.44717714,-0.19997324,0.36592284,0.37900636],[-0.56599057,-0.20042972,-0.51274085,0.27466905,0.329293,-0.9691359,-0.2049081],[-0.084157735,-0.6273445,0.22159277,-0.27066445,-0.27510265,-0.6879669,-0.9523734],[0.40842152,0.49088025,0.24065876,0.17004599,-0.26951402,0.06465446,0.33384213],[0.5391135,-0.5008811,0.4018758,0.16503108,-0.49227586,0.34286293,-0.2673176],[0.031132208,0.06428439,-0.086133376,0.35238424,-0.34203455,0.54796845,0.7357129],[0.060671475,0.49638665,0.6812915,-0.52441,0.41805837,0.5390166,-0.07453658]],"activation":"σ","dense_2_b":[[1.0358273],[-0.024130732],[0.059400935],[-0.027526159],[0.09260186],[-0.20580374],[-0.062025692],[0.39389342],[0.077137515],[-0.09825774],[-0.051716425],[-0.084061615],[-0.025274398]]},{"dense_3_W":[[-0.14006962,0.5902041,0.18080363,0.48413566,0.33100846,-0.11978409,-0.63116825,-0.13776208,0.29580384,-0.17148037,0.22820434,-0.15557605,0.31175599],[0.37938893,-0.13863787,0.45991153,-0.014412937,0.30609646,-0.023109397,-0.64584565,0.093050435,0.42860112,-0.40409505,-0.398128,-0.640976,-0.17863272],[-0.34660983,-0.50709665,-0.55247855,0.5898295,-0.4875454,-0.35633042,-0.19656834,-0.66706467,-0.4074692,-0.3361508,0.117474474,-0.3539698,0.6108807]],"activation":"identity","dense_3_b":[[-0.022861203],[-0.014076285],[0.034564495]]},{"dense_4_W":[[-0.60573244,-0.98281205,0.80961186]],"dense_4_b":[[0.019623742]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_SUPERB_MK3.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_SUPERB_MK3.json deleted file mode 100644 index 74f3bb7e6..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SKODA_SUPERB_MK3.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[11.005025],[0.97968346],[0.50101554],[0.038736638],[0.9587485],[0.9655901],[0.971756],[0.95295596],[0.9315219],[0.90679765],[0.8827432],[0.038590446],[0.03862441],[0.03865234],[0.03871767],[0.038792223],[0.03873497],[0.03861525]],"model_test_loss":0.010799731127917767,"input_size":18,"current_date_and_time":"2023-08-10_12-21-52","input_mean":[[22.878464],[0.031642012],[0.0168804],[0.009622783],[0.030209461],[0.030093499],[0.03104034],[0.038059395],[0.040959135],[0.040258918],[0.040640317],[0.009454411],[0.009486841],[0.009516454],[0.009592338],[0.009573765],[0.009518463],[0.009365908]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.1818612],[-0.09344887],[-1.8393922],[1.848314],[1.0065805],[-0.08666866],[0.7747504]],"dense_1_W":[[-0.8857707,1.5844063,-2.7639117,0.8296629,-1.5801734,-1.389664,0.6718809,0.21833602,-0.3579308,0.031948198,0.036747955,0.14046027,-0.10389215,0.24267684,-0.58785427,-0.29687718,-0.071204364,0.17921484],[-0.016061021,-0.8927914,0.0014837141,0.16529202,-0.31931162,-1.5972285,1.0674282,0.50527793,0.00036276158,0.6643216,-0.70242655,0.23176064,-0.23684219,0.020929113,0.18165103,0.2728483,-0.077427186,-0.028263727],[-1.1033577,-1.4215872,0.010086168,-0.17611827,0.2112764,-0.69066954,-0.083308466,0.15166493,-0.22307171,-0.075834244,0.035160135,-0.26813668,-0.31942832,0.5206709,0.05213391,0.1393356,0.24755146,-0.20669232],[0.83160627,-1.0528738,0.010402418,-0.8488269,-0.097700946,-0.8356935,-0.030544959,-0.045691635,-0.12981445,-0.22643599,0.08581046,-0.099290386,-0.0029221023,0.43224323,0.16066676,0.23335454,0.26151142,-0.19559892],[1.6938869,0.33258435,0.011718149,0.5278453,0.4084221,0.054189947,0.6158366,0.5923816,0.31159598,-0.19908112,0.0759474,0.18903963,-0.16102462,-0.31830838,0.122031696,-0.5454575,0.14843899,0.0009889763],[-0.18688406,-1.837496,-0.024467822,-0.18667667,1.5253651,-0.87217486,0.6304656,-0.3631879,-0.93472433,-0.4855514,0.8494961,-0.29013696,0.11480595,-0.046378586,0.04579505,0.6772069,0.030312326,-0.2840396],[0.5354849,-0.16436046,-2.2868845,0.9490928,-1.1401188,-1.6175885,2.1010857,-0.067001574,0.09170741,0.23366773,-0.13356704,-0.38347217,-0.17166469,0.5771494,-0.16453075,-0.5179118,-0.2526112,0.2366501]],"activation":"σ"},{"dense_2_W":[[0.33937505,-0.3745738,-0.9080001,-0.67459136,-0.22434857,-0.68243057,0.15986687],[-0.4707506,0.3539919,0.7182431,0.32069924,0.52431095,0.47054338,0.32751095],[-1.0941919,-0.02285758,-0.6026077,-0.6543617,-1.1643189,-0.40606982,-0.530394],[0.4252591,0.47353566,-0.49499482,0.49766955,0.9336523,0.4235022,0.91593933],[0.5621498,0.24484019,0.066795506,-0.39081028,-0.2126147,-0.17618422,0.08806277],[-0.21437049,-0.086400345,-0.70952827,0.24951175,0.2172522,-0.935455,0.3494222],[-0.027205786,-0.3861311,-0.329584,0.3939693,0.21568625,-0.037430923,-0.44425386],[-0.8316691,-0.6763449,0.074327685,-0.473199,-0.55408454,-0.17554076,0.10902519],[0.24072582,-0.45537603,-0.5833832,0.25576162,0.19144523,-0.66718787,-0.2368218],[0.9988664,-0.3536028,-0.28179932,0.7269398,1.1277015,0.6262987,0.9872559],[-0.081231736,0.76173663,0.36381385,-0.087001294,0.15438923,-0.6396298,0.33097985],[0.37046397,0.6737554,-0.0037287436,0.1967084,0.20252821,0.25889185,-0.26074913],[-0.50508755,0.007956352,-0.56175256,0.4734349,0.11897713,-0.8310094,0.056679618]],"activation":"σ","dense_2_b":[[0.40672347],[-0.15762824],[0.54028726],[-0.06825271],[-0.14409027],[-0.24412309],[0.13284369],[0.13380992],[0.3824313],[-0.10148208],[-0.16163772],[-0.21077214],[0.2533245]]},{"dense_3_W":[[-1.1355319,0.3370882,-1.0809343,0.49130934,0.20389263,-0.79736996,-0.023168638,-0.094694644,-0.6435565,-0.079334155,-0.31444725,-0.088145025,-0.46537364],[-0.7897674,0.58977884,-0.6444405,0.5475269,0.0090896,0.1407256,-0.40847594,-0.47964928,-0.5811728,0.7200515,0.37270215,0.26434785,-0.682192],[0.07739398,0.37235165,-0.6278828,-0.1572289,0.14061572,-0.46377057,-0.18825918,-0.50748676,-0.5449003,-0.11498902,-0.10287988,0.50479686,0.14272374]],"activation":"identity","dense_3_b":[[0.019560132],[-0.021147352],[0.01810392]]},{"dense_4_W":[[-0.44403714,-0.84635425,-0.24351013]],"dense_4_b":[[0.015087563]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_ASCENT.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_ASCENT.json deleted file mode 100644 index bb2bce72c..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_ASCENT.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.758843],[1.3803611],[0.60948026],[0.045717984],[1.3632656],[1.3669009],[1.3716704],[1.3600131],[1.3428026],[1.3118118],[1.2692281],[0.04556848],[0.045585617],[0.045588113],[0.045418713],[0.04517924],[0.044783145],[0.04430147]],"model_test_loss":0.011302465572953224,"input_size":18,"current_date_and_time":"2023-08-10_14-53-35","input_mean":[[22.14633],[-0.09750815],[-0.016923292],[-0.008263297],[-0.09257404],[-0.093882],[-0.095394194],[-0.10115487],[-0.105775625],[-0.10726142],[-0.10426775],[-0.008418747],[-0.0083834],[-0.008342148],[-0.008217269],[-0.008256564],[-0.008261369],[-0.008310724]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.028778102],[-1.968203],[0.065823115],[1.8248968],[0.062292587],[-1.7103531],[-0.01996085]],"dense_1_W":[[0.0070845596,-0.60425925,0.13626827,0.58880633,-0.31271362,-0.61375195,0.66517067,0.22636458,-0.19881134,0.45755818,-0.34704024,-0.57213944,-0.011795754,-0.6249568,-0.1684797,0.32110855,-0.17260504,0.544297],[-0.728326,-0.6023388,-0.058824457,0.31488872,-0.22620982,-0.60898775,2.0038636,-0.3022711,-0.629738,0.02945903,0.13288042,-0.14117523,-0.017454179,-0.034289096,0.067219295,-0.25439438,-0.053118344,0.09879211],[-0.020241546,-0.32952714,0.010935147,0.13660449,0.22784045,0.9439816,-1.076848,0.3701509,0.02565278,-0.019304488,0.13404894,0.18276764,0.43549806,-0.29936683,-0.58802724,-0.17244393,0.059832945,0.14556362],[0.76759815,0.06043721,-0.05881449,0.0035122675,-0.10848625,0.052874193,0.8961308,-0.89096814,-0.38440028,-0.16148087,0.24437909,-0.3767321,0.020551253,0.5319493,-0.12341046,-0.055117548,-0.11515104,0.11642417],[0.035288017,-1.6319109,-6.531466,0.11385578,0.8703579,-0.2708121,0.03723273,0.90277404,-0.28877074,-0.044411846,0.10059958,-0.33312798,-0.5378801,0.12608767,0.355296,0.48987788,0.32266265,-0.3474462],[-0.7375854,0.057307318,0.058046028,0.19952175,0.46198282,0.466313,-1.1714203,-0.15773736,0.28007728,0.14972468,0.010271487,-0.10134099,0.1349294,-0.18732592,-0.0563053,0.050620757,0.048619322,-0.045900762],[-0.0032983767,-0.9483289,0.020740977,0.16430958,-0.05373888,-0.6577905,0.2967871,0.2897931,0.2731,-0.18671848,0.084359705,-0.005540786,-0.0081646815,0.12515508,-0.08342288,-0.052237507,0.26822442,-0.21108986]],"activation":"σ"},{"dense_2_W":[[-0.45338973,-0.20294967,0.5083342,-0.42460576,-0.63909435,0.4879755,0.012130023],[-0.2742753,-0.61631083,0.46697986,-0.45406902,-0.06088979,0.76950836,-0.4132321],[0.81678456,-1.1331547,0.32828367,-0.31268513,-0.8846842,0.6429822,-0.4893232],[0.879309,0.7746291,-0.6991977,-0.23530038,-0.67047966,-0.1361894,0.9743538],[0.31158212,-1.6510494,0.1974917,-0.33475468,-0.11659852,0.07471639,-0.0023190496],[-0.6007021,0.55620384,-0.050591104,0.6911001,0.50198555,-0.48155546,0.5246929],[-0.81362003,0.870096,-0.6034486,-1.8557204,-0.71382594,1.4265903,0.31279352],[0.6726662,0.87645346,-0.31120607,-0.057908148,-0.517195,-0.5856469,0.6892038],[-0.62789345,-0.81853545,0.31356138,-0.040097605,0.6366377,0.31337318,-0.79096055],[-0.7211644,1.0459608,0.061597116,0.3745668,0.37840834,-0.46162283,0.76644534],[0.3500098,1.3790991,-1.1291443,-0.20502144,0.2560334,0.01199343,-0.027191881],[0.65701747,-0.9248509,0.506126,-0.16672745,-0.42342398,-0.14072593,-0.6027308],[-0.67928207,-0.19559407,-0.040364254,-0.47893044,0.14672689,0.6760947,-0.5760793]],"activation":"σ","dense_2_b":[[-0.014492411],[0.07639171],[0.39956445],[-0.16650708],[-0.13319126],[-0.13508296],[-0.10059368],[-0.31607836],[-0.0461397],[-0.32838032],[-0.20038198],[0.037399642],[-0.039441753]]},{"dense_3_W":[[-0.33679157,-0.009600073,-0.9610766,0.7423044,-0.19008559,0.21044315,-0.7233725,-0.04264747,0.26311195,0.57560843,0.4490669,-0.4002034,-0.7852221],[0.4784453,0.67048156,0.70986277,-0.8041704,0.3298966,-0.34861046,0.2399805,-0.27719498,0.5779557,-0.22748941,-0.932461,0.3537534,0.24791418],[0.58087116,0.6521763,-0.35804045,-0.07539161,0.062361475,-0.29150185,0.23337866,-0.089632176,0.21668643,-0.28445706,-0.36395082,0.26074025,0.598436]],"activation":"identity","dense_3_b":[[-0.030428782],[-0.123883836],[-0.12339338]]},{"dense_4_W":[[-0.23482278,0.8056521,0.30850294]],"dense_4_b":[[-0.10144986]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_FORESTER.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_FORESTER.json deleted file mode 100644 index f269e03b9..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_FORESTER.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.800139],[1.4024142],[0.64793754],[0.04852409],[1.3756377],[1.3851136],[1.3934203],[1.3648111],[1.3329811],[1.3011713],[1.2632433],[0.04835437],[0.04840405],[0.04844234],[0.048357654],[0.0482471],[0.047991928],[0.047582824]],"model_test_loss":0.007408012170344591,"input_size":18,"current_date_and_time":"2023-08-10_16-38-20","input_mean":[[23.81501],[-0.049737465],[-0.012033205],[-0.007154475],[-0.042333253],[-0.04411629],[-0.046351664],[-0.046337746],[-0.0452032],[-0.0461177],[-0.04440744],[-0.007060857],[-0.0070801843],[-0.0070975143],[-0.0070964643],[-0.007056378],[-0.0070534865],[-0.0071490407]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.14959592],[0.15145145],[-0.31445217],[-1.278996],[0.042432982],[1.5067866],[-0.032994382]],"dense_1_W":[[0.007527928,-0.5552118,-0.033658482,-0.098787725,0.07584574,-0.9390659,0.81876254,0.20194316,0.43864456,-0.4218525,-0.039264686,0.16177176,-0.3515836,0.20080848,0.34289953,-0.09344094,-0.35971025,0.22003576],[0.09012296,0.46685427,0.0064236997,0.18229099,0.07276261,0.7347331,-1.3846129,0.22982895,0.4774952,-0.22901195,-0.07560122,0.29164892,0.25852647,-0.08081211,-0.041323017,-0.22754644,-0.36422738,-0.012168264],[-0.007923612,1.5721923,7.249816,0.24075961,0.25590533,-0.088694036,-1.1871089,-0.96667105,0.9330669,0.98532987,-1.0378566,0.5749717,-0.40850392,0.24602483,-0.63786286,-0.6482208,-0.15704682,0.6276128],[-0.963277,0.03193962,0.017269593,0.57181937,0.88669837,0.27691013,-1.8479526,0.38129202,0.73344886,-0.16890727,-0.1942604,0.950727,0.9030019,0.033808593,-0.89199686,-0.8695169,-0.48222977,-0.1936048],[0.003948569,-0.6626056,-0.026783565,0.24455325,0.13850336,-0.87496305,0.30995417,-0.12258559,0.627965,0.28786364,-0.36571527,-0.14854349,-0.048926286,-0.03496435,0.18779114,-0.090603314,0.06736233,-0.109832205],[1.1487782,0.404077,-0.03660598,-0.08010621,0.22780214,0.27421752,-1.7048142,0.8248977,0.32876998,0.15378678,-0.34877867,-0.92275876,-0.83582413,-0.37334695,0.31583604,0.31877267,0.8586441,0.715129],[0.0010568867,1.0778173,0.04372921,0.6322534,-0.1799248,-0.3518717,1.8120258,-1.5917265,-0.8620765,-0.35745504,0.2233659,-0.0019629926,0.28671154,0.32253462,-0.85555124,-0.21950537,-0.112213776,0.2568781]],"activation":"σ"},{"dense_2_W":[[0.10897138,-0.723212,0.03340947,-0.38988578,-0.31490615,-0.007838475,0.05767578],[0.124002986,-0.47957873,-0.6278711,-0.20655042,-0.17151697,-0.8776442,-0.36946294],[0.34166458,-0.6827676,0.36771443,-0.24060813,0.34594595,-0.74794686,0.22926417],[0.017008245,0.19041075,0.084082685,0.081093706,0.4542936,0.10335207,0.25682083],[0.5069386,0.24292083,-0.4515972,-0.18613566,0.21341953,-0.4916771,0.5676118],[-0.79913807,0.49238104,0.19868188,0.75191754,-0.41708577,-0.453282,-0.456025],[0.25128815,-0.63992566,-0.4836454,-0.3934495,0.094238296,-0.68461305,0.33668476],[0.01528515,0.78505975,0.5019243,-0.31464717,-0.74084806,0.8338816,0.1128433],[-0.51994556,0.15239593,-0.07230343,0.24837533,-0.6899928,0.0865479,-0.539543],[0.2825089,-0.38502663,0.44325826,-0.430329,0.21890175,0.1125448,-0.37878212],[0.16606337,0.54976463,0.36211267,0.32275504,-0.48639286,-0.25836277,-0.336691],[-0.06592535,0.7600238,-0.17236032,0.496856,-0.6375664,0.18681967,-0.40907857],[-0.28911406,-0.26927066,-0.5852496,-0.33134258,0.08002008,-0.1575813,0.27370805]],"activation":"σ","dense_2_b":[[-0.35370803],[-0.20628847],[-0.111258335],[-0.1018301],[-0.056314364],[-0.092298076],[-0.07329908],[-0.023466475],[0.112976246],[-0.077543356],[-0.033790935],[0.04352653],[-0.080127224]]},{"dense_3_W":[[-0.50061566,0.29911298,0.27225292,0.13542368,0.36572888,-0.65222454,0.3313954,-0.33749554,-0.6381314,0.39514777,-0.084563196,-0.4374779,0.39208907],[-0.14953244,-0.20290117,-0.599371,-0.1296707,-0.32913446,-0.37221158,-0.29940695,-0.34908745,0.2913214,0.17797685,0.25834674,0.75962204,-0.38031256],[-0.59162396,0.6006983,-0.23583624,-0.18037513,-0.533629,0.23406217,0.08210266,0.45098656,-0.05068087,-0.46481112,0.37245923,-0.113958105,0.26854116]],"activation":"identity","dense_3_b":[[-0.058710456],[0.06673158],[0.06627157]]},{"dense_4_W":[[-1.143745,1.012412,0.67946994]],"dense_4_b":[[0.060790185]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_IMPREZA.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_IMPREZA.json deleted file mode 100644 index 0bae6debe..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_IMPREZA.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.554121],[1.0740528],[0.4476513],[0.042985532],[1.0663103],[1.0689878],[1.071583],[1.0549195],[1.0335085],[1.0030197],[0.9723682],[0.042850573],[0.042880993],[0.042904507],[0.04281879],[0.042651407],[0.04230733],[0.041820873]],"model_test_loss":0.022656971588730812,"input_size":18,"current_date_and_time":"2023-08-10_17-58-30","input_mean":[[22.76271],[-0.025877997],[0.0022960093],[-0.009181171],[-0.02727445],[-0.027402772],[-0.027459135],[-0.026559947],[-0.02817579],[-0.029742032],[-0.030806256],[-0.0091993585],[-0.00921486],[-0.009230055],[-0.009324119],[-0.00943795],[-0.009580347],[-0.009762122]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.5694719],[-0.20375408],[0.4239076],[-1.5491991],[-2.7061498],[1.5443199],[-3.3281188]],"dense_1_W":[[-0.1568525,1.7437768,5.172882,-1.1876678,-2.9987805,-0.5681597,-0.72784686,-0.56439,3.2104652,1.4470582,-1.4493226,1.616085,0.16703165,-0.029379552,-0.89520353,-0.08414323,0.035069145,0.27360746],[0.008605118,1.5699749,-0.034170814,-0.6517424,0.1554151,1.9415936,-0.6549746,-0.14080332,0.4873717,0.20128046,-0.07373715,0.72448504,-0.18958189,-0.3032506,-0.3716506,0.21436751,0.13051425,0.057122074],[0.15251416,-1.065147,-1.7042818,-0.18689084,1.1120772,-0.40736163,0.34153485,-0.06619109,-0.19624624,-0.5001997,0.3767836,-0.46413225,0.124430165,0.1741939,0.08300067,0.4339266,0.39133996,-0.4509936],[-1.9674213,0.08717078,0.029132722,-0.03513353,-0.2589703,1.6724654,-1.3558731,-0.1305793,-0.454886,-0.012608211,0.23873848,-0.34175423,0.23151904,0.7033776,-0.41631103,-0.5752804,-0.4836925,0.59687835],[-0.7207827,-0.5354017,-0.046089556,0.70448333,-0.36087984,-1.4759765,1.6575412,-0.75853246,-0.4408815,0.08790331,0.0717399,-0.33782014,-0.42041263,0.67508817,-0.24991857,-0.3216102,-0.41419834,0.3666627],[1.9532421,0.33528504,0.01916575,0.41987598,0.10209625,1.2647687,-1.4621202,0.04530512,-0.48216137,-0.5880018,0.5948106,-0.49690482,-0.012825885,0.407025,-0.21983282,-0.46802706,-0.1458972,0.21309836],[-0.7360502,0.09303879,0.05160484,-0.5698299,0.48270965,1.2655245,-1.0951636,0.7825874,0.5584368,-0.051464483,-0.10931349,0.18838416,0.48844352,-0.7061164,0.29695016,0.34917378,0.2150316,-0.281181]],"activation":"σ"},{"dense_2_W":[[-0.07180556,0.3327603,-0.38922572,0.48622698,0.09493802,0.26061895,0.23152085],[0.13407795,-0.67967266,0.05478834,-0.13644974,0.38578004,-0.13981605,-1.063277],[-0.015875516,-0.22446778,-0.25920233,-0.21318886,0.96766865,-0.20522757,-0.96453786],[0.08992157,0.18349336,0.0824512,-0.18648697,-0.5639966,0.38651267,0.2273873],[0.24735251,-0.2508453,0.11087025,0.45425788,-0.4750976,0.48374006,0.7154399],[-1.4328333,0.5445412,0.7513447,-0.29624668,1.3955733,-0.7848697,-0.35838512],[-1.3571904,0.019299721,0.74097097,0.21410283,0.48808393,-1.7108941,0.8460511],[0.34152254,-0.33008227,0.7538879,-0.782962,0.46280092,0.3184853,-1.060949],[-0.5959307,0.6231766,0.24205552,0.80450344,-0.20037276,0.2900327,0.34695983],[-0.04536962,-0.6977615,0.08347324,-0.3414067,0.76720893,0.07663101,-0.62674546],[-0.08212232,-0.48272756,-0.11815556,0.24696878,0.023860326,-0.47122,-0.32275018],[-2.5981476,-0.62226206,0.30502877,0.7207847,0.95814323,-0.7556528,0.5867901],[0.18742424,0.22045845,0.27814955,0.33897662,-0.19170812,0.03715238,0.15590559]],"activation":"σ","dense_2_b":[[-0.05376892],[0.23207775],[0.08851935],[-0.051318903],[-0.23005556],[-0.015357251],[0.06677577],[0.3493236],[0.010827263],[-0.029838517],[-0.059241645],[-0.45090887],[0.0051090852]]},{"dense_3_W":[[0.43776008,-0.4779542,-0.6273563,0.012430885,0.27310228,-0.6358059,-0.5068906,-0.45288852,0.5793986,-0.29245862,-0.21443059,-0.15231055,0.4353823],[0.24600616,0.26503375,-0.1618708,-0.22456193,-0.43281186,-0.17235023,-0.4949653,0.4828677,-0.109212846,-0.3444521,-0.46777263,0.5679082,-0.11389996],[0.5157795,0.24814758,-0.17129026,0.32940918,0.6862252,0.45439878,-0.3838788,-0.6090692,0.4296436,-0.07106129,0.5077451,-0.04794848,-0.5777281]],"activation":"identity","dense_3_b":[[0.0597104],[-0.036633834],[0.03006256]]},{"dense_4_W":[[1.408938,-0.40635464,0.28050324]],"dense_4_b":[[0.051838256]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_IMPREZA_2020.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_IMPREZA_2020.json deleted file mode 100644 index 56091f65a..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_IMPREZA_2020.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.894573],[1.1526463],[0.49937436],[0.04181223],[1.1407756],[1.1450312],[1.1480577],[1.1401104],[1.123895],[1.1006547],[1.071595],[0.0416507],[0.041704524],[0.041748393],[0.04176903],[0.041703388],[0.041490186],[0.041185617]],"model_test_loss":0.013009187765419483,"input_size":18,"current_date_and_time":"2023-08-10_21-20-07","input_mean":[[24.805859],[0.0049672336],[0.0013684959],[-0.001192497],[0.0036358428],[0.0034303954],[0.004092047],[0.005534218],[0.0066732266],[0.004927845],[0.0062723476],[-0.0012077604],[-0.0011977365],[-0.0011862671],[-0.0011791526],[-0.0012019373],[-0.001338799],[-0.0015223476]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.042427626],[-2.5019999],[-0.0457297],[-0.7153923],[-0.7774993],[-0.06926592],[-2.4368992]],"dense_1_W":[[-0.0009291319,0.27767056,-0.07892523,-0.059060324,1.0241088,1.171279,-0.069413096,-0.12784159,0.058901682,-0.18805476,0.4193225,-0.3469123,0.42202514,-0.36080348,-0.7251315,-0.3008201,-0.033229448,-0.49506444],[-0.40471604,0.11814647,-0.1926038,0.0060851052,-1.1522694,-1.2816894,1.9390084,-0.5257205,-0.2785602,-0.118004374,-0.020688536,0.07099932,-0.389517,0.20363228,-0.030239882,0.6832831,-0.015321787,-0.26263818],[-0.00991332,-2.1251974,-3.9875517,0.5100302,2.949812,0.787714,0.90843993,-0.38894913,-2.0025148,-2.1428773,1.4694284,-0.76132494,-0.45982483,0.11538664,-0.18600582,0.46312463,0.7552948,-0.31822762],[-0.46726972,-0.9092647,1.3574834,0.18761194,-0.81670135,-1.0397257,1.2560849,-0.21459231,-0.1436863,-0.16160814,0.41930124,-0.32464686,0.17093562,-0.20039976,0.055896353,-0.4330081,0.52754503,0.12463856],[-0.5152346,0.50216174,1.3355443,-0.31773502,-0.46232986,-0.13133429,-1.4018828,-0.43890733,0.06662451,-0.043737113,0.3108043,0.19670644,-0.093163505,-0.28796571,-0.051473662,0.24918097,0.38881204,0.02669732],[-0.02088246,2.2406785,-0.22520858,-0.70286745,2.008803,1.9785228,0.02844807,0.97084755,0.49748123,0.7884559,0.14848712,0.87087315,0.40047103,-0.21100943,-0.21773107,0.57993966,0.16083455,-0.54391414],[-0.3943676,-0.26845726,0.19103855,0.21092215,1.200674,1.3899878,-2.1009598,0.73901653,0.24895392,0.09445688,0.020025935,-0.21680212,0.3247223,0.046129495,-0.4636503,-0.37354514,-0.05204169,0.26103115]],"activation":"σ"},{"dense_2_W":[[-0.29813394,0.97317356,0.18235527,0.5965462,-0.36117476,-0.357781,-0.6302886],[0.4669501,-0.26381913,-0.6718241,-0.55993664,0.75606084,-0.22786976,0.54741734],[0.45668933,-0.81978554,-0.4400848,-0.47736016,0.9749981,-0.41887143,0.5611882],[-0.23562466,-0.33685845,-0.63146794,-0.25962546,0.7455925,0.050860852,0.47903395],[0.11492595,0.39062494,-0.5413327,-0.040900126,-0.17837498,0.06629638,0.052479822],[0.3525208,0.28856075,-0.14136873,0.6413087,-0.51915973,-0.2774327,-0.9177848],[-0.17333238,0.8689579,-0.28932738,0.566288,0.11427143,0.06013824,-1.1550378],[-0.5458432,0.5894391,-0.047653124,0.15687895,0.33795092,-0.5042759,-0.22974871],[0.49124256,-0.7596094,-0.17393427,-0.37332547,0.025444454,0.34669602,0.47311735],[0.31282023,-1.2118286,0.017776541,-0.91698223,0.24819252,-0.0926613,1.2513487],[0.33180416,0.23580849,0.46787393,-0.09696695,-0.25229496,0.3558893,-0.6826248],[0.42314368,0.07992972,0.4903785,-0.3677389,-0.38366356,-0.34357548,-0.33236912],[-0.37016624,0.46486557,0.060417723,-0.48779157,0.024656558,-0.38848272,0.0547722]],"activation":"σ","dense_2_b":[[-0.0017060944],[0.016006682],[0.13619791],[0.01692232],[-0.2458614],[-0.01584404],[-0.11229285],[-0.037353944],[-0.0535534],[0.023917647],[-0.08311039],[-0.05629295],[-0.21274085]]},{"dense_3_W":[[0.4620643,0.1110241,-0.73991674,-0.04964699,-0.49397373,0.636488,-0.21777737,0.45773318,-0.31195316,0.26977688,-0.015185564,-0.0892626,-0.50908834],[-0.45361328,0.48187032,0.123036705,0.6407995,-0.29581347,-0.18150009,-0.42016354,-0.3740721,0.5890714,0.49763745,-0.43375558,-0.2785329,-0.33093747],[-0.034139745,0.07872775,0.14715545,0.5339573,-0.10824458,0.07166932,-0.20306881,0.021034054,-0.44093442,-0.24978448,-0.026970783,-0.16316907,-0.21309401]],"activation":"identity","dense_3_b":[[-0.012436828],[0.029966448],[0.10008727]]},{"dense_4_W":[[-0.48937565,1.0721666,0.037118435]],"dense_4_b":[[0.023898797]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_LEGACY.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_LEGACY.json deleted file mode 100644 index 33a50713e..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_LEGACY.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.185515],[1.6282288],[0.35043508],[0.031132786],[1.7255819],[1.6982063],[1.6648296],[1.4761653],[1.3519272],[1.2236267],[1.1229782],[0.03105924],[0.031098329],[0.031127678],[0.031184744],[0.031371836],[0.031613626],[0.03144637]],"model_test_loss":0.04537874087691307,"input_size":18,"current_date_and_time":"2023-09-02_23-19-34","input_mean":[[16.421978],[-0.048192535],[-0.013311911],[-0.030576248],[-0.05147835],[-0.051736772],[-0.051158622],[-0.051310074],[-0.056091797],[-0.051997066],[-0.04342065],[-0.030474063],[-0.03050476],[-0.030556701],[-0.030765096],[-0.030835558],[-0.0308675],[-0.030843992]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.0047161067],[-0.15242413],[-2.1423926],[-3.0072546],[-0.8894896],[1.5538071],[-1.542048]],"dense_1_W":[[-0.012829974,0.30741772,-0.03263021,-0.085545234,1.1814696,0.5471415,0.9120527,-0.33152023,0.5066247,-0.5210931,0.5341946,0.09236861,-0.39759701,0.02910307,-0.00886832,0.41334194,-0.23273322,0.016523872],[0.047321085,-0.15492304,-0.077865265,-0.804299,-3.377934,-3.6115973,-2.283943,5.437118,2.2738755,-0.043271527,0.16104881,0.112040475,0.5114801,0.093201585,0.13260198,-0.2661622,0.1796879,0.04888338],[-1.5367671,2.3720562,-0.02027605,-0.025416356,-1.4381312,-0.9349471,0.24836966,1.367659,0.3289632,-0.055137575,0.12185219,0.45477563,-0.30157885,-0.07613766,0.12895256,0.12588494,-0.1591801,-0.22217746],[-1.3666407,-3.5649407,0.02042984,-0.38937125,1.3380835,1.9989939,-0.20659405,-1.5160191,-0.104439735,0.062092394,-0.15397424,0.093930446,0.3034801,-0.30530134,0.041498467,-0.06435006,0.07080854,0.327221],[0.8026996,-0.44736055,-0.050972164,0.20318426,-0.8092374,0.24752559,0.32302567,-0.094395876,0.22440033,-0.17859897,0.11948998,-0.26337075,-0.27740997,0.18380176,0.30512437,-0.06352904,0.14718251,-0.17162979],[2.457627,-1.4923394,0.028457003,-0.3990584,1.7863452,0.60998243,-0.42721242,-1.8455137,-1.4121356,-0.16493158,0.06486093,0.016970918,0.19106352,-0.2922308,0.05603943,-0.020587316,0.34736913,0.20459694],[1.1815331,0.36599845,0.06255039,0.0657659,0.4088365,0.41529664,-0.25315446,0.017450152,-0.30593964,0.3139144,-0.16692097,0.2685098,-0.086217225,-0.069303796,-0.12145663,-0.22734722,-0.023085613,0.11520361]],"activation":"σ"},{"dense_2_W":[[-0.5023888,-0.05802139,-0.66911775,0.296051,0.7713285,-0.18254815,-0.8283855],[0.44022453,-0.24643378,0.5062762,0.09133972,-0.45227736,0.05079313,0.06773168],[-0.6219036,-0.9433538,-1.0238923,1.3172559,1.1334529,0.6552401,-0.69087607],[0.6763754,-0.40709624,0.6232817,-0.1610244,-0.67904115,0.6493273,0.0906405],[-0.635346,0.0011620739,-0.37521043,-0.5111516,0.986075,-0.3832682,-0.14561039],[0.45462242,1.1686025,0.14032847,-0.9475063,1.0923766,1.6022182,0.2453258],[-0.32724923,-0.7897613,-0.9935628,0.802958,-0.08129205,-1.1719561,-0.7486108],[-0.22323135,0.66134214,1.1732999,-0.8910564,-0.95774484,-0.39924416,0.7293297],[0.29451057,0.15649314,0.27317175,-0.6156423,-0.5974088,-0.54637176,0.16324385],[0.39435184,0.47537956,0.44074118,-0.23361506,0.39577127,-0.44843742,-0.6463624],[-0.48006952,0.5896299,0.56584865,0.23956761,-0.61484444,0.47759032,0.35471997],[0.35922313,0.43721467,0.18760605,-0.351279,-0.6390551,-0.28927103,0.6187888],[0.073767446,-0.8790351,-0.68584126,1.1712487,-1.6569555,-1.2728544,-0.015573282]],"activation":"σ","dense_2_b":[[-0.09275836],[-0.13285246],[0.22685666],[-0.048346587],[0.04652798],[0.08532798],[-0.09150484],[-0.05462159],[-0.1709193],[0.219226],[-0.10487605],[-0.18386836],[-0.227306]]},{"dense_3_W":[[-0.31240308,-0.2003438,-0.49512723,-0.33559966,-0.11021345,0.423354,-0.36147565,0.46913844,-0.33863887,-0.33271542,0.5626256,-0.27749553,0.15109913],[-0.18263677,-0.16133335,0.554565,-0.3057925,0.50082487,-0.3123607,0.6251424,-0.6040641,-0.4718807,0.17380686,-0.2015293,-0.22039177,-0.13468805],[0.75125694,-0.24231063,0.33473507,-0.54747844,0.5980235,-0.27477667,0.7795829,-0.4155024,0.4370703,0.43257073,-0.10999617,-0.19784549,0.7787281]],"activation":"identity","dense_3_b":[[0.08514209],[0.12190986],[0.11714442]]},{"dense_4_W":[[0.08379805,-1.1299504,-0.99574506]],"dense_4_b":[[-0.117058024]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_LEGACY_PREGLOBAL.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_LEGACY_PREGLOBAL.json deleted file mode 100644 index 14e1e1d95..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_LEGACY_PREGLOBAL.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.750777],[1.3186632],[2.4594376],[0.034155015],[1.3260336],[1.3216915],[1.3177336],[1.3116305],[1.2217928],[1.1049051],[0.97790134],[0.03409643],[0.034110934],[0.03412991],[0.03416529],[0.034136374],[0.03408451],[0.034057345]],"model_test_loss":0.02841777540743351,"input_size":18,"current_date_and_time":"2023-09-02_22-47-37","input_mean":[[17.672829],[-0.0015280318],[0.0008010262],[0.021118881],[0.0008383113],[-0.0005000338],[-0.0014255784],[-0.001504001],[-0.00013831415],[-0.0043903766],[-0.004224954],[0.02113117],[0.021122888],[0.02112144],[0.021065863],[0.020995975],[0.020819707],[0.02090924]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.4262147],[0.29442513],[0.13858001],[-3.6157753],[0.11054395],[-0.096514955],[-2.7481675]],"dense_1_W":[[-0.59550166,-0.08087835,-0.10044884,-0.030051881,-1.0114387,-0.7159067,1.0509298,-0.4646438,0.254099,0.27775934,-0.30958077,-0.2699965,0.020533659,-0.021311773,0.45812935,0.20583425,-0.17345557,-0.12265345],[-0.1814759,-2.6059172,0.027335435,0.031072548,1.9576696,1.9464822,1.3979335,-3.122393,-0.40338284,-0.811746,0.915118,-0.2758879,-0.018445456,0.10923238,0.3439007,-0.3658017,0.17968847,0.0085251825],[1.2159636,0.50295633,-0.29685062,0.10249312,-1.1345159,-0.60397,0.9025859,-1.4166268,-0.34669524,0.31230232,0.03311125,-0.4099096,0.22891928,0.0058932696,-0.03164047,0.28680435,0.056274787,-0.21163589],[-2.1782408,-2.652491,-0.6163189,0.014259274,0.46644354,-0.07303462,-0.16025148,-1.9173824,-0.34420478,0.248388,0.23158954,0.038577884,0.08229089,0.039497472,-0.21905439,-0.31795323,0.80569685,-0.35556743],[-0.39873397,1.0991853,-0.15771712,-0.44371212,0.6436306,0.014177862,-0.9923157,1.1680098,0.09227359,-0.3646184,0.17011096,0.10480483,0.5100492,-0.115318246,-0.6804572,0.09150676,0.35543084,-0.04518636],[1.815469,0.7312476,-0.32006833,-0.47156325,-0.8404111,0.18205363,-2.1965184,-1.2279189,-1.0787835,0.2947485,0.085848495,0.06514893,0.41874364,-0.2661748,0.28740934,0.4390194,-0.31817436,0.0123811625],[-1.3422207,4.2687964,-0.25304475,0.53945225,-1.3436658,-1.9831376,-2.5219822,2.4054382,-1.2978123,0.42630863,1.098409,-0.47248852,-0.705663,0.60417634,0.0360486,0.5381174,-0.0367325,-0.60039526]],"activation":"σ"},{"dense_2_W":[[0.6287387,0.6726734,1.2156233,0.14890462,-0.7355616,0.36218125,0.14466967],[-0.74637365,0.3812475,-0.6406179,0.28641817,-0.20450425,0.32207528,-0.3226913],[0.06755054,-0.27992728,-0.70488316,-0.25441137,0.31789666,0.04202117,0.4387319],[-0.1773071,-0.06993977,-0.67512244,-0.46879476,-0.2630911,-0.7062165,-0.45115414],[-0.6238654,-0.26688075,-0.6413995,-0.30508804,0.62488157,0.15856849,-0.036961198],[-0.30532292,0.023894563,-0.0064119864,-0.105837554,0.01626758,0.14256619,-0.60051453],[0.013258742,-0.17537804,-0.44187704,-0.03241884,0.571268,0.39274576,0.042168505],[-0.6181693,-0.27180657,-0.44550276,-0.00063514145,0.47017303,0.1071446,0.4154284],[0.3637543,0.29671773,0.32823008,0.29629824,-0.551112,0.14014855,-0.46638033],[0.588223,0.1280512,0.3159679,1.2631085,-1.279261,-1.4572979,-0.2884451],[0.08316952,-0.2914584,-0.76872176,0.22730377,0.02180895,0.13148995,-0.5355329],[0.6056482,2.9128945,-0.027976673,0.84820426,-0.9162752,-2.0459216,-4.1563354],[0.03169041,-0.17865568,-0.2586998,0.10826119,0.071472034,-0.3774936,0.22949137]],"activation":"σ","dense_2_b":[[0.015828583],[-0.088196956],[-0.09036952],[-0.1230372],[-0.055517223],[-0.119829975],[-0.08279668],[-0.04842878],[-0.2312968],[-0.60610735],[-0.10119338],[-0.82878107],[-0.119595364]]},{"dense_3_W":[[0.4161587,0.39951083,-0.0774412,0.24522696,-0.6132204,-0.09533373,-0.47129297,-0.41050985,0.23757468,0.23466793,0.1497136,0.592779,-0.14382078],[0.10526708,-0.5690179,-0.44247043,-0.37303323,-0.45616138,0.17351544,0.47270444,-0.49300864,-0.013277441,-0.06569539,-0.5149398,-0.006244119,0.17057294],[0.6019824,-0.120864384,0.43110284,-0.51825607,-0.12548478,-0.4957451,-0.4877988,-0.39608762,0.053494465,0.6998196,0.01679197,0.4730759,-0.08663315]],"activation":"identity","dense_3_b":[[0.095762156],[0.09659323],[0.09680739]]},{"dense_4_W":[[-0.63916916,-0.8716667,-0.6933614]],"dense_4_b":[[-0.09472361]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_OUTBACK.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_OUTBACK.json deleted file mode 100644 index b18169a8f..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/SUBARU_OUTBACK.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.573654],[1.1484252],[0.42591482],[0.04835451],[1.1461933],[1.1471832],[1.1470121],[1.1214072],[1.0991943],[1.0701101],[1.0406059],[0.048127588],[0.048172023],[0.048212342],[0.048246387],[0.04816156],[0.0479336],[0.047585495]],"model_test_loss":0.026417279615998268,"input_size":18,"current_date_and_time":"2023-08-10_23-04-26","input_mean":[[24.135065],[-0.042271867],[0.014178805],[-0.0037389072],[-0.046595708],[-0.04610125],[-0.04491835],[-0.03922049],[-0.035844963],[-0.028552856],[-0.025264736],[-0.003948662],[-0.0038945172],[-0.0038410625],[-0.0036192732],[-0.003510406],[-0.003390137],[-0.0033347548]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.6313527],[0.21449536],[-2.8833015],[0.08015413],[0.14096457],[-0.4543409],[0.08164727]],"dense_1_W":[[0.4385407,0.63463783,0.060082484,-0.4217529,0.07332441,1.2808025,-0.9600021,-0.07368351,0.7437968,0.13603747,-0.09279282,0.636986,0.15792926,-0.5835893,0.2658865,-0.07900949,-0.060865946,0.10794351],[-0.006779099,2.004387,6.8607817,-0.23751183,-1.6587999,0.09422444,-0.4874676,-0.5578516,0.5310813,1.6710776,-0.91060466,1.1751448,0.7926426,-0.19524321,-0.49832276,-0.68435484,-0.74160784,0.2320687],[-0.42611358,0.49704134,0.061547905,-0.31928867,0.5029787,0.8141926,-0.7419139,-0.19156225,0.8684419,0.06434307,-0.030311767,0.6344357,0.23724514,-0.786067,0.063948646,0.2718977,-0.096927255,0.02907163],[-0.0020692998,-1.7009348,0.038647033,0.13782075,0.0035963166,-1.8036139,1.506227,-0.012708647,-0.3238854,-0.11025291,0.08421155,-0.47822404,-0.21775703,0.98227096,0.5762303,-0.2504151,-0.04809817,-0.23663491],[1.6555676,-0.24368818,0.047565427,0.48294827,-0.24731039,1.2580825,-0.6229123,-0.16432685,-0.1041179,-0.058522437,0.10651611,0.31825465,0.34657153,-0.9056155,-0.25984085,-0.22779177,0.15267563,-0.16960645],[0.0037644738,2.2035384,-0.26136458,-0.24882643,1.9434549,2.1926913,1.2461177,1.196908,0.7997137,0.6749713,0.168482,0.024462335,0.3614625,0.2324969,0.38785332,0.30951214,-0.15484615,-0.023371682],[1.6319045,0.20060556,-0.046149492,0.25747207,0.40403402,-1.5326216,1.2633929,-0.11975938,-0.27659348,-0.01779074,0.17242773,-1.23197,-0.16269825,0.64393556,0.27350065,0.7107626,0.2205556,-0.44941023]],"activation":"σ"},{"dense_2_W":[[0.688743,-0.23856077,1.3524743,-1.0059541,0.48964348,0.16091633,-0.8487965],[-0.8221493,-0.6588716,-0.39466858,0.70084,-0.7679724,0.19794145,0.25073692],[-0.3579931,0.12520991,-0.061575927,-0.33722153,-8.587289e-6,-0.65669745,0.36834475],[-0.4896118,0.09266889,-0.091803305,0.58836436,-0.09530183,-0.29224685,-0.11824604],[1.4330658,0.47080937,0.83529705,-1.4794953,1.1691287,-0.38773456,-0.850906],[-0.17573813,0.15940154,-0.0883046,0.14367807,-0.2713903,-0.58145833,0.1813966],[0.16333255,-0.5058434,-0.151819,-0.31104934,-0.48204994,-0.5709609,0.1097057],[-0.11952788,1.132746,1.7155647,-1.0979568,0.5267555,-0.32039446,-1.5178013],[-0.6666372,-0.6210934,0.08266941,-0.26039764,-0.58124655,-0.1659565,0.012729861],[-0.81480265,-0.19473615,-0.09725363,-0.25143594,-0.18920764,0.05540429,0.08028312],[0.30783543,0.53514826,0.6950099,-0.83681816,0.28347406,0.09319918,-0.9719728],[-0.5300102,-0.09198815,-0.17771126,0.35486326,0.044223923,-0.62166435,0.06565767],[0.2399586,-0.4612763,-0.2989993,0.13399556,-0.853747,-0.038706385,0.35972396]],"activation":"σ","dense_2_b":[[-0.35425124],[0.109308064],[-0.031559847],[-0.0003400682],[-0.21089287],[-0.2585232],[-0.19723703],[-1.0296504],[0.08535486],[-0.0011093448],[-0.38453248],[0.01864399],[-0.022892497]]},{"dense_3_W":[[0.16066022,-0.45942912,-0.5723236,0.33713955,0.5059241,-0.35243854,0.2291558,0.025299186,-0.2669662,0.21250063,0.36912894,-0.59875554,-0.45286608],[-0.3987386,-0.2368262,-0.4920192,0.64763784,-0.16727564,-0.56451935,0.29059148,-0.33601287,-0.3881739,0.27909118,0.092289515,0.09268704,-0.16298614],[0.29671025,-0.6581518,0.3455493,-0.5484271,-0.058288824,0.041621033,-0.29955027,0.52763146,-0.6336574,-0.5787685,0.54040813,0.41626728,0.18120344]],"activation":"identity","dense_3_b":[[-0.0040779626],[0.020526942],[-0.0043588714]]},{"dense_4_W":[[1.1190621,-0.49331972,0.6428077]],"dense_4_b":[[-0.005149732]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_AVALON.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_AVALON.json deleted file mode 100644 index 9ae1f90bb..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_AVALON.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.154972],[1.2219579],[0.5249089],[0.04609643],[1.2129667],[1.2152725],[1.2187766],[1.1979939],[1.1835413],[1.1609851],[1.131695],[0.045940075],[0.04595876],[0.045979664],[0.04583899],[0.045701966],[0.045422513],[0.045092262]],"model_test_loss":0.008101926185190678,"input_size":18,"current_date_and_time":"2023-08-10_23-56-46","input_mean":[[25.387062],[-0.10944313],[-0.008544132],[-0.00804191],[-0.107888475],[-0.10920066],[-0.110173844],[-0.1106636],[-0.109646805],[-0.109096535],[-0.105106495],[-0.008129847],[-0.00813124],[-0.008141087],[-0.008092408],[-0.008060575],[-0.008140952],[-0.0083157625]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.016645644],[-0.11951427],[-3.1821578],[-0.0059933704],[2.8677177],[0.031116206],[0.20521815]],"dense_1_W":[[0.00011691521,-0.0047739935,-0.0046798335,-0.23095101,0.67633355,-1.4215347,0.22167856,0.0051140105,-0.14782095,-0.18156183,0.16303727,-0.81555355,0.058726236,0.5032197,0.574162,0.18640463,0.21730764,-0.22049814],[-0.00011825084,0.4686856,-0.009756203,0.35097203,0.10730735,0.94829154,-0.6940468,0.19106765,0.12124054,0.025897067,-0.02768527,0.53336066,-0.23076952,-0.3619648,-0.4279046,0.022291774,0.13861004,0.018763274],[-0.7304196,-0.08818808,0.56801623,-0.09857474,0.34234688,1.0349541,-0.33047348,0.61446273,0.32419196,-0.050662857,0.2637253,0.20039666,-0.47378713,-0.3956067,0.009646421,0.390048,-0.008849323,-0.2498262],[0.0060903383,-0.49549666,-0.01697434,0.22030751,0.020088006,-1.0179988,0.80875695,0.441826,0.09327719,-0.029645108,-0.40414256,-0.45891628,-0.2560797,0.59599686,-0.012949928,0.30637464,-0.16429852,-0.077907525],[0.70374584,-0.01092509,0.540549,-0.40865657,0.1392593,1.3607061,-0.68692255,0.6964351,0.19591267,0.18743542,0.12110344,-0.008305118,0.15106158,-0.94731086,0.56679606,0.27371135,0.24476646,-0.47326928],[0.003219834,-0.25791815,0.1770013,0.058168087,1.0995903,-0.48271948,0.2528091,-0.021289961,0.10542952,0.6813602,0.28741544,0.007509176,-0.5195496,0.22631004,0.0013342625,-0.17950559,-0.054088753,0.010088536],[0.012934697,-0.99158263,-7.329649,-0.14901392,0.7383594,-0.13131715,1.0090424,-0.52978915,-1.10985,-0.26590362,0.9192803,-1.023092,-0.21835378,0.3614904,0.39267102,0.17742208,0.27959663,0.0059155384]],"activation":"σ"},{"dense_2_W":[[-0.16192931,-0.46922514,0.20061032,-0.22314207,-0.3545485,0.24491267,-0.17598084],[-0.6500808,0.5197684,-0.086435065,-0.06399719,0.93517494,-0.32023647,-0.2368111],[-0.85317075,0.6300723,0.9634644,-0.26148096,-0.30289555,-0.27350643,-0.3997722],[-0.9474749,1.5257666,-0.58592016,-0.20490168,1.7460821,-0.54258883,-0.72248006],[0.61233485,-0.52019024,-0.20221208,0.75963235,-0.63291365,-0.16668685,-0.14107104],[0.5829932,0.20956525,-0.5917082,0.334232,-0.5782333,-0.37722242,0.111714475],[0.3291867,-0.077928744,-0.13658442,-0.25665778,0.35779083,0.36474347,-0.293335],[-0.121685565,0.24806523,0.18834944,-0.46779516,-0.31577477,-0.22564404,-0.23130432],[0.4297668,-0.03992685,-0.7625169,0.4358002,0.46087322,0.59285825,0.27673835],[-0.47832817,0.57294714,0.25306076,-0.7069487,-0.017084602,0.052525472,-0.30928266],[0.7133705,-0.19208045,-0.30594656,0.40949252,-0.268573,0.33327693,-0.09717502],[-0.5436785,0.2889737,0.51880294,-0.56072646,0.9260692,0.107343785,-0.1836568],[-0.936714,0.88693315,1.2621549,-0.7801531,-0.4495786,-0.3362016,-0.5123693]],"activation":"σ","dense_2_b":[[0.011130354],[0.04997472],[-0.18216753],[0.3452406],[-0.02403721],[-0.06878961],[-0.004139792],[-0.2698251],[0.015881905],[-0.16309522],[-0.029837111],[0.04389526],[0.0100675905]]},{"dense_3_W":[[0.59172153,-0.13653415,-0.40732333,-0.29746622,0.42562142,0.1004339,-0.005074904,0.06819323,0.40120095,-0.28921607,0.5362933,-0.52448,-0.6777314],[0.2645431,0.3248634,-0.5370929,0.124842614,-0.29716966,0.063039936,0.011938057,0.31424755,0.38555825,-0.09687765,-0.33130735,-0.3187058,0.33251473],[-0.19941787,-0.4079571,-0.42453167,-0.505169,-0.03318176,0.3900114,0.53974134,-0.019272683,0.004807314,0.32995415,0.29342985,-0.40301663,0.2627771]],"activation":"identity","dense_3_b":[[0.04678321],[-0.041011743],[0.04454892]]},{"dense_4_W":[[-1.0930591,0.32782602,-0.2925129]],"dense_4_b":[[-0.047076307]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_AVALON_2019.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_AVALON_2019.json deleted file mode 100644 index 82716f590..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_AVALON_2019.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.541552],[0.9650358],[0.3616818],[0.0328642],[0.9578452],[0.96073836],[0.96248627],[0.9491477],[0.9337077],[0.908715],[0.8812584],[0.032887284],[0.03287074],[0.032852463],[0.03271584],[0.03264729],[0.032499015],[0.03240248]],"model_test_loss":0.008866102434694767,"input_size":18,"current_date_and_time":"2023-08-11_00-47-36","input_mean":[[27.210583],[0.020935686],[-0.008948258],[-0.0069724205],[0.023982191],[0.02277414],[0.021633722],[0.018200217],[0.016092353],[0.01634521],[0.017552482],[-0.0069776564],[-0.0069683734],[-0.0069624],[-0.006934479],[-0.006922422],[-0.0069089876],[-0.0069400943]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.13328256],[-0.19930688],[1.0697682],[-0.5783517],[-1.5640957],[-0.92074555],[0.96863127]],"dense_1_W":[[-0.06047806,0.59424174,0.13268892,-0.21197622,-1.1050072,1.247896,-0.24135092,0.1444364,0.14218198,-0.2759823,-0.18579857,0.7423415,0.22738951,-0.2590543,-0.6573962,-0.107646905,-0.07558396,0.037075613],[-0.058194548,1.2433497,5.1614676,-0.020125298,-0.25091216,0.578058,-0.16740562,0.6148966,0.31894976,-0.42848128,-1.5423061,0.5142165,0.0080127595,-0.24593866,-0.23782809,-0.28146613,-0.10563642,0.2612805],[0.7431013,-0.52715963,-0.0064738155,-0.08120712,-0.10666046,-0.039603,-0.2889496,-0.27379817,-0.18491645,-0.2114326,-0.031808507,0.067143545,0.24152419,-0.46100402,0.12406786,0.5035436,0.19000971,-0.40269852],[-0.093319766,-3.5038989,0.026366359,-0.10428085,-1.5910784,-2.6836565,-1.729896,-1.2727953,-0.6854482,-1.3142506,-0.82473946,-0.24805659,0.30157104,0.10064682,-0.2649021,-0.45221263,-0.003649908,0.3906365],[-0.19653389,-1.1956127,-0.0013261554,0.20242849,0.5268085,-1.1662431,0.5995818,-0.21107472,0.035844564,-0.37587917,-0.010125557,-0.5800509,0.2748382,0.28321275,0.2552108,-0.22593613,0.1699103,-0.20041217],[-1.6779865,0.010922188,0.2911208,-0.18096207,0.6596778,-0.7872427,1.278464,0.4307826,-0.2584428,-0.3280948,-0.16272934,-0.3561698,0.31419376,0.30760053,0.45000735,-0.60065556,0.07380751,-0.7342767],[0.22576395,-1.2693808,0.00051059003,0.22724408,0.53528285,-1.052841,0.42936927,0.15097113,-0.21617922,-0.10659611,-0.13288835,-0.32452956,-0.29022405,0.43584242,0.565457,-0.4026171,0.10766105,-0.16005303]],"activation":"σ"},{"dense_2_W":[[0.40149835,0.36675823,-0.29831505,0.37289986,-0.6039201,-0.027274264,-1.1339715],[0.95495695,-1.3851566,0.358178,0.49656358,-1.2546502,-1.3234615,-0.39220563],[-0.84305114,0.33130413,-0.39270082,0.1366223,0.8356403,-0.71874714,0.6702931],[0.32502848,0.22423606,-0.3198426,0.69494843,-0.84058,-0.57765996,-1.1503054],[-0.55475,-1.0512786,-0.467161,0.23049785,1.171586,0.24218969,-0.14599386],[0.27919522,-0.6080323,0.83328724,0.4167502,-0.11279212,-0.19312277,1.0808055],[-0.98002326,-0.06683307,0.073704205,-0.7713237,0.36600292,0.32792312,-1.2809395],[-0.099299915,0.7157585,-0.69559073,-0.74590826,0.03745077,0.67139316,-1.3220712],[-1.1977009,-1.1743606,-0.8824673,0.82422435,1.4812046,0.54254943,-0.24748902],[-0.94787806,0.20738822,-0.0680158,-0.47344378,0.016936,-1.4717607,0.38640186],[-0.27705613,0.5600628,-1.2770342,-1.2288101,0.3837186,0.54160005,-1.0739172],[1.0531577,0.14682527,0.31090853,-0.22525707,-0.51124835,-0.16686235,-0.69970435],[0.54132354,-0.55377156,0.16552292,0.4777185,-0.91318285,-0.39976725,-0.8804106]],"activation":"σ","dense_2_b":[[-0.15207723],[-0.4524892],[-0.31112808],[-0.14511883],[-0.2907099],[0.035733145],[-0.59132564],[-0.091714524],[-0.3527001],[-0.18239608],[-0.123493806],[0.0051953667],[-0.010544346]]},{"dense_3_W":[[0.39324093,0.2485198,0.08692321,-0.18120968,-0.0657239,-0.034891907,0.5671789,0.31177345,-0.93040633,0.09452528,-0.25895926,-0.034117304,0.25137582],[0.25416353,0.0061438996,0.28148532,0.6699385,-0.74332523,-0.50077397,-0.46912852,0.711142,-0.830241,0.33939067,-0.19935456,0.069085754,0.578044],[-0.30625167,-0.4704901,0.5801462,-0.38525173,0.31889287,0.25167635,-0.11409451,-0.62698126,0.7056928,0.44565654,-0.42508173,-0.60673165,-0.41772822]],"activation":"identity","dense_3_b":[[-0.068453945],[-0.056202423],[0.09645773]]},{"dense_4_W":[[0.16098852,0.15347017,-0.7822183]],"dense_4_b":[[-0.068720676]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_AVALON_TSS2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_AVALON_TSS2.json deleted file mode 100644 index 4d6b4af06..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_AVALON_TSS2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.376422],[1.2837375],[0.54391617],[0.049378082],[1.2814487],[1.2804018],[1.2795964],[1.2587454],[1.2385764],[1.21357],[1.1835355],[0.049072966],[0.049108904],[0.049148303],[0.049186878],[0.04908979],[0.048760086],[0.048228707]],"model_test_loss":0.009066876024007797,"input_size":18,"current_date_and_time":"2023-08-11_02-01-41","input_mean":[[23.067575],[-0.03366158],[0.0044186297],[3.4665016e-5],[-0.033809688],[-0.03444663],[-0.03468704],[-0.03309283],[-0.032493494],[-0.034124184],[-0.029784737],[-0.00010160864],[-7.466988e-5],[-4.264505e-5],[5.8855418e-5],[0.000106093255],[7.4934855e-5],[4.8816368e-5]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.1810939],[0.052338526],[-0.030882858],[0.033140995],[2.9087296],[-2.895278],[0.054216754]],"dense_1_W":[[-0.022466678,-0.079283744,0.015348881,-0.093145974,-0.50897855,1.1005377,-0.3424491,0.16023882,0.24858536,-0.28342143,0.08719842,0.11321456,0.25237224,-0.3242571,-0.16660848,0.08039433,0.2296425,-0.12092014],[-0.010926074,-0.5342929,0.014211034,-0.22288138,0.12526701,-0.6431979,0.11048157,-0.027558114,0.5129509,0.031701602,-0.28270888,-0.3469483,-0.0359589,0.3054121,0.42384326,-0.21366577,0.24789678,-0.21054278],[0.0015054089,-1.0920098,-4.1715555,0.42466384,0.8594457,-0.057574112,0.195077,-0.14336777,-0.934818,-0.14249723,1.1195656,-0.50157344,-0.34849435,0.4064381,-0.10914302,-0.09259135,-0.043489303,0.17882638],[0.00050957524,-0.5727624,0.02629925,0.039537206,0.07295519,-1.0905142,0.65514714,-0.22721705,0.10285973,0.015500398,-0.07354051,0.10782978,-0.2973014,0.10234221,0.40134785,0.31354493,0.075327724,-0.033144545],[1.1313975,0.27665266,0.21540989,0.474714,-0.542695,0.45748472,-0.534559,0.33019224,-0.00932876,0.37130055,0.01740698,-0.07030619,0.3058859,-0.33302706,-0.18166807,0.05664913,-0.020655787,-0.18409492],[-1.1192006,0.46339068,0.21362849,0.07990121,-0.11141043,0.052170627,-0.7601721,0.25794908,0.29454672,-0.019299706,0.18099277,-0.069216594,0.12746179,0.16600643,-0.2266845,0.04666312,0.26312882,-0.34587502],[-0.033930384,-0.5281495,-0.02478823,0.35514218,0.37443575,-0.93885845,0.8630589,0.32345197,-0.43721947,-0.22540626,0.31314182,-0.19791576,-0.45503795,0.42438814,0.15826641,0.10125901,-0.2744716,-0.007187695]],"activation":"σ"},{"dense_2_W":[[1.0154629,-0.040800903,-0.29480615,-0.579116,0.63008493,-0.16830389,-0.52992606],[-0.44676533,0.70518833,0.22363839,0.3335365,0.15123695,-0.5413408,-0.18469663],[-0.15817617,0.34588996,0.3173453,0.2432257,0.2876003,-0.55385196,0.09101465],[0.30243352,-0.56498605,-0.47895545,-0.24933416,-0.20325784,0.55106956,0.04037954],[0.03340286,-0.7613887,0.005524847,-0.34229973,0.020817522,0.70795476,-0.58045375],[0.32800585,-0.61029744,-0.37881643,-0.0494688,0.6649441,0.5878182,-0.693103],[-0.78130317,0.32768852,0.0486751,0.6938225,-0.6449391,0.19077687,-0.20455292],[-0.003070534,-0.25178492,-0.1787414,-0.18577683,-0.855277,0.05078717,-0.23962548],[-0.8574637,-0.55484927,0.11038485,-0.22769281,-0.8112205,-0.5803483,0.39239252],[-0.02281288,-0.18713373,-0.18762249,-0.36472616,0.6542259,0.41985798,-0.57571363],[-0.37003383,-0.7053904,0.16818082,-0.6309228,-0.42156786,0.28068355,-0.52919596],[0.7441994,-0.606726,-0.21135445,-1.1177553,-0.23082832,0.5370549,-0.3296431],[-0.82947385,0.6298715,-0.0031728123,0.59570336,-0.2874936,-0.56689715,0.31978017]],"activation":"σ","dense_2_b":[[0.12730335],[-0.017174786],[0.008333773],[-0.1725905],[-0.08095016],[0.022734491],[-0.03200295],[-0.2865707],[-0.23485084],[-0.041974284],[-0.26037046],[0.00494856],[-0.008746482]]},{"dense_3_W":[[0.5768022,-0.69957966,-0.57344234,0.18022925,0.18167411,0.10279416,-0.60731447,0.57294464,-0.15860513,0.55548793,-0.0742402,-0.03724561,-0.46468896],[-0.6463308,-0.08468973,-0.057763796,-0.15337418,-0.5244671,-0.41263047,0.41524106,0.17037424,-0.16188715,-0.28470117,0.10638861,-0.22415741,0.76425564],[-0.30938473,0.20329902,0.43855524,0.0105835125,-0.13655424,-0.32343802,0.59270227,0.6068919,0.56710804,0.56215036,-0.60497534,-0.4761755,-0.007562395]],"activation":"identity","dense_3_b":[[-0.028258],[0.046470042],[0.021202732]]},{"dense_4_W":[[0.7616137,-1.0874788,-0.41413057]],"dense_4_b":[[-0.037305925]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CAMRY.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CAMRY.json deleted file mode 100644 index 112a02973..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CAMRY.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.383597],[1.5203282],[0.5082514],[0.0518889],[1.5132513],[1.5174434],[1.5199335],[1.4851471],[1.4453254],[1.3881189],[1.3348266],[0.051785868],[0.051798876],[0.051812388],[0.051785596],[0.051688608],[0.051483054],[0.051126033]],"model_test_loss":0.009930684231221676,"input_size":18,"current_date_and_time":"2023-08-11_08-01-58","input_mean":[[25.470009],[0.0042077163],[-0.0003353114],[-0.0023303148],[0.0042589367],[0.0040556374],[0.0040202853],[0.0027058893],[0.0012695856],[0.0030413663],[0.005136044],[-0.002385892],[-0.0023771315],[-0.0023616166],[-0.0023057486],[-0.0023015393],[-0.0022862742],[-0.0023375773]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.2718573],[0.15701862],[3.248821],[-3.5744123],[0.004125263],[-0.7583393],[-0.037708215]],"dense_1_W":[[-0.2879904,1.5954516,-0.0046582473,0.06479758,0.29433665,0.8528065,-0.6544351,-0.4978888,-0.0794865,0.468229,-0.05461509,0.9035509,0.15841998,-0.54152334,-0.4469752,0.07425236,-0.11780557,0.12198392],[0.006679829,0.40255344,0.009154457,-0.16641183,-0.39951205,1.4443473,-0.9139237,-0.057986554,-0.11843848,-0.0044754846,0.0925529,0.5124026,-0.0049318043,-0.2537788,-0.14938481,-0.224736,0.047049627,0.13330497],[1.7283604,-0.05969189,1.0530555,0.27028522,0.47397172,0.5086671,-0.63976616,-0.19285004,0.49581873,0.13492277,0.20006694,0.06384355,0.24601626,-0.3723971,-0.032245487,-0.13195412,0.31266445,-0.18301867],[-1.8633327,0.22747979,1.1220167,-0.02145294,0.28228733,0.85233575,-0.9075951,0.069776304,-0.18778838,0.56500834,0.1422919,0.41182467,0.2542804,-0.911527,0.53582734,0.023306668,0.07635535,-0.1735968],[0.022620516,-2.0202289,-4.6984797,0.37025738,1.6879617,-0.1484365,0.5125165,-0.90959346,-1.2976298,0.01080667,1.3414408,-0.295309,-0.27262625,0.2460714,0.11705216,0.34596816,-0.040567875,-0.3704739],[-0.1562062,-1.5769467,0.00974286,0.12022318,-0.060521524,-0.64386684,0.3535075,0.28329223,0.20385851,-0.23411226,-0.05331302,-0.43988168,-0.62577605,0.77806795,0.18664421,-0.41524816,0.19130825,0.045515057],[0.0025923399,-0.49789965,0.0048285224,0.0648064,0.5884254,-1.1329092,0.41850495,-0.10409346,-0.48019585,0.07617594,0.13875124,-0.41700658,-0.12853211,0.72437525,0.18255632,0.032605115,0.12712069,-0.07419187]],"activation":"σ"},{"dense_2_W":[[-0.7156104,-0.68829536,-0.7385952,0.55841655,0.26912323,0.6066667,-0.12475776],[-0.511934,-0.9153065,-0.6389169,0.3585597,0.2839266,0.5098371,0.50414217],[0.2944038,0.5859187,-0.5172965,0.3677821,0.054128557,-0.08085657,-0.89583373],[0.33193415,-0.5547596,-0.023806248,-0.48235148,-0.221697,0.033068255,0.5705964],[-0.46894178,-0.10590048,0.21662314,-0.040064402,-0.3858671,-0.44947234,0.59122],[-0.60725653,0.3228978,0.1861176,-0.2924726,0.42708892,-0.082993455,0.22582808],[-0.2562046,0.8381702,0.31616238,0.24505608,-0.12987854,-0.6930256,-0.76575553],[0.61845154,0.60325474,-0.575144,0.40564325,-0.714385,-0.21887647,-0.94107187],[-0.54684615,0.11815464,-0.6585375,-0.25468546,-0.09934533,0.117599614,-0.38795406],[0.16209334,-0.35611826,-0.15108901,-0.21047153,-0.3256097,0.28901953,0.80304426],[0.027611624,0.50159204,0.619658,-0.12446912,-0.59465826,-0.037129514,-0.21241622],[0.27525434,0.5680337,-0.107110925,0.24088366,0.043958385,-0.86346936,-0.64997584],[-0.024266828,-0.11527472,0.3829225,-0.17169206,0.08911536,-0.8643167,0.06748397]],"activation":"σ","dense_2_b":[[-0.17570926],[-0.14594816],[-0.05026906],[0.027095933],[-0.04517862],[0.06473192],[-0.028851002],[-0.12211885],[-0.27259725],[0.014737305],[0.02095205],[-0.070182],[-0.09559173]]},{"dense_3_W":[[0.4202054,0.703193,-0.3041087,0.48369282,0.1436207,0.37104702,-0.63816553,-0.58745027,0.13683067,0.5385481,-0.46124828,-0.5352316,0.19800703],[-0.86401147,-0.18695252,0.62547266,-0.68338186,0.10880029,0.3713409,0.027055534,0.41835827,0.27228013,0.11604386,-0.0106600085,0.20140606,-0.10059595],[0.056002628,0.035810802,-0.3965656,0.3976536,0.1726735,0.31009713,-0.09359465,-0.0209684,-0.26736382,-0.1666654,-0.5963385,0.03144756,-0.447781]],"activation":"identity","dense_3_b":[[0.022595499],[-0.16177715],[0.034701686]]},{"dense_4_W":[[-1.0497395,0.08801628,-0.6607149]],"dense_4_b":[[-0.026550818]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CAMRY_TSS2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CAMRY_TSS2.json deleted file mode 100644 index 3b3aae741..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CAMRY_TSS2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.547318],[1.4036797],[0.56934917],[0.04350854],[1.398559],[1.4011317],[1.40228],[1.3770106],[1.348263],[1.3074721],[1.2626077],[0.04330501],[0.043371696],[0.04343371],[0.04348332],[0.043410856],[0.04321263],[0.042814735]],"model_test_loss":0.008338634856045246,"input_size":18,"current_date_and_time":"2023-08-11_11-04-26","input_mean":[[23.64889],[-0.08561094],[0.015752671],[-0.004257724],[-0.08625081],[-0.08638373],[-0.08567994],[-0.077275604],[-0.06842236],[-0.056570813],[-0.04640004],[-0.004200933],[-0.004198378],[-0.004202762],[-0.004259174],[-0.004245101],[-0.0042204647],[-0.00425349]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.1003305],[-0.9280888],[-0.27994263],[-0.03601646],[1.0726995],[1.5954292],[-0.07318528]],"dense_1_W":[[0.6028892,-0.5008186,-0.024919089,-0.12623027,-0.4729594,-0.38648638,0.2822896,0.09087385,0.01636962,0.024747238,-0.29404536,-0.18406688,-0.31876472,0.48221767,0.5086306,-0.06562299,-0.21337883,0.11643904],[-1.1941831,0.17382993,0.22181809,0.23333201,0.5458071,-0.43223855,0.5926918,0.3491883,0.1278165,0.50286424,-0.43537652,0.19344032,-0.26665846,0.11812404,-0.28001395,-0.3216877,-0.14064364,0.15485847],[0.07623883,1.5235251,6.7465596,-0.13723375,-0.80104774,-0.61400336,-0.39275688,0.5211227,0.37626675,0.3823852,-0.80926275,0.23730527,0.34998953,0.20261207,-0.464487,-0.30715373,-0.26015738,0.43704194],[0.12629938,-0.28819624,-0.09535608,0.16085212,-0.16898133,-0.6793061,0.43381187,-0.2702881,0.065844,-0.1441075,0.040372517,-0.117076926,-0.32687485,0.5354,-0.1250812,-0.19841617,0.3460908,-0.06750503],[0.4682372,0.59703195,0.034524012,-0.006926566,0.060249697,1.3168854,-0.9804278,0.074283265,-0.18839869,-0.07103339,0.32018688,0.041558877,-0.04179399,0.012026822,-0.15508115,-0.1332163,0.27430537,-0.18467638],[1.3037213,0.2139271,0.22422606,0.17373297,0.19543481,0.09874217,0.3998748,0.6430583,0.08877143,-0.05584769,-0.13569269,-0.4579002,0.12869297,0.39104635,-0.1829238,-0.2530643,-0.1974048,0.08369768],[0.088082924,-0.44940168,-0.19933243,0.07069701,0.7149304,-1.0380019,0.71266985,-0.4369744,-0.552529,-0.23388147,0.6032971,-0.16139722,-0.3540249,-0.026191853,0.60969,0.28289405,0.11056004,-0.31100357]],"activation":"σ"},{"dense_2_W":[[-0.6133522,0.1761722,-0.71424717,-0.0936426,0.8682251,-0.24639517,-0.30397138],[0.34320208,-1.0336052,-0.4439255,-0.2739278,0.3367824,-0.3631442,-0.98396087],[-1.6413774,0.08594568,0.71144843,-1.0480727,-0.11629067,-1.6811962,-0.8675772],[0.47143686,0.089915365,0.26338518,0.68463236,-0.97531956,0.32513487,0.65076643],[-0.87128234,0.064365715,0.1303472,-0.75249237,-0.25511387,-0.7430213,-0.28605184],[-0.7603966,-0.29632324,0.0682258,-0.7471322,0.5153051,-0.53268844,-0.21521862],[-0.3656277,-0.07363712,0.18693501,-0.9983321,0.69527906,-0.45794705,-1.0309372],[0.2617154,0.46204823,-0.6687536,0.82395816,-0.88860583,-0.33870435,0.4618431],[-0.39958304,-0.23751055,-0.8149946,0.19134824,-1.4698569,-0.43517134,0.62668824],[-1.4046016,2.1539013,-3.988871,-0.39821678,-1.9340425,-2.1167135,-1.0858109],[0.38306925,0.64414614,-0.5527955,0.6701854,-0.68190986,-0.18758336,0.7660656],[-0.82904243,-0.2745322,0.2605575,-1.0301431,0.27432004,-0.93553334,-0.739551],[-0.23676038,0.9406503,-1.986441,-0.4191224,-1.5621673,-0.88484937,0.3910027]],"activation":"σ","dense_2_b":[[-0.027016891],[0.08464052],[0.028135099],[-0.38301256],[-0.3638506],[-0.040266816],[0.16827495],[-0.36882532],[-0.40422207],[0.02508533],[-0.56583065],[0.09229101],[-0.416409]]},{"dense_3_W":[[0.0040040226,-0.6369987,-0.71731246,0.6850001,0.09157595,-0.41231555,-0.90613884,0.46305528,0.5752972,0.6877244,0.514109,-0.35633194,0.5317168],[0.1646857,0.52076554,0.14491199,-0.7185544,-0.07474149,0.60757786,0.53968096,-0.19788566,0.4318167,-0.51503956,-0.30411977,0.5457501,0.3619558],[-0.47842056,0.16373217,-1.109826,0.52913445,-0.5961691,-0.18387295,0.009211785,0.38275075,0.036590163,0.72789955,0.15105984,-0.82491213,0.72040874]],"activation":"identity","dense_3_b":[[-0.1681641],[0.029928174],[-0.06739022]]},{"dense_4_W":[[-0.72666985,0.20831722,-0.5900348]],"dense_4_b":[[0.07989163]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CHR.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CHR.json deleted file mode 100644 index 90ff54f85..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CHR.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.266456],[1.0311108],[0.42161182],[0.035121582],[1.0182426],[1.0210766],[1.024199],[1.0197712],[1.0053324],[0.98283356],[0.95835906],[0.03495412],[0.034997974],[0.03503269],[0.035035565],[0.034975693],[0.034770522],[0.034426987]],"model_test_loss":0.011608563363552094,"input_size":18,"current_date_and_time":"2023-08-11_04-58-44","input_mean":[[25.311535],[-0.031563792],[0.0060295113],[0.0037024636],[-0.034909807],[-0.034477167],[-0.03452592],[-0.032167524],[-0.028398417],[-0.025096538],[-0.02253926],[0.0035288066],[0.0035584755],[0.0035877393],[0.0036529114],[0.0036560637],[0.003644573],[0.0036541703]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.06250458],[0.7717496],[2.6856744],[-3.0798275],[-0.047530472],[-0.1521214],[-0.86107486]],"dense_1_W":[[-0.0058309548,1.6388441,6.026957,-0.7815384,-3.1444395,0.29995996,-0.6111942,1.4489828,1.5309435,0.9753039,-2.0177133,0.991274,0.99092865,-0.50581515,0.16233689,-0.99065316,-0.67018527,0.90234095],[-0.42814094,-0.57456744,0.0007794493,0.023858974,0.11595472,-1.2281862,0.6903777,0.243981,0.38887268,-0.085606225,-0.22763428,-0.020143623,-0.5932556,0.34875482,0.60443676,-0.12836404,0.1324796,-0.18602186],[1.1931428,0.05919804,0.05402463,-0.55798566,-0.36006367,0.7021459,-0.3192777,-0.27177683,0.6936569,1.2172635,0.96187454,0.38691327,0.35159546,0.032515947,0.16563621,-0.22681683,-0.04875851,-0.2965481],[-1.2964138,-0.2337551,0.0634739,-0.31843027,-0.3538266,1.1500596,-0.8726868,0.0036669122,1.0422454,1.1141241,0.9607149,0.40760738,0.06241413,0.11646168,-0.073522024,0.22547582,-0.30052686,-0.31555784],[0.0072235786,0.5063357,0.9562675,-0.48209998,-0.27141708,1.5686616,-1.061574,0.5231472,1.0100089,0.05071974,-1.886694,0.41332957,-0.06334984,-0.97750497,0.6102102,0.22696678,-0.06319088,0.0048847888],[0.006333134,1.688374,-0.0095348805,-0.66412175,0.28531587,2.01203,-0.1819137,-0.7547143,-0.31330884,0.35432032,0.33640975,0.016374094,-0.13819215,-0.15855257,0.40649945,0.33540976,-0.0046302704,-0.35495433],[0.4090967,-0.19826725,-0.0013017637,-0.5116933,0.38453588,-1.7476666,0.8353978,0.15093791,-0.14092202,0.31026828,-0.26896203,-0.28421417,-0.206051,0.5156937,0.7495738,0.24013326,-0.16817766,-0.15013888]],"activation":"σ"},{"dense_2_W":[[-0.28553647,0.51897234,0.3232974,-0.14583516,-0.6494069,-0.18854451,0.45899993],[-0.18945166,-0.7805358,0.21762379,0.06925927,0.1412742,-0.54521996,-0.49447703],[0.41819847,0.7103663,-0.36324528,-0.54330885,-0.2780997,-0.21234678,0.45622718],[0.45189,-0.30940267,0.2796695,-0.10068664,0.33236605,0.39892736,-0.23690474],[-0.00033029245,-0.2876081,0.21365881,-0.263795,-0.7780459,0.21173872,0.754661],[-0.4982613,-0.41572687,0.6875971,0.3845866,-0.026780535,0.85438734,-1.1519399],[-0.4147085,0.22912927,-0.54870033,0.3551388,-0.4057759,-0.1996842,0.34155196],[-0.46657288,-0.743298,-0.65183616,-0.358357,0.16232346,0.19327608,-0.015862346],[-0.5780829,0.48190355,0.42865816,-0.360802,-0.6834505,0.55482894,0.14401308],[0.51356256,-0.76134664,-0.3057201,0.3803027,-0.00610297,0.3648528,-1.0003062],[-0.690029,0.5113393,-0.7087683,0.38381904,-0.08314878,-0.2460164,-0.0017047548],[-0.2095539,-0.88663155,-0.05008726,0.3074065,0.52681,-0.06860818,-0.748798],[-0.44802594,-0.3936492,0.163376,-0.55659366,-0.3931171,-0.76979935,0.38669378]],"activation":"σ","dense_2_b":[[-0.017743433],[-0.26510626],[-0.018595928],[-0.17289363],[0.02423361],[-0.006021742],[-0.0071125105],[-0.2604571],[0.09466738],[-0.0020451464],[-0.07033006],[-0.2086756],[-0.26478064]]},{"dense_3_W":[[-0.53581256,-0.22029524,-0.03227938,0.33162057,0.11482841,0.61525244,-0.26008266,0.6051382,0.45775265,0.43236297,-0.58764994,-0.07332099,-0.5288951],[-0.18867671,0.37646073,-0.3081562,0.23591055,-0.38460404,0.13270791,-0.61747444,-0.24434201,-0.16632886,0.723561,-0.37653255,0.03962427,-0.027843077],[0.30763236,-0.4282034,-0.46785048,0.21578372,0.20392036,0.38424364,0.31873167,0.18515399,-0.6173425,0.64338654,-0.038045872,0.49573293,0.5208863]],"activation":"identity","dense_3_b":[[-0.009245349],[-0.0014893641],[-0.022675076]]},{"dense_4_W":[[0.41954702,1.1624148,0.5703593]],"dense_4_b":[[-0.004366342]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CHR_TSS2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CHR_TSS2.json deleted file mode 100644 index d7b16b706..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_CHR_TSS2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[7.92219],[1.0339159],[0.6051184],[0.040277395],[1.0160568],[1.0193809],[1.0235395],[0.9978284],[0.9780647],[0.953401],[0.92466515],[0.04011991],[0.040149756],[0.040181845],[0.040220965],[0.040193263],[0.039972864],[0.039762717]],"model_test_loss":0.010501861572265625,"input_size":18,"current_date_and_time":"2023-08-11_06-39-21","input_mean":[[22.015877],[0.016454747],[-0.0035791518],[-0.006060402],[0.017588632],[0.018613027],[0.01872038],[0.01622388],[0.013543572],[0.008158607],[0.0060163783],[-0.0061950283],[-0.006164029],[-0.006132473],[-0.0060454626],[-0.006085043],[-0.0062024957],[-0.006308306]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.08562436],[-0.13248813],[-0.6056908],[3.7711034],[-4.002061],[-1.0201851],[0.7905752]],"dense_1_W":[[0.008472031,1.9303364,5.75964,-1.236273,-1.9233848,-0.20769979,-0.50922215,0.77782845,0.93831205,1.015304,-1.6144773,0.83374774,0.7880719,-0.17530817,-0.22706063,-0.8191557,-0.19291312,0.83966184],[-0.007752059,-1.7240039,0.08638296,0.4374327,0.8499669,-0.58740795,0.44271347,-0.43893647,-0.79377645,-0.470287,0.6905167,-0.25326452,0.004325121,0.4151441,-0.20191722,-0.93765545,0.24482074,0.20686845],[-0.73755896,0.25490418,1.6415513,0.61049616,0.10450067,-0.005047854,0.26623517,-0.40121377,-0.57618237,-0.105919234,0.49663854,-0.18851577,0.003680681,0.07382204,-0.7838218,-1.418447,-0.8041371,0.06338623],[1.506414,-0.7172249,-0.26160046,-0.3195705,0.061357655,-1.2254318,1.7426652,-0.39996,-0.8630745,-0.0965681,0.1755039,-0.43433473,0.072750255,0.7390096,0.6420074,-0.6429821,-0.19715068,0.40123448],[-1.462788,-0.25966784,-0.25197747,-0.74088174,-0.39430162,-0.6678362,1.4408759,-0.8539805,-0.67458963,-0.0025512646,0.098765895,-1.3845773,0.84524035,1.4456284,0.8360301,-0.89562434,-0.39231324,0.55299884],[0.96476454,-0.5160151,-0.058161568,0.09431531,0.24567744,-1.7172141,0.87807894,0.32966504,0.13244158,0.0830991,-0.20607454,-0.7199951,-0.3938647,1.0462891,0.21604428,0.09326921,0.23194839,-0.21566468],[-1.0580249,-0.091983035,-0.06607944,-0.14238882,-0.032799177,-1.615105,0.88772935,-0.1148385,0.30407813,0.14823009,-0.25907746,-0.43574435,-0.119376965,0.4874739,0.5467528,0.2210292,-0.21703728,0.02701344]],"activation":"σ"},{"dense_2_W":[[-0.34801432,0.25854328,-0.10087859,0.91155136,0.47692245,0.386249,-0.07805484],[-0.114083804,0.08665275,-0.40829253,0.5105505,0.50143373,0.42545924,0.43460196],[-0.07745485,0.19914009,0.59899527,-0.86949354,-0.60257334,-0.27688003,-0.39490694],[-0.35776904,-0.09782943,-0.3387631,-0.6445889,-0.13637964,0.037489194,-0.4306386],[0.3664335,0.082265064,-0.3529968,-0.21454561,-0.690712,-0.40638104,-0.22740813],[-0.0052428595,0.06399636,-0.4362087,0.3643625,0.1340138,0.880946,0.51570714],[-0.42193365,-0.1661316,-0.4134133,0.069665395,-0.19969232,-0.49261189,-0.5509127],[0.429386,-0.04167956,0.069151536,0.054689564,-0.50504297,-0.5080177,-0.41438618],[0.61227196,-0.043998886,0.32082903,-0.45597827,-0.52242905,-0.10526631,-0.43464538],[-0.23791881,0.37427938,0.07763096,0.38759655,0.6870389,-0.2448108,0.22891921],[0.28850517,0.116395116,0.22972369,-0.40831333,0.26074657,-1.0264262,-0.5928814],[-0.8139447,-0.14806162,0.15462387,-0.42620218,-1.2090021,0.666371,-0.6178426],[-0.63677526,0.8647508,0.5548903,0.1261759,0.304771,0.28499243,-0.14660935]],"activation":"σ","dense_2_b":[[-0.21753441],[-0.5461314],[0.105829634],[0.15688233],[0.18240593],[-0.6977311],[0.17758703],[0.21791771],[0.110497065],[-0.45180324],[0.19605672],[-0.012792069],[-0.2483234]]},{"dense_3_W":[[-0.075603865,-0.4466055,0.2090132,0.44769254,0.5857853,-0.0886282,0.6599453,0.52339387,0.18296923,-0.4225845,0.26281965,-0.10703673,-0.6357655],[0.6664568,0.21380727,-0.21715312,-0.17340335,-0.029390512,0.43210483,-0.19127384,-0.4889734,-0.27069238,-0.16609475,-0.29695383,-0.6717075,0.570048],[-0.49318448,-0.535808,0.0617476,-0.29404658,0.3541034,-0.5322448,0.15549439,0.55970424,0.3449248,0.16689838,0.35094023,0.17978139,0.0012035011]],"activation":"identity","dense_3_b":[[0.009320866],[-0.014181249],[-0.008072699]]},{"dense_4_W":[[0.9121412,-0.99914575,0.15805192]],"dense_4_b":[[0.015280737]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_COROLLA.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_COROLLA.json deleted file mode 100644 index 20e865048..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_COROLLA.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.101178],[1.576821],[0.6001426],[0.05129009],[1.5563219],[1.5635437],[1.5707226],[1.5433452],[1.5103695],[1.4539864],[1.3962219],[0.051048342],[0.051107466],[0.051158227],[0.051144693],[0.05100346],[0.05054137],[0.049878743]],"model_test_loss":0.0073623862117528915,"input_size":18,"current_date_and_time":"2023-08-11_16-04-06","input_mean":[[24.654629],[-0.08590741],[-0.0009184312],[-4.0871888e-5],[-0.081669286],[-0.08285683],[-0.085108146],[-0.08099603],[-0.07861437],[-0.07853552],[-0.07747747],[-6.709087e-5],[-5.751621e-5],[-5.7667265e-5],[-0.000100658726],[-0.00015130512],[-0.000163422],[-0.0002661297]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.21534623],[-0.118863985],[-0.3162109],[-0.008301526],[-0.20225163],[-0.81838286],[-0.44373506]],"dense_1_W":[[-0.010962684,1.3271043,-0.2114807,-0.23165482,-0.46575153,1.4799869,-0.1840072,-0.33480445,-0.25981382,0.6701327,-0.23557165,0.70862395,-0.25953412,-0.40407246,0.21034719,0.26426816,0.26048476,-0.37272432],[0.063116424,-0.37950125,0.07257917,-0.3190763,-0.24379982,1.2784098,-0.7842402,0.43258125,-0.052969795,-0.12413401,0.06709847,0.2559667,0.22473153,-0.22734967,0.023825992,0.016029818,-0.028326835,0.059578158],[-0.3016696,-0.075852886,0.0527521,-0.011209507,-0.6228015,1.1113851,-0.34559983,0.22142892,0.2554701,-0.2911173,0.057123005,-0.021941856,0.38191658,-0.26981074,-0.23588574,-0.13898829,0.22445364,-0.04848302],[0.05634534,-0.51824033,-0.003713693,0.08173703,0.16384764,-0.88854563,0.7730121,0.17500255,0.047530588,-0.5229133,0.20252858,-0.44388622,0.25572473,0.42722487,-0.1655544,-0.104584515,0.3827446,-0.14453594],[-0.0098065995,1.1461085,4.4271894,0.28766564,-0.67997473,-0.41923288,-0.65402234,0.04776276,0.7062483,0.22435577,-0.3855223,1.1025202,0.38395193,-0.13660425,-1.0991157,-0.9289552,0.24331227,0.12602676],[0.064604074,0.09815192,0.04449264,0.167245,0.10047873,0.8369896,-1.0633512,-0.02719515,0.48547852,0.00025195925,-0.115980625,0.22939739,-0.16308971,-0.2363354,0.035979815,0.039715026,-0.31373924,0.16439395],[0.14448808,0.42794606,0.023460679,-0.03131989,-0.18359396,0.92956793,-0.62810725,0.051745564,-0.007592588,-0.2550739,0.22733083,0.4052302,0.21245979,-0.54544073,-0.47292453,-0.01651716,0.28038526,-0.06726948]],"activation":"σ"},{"dense_2_W":[[0.3185951,0.38238007,0.50007355,-0.44696733,-0.18833564,0.49253,0.5151739],[-0.75351256,-0.02323625,0.15045765,1.1255723,-0.22760838,-0.5423463,-0.39320955],[0.5941869,0.6002208,0.67094994,0.1078536,-0.21703981,0.5121481,-0.044793326],[-0.18639438,-0.77096725,0.06640158,0.31278,-0.1791094,0.005353212,-0.7920676],[-0.5254911,-0.34967858,-0.04295217,-0.09182358,-0.49522772,-0.29707804,-0.26805338],[-0.11694704,-0.5764714,-0.77232236,0.83998466,0.2796507,-0.6095662,-0.6371917],[0.4697945,-0.81612813,0.41819504,0.0026271453,-1.0698678,-0.44858027,-0.71943],[0.032202445,-0.36785793,-0.89155453,0.91260713,0.26696843,-0.8249699,-0.7184577],[0.14048702,-0.056610133,0.32802385,-0.046393655,-0.78281575,-0.81149364,-0.6811588],[-0.15381347,0.34545475,0.3851575,-0.18525209,0.6611936,0.46200687,0.029352214],[-0.27863827,-0.90037704,0.31005386,-0.06176267,-0.49294484,-0.47007585,-0.21173601],[-0.5374982,-0.098829664,-0.25622907,0.6391975,0.0902377,-0.5835498,-0.6351781],[0.18176489,-0.1428339,0.6578572,-0.7403219,0.44002348,0.21766058,-0.061404295]],"activation":"σ","dense_2_b":[[-0.19657324],[0.20226727],[-0.10386356],[-0.010249704],[-0.094468534],[0.15300958],[-0.060326923],[0.024111554],[-0.15287803],[-0.29019067],[-0.05875744],[0.12496516],[-0.08454377]]},{"dense_3_W":[[-0.2886454,0.5095047,-0.57979405,0.36372662,0.13746898,0.34730884,0.6172098,0.14228286,-0.2412701,0.024884012,0.52553844,0.1899192,-0.2080911],[0.723521,0.30430666,-0.48175433,-0.18722822,0.17053263,-0.046900373,0.32055286,-0.28427157,-0.559016,0.6173524,0.38790986,-0.58535457,0.20128798],[-0.38595572,-0.74244434,0.6686922,-0.7516655,0.11421817,-0.66320103,0.02764821,-0.48069245,-0.52054244,0.78038347,-0.008231983,-0.19960494,0.5328335]],"activation":"identity","dense_3_b":[[-0.08028006],[0.05776726],[0.01632964]]},{"dense_4_W":[[-1.2012991,0.5136856,0.2434981]],"dense_4_b":[[0.07582895]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_COROLLA_TSS2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_COROLLA_TSS2.json deleted file mode 100644 index eeb64e65a..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_COROLLA_TSS2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.754316],[1.5248336],[0.56031793],[0.049654935],[1.5070868],[1.5136857],[1.5187283],[1.4884274],[1.4468032],[1.3927733],[1.3395035],[0.049471103],[0.049509283],[0.049545065],[0.049528807],[0.049440794],[0.049183726],[0.048698023]],"model_test_loss":0.01838030107319355,"input_size":18,"current_date_and_time":"2023-08-11_23-49-46","input_mean":[[22.216816],[-0.068382844],[-0.0003495027],[-0.009731857],[-0.06888316],[-0.06969439],[-0.07004197],[-0.06833163],[-0.062542245],[-0.054059293],[-0.046969976],[-0.0098139495],[-0.009790095],[-0.009772296],[-0.009818108],[-0.009930541],[-0.010102344],[-0.010210523]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.071733765],[-2.3017254],[-0.002747584],[-0.16260307],[-0.039528668],[1.2633095],[0.40724456]],"dense_1_W":[[0.14254493,0.7560598,0.0022538262,0.026828635,-1.0626036,1.6978638,-0.58277315,-0.532054,0.13709316,0.08024807,-0.01103483,0.7790654,-0.36199996,-0.27354154,-0.40135407,0.112546146,-0.12273542,0.17872572],[-0.75257075,1.8171842,-1.4895765,0.6856587,-1.047781,-2.1456847,1.0205821,-1.1760736,-0.51131254,-0.1572458,0.3351541,-0.8285507,-0.10711446,0.89037967,-0.5866782,0.046956923,-0.018645424,0.15313248],[0.04169559,-0.58989626,-6.2346396,0.21148093,1.0282952,-0.15679906,0.015086645,-0.4938231,-0.98810667,-0.8081533,1.2733475,-1.0567358,-0.6226471,-0.07101477,1.028134,0.7304045,0.7475682,-0.87618846],[0.00729714,-1.1409336,0.00029273634,0.021291457,0.47364047,-1.0528986,0.6670064,-0.31857133,-0.2512035,-0.14272158,0.29329458,-0.47188643,-0.18927035,0.7875639,0.17967238,0.47387323,-0.0324174,-0.19277702],[0.13785772,-0.30069488,0.002800617,0.31292388,0.408026,-1.1410295,0.61747766,0.056347255,-0.16441363,0.14121056,-0.08929794,-0.39708617,-0.2790936,0.44575593,0.28871247,-0.30545992,-0.063934155,0.045969535],[0.9263208,-0.0041096397,-1.2649248,-0.22491741,-0.7898359,-0.6432323,0.46669382,-0.69405776,-0.039997756,-0.059218984,0.16558072,-0.21184966,-0.06702091,0.2703531,0.22768503,0.39336708,-0.25291198,0.07505179],[-0.007783014,-2.9238482,0.010547396,-0.17914231,-0.9764414,-1.8973196,-2.0817938,-0.5377732,-0.8602919,-0.92122966,-1.1030004,-0.061209604,0.05769448,-0.2639501,-0.011335088,0.0692365,0.37218606,-0.34912306]],"activation":"σ"},{"dense_2_W":[[-1.2037164,0.82475835,0.58777946,-0.41806436,-0.07912497,-0.9752202,0.43038344],[-0.87383485,1.7625434,-0.9010436,0.04913966,-0.80236125,-0.8888718,-1.1724374],[-1.149093,0.588674,-0.79056436,0.5840478,-0.6800404,-2.3066614,-0.30252007],[-0.7044807,-0.3438525,0.18204984,0.9572669,0.17036141,-0.4475017,-0.10285365],[-0.35474542,-0.91775477,0.16575153,-0.6729545,0.004384356,-0.5627307,0.20499422],[-0.62687695,-0.89932716,-0.40928647,0.004326587,0.10205387,-0.38104382,0.05874869],[0.20604928,0.56815124,-0.031190628,-0.6709605,-0.70632714,0.3854373,-0.38627437],[-0.32655486,-0.48946378,-0.27688035,-0.28829703,-0.28283417,-1.2973477,-0.30639303],[0.95871663,0.015167555,-0.4939611,-0.82378834,-0.6367465,0.11321682,0.36064836],[0.17759234,-0.05241082,-0.9149439,-0.5095627,-0.028105808,-0.1622127,-0.56177574],[0.9313323,-0.7414045,-0.10210027,-0.6010315,-0.9564538,-0.379816,0.40230134],[-0.09108528,0.32599035,-0.026278114,0.36614916,0.5561161,0.84679973,0.47440732],[-1.5251282,1.6984508,0.8223704,-0.14148536,-0.21781565,-1.3052686,0.55815554]],"activation":"σ","dense_2_b":[[-0.5853772],[-0.1194652],[0.09660614],[-0.20516787],[-0.2301157],[-0.33061823],[-0.039316446],[-0.11710167],[-0.029613337],[-0.25951824],[0.089471936],[-0.0013098614],[-0.92236656]]},{"dense_3_W":[[-0.20270818,0.6552373,0.9410651,-0.7787618,-0.18410496,0.016181383,0.62408584,-0.3269968,0.7875554,-0.40091902,0.7076024,-0.21312849,-1.0302222],[0.27061725,-0.13254738,-0.19332989,-0.070887744,-0.23539513,-0.14211313,-0.56738764,-0.3196864,-0.56094,0.17847942,-0.31821814,0.57166994,0.60353655],[0.5228776,-0.36678898,-0.47331262,0.4382709,0.092253216,0.38762012,-0.44059324,-0.44392672,-0.19738796,-0.43091238,-0.8047946,0.5009608,-0.23722588]],"activation":"identity","dense_3_b":[[-0.08095956],[0.10173851],[0.10956224]]},{"dense_4_W":[[0.48155427,-0.78180456,-0.52694654]],"dense_4_b":[[-0.0919536]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_HIGHLANDER.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_HIGHLANDER.json deleted file mode 100644 index a9250081a..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_HIGHLANDER.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.59148],[1.2493986],[0.5269206],[0.041249365],[1.2364323],[1.2408036],[1.244121],[1.2149953],[1.1840745],[1.139739],[1.0999022],[0.04111617],[0.041138012],[0.04116289],[0.041093722],[0.04103911],[0.040840328],[0.04053395]],"model_test_loss":0.013219255954027176,"input_size":18,"current_date_and_time":"2023-08-12_04-15-52","input_mean":[[22.762989],[0.029107802],[-0.0036903925],[-0.0018161334],[0.02989136],[0.030132128],[0.029675554],[0.031246228],[0.032991253],[0.033477113],[0.031189695],[-0.0017968083],[-0.001822502],[-0.0018435197],[-0.0018475861],[-0.0018452929],[-0.0018318946],[-0.001845115]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.24648063],[-2.376559],[1.1662444],[-0.26554593],[-0.32742506],[1.4806708],[-0.0031550017]],"dense_1_W":[[-0.0022086294,-0.40385738,-1.160377,0.058853727,-0.45829934,-0.9892548,0.7024091,-0.026199905,0.1490116,-0.15794931,0.3758965,0.049813736,0.32553354,0.32745218,-0.17973755,0.050215364,-0.19431834,0.20708089],[-0.9471611,-0.7732935,0.0040800874,0.5742045,-0.18457998,-1.2835798,0.6246207,-0.14899649,0.18967356,-0.065814145,-0.15127227,-0.3386243,-0.23807645,0.6077654,-0.5328684,-0.30787334,0.28645578,0.14132696],[1.0173131,0.3188301,0.0074244044,0.61990887,0.7274369,-0.93646467,1.0704489,0.76136214,-0.32295448,-0.01725006,0.07569445,0.18620366,-0.17104647,0.29966894,-0.70542735,-0.7354604,0.016799392,0.30154032],[-0.20962188,-1.311333,-0.0026445198,0.17922984,0.531851,-1.5825989,0.7938387,0.0066229375,-0.09016458,-0.30289832,0.17271148,-0.47236636,-0.30804113,0.6233303,0.12623943,-0.0055988682,-0.043602336,0.06712645],[-0.020458225,-0.42885244,-0.0038395484,-0.10207273,-0.015277347,-1.4454521,1.3775421,-0.118530035,-0.22922382,0.17729308,-0.09748722,-0.89088255,-0.178599,0.85357165,0.35415354,0.43488976,0.04118875,-0.33566797],[0.8193772,-0.6007122,-0.0017037725,0.13282925,-0.11202925,-0.929353,0.317924,-0.11701756,0.10553851,-0.3365874,0.0851421,-0.054551814,0.0054372363,0.36028123,-0.2594373,-0.61298895,0.37971976,0.19868912],[0.008058829,1.6243702,6.4016485,-0.019551624,-1.5234914,-0.4204991,-1.3425288,-0.4094253,2.030977,1.4565194,-0.8323464,1.296278,0.47479084,-0.09157813,-1.1762311,-0.8872532,-0.12166119,0.38413718]],"activation":"σ"},{"dense_2_W":[[-0.28090087,0.74190426,-0.28707552,0.516355,1.334883,0.4357577,0.2586334],[-0.34608322,-0.33025268,0.0999196,-0.5887224,-0.6075646,0.64398736,0.3338182],[-0.31348327,-0.8770239,-0.6024458,-0.6178695,-0.6372776,-0.72627634,-0.16278459],[-0.3722624,-1.0817293,0.42359433,-0.33799604,0.10361065,0.7388388,1.3176775],[-0.29480588,0.7901369,0.17133124,0.4799114,0.85245687,-0.013445694,0.14533967],[-0.87411815,-0.16010237,-1.4885652,-0.29839927,-0.20605023,-1.562838,0.5986846],[-0.73472345,0.338243,-0.9374241,0.02173104,-0.7596491,0.6785289,-0.20274258],[-0.2997788,0.2209799,0.48596287,0.78598267,0.9243628,0.023341166,-0.43850183],[0.4222353,0.5027177,1.0574167,0.43871415,0.28589502,0.78985494,-0.5190039],[-0.18783973,-0.56768733,0.050845794,-0.28815973,-0.94438463,-0.2522084,0.32373685],[-0.106311925,-0.35109058,-1.1950349,-1.3491938,-0.63636744,-0.85660255,0.65720135],[0.11469332,0.6067198,-0.0036478473,-0.1060145,0.81046635,-0.43815076,-0.32849914],[0.02783019,-0.4614942,-0.2623803,-0.9181543,-0.88305587,0.06497931,-0.5045385]],"activation":"σ","dense_2_b":[[-0.15510015],[0.2342048],[0.15416661],[0.7777073],[-0.13564527],[0.14683509],[0.024061315],[-0.08486859],[-0.11236216],[0.14123017],[0.1472493],[-0.2562387],[0.1431819]]},{"dense_3_W":[[-0.39276794,-0.16104949,-0.6395178,-0.085208185,0.073711544,-0.10194128,0.45973158,0.53386575,0.3106653,0.012114314,-0.73890895,-0.1875676,-0.678936],[0.7250477,-0.36109838,-0.2772502,-0.73887503,0.37471095,-0.6863193,-0.5893201,0.13003068,0.5410711,-0.3264668,-0.8585225,0.46357864,-0.7054099],[0.12821884,-0.55353826,-0.29466185,0.21078463,0.06601266,-0.4738428,-0.10462136,0.5951863,-0.07738918,-0.641871,0.18521658,0.1677981,-0.252422]],"activation":"identity","dense_3_b":[[0.04069802],[0.026384773],[0.020536864]]},{"dense_4_W":[[-0.29379988,-1.0209042,-0.20056948]],"dense_4_b":[[-0.02549032]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_HIGHLANDER_TSS2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_HIGHLANDER_TSS2.json deleted file mode 100644 index ed522a375..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_HIGHLANDER_TSS2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.797211],[1.4073237],[0.45344877],[0.04491299],[1.3987288],[1.4015741],[1.4033431],[1.3713129],[1.3358603],[1.2864146],[1.2356204],[0.044730604],[0.04476502],[0.04479927],[0.044761524],[0.04463559],[0.04441582],[0.04400734]],"model_test_loss":0.01496149692684412,"input_size":18,"current_date_and_time":"2023-08-12_05-44-01","input_mean":[[23.06539],[0.022372128],[-0.018723505],[-0.0037287462],[0.025849355],[0.024471685],[0.022525933],[0.017384581],[0.017084958],[0.015315184],[0.014839374],[-0.0038067892],[-0.0038066467],[-0.0038155483],[-0.0038835425],[-0.003969397],[-0.004126497],[-0.004283849]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-5.0399375],[0.66340405],[-0.08379381],[-0.1257602],[0.30399242],[-4.494502],[0.27936158]],"dense_1_W":[[-2.5363288,-0.57757294,0.0027555253,-0.69334877,0.13913916,0.38319087,0.95406264,-0.95457584,-0.033972528,-0.21526104,-0.67382884,0.1485172,0.4771976,0.18877178,-0.16290484,-0.016111093,-0.40084124,0.40098542],[-0.10251014,0.90069646,0.0015895946,-0.29654703,-0.49717396,1.268891,-0.8686852,0.106027365,-0.08154456,0.054320164,-0.0015901169,0.28086966,0.37089986,-0.39758688,0.089162976,-0.20091611,-0.019581586,0.1379176],[-0.0021139083,-0.5681109,0.0045096576,0.37979248,0.21457663,-1.1264517,1.0069007,-0.28261423,-0.2431941,0.19875054,0.0066458527,0.109028324,-0.3649011,0.09212255,0.49301502,-0.059227098,0.07381374,-0.17722736],[0.008648403,0.87794864,3.1009352,0.21482791,-0.8084606,0.18275541,0.3635672,-0.08733222,0.9668826,0.25053218,-1.0132065,0.3902859,0.59336084,0.04232025,-1.0975246,-0.20822704,-0.42172226,0.30119237],[-0.1216848,-0.9771412,-0.017562695,0.23040251,0.120802276,-0.26227885,0.70101273,-0.29537383,0.036361422,-0.3592869,0.32375747,-0.17707966,-0.4159238,0.05444697,0.37961268,0.26376435,-0.019785738,-0.23029959],[-2.2624679,0.24792579,-0.003632164,0.46374714,-0.43607607,0.033397473,-0.29120448,0.24237801,0.22114673,0.041112114,0.76203763,0.109556496,-0.29734334,-0.6331814,0.29980987,0.17154595,0.35740486,-0.4158375],[-0.034173463,-0.5125805,0.011909321,-0.24246725,-0.007852726,-0.9268454,0.438557,-0.2839944,0.24563706,0.2190338,-0.2901443,-0.34727386,0.33995688,0.16540235,0.28732327,-0.35981894,0.041257735,0.058045775]],"activation":"σ"},{"dense_2_W":[[-0.1993436,0.701577,-0.41372073,-0.09332039,-0.36059406,0.77733815,-0.833145],[-1.5271622,1.5048598,-0.77010024,0.07560495,-0.71047103,1.3006324,-0.5117385],[0.46061924,-0.008243548,-0.85892344,1.2595167,-0.948924,2.2698135,-1.942301],[0.061940253,-0.31634828,0.0798406,0.34763846,0.021756,-0.46359214,-0.07392033],[-0.2696488,-0.40507072,0.19450307,-0.6713937,0.40933418,0.14875686,-0.03199306],[0.014884351,-0.18024068,0.36034963,0.07164113,0.0156314,0.371164,-0.27950096],[-1.5902536,1.8198748,-0.7683764,1.3738456,-0.092035376,-0.3063631,-0.5351149],[-0.1981007,-0.3395727,0.57789916,0.21266969,-0.19264036,0.3517743,0.2045635],[-0.25479048,-0.42085296,0.2920033,0.060998514,0.1293151,0.31961867,-0.46009016],[0.3049363,-0.22684415,-0.034080368,0.0790401,0.61918515,0.29823962,0.09349991],[-0.4494046,0.31757298,-0.4080604,0.20879479,-0.44578844,0.58260244,-0.096968025],[-0.21508828,0.32704902,-0.51432735,0.7326623,-0.6550922,1.1410198,-0.62732315],[0.12526976,-0.09556271,0.63842154,-0.61208946,0.3558117,-0.23578581,0.62607837]],"activation":"σ","dense_2_b":[[-0.017869094],[0.36151597],[-0.1958973],[-0.023889307],[-0.0017105008],[-0.03132981],[0.2619224],[-0.013072357],[-0.013901752],[0.023021301],[-0.13436924],[-0.46172282],[-0.04681776]]},{"dense_3_W":[[-0.052120414,0.029567413,-0.66409993,0.094393685,0.31642377,0.10608072,-0.3086923,-0.040440086,0.03381829,0.66097414,-0.4579581,-0.51134187,0.57541263],[0.5851281,-0.17931658,-0.4185391,0.1195394,0.36722615,-0.21088938,-0.32132354,0.42602026,-0.47596413,-0.3402495,-0.26624802,-0.5764113,0.0354186],[-0.6289345,-0.8272402,-0.0011975961,0.18056613,0.063398294,-0.034670547,-0.5280208,0.43154517,0.0023103878,0.2373611,-0.08228515,0.107933424,-0.03365145]],"activation":"identity","dense_3_b":[[0.053374246],[-0.03893916],[0.06737692]]},{"dense_4_W":[[-1.0474417,0.35237366,-0.9325995]],"dense_4_b":[[-0.057818808]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_MIRAI.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_MIRAI.json deleted file mode 100644 index e1a890e78..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_MIRAI.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.621243],[1.130312],[0.5516336],[0.041195676],[1.126876],[1.1290765],[1.1299986],[1.1140016],[1.0942802],[1.061783],[1.0278625],[0.041149452],[0.041160367],[0.041163765],[0.041012943],[0.04082218],[0.04049875],[0.040250767]],"model_test_loss":0.010191036388278008,"input_size":18,"current_date_and_time":"2023-08-12_10-54-52","input_mean":[[23.69867],[-0.09237417],[-0.024359873],[0.005003234],[-0.08491814],[-0.08716023],[-0.08930154],[-0.09497029],[-0.09355577],[-0.09201378],[-0.08880379],[0.005034295],[0.0050175954],[0.004999444],[0.0049864235],[0.004929149],[0.0046412693],[0.0043429676]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0368268],[-0.6035686],[-0.37980628],[-0.38712236],[-0.31054008],[-0.35742834],[-0.1745767]],"dense_1_W":[[-0.30988532,0.94676775,0.06835736,-0.20904909,-0.31267637,0.4459532,-0.75116515,0.18319201,-0.16871549,0.01450603,0.094541326,0.19128986,0.094970584,-0.10434261,-0.12030237,0.08215967,-0.0004368318,-0.008146429],[-0.33773926,-0.57431877,-0.082528114,0.034690164,0.29717553,-1.3232597,1.2727411,-0.00825284,0.058543384,0.08819038,-0.25790802,0.36763,-0.3964585,-0.25440165,0.26645663,0.1723957,-0.13807693,0.016459083],[-0.643219,-0.52567714,0.16125901,0.35280794,-0.27486697,1.1864855,-0.64119214,0.28674185,0.24847941,-0.064988114,0.18981163,0.030853774,0.2485369,-0.36588603,-0.2141448,-0.24320458,0.054182176,0.08016488],[1.8329483,0.19176741,0.3630878,0.8177945,1.0301634,-0.8391618,0.029882386,0.28434104,-0.2605399,0.032751296,0.7037072,0.12650606,-0.5634059,-0.14148597,-0.14909759,-0.23083402,0.19594365,-0.15800387],[1.6136711,-0.023185488,-0.330168,-0.64757305,-0.7903925,0.3184771,-0.125178,0.5074217,-0.091587566,-0.15822329,-0.59075946,0.099624775,0.28776196,0.25979534,-0.31621882,0.2251791,0.16301762,0.015307925],[-0.012423788,1.3620756,3.723387,-0.09946844,-2.2505002,-0.6505167,-0.3025472,1.0916159,1.1659752,0.5379025,-0.8302681,0.2763101,0.3852661,0.03025497,-0.38073367,-0.20023987,-0.20818618,0.33501345],[0.035275426,0.13343032,-0.01315199,-0.16700771,-0.012076806,1.0922886,-0.46189055,0.04980423,0.22884117,0.08929184,-0.13899224,0.27415225,0.107125394,-0.21544056,-0.15122053,0.015403071,-0.16977242,0.05957028]],"activation":"σ"},{"dense_2_W":[[-0.32195273,-0.80007017,-0.047992315,0.00076893583,0.086762525,-0.2853599,-0.46519622],[-0.8466131,0.8392215,-0.625954,0.53587455,-0.05725867,0.48061028,-1.0681951],[0.6704792,-0.88257265,0.048325025,-0.11247827,-0.5555944,0.48655844,0.15341099],[-0.73055834,0.18692662,-0.0051072617,-0.28417185,-0.79494137,-1.1081446,0.3546513],[0.6564168,-0.9941641,-0.012599699,0.055534486,0.1949257,0.11912132,0.67601776],[-0.92568284,0.19816734,0.006052384,0.5773367,-0.58242613,-0.10242073,-0.62971866],[0.026353309,-0.101803504,-0.13243441,0.11023436,-0.18115512,-0.31580073,0.35157788],[0.024816064,0.74383426,-0.6058626,0.1693422,0.13700868,-0.34494787,-0.2539183],[-0.6846791,0.70265,-0.30746013,-0.5157588,-0.22700436,-0.56013364,-0.05191689],[-0.044140954,0.0018182937,0.14246152,-0.66603386,-0.27544877,-0.9813431,0.020237492],[-0.25419834,1.060303,-0.05096676,-0.4194434,-0.34662414,-0.66279954,-0.45178506],[0.35331485,-0.35900408,0.12481251,-0.69748133,-0.11242132,0.0421719,0.95737815],[-0.18702975,-0.19013745,-0.59367853,0.335176,0.036005035,0.045245975,-0.4265972]],"activation":"σ","dense_2_b":[[-0.30476797],[-0.195294],[-0.25333008],[-0.10860839],[-0.2226989],[-0.032822598],[-0.011119534],[-0.055506833],[-0.029588649],[-0.3181418],[0.07300559],[-0.06738982],[-0.15821727]]},{"dense_3_W":[[0.034150075,0.57094276,-0.48878017,0.5112273,-0.18092011,0.5353878,-0.11806307,0.3421746,0.47612357,0.52546614,0.15649377,0.1728523,0.4344787],[0.121647194,0.3492057,0.17216049,0.41008264,-0.7363858,0.18355447,-0.514776,-0.17685267,-0.14863887,-0.03910745,0.48813453,-0.7858287,-0.2943318],[0.33316976,0.06313858,0.2317506,0.47803766,-0.19028156,-0.13142887,-0.5406721,-0.3424372,-0.3295334,0.5573225,-0.1931224,0.24481794,-0.14382799]],"activation":"identity","dense_3_b":[[-0.10088669],[-0.08613214],[0.09071597]]},{"dense_4_W":[[-1.2123189,-1.2992013,0.67285275]],"dense_4_b":[[0.09299899]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_PRIUS.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_PRIUS.json deleted file mode 100644 index 0b66eb099..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_PRIUS.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.762099],[1.487393],[0.60882616],[0.045595963],[1.4832315],[1.4860536],[1.486883],[1.4329017],[1.3824382],[1.3180021],[1.2599565],[0.045492638],[0.04550747],[0.04551469],[0.04532005],[0.045169514],[0.044900604],[0.04442004]],"model_test_loss":0.023460322991013527,"input_size":18,"current_date_and_time":"2023-08-12_11-56-57","input_mean":[[22.102732],[-0.036377847],[0.008207928],[-0.00759032],[-0.039697252],[-0.039314914],[-0.038734905],[-0.03351559],[-0.029701687],[-0.02374894],[-0.019018527],[-0.0075716134],[-0.0075744586],[-0.007576846],[-0.007673164],[-0.0077769123],[-0.007848316],[-0.007871212]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.2464235],[0.36032724],[3.2142584],[-0.6124687],[-0.3444237],[0.84660757],[2.4967933]],"dense_1_W":[[0.48956943,-1.0167718,0.00075395213,0.31859773,0.35728282,-1.7345634,1.4772928,0.22698121,-0.008497222,-0.2401796,0.06579528,-0.9262515,0.41439727,0.08820266,0.18549742,0.15475516,0.28202718,-0.3306144],[-0.01902877,1.317417,5.2883816,-0.0048064315,-1.1207271,0.14153387,-0.48907554,0.5965518,1.3317474,0.93645155,-1.5463351,0.8940235,0.01715244,-0.09698201,-0.79124266,-0.60062087,-0.5283351,0.48210177],[1.6799453,1.0875803,0.7233399,-0.1154038,0.13903706,0.6666519,-0.57941824,1.110945,0.8287281,-0.39736634,0.014497336,0.8294811,-0.24227042,-0.8082123,-0.11531884,0.3998047,0.38992816,-0.4658866],[-0.0093339095,-0.5626546,-6.469625,-0.24272315,1.8790531,1.1458817,1.6199373,-0.19717191,-2.2601504,-1.494756,-0.0270969,-0.83446693,0.017938558,0.20106375,0.4829865,-0.20796809,0.36888748,0.11745824],[-0.047758993,-3.753541,-0.18051493,-0.1676101,0.06609924,-0.8893684,-0.49023744,-1.0407737,-1.7489501,-1.3261193,-0.87734985,-0.39572844,0.64688593,0.5416982,-0.38286057,-0.97357833,-0.100056775,0.65565544],[-0.5856627,-0.59970623,0.0013667468,-0.121420965,-0.036623403,-0.898132,0.6988883,0.062262405,-0.06344699,-0.09589227,0.0075431895,-0.70993936,0.20738071,0.40989095,0.48009038,0.008462325,0.07712684,-0.15405595],[1.4587147,-1.1636585,-0.6985848,0.15750197,-0.38945892,-0.008756978,0.24255253,-0.8265293,-0.7826147,0.05190376,0.17086956,-0.6203985,-0.076512754,0.65016216,0.08441122,-0.1163062,-0.10427384,0.15624847]],"activation":"σ"},{"dense_2_W":[[-1.632233,0.37712488,0.4133944,-0.49261183,0.4405689,-0.7207189,-0.38359222],[-0.8616621,-0.24084182,-0.9289986,-0.018349092,-2.5249062,1.1182486,-1.4555736],[-1.3167355,0.7074618,0.21640916,-1.1284393,0.46383277,-0.13820471,-0.9500447],[-0.92115754,-0.59398055,0.20591407,0.14233942,0.32264933,-1.0047222,0.5837284],[-0.19402613,-0.29334325,-1.0017632,-1.2045952,-1.4455371,1.3564488,-1.236838],[1.0292754,0.18309414,-0.60503435,-0.67400736,-0.025801765,1.5835614,-0.18880595],[-0.08803988,0.85121155,1.2177777,-0.7774471,-0.15086989,-0.46124795,0.47848985],[1.1849687,-0.86750364,-0.43640986,0.5167854,-0.0021778047,0.67761177,-0.039286524],[-0.53804636,-0.047613166,-0.43315673,1.0911809,-0.8549513,-1.652081,-0.3882718],[-0.7047395,-0.45552897,0.29509792,-0.18719345,-0.106475934,-0.82755125,-0.3893937],[-0.57848173,-0.24025704,0.64958143,0.42696828,-0.4415749,-0.83788425,0.5138786],[-1.049563,0.35799855,0.37039617,-0.7668992,-0.1432876,-0.07057645,-1.404517],[0.8964256,-0.7548794,0.4873239,0.77339566,0.51797086,-0.043386698,0.9278152]],"activation":"σ","dense_2_b":[[-0.090917155],[-0.019869018],[-0.2314992],[-0.3312451],[-0.111754775],[-0.020750022],[0.201929],[-0.09248944],[-0.12347164],[0.07316307],[-0.045670044],[0.038350813],[-0.18804084]]},{"dense_3_W":[[-0.031516537,-0.15004298,-0.18322755,-0.49024573,-0.26840314,-0.21953586,0.4307271,0.6146507,-0.13160063,0.5342723,-0.47197735,0.3113398,-0.17237346],[-0.08184883,0.48368433,-0.5115264,-0.38417426,0.8723999,-0.29197934,0.050145645,-0.76852167,0.28836453,0.057352327,0.47973254,0.25683725,-0.18866217],[-0.5150742,-0.38569307,-0.65030956,-0.5188455,-0.23875389,0.4727463,-0.512049,0.80167,-0.69323355,-0.5246097,-0.35622385,0.00080956175,0.41679603]],"activation":"identity","dense_3_b":[[0.005088476],[-0.02459968],[0.076397985]]},{"dense_4_W":[[-0.09449419,0.40851843,-0.86686087]],"dense_4_b":[[-0.053760864]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_PRIUS_TSS2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_PRIUS_TSS2.json deleted file mode 100644 index 489abe369..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_PRIUS_TSS2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.993096],[1.5129169],[0.5292781],[0.04735161],[1.4937518],[1.5009559],[1.5065974],[1.4822813],[1.4460584],[1.3909396],[1.3364335],[0.047238417],[0.047255352],[0.04726677],[0.04720177],[0.047057327],[0.046800528],[0.046432514]],"model_test_loss":0.02137083187699318,"input_size":18,"current_date_and_time":"2023-08-12_14-47-11","input_mean":[[21.92725],[-0.05898304],[0.0055398513],[-0.010017767],[-0.05939448],[-0.0591323],[-0.05851898],[-0.054530293],[-0.04864468],[-0.03953879],[-0.033812713],[-0.010021071],[-0.010010929],[-0.010004903],[-0.009986946],[-0.010029537],[-0.010210251],[-0.010435901]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.7096349],[-2.2459192],[1.8050286],[0.14590603],[-0.21259946],[-0.4865897],[1.0180423]],"dense_1_W":[[-0.044355545,-0.86803615,-5.470682,0.7662393,2.2697113,0.20532803,0.7032451,-1.0900831,-1.6173851,-1.3596452,1.1005849,-0.6813092,-0.3240795,-0.1764869,-0.049160894,0.72827965,0.515452,-0.7062596],[-1.1831604,-0.62358975,-0.0026339197,0.44086918,-0.13777687,-1.6426544,0.7253186,0.21613201,-0.33259863,-0.30798477,-0.3028476,-0.6908554,-0.26595157,-0.034876596,0.27096295,0.12958722,0.28949723,-0.13089034],[1.129321,-0.1758684,-0.016361756,-0.10424338,-1.0363773,-0.9705366,0.7942455,-0.14791845,-0.4966791,-0.14422588,-0.39332545,-0.4259459,-0.18380871,0.013830062,0.29699945,0.06683513,0.43560967,-0.118786275],[-0.17347103,-1.1811129,-0.0033009297,-0.21089908,0.5171898,-0.897144,0.44509307,-0.106434815,-0.28461242,-0.4546323,0.11333945,-0.42986956,-0.46928948,0.63054854,0.28181624,0.14660357,-0.021812595,0.05028003],[0.007173049,-0.70618355,-1.4873191,0.58662444,-0.089591786,-1.1213539,-0.47290862,-0.51822674,0.0023703398,0.2661958,1.152991,0.08745119,0.581388,0.3216495,0.05185744,-0.47252813,-0.24824727,0.051313765],[0.06722459,-0.70006377,-0.003337988,0.18606693,0.5765867,-1.6360734,0.96973306,0.05009269,-0.029201366,0.17914243,-0.20576404,-0.3237746,-0.289676,0.26199174,0.35764173,0.1982268,-0.094512984,-0.064385064],[1.4187667,0.23352993,0.015063511,-0.32947004,0.76953924,-0.5759871,0.85416406,0.6099805,0.14313644,-0.0988441,0.43220612,0.40879938,0.055067588,0.46557856,-0.18368772,-0.54336697,0.18179518,-0.084707245]],"activation":"σ"},{"dense_2_W":[[0.5947046,0.111288555,0.5850431,0.62112284,-0.078394376,0.24245393,0.32209224],[-1.8208972,-0.592816,-1.642084,-0.38896674,0.5061991,0.19109774,-1.5200887],[0.025273113,-0.08020302,-0.41331917,-0.022847144,0.6140032,0.10955139,0.35156295],[-0.50207645,-0.009498558,0.5945049,0.09697446,-0.6907574,-0.44700485,-0.69720614],[0.023978695,0.4353877,-0.6338232,0.066216335,0.5071922,0.72722405,-0.37157634],[0.22281975,0.30087987,0.10793576,0.6051096,-0.050377756,0.06560134,0.19566649],[0.3174169,-0.5281018,-0.3769352,-0.9404693,-0.38535568,0.047176104,-0.29524794],[-0.01142797,-0.8428373,0.61943024,-0.07822464,-0.27282074,-1.3535438,-0.027685491],[-0.1500802,-0.7242349,-0.30430663,-0.9526516,0.07655578,-0.72111547,-0.26857635],[-0.812532,0.026910001,0.31951103,0.13876708,-0.52592987,-0.28904262,-0.7990699],[0.43766123,-1.7336309,0.24968149,-1.029645,-0.074033834,-1.2529281,-0.030552762],[-0.33508214,-0.42931655,0.42052394,0.17153797,0.019656077,-0.109691635,-0.8664852],[-2.0966787,-0.025330383,-1.3079646,-0.22694683,-0.28807703,0.07181863,-1.555939]],"activation":"σ","dense_2_b":[[-0.019173387],[0.12807891],[0.0059481813],[-0.17893082],[-0.051502828],[-0.02974034],[-0.02933723],[-0.0073013883],[0.22854811],[-0.202757],[0.043750115],[-0.28998128],[0.23772466]]},{"dense_3_W":[[-0.3590014,0.24275887,-0.008422746,0.5422629,-0.6242663,-0.45372233,0.2612047,0.42095724,0.65564615,0.24925809,-0.024278162,-0.009784553,0.2571832],[0.5248679,0.040475123,-0.10563131,0.51980525,0.6735201,0.606566,-0.4731102,0.38770038,-0.1824653,0.12611738,-0.4370857,-0.6336852,-0.24878174],[-0.24122173,-0.7736854,0.54332715,-0.3138175,-0.3822715,0.051808015,-0.5872665,-0.6603135,-0.71875435,-0.22510114,-0.56668365,0.3377473,-0.81265104]],"activation":"identity","dense_3_b":[[-0.024711734],[0.022470985],[0.04454885]]},{"dense_4_W":[[0.7645119,-0.6550188,-0.91781116]],"dense_4_b":[[-0.03211836]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_PRIUS_V.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_PRIUS_V.json deleted file mode 100644 index e591efd50..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_PRIUS_V.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.246218],[1.5180237],[1.1132214],[0.032814745],[1.5758848],[1.5594358],[1.5396744],[1.4333483],[1.3656113],[1.2911646],[1.211073],[0.032817718],[0.032821406],[0.032829028],[0.03273625],[0.03268472],[0.03245208],[0.032211557]],"model_test_loss":0.011019937694072723,"input_size":18,"current_date_and_time":"2023-09-03_04-36-00","input_mean":[[16.336061],[-0.044645034],[0.06438527],[-0.015354921],[-0.055193648],[-0.05405257],[-0.051184133],[-0.0345687],[-0.027733065],[-0.022407],[-0.018130124],[-0.015424534],[-0.015413215],[-0.015394557],[-0.01529056],[-0.015231228],[-0.015114382],[-0.014972076]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.001179121],[-0.0008084346],[1.0273217],[0.8665842],[-1.7917292],[0.5846544],[1.8503871]],"dense_1_W":[[0.0008713786,0.10571419,-0.009768912,0.20203193,0.06539419,0.8834566,-1.064991,0.8917164,0.2740178,-0.29560176,0.046367835,-0.06696189,-0.15079989,-0.10306829,0.15937875,-0.32234034,0.11896804,0.013798418],[0.0032703213,0.3225856,-0.017178465,-0.3818704,0.3018395,0.30094728,-0.41512567,0.38405526,-0.1570511,-0.014270626,0.080081746,0.6354644,0.35888773,-0.43707213,-0.32447734,0.023193512,-0.16756727,0.20933074],[1.5627879,-0.37140134,0.63836944,-0.3830291,0.72145224,-0.3836591,0.11257197,0.21017507,0.26833218,0.25539163,0.5186593,-0.15651038,0.41176555,0.45905823,-0.42902833,0.06326807,0.3629456,-0.30402216],[1.6168094,0.40822932,-0.66605085,0.22799215,-0.69717556,0.34626734,-0.0059232763,-0.54218775,-0.055495918,-0.3768063,-0.48113772,-0.018525612,-0.5950303,0.2557122,-0.18825729,0.22983,0.005579068,0.06161027],[-1.1495299,-0.7586535,-0.5353385,0.025521036,1.087006,-1.0086828,-0.17635801,0.4568657,-0.091241084,-0.5215724,-0.2604748,0.045887616,0.11212669,-0.25279886,-0.14159086,-0.033089254,0.0029795568,0.1999646],[-0.051524103,-0.51501364,11.658313,0.13625003,-1.3843681,-1.6409664,-2.668583,3.1511652,2.57322,0.51289797,-0.38707766,0.10578343,-0.40109116,-0.31546983,0.07539781,0.3615562,0.073550805,-0.14806822],[1.1748914,-0.7219464,-0.5470881,-0.003681565,0.49025726,-0.4171505,0.0072592692,0.024163779,0.024890631,-0.41618225,-0.32244092,-0.19234161,-0.16784292,0.34389323,-0.06989565,-0.12501281,-0.030100992,0.20458347]],"activation":"σ"},{"dense_2_W":[[-0.4868388,-0.61673963,1.4286674,-0.039495535,0.45262775,-1.0424562,1.5454369],[-0.6074346,-1.011816,0.046624646,-0.78734446,2.3072171,-1.3779964,0.8569677],[0.47693276,0.71271104,-0.2390285,-0.038990125,0.12270858,0.20493168,-0.45892665],[0.38512126,0.61106217,-0.41512227,0.46455616,-0.0570659,0.04394896,-0.13119707],[-1.2577482,-0.6138713,0.6549672,-0.65091866,0.5145879,0.3818217,0.53431696],[0.56899303,0.10398351,0.45342615,-0.053685065,-0.104297765,0.09119562,-0.6285316],[-1.0771691,-0.25324076,0.37886608,0.1173106,0.47042668,0.14671373,0.08761732],[-0.3019003,-0.86725014,0.91806465,0.18018398,0.77627605,-0.93972605,1.2739382],[0.62885785,0.7373836,0.016257606,0.023142297,-0.47996506,-0.52089614,-0.113337025],[0.22219604,0.67318004,-0.08316116,0.34620377,-0.6612502,0.034009792,-0.64690715],[-0.23770024,-0.50766915,-0.09670405,-1.216913,1.2701161,-1.6846908,-0.22704105],[0.59986305,0.5738209,-0.19015375,0.421755,0.26094252,-0.04966739,-0.62614566],[0.6166309,0.091970205,-0.12472761,0.28889042,-0.21862288,-0.36297256,-0.44079408]],"activation":"σ","dense_2_b":[[0.19794257],[-0.03969422],[-0.0656537],[-0.062498007],[-0.035217416],[-0.016953804],[-0.0943835],[0.053581137],[-0.03426556],[-0.003272987],[-0.075658314],[-0.07952997],[-0.0015540265]]},{"dense_3_W":[[0.024692904,0.58683085,-0.567369,-0.37911305,0.67811406,-0.15265317,0.6610765,0.4359995,-0.6584148,-0.6708834,0.7197889,-0.4486733,-0.1747178],[0.14699566,-0.6474973,0.2763736,0.28756335,-0.3922964,-0.04845914,0.18625976,-0.26840127,0.6112173,0.3658983,-0.651653,-0.42875016,-0.09464588],[-0.7110688,0.24306618,0.19536833,-0.20736542,-0.025801487,0.17186794,-0.44581038,-0.31020266,-0.16066518,0.029663702,0.22836117,0.06264115,0.15486911]],"activation":"identity","dense_3_b":[[-0.016370883],[0.0127013195],[0.026499491]]},{"dense_4_W":[[-0.8554128,0.2766906,0.524841]],"dense_4_b":[[0.019940862]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4.json deleted file mode 100644 index ba434a6eb..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.785079],[1.3448962],[0.51876175],[0.047479864],[1.3252879],[1.331087],[1.3371022],[1.3088783],[1.2807853],[1.2440304],[1.2056386],[0.04731712],[0.04733776],[0.047359645],[0.04723333],[0.047111828],[0.046843447],[0.046379473]],"model_test_loss":0.01724853552877903,"input_size":18,"current_date_and_time":"2023-08-12_15-17-06","input_mean":[[24.85061],[-0.047142796],[0.0005701203],[-0.008726335],[-0.04417392],[-0.045567565],[-0.046358094],[-0.04118768],[-0.039137643],[-0.03847798],[-0.035704315],[-0.008584033],[-0.008594763],[-0.008609622],[-0.008570998],[-0.008600623],[-0.008706975],[-0.008697191]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0296891],[-1.922514],[-1.149494],[0.022265209],[-0.052071013],[-0.032673564],[-1.9946277]],"dense_1_W":[[-1.8791502,-0.45478737,0.07119253,0.016805792,-0.38664973,1.3035942,-0.542431,0.047575254,-0.22030126,0.13161159,-0.07229064,0.36489004,-0.2386385,-0.23712136,0.034654524,-0.2886649,0.10312662,-0.047390282],[-0.66666186,-0.48720443,-0.11072515,0.094074145,-0.061216515,-1.2182275,0.8426725,-0.10592509,-0.21448702,-0.056960933,0.04259483,-0.7316568,0.20460397,0.42091593,0.15927365,-0.17348117,0.19803195,-0.18829267],[-1.8703458,0.30746105,-0.06834135,0.27911848,0.2422295,-0.6888701,-0.012127967,-0.15067418,0.5743117,0.07311509,-0.16059698,-0.15502444,-0.41604456,0.42384803,0.43910763,-0.17972651,-0.40040898,0.3014311],[-0.019090334,-0.76574296,0.09397271,0.10988411,0.51672286,-2.172949,1.0367043,-0.0839209,-0.58819324,0.16455668,-0.01100052,-0.7896944,-0.2134588,0.98234737,0.034016434,0.36617452,-0.035145547,-0.25804156],[-0.0018639659,-0.9749377,5.5816774,-0.23225898,-0.12594639,-0.9363593,1.234414,0.34805998,-0.08151865,0.107896045,-0.037450574,-0.27116403,-0.30569962,0.7310664,-0.58886266,0.20576492,0.49676666,0.072158925],[-0.019030262,1.2230272,5.830608,-0.41493434,-0.23800562,0.18280193,-1.5482132,-0.0852967,0.70929605,0.31744578,-0.51722443,1.0640428,0.19439188,-0.6710601,-0.2801976,-0.35409272,0.003487162,0.361651],[-0.649294,0.45132867,0.11169535,-0.06450987,0.17274019,1.0169406,-0.8244322,0.08305402,0.30460912,0.13607553,-0.12671345,0.31371805,-0.0019661803,-0.10996772,-0.15226273,0.090185925,-0.3348226,0.27420557]],"activation":"σ"},{"dense_2_W":[[0.6609678,-0.22481585,0.040954396,-0.31495926,-0.19392742,0.10244233,-0.08746393],[-0.7082068,0.86338276,-0.11436686,0.12848611,0.20935868,0.15040098,-1.1645155],[-0.22602943,0.793938,0.18418907,0.72948813,0.6846751,-0.6348888,-1.0778567],[0.53014493,-0.45450902,-0.35092524,-0.5569319,0.12838417,-0.13627666,0.5994005],[-0.17350997,0.7593281,0.7799434,-0.39523655,0.20372757,-0.834957,-0.38898385],[-0.70416707,0.22460131,0.085097484,0.78984326,0.2471842,-0.30347177,-0.58072823],[0.33662602,-0.7904104,-0.60286903,-0.16468751,-0.11612247,0.53005517,0.5211252],[-0.7082711,-0.46435446,-0.75132966,-0.29705703,-1.024626,-0.2615332,-0.20701897],[0.35671562,-0.02681799,0.6840728,-0.2612279,-0.08365274,-0.9705286,-0.605018],[0.62429255,0.0521647,-0.35856178,-0.4051332,-0.5179798,0.46409982,-0.052206893],[0.36666667,-0.5527411,-0.20863053,-0.6491323,0.06274223,0.4735839,0.22757712],[-0.012209164,0.5899906,0.46180722,0.48860443,0.58372164,-0.25489396,-0.895847],[-0.12133152,0.70728445,-0.4158088,0.7696778,0.1290468,-0.5404793,-0.33367673]],"activation":"σ","dense_2_b":[[0.08061271],[-0.19563875],[-0.24664785],[-0.12486449],[-0.2303988],[-0.07568345],[0.037712026],[-0.11140529],[-0.23779462],[0.034758605],[-0.11953955],[-0.21795286],[-0.21500231]]},{"dense_3_W":[[0.16741616,-0.5169601,-0.6872919,-0.3394973,0.08778304,0.27198112,0.7472469,0.11274346,-0.53623766,0.4801037,-0.17826463,0.07536674,0.6185708],[0.4108729,-0.3526092,0.1731832,0.5833954,-0.5591321,-0.5981915,0.7000401,0.37615168,-0.4772691,0.23866276,0.26305285,-0.48178422,-0.15993476],[0.53497106,-0.27460927,-0.65378416,-0.22805771,-0.005714031,-0.46566615,0.8224319,-0.0432606,-0.23549485,0.26196745,0.4718395,-0.6079023,-0.5116151]],"activation":"identity","dense_3_b":[[0.04784515],[0.063176766],[0.085746326]]},{"dense_4_W":[[0.3336722,0.86872417,0.6722818]],"dense_4_b":[[0.065143235]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4H.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4H.json deleted file mode 100644 index 149960002..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4H.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.89405],[1.3264774],[0.49399376],[0.04498591],[1.3162512],[1.3196412],[1.3221577],[1.2921615],[1.262814],[1.2265766],[1.1900893],[0.044859875],[0.044887066],[0.04489899],[0.044722132],[0.044534575],[0.044196904],[0.043708563]],"model_test_loss":0.013147538527846336,"input_size":18,"current_date_and_time":"2023-08-12_21-45-51","input_mean":[[22.843279],[-0.12455614],[-0.0014007707],[-0.0064704656],[-0.1233025],[-0.12350357],[-0.12400504],[-0.1251842],[-0.12609619],[-0.12369014],[-0.12037224],[-0.006532242],[-0.006518202],[-0.006506443],[-0.006487807],[-0.006539525],[-0.0065615526],[-0.0066139703]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.8076376],[-0.12330158],[0.8896142],[-0.13590556],[-4.1826344],[-0.77730286],[4.5746274]],"dense_1_W":[[-0.97973573,0.15226786,0.02845066,0.04827065,-0.025662262,1.7772363,-1.5355376,0.0989295,0.30149132,0.029098786,-0.074183464,0.39862457,-0.10540373,-0.14476654,-0.36632246,-0.3054467,0.15272646,0.07390829],[0.015743697,0.78862613,-0.019669378,-0.12546545,0.009684494,1.3956969,-1.2900923,0.19209127,0.14444686,-0.21074831,0.16892369,0.61990404,0.23663369,-0.8836119,-0.42096013,0.119372375,-0.07889601,0.09642731],[-1.1188109,-0.42021284,-0.027942661,0.14205936,-0.07868929,-0.7710287,0.73801935,0.014988501,-0.069595,-0.35983253,0.24104616,-0.45208368,0.057623267,0.5596988,-0.21029097,-0.045526307,0.32178107,-0.12184607],[-0.013647176,1.3307436,4.6095624,-0.34334475,-0.8587218,-0.12885869,-0.8174357,-0.11078273,1.2218881,0.6008918,-0.6915159,1.311084,0.16892083,-0.3056882,0.08437484,-0.63590443,-0.4589061,-0.0745741],[-1.9673253,-1.4414742,-0.2586987,0.2226021,0.5694981,-1.5805218,0.5769138,-0.00886291,-0.060155656,-0.100935824,-0.13228646,-0.39160243,-0.40697894,0.7586441,0.09374963,0.055745218,-0.22303872,-0.037225552],[0.010619068,2.72878,-0.1893567,-0.27490807,0.50076294,1.516001,0.3651039,0.7132457,0.22416064,0.38899446,0.33117044,0.3081755,0.3069668,-0.8289943,-0.08180179,0.6579218,0.3046304,-0.066973075],[1.9517641,-1.27614,-0.25992838,0.26618478,0.082289934,-0.697544,0.0861543,-0.04430833,-0.1666379,-0.06128522,-0.12283561,-0.34772325,0.10666418,-0.18634178,0.41480446,0.21883197,-0.314464,-0.09010557]],"activation":"σ"},{"dense_2_W":[[-0.6846211,-1.4150484,0.62999135,0.3430101,1.278193,-0.7957307,1.0221282],[0.16265254,-0.2179754,-0.03812709,-0.97449124,-0.69266665,-0.13029383,-0.6855177],[0.67744255,0.7218722,-0.15119076,-0.36107507,-0.6168378,0.3564611,-0.14333059],[0.44798878,0.054440223,-0.12721358,0.11809645,-0.061688833,0.04752611,0.13841292],[0.22670254,0.36689356,-0.44299468,0.53176785,0.3255846,-0.5087834,-0.24648738],[-1.1769708,-1.0265867,1.0046444,0.3265467,1.2754724,-0.6967977,1.0338258],[-0.07486774,-0.5789648,0.18375583,0.08036335,0.17746748,0.4459745,-0.28357828],[-0.98316115,-0.82948774,1.1131235,-0.30703646,0.70785904,-0.18001986,0.71042156],[0.10901459,0.64697224,-0.36924043,0.8418233,-0.18619084,-0.3438453,-0.58111745],[-0.13789596,-0.28369164,-0.24692981,-0.6745289,-0.83434075,0.4034985,-0.2338089],[0.5772887,-0.30526567,-0.8162497,0.44525668,0.23674823,0.12436892,-0.7137595],[-0.59163356,-0.21955788,0.26342097,-1.3260666,1.5348077,-0.15188397,-0.24587795],[-0.864029,-0.23358338,-0.21427485,-0.45828933,-0.8476076,0.7652582,0.07033687]],"activation":"σ","dense_2_b":[[-0.2084633],[-0.3401461],[0.03563889],[-0.019227123],[0.033816546],[-0.21475661],[-0.108693056],[0.0054793637],[-0.055306572],[-0.3065528],[-0.067040265],[-0.22550777],[-0.33363193]]},{"dense_3_W":[[-0.27252012,0.28291574,0.104386985,-0.27400178,0.03230503,-0.36361536,0.03550164,-0.098785385,0.5028087,0.15802625,0.25782102,-0.3110525,0.3512787],[-0.35834575,-0.20253947,0.08262887,0.49909568,0.40528995,-0.21334086,0.27457196,-0.6656153,-0.24731882,0.07225506,0.18140426,0.56584823,-0.53368413],[0.44071397,0.39182287,-0.45943233,-0.42492127,-0.5459261,0.56124943,0.37052932,0.3689143,-0.69441694,0.41806287,-0.031108733,0.5795106,0.5095399]],"activation":"identity","dense_3_b":[[0.044206124],[0.04141924],[-0.087050036]]},{"dense_4_W":[[0.7859495,0.4201428,-0.711207]],"dense_4_b":[[0.048112456]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4_PRIME.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4_PRIME.json deleted file mode 100644 index c219d986c..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4_PRIME.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.668097],[1.5244726],[1.2700657],[0.03216253],[1.6078212],[1.5848233],[1.5577372],[1.3927742],[1.2935301],[1.1931615],[1.1020583],[0.032136116],[0.03217024],[0.032196537],[0.03225218],[0.032214258],[0.032031752],[0.03179372]],"model_test_loss":0.018995385617017746,"input_size":18,"current_date_and_time":"2025-05-15_14-47-45","input_mean":[[18.09652],[-0.017798662],[0.027145168],[-0.0054331655],[-0.025215305],[-0.022640774],[-0.019500963],[-0.010056124],[-0.0057649272],[0.001960505],[0.0020118994],[-0.005499858],[-0.005477372],[-0.005444631],[-0.0053683305],[-0.005257134],[-0.005035867],[-0.0050971555]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.016405884],[1.4187009],[-0.30671495],[-1.4047697],[-0.20383339],[-0.3632745],[-0.028944347]],"dense_1_W":[[0.13070685,-0.6662394,-1.0739188,-0.41523784,0.019285621,-0.5666617,0.02941118,0.2413377,0.11430891,-0.15557496,-0.36541316,0.44118378,0.038414165,0.117383294,-0.026998837,-0.3802126,-0.23443018,0.43427357],[0.5493235,0.7341044,0.30259728,-0.09170222,-0.066015296,0.41798133,-0.062179696,-0.1925674,-0.15322368,0.017662844,0.21162434,-0.12112619,-0.027021965,0.05653779,0.14749303,0.28017008,-0.15880422,-0.07834965],[1.3052936,-0.038109165,1.2192534,-0.18676366,0.21888737,0.45998427,0.94506985,-0.87686205,0.044812016,-0.07512292,0.69492793,-0.59623814,0.3278255,0.39913544,0.15354112,0.04995451,-0.031020898,-0.10582342],[-0.4683151,1.0002598,0.29120648,-0.05860625,0.010191997,0.17896307,-0.3321235,0.19332078,-0.44497126,0.09236495,0.17685813,0.022076255,-0.23972619,0.11622197,0.11574386,0.1640551,0.028836682,-0.14775941],[1.2240227,0.5504716,-1.161672,0.10151114,-0.6311718,-0.4365897,-0.63896364,0.4033335,0.012773022,0.025944846,-0.62420815,0.05751297,0.043608528,-0.13193272,-0.33345297,0.18925929,0.0925279,-0.03600548],[-0.0033800902,-0.41361037,-8.50345,0.27523437,2.0881453,2.3587928,2.1091182,-2.467406,-1.9167688,-0.8961217,-0.22510983,0.037862107,-0.23643681,0.03247474,0.067485854,0.04660773,-0.2583531,0.077512406],[0.0035197088,-0.43985325,0.07051937,0.38219255,-0.67769414,-0.29911998,1.0818627,-0.6217103,-0.5443828,0.22882973,0.013560748,-0.29820752,0.11540977,-0.40309906,-0.00034299958,0.69976795,0.13301164,-0.32934943]],"activation":"σ"},{"dense_2_W":[[-0.014842439,-0.3306524,0.254514,-0.6639507,-0.534733,0.07840164,0.2324318],[-0.15334646,-0.290343,-1.047474,0.41780674,0.04612693,-0.73001504,-0.3465528],[-0.6260714,-0.5115335,-0.71161246,0.4046027,-1.2324069,-1.2851475,-0.16620061],[-0.05566019,0.48536706,-0.42460826,0.83332616,0.47045597,-0.061004266,-1.1440438],[0.42156544,-0.6722497,-0.10824958,-0.32994938,0.31952205,-0.46266714,-0.07230821],[-0.38416666,-0.7271572,-0.39645803,-0.4259647,-0.24740903,-0.17667961,-0.10970643],[0.19652602,0.026280575,-0.1651507,-0.38475782,-0.5457258,-0.1882665,0.82107437],[-0.08976335,0.35238677,0.25231764,0.004611504,-0.5936927,-0.29342756,-0.22477138],[0.25490662,-0.4851788,-0.07538396,-0.36808714,-0.05157315,-0.2439695,0.9720866],[0.48479185,-0.68759876,0.42557424,-0.56957704,-0.32759178,-0.3047872,0.7597776],[0.4211342,-1.4932247,-0.66635305,-0.10591562,-0.9298172,1.04872,0.32208702],[-0.2918295,0.63893354,0.044817235,0.87641054,0.38387123,-0.48429132,-0.8803729],[-0.60936576,-0.29061803,-0.94329685,0.6586833,0.15280105,-0.8124564,-0.538523]],"activation":"σ","dense_2_b":[[-0.009386154],[-0.25074136],[0.02986496],[-0.028872054],[-0.06481484],[-0.2976481],[-0.072934344],[-0.117011935],[0.028236326],[-0.009000545],[-0.42297846],[0.030614687],[-0.105583444]]},{"dense_3_W":[[-0.035136532,-0.27008098,-0.5048698,-0.5295355,0.29823285,0.5058221,-0.09186966,0.26433602,0.50751793,0.49806535,0.8154631,-0.5854975,-0.525581],[0.08374179,0.16962804,0.2263017,0.5973136,0.2815238,-0.0505521,0.26001385,0.36577544,-0.68805265,-0.8057493,-0.42594707,0.633128,0.08724391],[0.5107981,0.064214274,-0.061156582,-0.33331737,0.07700428,-0.40398338,0.3673148,-0.42669702,0.38095382,0.33056983,-0.3025643,-0.58125204,-0.3484819]],"activation":"identity","dense_3_b":[[0.01880667],[-0.04986152],[0.030190725]]},{"dense_4_W":[[-1.0120764,0.477425,-1.0690569]],"dense_4_b":[[-0.027314244]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4_TSS2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4_TSS2.json deleted file mode 100644 index 155aa2771..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4_TSS2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.244548],[1.5275985],[0.6107275],[0.046586774],[1.4886055],[1.5034448],[1.516418],[1.4891112],[1.4557259],[1.4174078],[1.3739654],[0.046419684],[0.046444356],[0.046451736],[0.046329428],[0.046216674],[0.04595779],[0.04549419]],"model_test_loss":0.012242425233125687,"input_size":18,"current_date_and_time":"2023-08-12_17-12-26","input_mean":[[22.124489],[-0.06681358],[-0.0017872587],[-0.007304861],[-0.068287455],[-0.06810858],[-0.068098135],[-0.06760926],[-0.064708285],[-0.06156465],[-0.05595117],[-0.00735773],[-0.0073575596],[-0.0073616607],[-0.007393436],[-0.0074092923],[-0.007485401],[-0.007535655]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.1266818],[1.2665837],[-0.0057515856],[0.021575607],[3.145306],[-0.015559701],[0.023866596]],"dense_1_W":[[1.8619034,0.2318498,0.010758091,0.17204547,0.178258,0.8156095,-1.2977135,-0.4021356,0.015441509,0.051510673,0.08473766,0.25257683,-0.08047843,-0.5401921,0.37597016,-0.25112596,0.11061834,-0.04145345],[0.6234877,0.39512575,0.029949188,-0.06756969,0.3141993,1.1970576,-0.9448964,0.4692527,0.4956762,-0.30381662,0.07292307,-0.11752247,-0.20445238,0.27772313,0.2778997,-0.20992711,-0.023655668,-0.03751188],[-0.09121854,-0.6526218,-0.008271368,-0.030463165,0.084578365,-1.1863025,0.71669704,-0.15648295,0.17038843,0.16980262,-0.2854215,-0.39527944,-0.29325402,0.4517195,0.58793545,-0.078027494,0.112520106,-0.19935027],[0.04239312,1.1436936,5.7977223,-1.2159046,-1.0222747,-0.018097226,-0.37114885,0.30876333,0.6447345,0.05005192,-0.3040888,0.3811603,0.53224164,-0.033966746,0.17231053,0.052680492,0.23297076,-0.20054573],[2.028991,-0.054335885,-0.050801482,0.22889599,0.034708247,-1.0235145,1.2738502,0.19607924,-0.6348713,0.3133455,-0.0084064,0.021044038,-0.19193278,0.24242897,-0.3887398,0.1055326,-0.14184418,0.124946855],[-0.15122393,0.6909391,-0.03846719,-0.2270961,-0.37185147,1.1930336,-0.83393574,0.019238736,-0.21900049,0.11245591,0.06722247,0.12010414,0.40301353,-0.5959846,-0.014899062,0.31775734,0.16264969,-0.20392336],[0.01964954,0.28060383,0.26928812,0.262222,-0.11968318,0.7917884,-0.94788104,0.24767427,0.5285209,0.20321472,-0.57217216,0.20230694,0.0041204365,-0.14682977,-0.1698623,-0.464828,-0.13932788,0.25505906]],"activation":"σ"},{"dense_2_W":[[0.07229978,0.043845255,-0.56071085,-0.37639382,-0.40895855,0.75563765,0.8920604],[-0.068550885,-0.2143043,0.8185382,-0.26352042,0.5178714,-0.88407123,-0.11102227],[0.80396324,0.084928855,1.9896538,-1.2700796,1.9254806,-0.6978969,-0.66902035],[-3.2066817,-1.9363941,0.8663164,-1.005594,-0.19276151,0.18454145,-0.32200423],[0.2388041,-0.3560892,-0.6499542,0.27040178,-0.4285769,0.50025755,0.4411526],[-0.5105194,0.6164994,0.40899366,-0.6055838,0.6227542,-0.3112731,-0.7521502],[-0.32484958,-0.49589607,-0.44490832,-0.23112644,-0.27562693,-0.39052173,0.1971162],[0.412541,0.319048,-0.79024744,-0.2737245,-0.6196046,0.015550856,0.43303803],[-0.28605422,-0.13784991,-0.24433006,-0.17126347,0.14660196,-0.3652191,0.36726522],[0.24914217,-0.5839129,1.1011901,0.48133576,1.1741915,-1.2662312,-0.41844484],[-1.4900029,-1.4929997,-0.24996275,-0.50023335,-0.65646017,-0.5239063,-0.16179247],[-2.2904916,-1.4458047,-0.10081112,-0.33487344,-0.16292852,-0.32974166,-0.41704106],[-0.12204984,-0.049235914,-0.7661266,0.20250078,-0.19582883,0.2884153,0.6099948]],"activation":"σ","dense_2_b":[[0.11034473],[0.04505026],[0.45456424],[1.1033564],[0.020434767],[-0.061051648],[-0.030366903],[0.06634181],[-0.039427042],[-0.17920223],[-0.12165889],[-0.071725644],[0.0007172712]]},{"dense_3_W":[[0.037582874,0.3922276,0.15515213,0.32579648,0.0045574703,-0.08303329,-0.35669035,-0.2959597,0.22798133,-0.00853858,0.26190194,-0.2177828,-0.051661514],[-0.6728899,0.60465753,0.37104872,0.84813213,-0.75632805,0.4609253,-0.123116,-0.16484596,-0.043769807,0.29626662,0.4587799,0.3421823,-0.5048559],[-0.31732032,-0.24499367,0.5200649,0.16775814,0.11487889,0.5378913,0.294093,-0.5565743,-0.33720338,0.0644005,-0.47207704,0.24707094,-0.1313763]],"activation":"identity","dense_3_b":[[-0.06704118],[-0.07568502],[-0.06689809]]},{"dense_4_W":[[-0.38717636,-1.245721,-0.60878205]],"dense_4_b":[[0.07232816]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4_TSS2_2022.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4_TSS2_2022.json deleted file mode 100644 index 07bdba6c4..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_RAV4_TSS2_2022.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.080224],[1.5475338],[0.6496774],[0.04879169],[1.5158907],[1.5278002],[1.5390717],[1.5098101],[1.4782969],[1.4340739],[1.3853667],[0.04868462],[0.048710395],[0.048738956],[0.048690505],[0.048625976],[0.048370127],[0.047957957]],"model_test_loss":0.008909840136766434,"input_size":18,"current_date_and_time":"2023-08-13_03-33-40","input_mean":[[23.622572],[0.010716067],[0.014080395],[-0.00545363],[0.00681623],[0.008023216],[0.008976955],[0.015593329],[0.018596267],[0.022246595],[0.02417008],[-0.0054850946],[-0.0054803547],[-0.0054753944],[-0.0054708053],[-0.005519239],[-0.005560871],[-0.005648205]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.5925863],[0.6910273],[0.0029014468],[0.043235566],[-0.055107236],[3.6387718],[3.6793168]],"dense_1_W":[[0.24347192,0.0785397,-0.030702522,0.19405046,-0.09431407,1.6046176,-1.1419742,0.19336075,-0.062058806,0.14076506,-0.0068204296,0.27706286,0.0753339,-0.4532859,-0.35606033,0.21351701,-0.18941605,0.044432733],[-0.45700783,-0.062406845,-0.031097766,-0.5659944,0.024210662,1.39045,-0.9837826,0.11537844,0.2825425,0.046704102,-0.061710272,0.50674444,0.19582161,-0.10567522,-0.08106667,-0.1992534,-0.21138985,0.24457377],[0.007203359,-1.2377197,-4.586871,-0.11203177,0.5719472,0.0427435,0.5389759,0.26149252,-0.57496494,-0.524192,0.57842165,-0.22961466,-0.37423873,0.35315713,-0.10196228,0.2160896,0.4271714,0.017925069],[-0.0054053566,1.579078,-0.06120463,-0.20971349,0.046022303,0.93902045,-0.78088397,0.02447776,-0.07060164,-0.06981518,0.1699867,0.10647593,-0.24200302,0.018979385,-0.0083929775,0.18985271,0.13718374,-0.088825986],[0.095188886,0.6861187,0.10568597,-0.1301086,-0.7698879,0.83482885,-0.5525881,0.38867232,0.224815,-0.09360383,-0.16623642,0.5329297,-0.023406014,0.19236702,-0.75461245,-0.46940014,0.32178688,0.16902733],[1.5707638,0.61578625,0.23603536,-0.10848588,-0.02725563,0.6388082,-0.88916034,0.20878781,0.15096506,-0.07481069,0.050539907,0.08200025,0.027791992,-0.33376747,0.32451573,0.21383548,-0.019029131,-0.1541287],[1.5059847,-0.55344844,-0.24463375,0.061645243,0.0208355,-0.6283204,1.0164922,-0.39539093,-0.3376693,0.14381117,0.014864233,0.15729472,-0.36920083,0.09105627,0.22073188,-0.3185754,0.1361389,0.0030957134]],"activation":"σ"},{"dense_2_W":[[0.8278061,0.00944368,-0.47221076,0.5170837,0.5817161,-0.28623572,-1.3400604],[-1.1041138,-0.63026905,0.07870919,-0.08548198,-0.400506,-0.27927935,0.3597091],[0.27548513,0.17060155,-0.43422616,0.46099278,0.14646465,0.4412418,0.29597026],[-0.19179592,0.59959507,-0.45964202,-0.03809237,0.574291,0.57724786,-0.9947663],[0.9136712,0.04980523,-0.6333211,0.30888626,0.3298961,-0.24825113,-0.99664354],[0.3825098,0.8290921,0.63622355,0.5099953,-0.3108262,0.32984248,-0.41125965],[0.2868915,0.2814047,-0.35160798,0.19865306,0.22140126,0.53437257,-0.19641446],[-1.1109287,0.3453166,0.32968,-1.0854727,-0.5026547,-0.061587382,1.7998439],[0.098573364,0.6721182,-0.35533735,-0.09068599,0.18878801,1.0343286,0.09213373],[-0.23218085,-0.16048461,0.6798084,-0.64267206,-0.8845718,-1.8911213,0.5121272],[-0.54387015,-0.23149288,-0.30668664,-0.20229974,-0.30891183,-0.5950911,-0.1115899],[-0.25720352,-0.55898094,-1.0450321,-0.4148398,-0.31979793,-0.07070874,-0.10942721],[0.34567067,0.8965103,0.050285354,-0.1771556,0.119312696,0.3056499,-0.6886853]],"activation":"σ","dense_2_b":[[-0.39942527],[0.30935934],[-0.16508539],[-0.13897029],[-0.5619027],[-0.24792555],[-0.107184075],[0.5673597],[-0.21446894],[0.51320654],[0.042424392],[-0.15152127],[-0.24059872]]},{"dense_3_W":[[0.4104882,-0.23413022,0.5933587,0.5129894,-0.017641984,0.35903862,0.13990471,-0.6462935,0.53985685,0.037760712,-0.46011966,-0.48272845,-0.33265826],[-0.56515414,0.7211797,0.3708711,0.09521525,-0.016219772,-0.7927581,0.04320575,0.08196957,-0.177058,0.63587785,-0.34107837,0.37444627,-0.13801615],[0.5979246,-0.8661764,0.29252937,0.59611315,0.30349368,-0.11060929,0.22178161,-0.45007005,0.12280302,-1.1837198,-0.28847334,0.091526695,0.4002503]],"activation":"identity","dense_3_b":[[-0.1171355],[0.0760098],[-0.07621718]]},{"dense_4_W":[[0.17640126,-0.5432617,0.8457692]],"dense_4_b":[[-0.072637506]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_SIENNA.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_SIENNA.json deleted file mode 100644 index b4434402e..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_SIENNA.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.918778],[1.18101],[0.4847478],[0.043674015],[1.1728041],[1.1765499],[1.1794695],[1.1464957],[1.1177075],[1.0766566],[1.0377958],[0.043550335],[0.043581747],[0.043604773],[0.043512594],[0.043391723],[0.043109246],[0.04262905]],"model_test_loss":0.019605522975325584,"input_size":18,"current_date_and_time":"2023-08-13_05-28-32","input_mean":[[23.596626],[0.013376228],[-0.0037806714],[-0.008489553],[0.016799761],[0.015916478],[0.014968346],[0.017682353],[0.020881005],[0.020992402],[0.023326145],[-0.008438655],[-0.008450099],[-0.008462553],[-0.008476181],[-0.008486343],[-0.008576075],[-0.008670038]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.91207904],[0.7103613],[0.30726305],[0.11740969],[0.12186458],[-0.089792214],[0.06848248]],"dense_1_W":[[0.020942407,1.0916185,-0.035626575,-0.19509457,-0.0901391,1.0375599,-0.89480263,0.027181128,0.114876896,-0.20307554,0.19653901,0.8226537,-0.28726602,-0.47241193,-0.02529027,-0.009867712,0.20832253,-0.0335081],[0.38768068,-0.9086627,0.040084302,0.06681411,-0.5178006,-0.611777,0.92066157,-0.1505088,0.074445166,0.11541756,-0.24584451,-0.81897855,0.51056355,0.27303597,0.1812634,-0.22068554,0.071845666,-0.07549679],[1.3191843,-0.43101233,0.051205434,0.2787163,-0.4157239,0.42948318,-0.72137564,-0.8753717,0.10624811,0.19340889,-0.15060128,0.2269076,0.03174035,-0.31100953,-0.19166663,-0.011060635,-0.3349901,0.2901877],[-0.0024979762,0.3740953,-0.026280953,-0.15654075,0.37215605,0.7620479,-1.0498856,0.13035084,0.13929886,0.05248367,-0.013822444,0.7085953,-0.03154278,-0.29324126,-0.62358975,-0.16771367,-0.21831672,0.22877951],[0.044033404,-0.99224085,-6.7608223,0.09225139,0.9311651,0.447325,0.42661807,0.63310313,-1.7500018,-0.85278213,0.90037066,-1.4607582,-0.38572705,-0.10530333,0.5061062,1.1270607,0.23219815,-0.09795198],[0.016819429,-0.0675717,0.115480825,0.07103152,0.17985629,1.1815296,-1.396273,0.18709117,0.09204313,0.37937552,-0.3416136,0.28142554,0.1835832,-0.75639856,0.27877346,0.049574222,-0.23444256,0.09973523],[-0.06906837,0.8551471,2.6089625,-0.38896835,0.3064237,0.04883363,-0.6118971,-0.37577873,0.916318,0.8206204,-0.8979492,0.18177088,0.34715304,-0.33680785,0.031479146,-0.49667355,-0.33899838,-0.04839657]],"activation":"σ"},{"dense_2_W":[[0.7524287,-0.05320505,0.6631399,0.29110217,-0.3867475,0.48622686,-0.00068926124],[0.6857002,-0.98820657,-0.2477931,0.8487134,-0.008759584,0.8539056,-0.70714766],[-0.191401,-1.1044568,-0.17453948,0.28428176,-0.27107534,0.52109903,0.5684942],[-0.72152793,9.4716466e-5,0.25969005,-0.29246745,-0.27407894,-0.5809119,-0.1386064],[-0.28868115,0.3303369,-0.19686596,-0.14941077,0.08329269,-0.49868903,0.2623254],[-0.47855794,0.38120317,0.15302673,-0.45370772,-0.0976872,-0.2544275,-0.22887231],[0.8629054,-1.2646538,0.13799493,0.40030012,0.16298352,0.30507365,-0.035486612],[-0.1548037,0.88181823,-0.19526346,-0.6244504,0.5790799,-0.7090568,0.17455493],[-0.4086325,0.8128156,-0.02595779,-0.8348639,0.1865987,-0.23320554,0.21458188],[-0.70075643,0.18467374,-0.39847013,0.20729409,0.4069853,-1.0749724,-0.23987985],[-0.19175854,-1.101704,0.658868,0.8334482,-0.007937357,0.06116572,0.35555303],[0.899429,-0.23285869,0.36268023,0.2628838,-0.41170016,0.18388364,0.59954256],[0.42720664,-0.1498553,1.1578981,0.16925347,-0.97467273,0.46834058,0.34074527]],"activation":"σ","dense_2_b":[[-0.1311147],[-0.4101757],[-0.33761725],[0.06426192],[0.026971094],[0.075724326],[-0.34481454],[0.16628559],[0.10305307],[0.049283274],[-0.24880186],[-0.16108623],[-0.10672651]]},{"dense_3_W":[[-0.47907722,-0.21759209,0.3713241,0.39441383,-0.44695204,0.17124303,0.11321267,0.3969347,0.1906832,-0.40338823,0.12479244,-0.50514024,0.5594875],[-0.5839251,-0.25829744,-0.427433,0.4940799,0.6102448,0.6181168,-0.3990338,0.7514002,0.44554126,0.50229466,-0.51888025,-0.38270754,-0.26896998],[0.21696098,-0.24028769,-0.43294132,-0.49181503,0.07244864,-0.15500332,-0.39558488,0.5280436,0.6300974,0.096077316,-0.16075748,0.3209584,-0.61387634]],"activation":"identity","dense_3_b":[[0.021643605],[0.047753386],[0.053921573]]},{"dense_4_W":[[-0.0368371,-1.1304644,-0.17004102]],"dense_4_b":[[-0.049882997]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_SIENNA_4TH_GEN.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_SIENNA_4TH_GEN.json deleted file mode 100644 index 615d05005..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/TOYOTA_SIENNA_4TH_GEN.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.7683935],[1.1293991],[0.8825923],[0.030386189],[1.1698487],[1.159895],[1.1471498],[1.062503],[0.9999935],[0.9310832],[0.867127],[0.030358834],[0.0303781],[0.030392716],[0.030311396],[0.030163305],[0.03001764],[0.029808689]],"model_test_loss":0.02246452309191227,"input_size":18,"current_date_and_time":"2025-06-14_14-03-59","input_mean":[[17.849384],[-0.051478162],[-0.023774533],[-0.010533733],[-0.045292698],[-0.04792217],[-0.04970253],[-0.054463375],[-0.051009897],[-0.0396173],[-0.022983411],[-0.010628851],[-0.010587511],[-0.010550183],[-0.010452368],[-0.010302215],[-0.010231253],[-0.010269538]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0961168],[1.0387638],[-0.33175635],[2.5209951],[-2.1322436],[-1.1405303],[0.13340999]],"dense_1_W":[[-0.32617494,0.36182252,-0.0026296386,-0.26868978,0.23530094,0.06056291,0.07454351,0.038890902,0.29762736,-0.06788538,0.032036137,-0.17419936,0.4993189,-0.15010893,0.01752961,0.00810672,-0.15359463,0.084275864],[1.8991362,0.13048984,-0.74657226,0.14962697,-0.21265212,-0.75576633,-0.8202757,0.93759036,0.2860627,0.35549825,-0.62729514,-0.14153683,0.18989088,-0.11800824,-0.042009205,-0.3097528,-0.09296836,0.31706533],[-0.1392445,-0.73293144,0.0012459388,-0.0439935,-0.084498055,-0.22121468,0.4825578,-0.28489336,-0.049015123,-0.0566167,0.035597585,-0.50897723,0.33660927,0.23921134,0.012064034,0.22530669,-0.10177442,-0.035854768],[1.5098705,0.14968175,0.6162673,-0.49390945,0.08794153,0.7133385,0.346414,-0.7775202,-0.038455646,-0.28906947,0.41270798,-0.26061758,0.42867598,0.05609331,0.25742227,0.4021305,-0.14297855,-0.21714577],[-1.2761662,0.32409737,0.5509346,0.107911006,0.05759883,0.71345717,-0.13507763,-0.3905149,-0.25879213,-0.18247607,0.32336274,-0.0569052,0.22690111,-0.3130412,0.07964453,0.12778807,0.08357657,-0.22037788],[-2.1043382,-0.17917866,-0.801224,-0.11023373,-0.4166906,-0.17132218,-0.5667978,0.534337,0.47585756,0.16467522,-0.47143924,-0.115248285,0.12999086,-0.09553241,0.10948312,-0.09782508,-0.09868273,0.20943008],[-0.025590083,-0.4430979,-12.216912,0.3201318,1.2993711,0.89774674,0.9896507,-1.1039467,-1.03656,-0.56902003,0.06608407,0.035836633,-0.048802655,-0.07758522,0.10289342,-0.24759774,0.006366812,0.020924035]],"activation":"σ"},{"dense_2_W":[[-0.78535485,0.41388962,-0.041274957,-0.5455088,-0.30030918,0.22976702,0.26598457],[0.1866723,-0.36416784,-1.0896232,-0.6330963,1.4388142,1.1276561,-1.8017933],[-0.05004265,0.17282084,0.16082363,-0.3354526,0.11953774,-0.09051115,-0.81042683],[0.05019804,-0.01731481,-0.52720714,-0.4870505,-0.502232,0.24035648,-0.178674],[0.9548137,0.58180046,-1.3625307,0.81334984,0.4803028,0.14046787,-0.4428765],[-0.69122964,-0.9487389,1.3055027,-0.67589694,-0.5280011,-0.4667726,0.11001812],[-0.5860762,0.117470905,0.65910834,-0.4657321,-0.2356423,-0.1829712,-0.49732658],[-0.0030190547,-0.061729275,0.48916513,-0.09056879,-0.6761997,-0.22611937,0.42503688],[-0.8902735,0.15627211,0.8006002,-0.32285282,-0.1764115,-0.08708128,0.20297356],[0.40248775,1.5241983,-1.2892964,1.3581059,0.8088673,-0.06318319,-0.8669797],[0.3956092,0.2710888,-0.937435,-0.07416378,0.37747616,0.39754248,0.32461324],[0.856679,-0.5096898,-1.2636895,0.96557194,1.0478734,-0.4377061,-0.39019135],[-0.02493662,0.21337464,0.3522843,-0.47124264,-0.01816784,0.2232132,-0.09695358]],"activation":"σ","dense_2_b":[[0.025970293],[-0.6882997],[-0.120989524],[-0.15558992],[-0.104155734],[0.24420202],[0.12218592],[0.107156925],[-0.024310162],[0.0765939],[-0.14854917],[-0.27843887],[-0.0015862256]]},{"dense_3_W":[[-0.6386346,0.68543744,0.20839624,0.14960766,0.6357265,-0.82008994,-0.28748208,-0.35238776,-0.6810302,-0.28017482,-0.09354266,0.14239676,-0.16280007],[0.08539077,0.026057044,0.30340326,0.41345978,0.06528351,-0.099396996,0.27183726,0.07235442,0.09617666,-0.657463,-0.53278995,-0.5254173,0.45472735],[0.07693659,0.48257092,-0.027456492,0.22221637,0.6253941,-0.9436674,-0.62433624,-0.4110642,0.091818646,0.42734706,0.45185405,0.20141098,0.075929865]],"activation":"identity","dense_3_b":[[-0.044319645],[0.057500858],[-0.10572553]]},{"dense_4_W":[[0.604953,-0.76013803,0.9085713]],"dense_4_b":[[-0.05942252]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_ARTEON_MK1.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_ARTEON_MK1.json deleted file mode 100644 index af5a0b305..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_ARTEON_MK1.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.971252],[0.79798824],[0.43347803],[0.037114248],[0.78899115],[0.7920018],[0.7952441],[0.7838899],[0.7732425],[0.75980055],[0.74578863],[0.037029333],[0.03706021],[0.03708885],[0.03716895],[0.037208397],[0.03723585],[0.037244312]],"model_test_loss":0.012649175710976124,"input_size":18,"current_date_and_time":"2023-08-13_07-16-53","input_mean":[[24.854122],[-0.006721379],[0.0023459543],[-0.006867375],[-0.0071832123],[-0.007095632],[-0.007283813],[-0.004851204],[-0.0015341335],[-0.0011585834],[0.0014295956],[-0.0069056926],[-0.0069126263],[-0.0069173565],[-0.0070006466],[-0.007102198],[-0.007207536],[-0.0073172078]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.10305949],[0.5548119],[0.8664678],[-0.04213392],[-1.4110198],[3.2694256],[-1.438837]],"dense_1_W":[[-0.017599747,-0.22520265,0.0010882277,-0.21759078,0.043246184,-0.9120944,0.44394338,-0.012739085,0.17955783,0.3519492,-0.3748205,-0.29586455,0.36217418,0.21715508,-0.045080207,0.10746157,0.16058546,-0.12644011],[1.4859476,-0.13243331,-0.072786994,-0.09156684,0.026185557,0.30754617,-0.07915964,-0.33238035,0.29930684,-0.59904677,-0.40220875,0.34915185,0.2151253,-0.12978148,-1.0024906,0.4784506,-0.08319207,0.21361434],[0.61979795,0.1759033,-3.648246,-0.18301606,-0.7338996,-0.6487156,0.8492735,-0.7052067,-0.86969215,0.2841932,1.4843231,0.25467336,-0.34080935,-0.18149482,0.70439994,-0.26088372,0.11387163,-0.1455975],[0.00995094,-1.2382029,0.0006843731,0.328307,0.8130543,-1.2957187,0.8368335,0.20426522,-0.19153069,-0.4943369,0.41151458,-0.014479602,-0.4382999,0.10004458,0.060025815,0.16917846,0.09463592,-0.21017851],[-0.8206324,0.8908584,0.037517052,-0.49712715,-0.40263394,0.24845587,-0.85499966,0.26955003,-0.06266273,0.28861195,0.12733743,0.31250095,0.119576685,-0.04005291,-0.029234378,0.02662434,0.2687243,-0.1394794],[1.2793154,1.0802419,0.059386734,-0.3855319,-0.78512937,0.15505423,-0.8329386,0.6772395,-0.1311195,0.51412123,0.050203018,-0.037745327,0.38920268,-0.41889575,0.17929426,0.54237133,0.14844449,-0.3822895],[-0.93515563,0.036150783,-4.184579,0.31975636,-0.5608153,-0.832857,0.39901984,-0.45331565,-0.5904826,0.33153397,1.4625467,-0.1966311,-0.35478687,0.13788807,0.2924618,-0.15482849,0.01944506,-0.113643706]],"activation":"σ"},{"dense_2_W":[[0.90550905,-0.2773451,0.060318053,0.78804654,-1.0699619,-0.84802955,0.44153836],[0.77794725,-0.38085982,-0.0049121855,0.35357663,0.00038228062,0.18574685,0.04339034],[-0.92243797,0.38560665,0.09517251,-0.9013531,0.2996133,0.54987377,-0.028735504],[-1.1287217,0.640262,-0.5085255,-1.4166275,1.5218314,0.056655124,0.33818102],[0.15446381,0.38593677,0.3441797,0.98853666,-0.9087163,-0.0742472,0.46354288],[-0.55011004,-0.019922681,-0.18926652,-0.6645979,0.6695093,0.7484288,-0.16677399],[-0.7513268,-0.72154254,-0.3784182,-0.16664356,0.09576955,0.08568184,-0.4769783],[0.08747015,-0.46323332,-0.20250341,-0.7033233,-0.48815915,-0.43857226,-0.20034243],[0.16640607,-0.19463709,-0.041607287,0.30393028,-0.33860773,0.13123538,0.19249742],[-0.6888612,0.1613833,-0.42137414,-0.5399623,0.5414041,0.16113918,0.10748585],[-0.86522615,0.59193206,-0.37166557,-1.1033491,0.8927235,0.81606954,-0.031116843],[0.28607032,0.24378045,-0.021820918,0.6145389,0.15344414,0.019805284,-0.16341789],[-1.0509629,0.058839537,0.22750644,-0.6949402,0.3670632,0.044007428,0.0669319]],"activation":"σ","dense_2_b":[[-0.18253872],[-0.0115240505],[-0.06430214],[0.2490044],[-0.2796968],[0.0028060132],[-0.09268421],[-0.28672373],[-0.080230884],[0.03859358],[0.14165422],[-0.12646787],[-0.1059743]]},{"dense_3_W":[[0.8398946,-0.07856656,0.1706828,-0.86333686,0.59561944,0.03616052,0.18146847,0.4525631,-0.08213228,0.131641,-0.49378744,-0.44430527,-0.12233779],[-0.06611764,0.49632278,0.2623391,0.49564347,0.11883829,-0.49934706,-0.13390465,-0.6451669,-0.45365545,-0.0060165436,0.45882273,-0.38588116,-0.08209023],[0.85171545,0.69498104,-0.5135337,-0.30856863,0.22390914,-0.47711673,-0.21191199,-0.21027334,0.047864415,-0.4271364,-0.27338186,0.08179979,-0.39165765]],"activation":"identity","dense_3_b":[[0.04059178],[-0.05657044],[0.08936293]]},{"dense_4_W":[[-0.1893341,0.2177843,-1.285145]],"dense_4_b":[[-0.08146231]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_ATLAS_MK1.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_ATLAS_MK1.json deleted file mode 100644 index f3cf6c089..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_ATLAS_MK1.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.807038],[1.1578474],[0.462717],[0.04096329],[1.1326288],[1.1411434],[1.150276],[1.1401542],[1.1256609],[1.1028374],[1.0771434],[0.040799636],[0.040834032],[0.04086527],[0.040849086],[0.040718287],[0.040424738],[0.040075604]],"model_test_loss":0.011358999647200108,"input_size":18,"current_date_and_time":"2023-08-13_09-26-52","input_mean":[[24.574387],[-0.042787574],[-0.0084383935],[-0.008247784],[-0.04005291],[-0.04116906],[-0.04206258],[-0.04518047],[-0.045766264],[-0.047523264],[-0.048847865],[-0.008307315],[-0.008303847],[-0.008298328],[-0.008317524],[-0.008355838],[-0.00843378],[-0.008587674]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.5398485],[0.25783718],[0.41557038],[-1.7976782],[0.53406316],[-0.63385665],[-1.917262]],"dense_1_W":[[-0.4253817,0.22663599,1.0573925,-0.003105988,-0.096334025,0.6529197,-1.1694652,0.3467033,0.24922119,-0.3803986,0.08890094,0.061100043,-0.017730042,-0.11883982,0.13428102,-0.0348934,-0.0068453453,-0.007779446],[-0.008402637,-3.3132567,-0.21813557,0.071411654,-1.1415226,-1.6578175,-0.637207,-1.3461175,-0.6741953,0.16755764,0.2779039,0.11480545,-0.1803503,0.34613702,0.0859196,-0.29474613,-0.042490523,-0.01820469],[-0.4971483,0.098119624,-1.0920941,0.16022453,0.21241802,0.6172494,-0.9755981,0.035779636,0.0041822596,0.31914288,-0.18518393,-0.26218906,0.23453258,0.014359854,-0.06966559,-0.0034770474,-0.26081735,0.17178555],[-0.25480956,1.3900709,-0.0011070514,-0.06342647,-0.10887336,0.7041751,0.2328101,0.04183806,-0.033468023,0.028824355,0.071826614,0.098379195,0.32470608,-0.19180217,-0.5554726,-0.2217316,0.10789431,0.07102663],[-0.49687034,-0.6059788,1.1368431,0.11400577,0.4183632,-0.9394553,0.7815931,0.067233406,0.1662752,-0.13292359,0.051417153,-0.7103316,0.24026254,0.35937056,0.45720938,-0.5001579,0.1221688,-0.060943875],[-0.44913447,-0.4765777,-1.0624616,0.50197846,0.086886585,-0.17574842,0.9428897,-0.32340288,-0.06547519,-0.04256699,0.15002339,-0.5190985,0.11296826,0.2678741,-0.4129183,-0.016196959,0.10317533,-0.04792584],[-0.25692594,-1.3502828,-0.0009460109,-0.0050777984,0.46374944,-1.0939615,-0.40397272,0.14855485,-0.0076834555,-0.08402314,-0.048022572,-0.3868957,-0.03253632,0.29881552,0.5705721,0.1640352,-0.11509783,-0.05596482]],"activation":"σ"},{"dense_2_W":[[-0.16952407,0.08702787,0.6493835,0.27430746,-0.0071199476,-0.19580856,-0.2091579],[-0.1470845,-0.33079877,-0.5467495,0.41160226,-0.4971588,-0.5109554,-0.123111665],[0.7788407,0.12949619,0.46349248,0.13599767,-0.5738747,-0.20808762,-0.06685508],[0.87942976,-0.68710035,0.46623912,0.08075862,-0.31713346,-0.69495225,-0.42125878],[-0.5606583,0.49643534,-0.51900244,-0.48461094,0.31940943,0.18362813,0.8575088],[-0.2532001,-0.51093,0.25305697,-0.54165125,0.53601104,0.9598262,0.9526221],[-0.5665034,0.62428737,-0.07754291,-1.1295077,0.024450528,0.5505611,0.527919],[-0.17602344,-0.28039378,0.020311655,0.22711796,-0.68551284,-0.7996287,-0.6079852],[0.43893847,-0.7567556,0.10027089,-0.15151227,0.014879642,-0.31855884,-0.34122738],[-0.7633393,-0.07543374,-0.3050713,-0.97557557,0.37339172,0.8250897,0.7215346],[-1.2275901,0.62176853,0.03411873,-0.5092338,0.25704694,0.53235847,0.22089346],[0.23248282,-0.26544097,0.5072489,0.94194096,-0.44382775,-0.7462538,-1.0142152],[-1.2566365,0.09855355,-0.39514026,-1.0510743,0.48289242,0.4580382,0.30374187]],"activation":"σ","dense_2_b":[[0.013570737],[-0.17418918],[0.028351136],[0.12490911],[-0.16577649],[0.042069126],[-0.035789013],[-0.13899207],[-0.08848456],[-0.07905907],[-0.19632997],[0.038965493],[-0.12647548]]},{"dense_3_W":[[0.24081455,-0.44363257,-0.55115354,-0.030922456,-0.008375877,-0.123510234,0.2126219,-0.46798712,0.2711133,0.56804013,0.1574471,0.33433697,0.38691574],[-0.4032797,0.39321384,-0.3401627,-0.7603349,0.47812653,0.23157345,0.78344727,0.15922022,0.17650013,0.6928251,0.6137232,-0.7369166,-0.103489414],[-0.24215305,-0.40328485,-0.6077818,-0.28876036,0.56822276,0.63360524,-0.08002663,-0.23342833,-0.5187577,0.4915526,-0.17775443,-0.78564095,0.31357977]],"activation":"identity","dense_3_b":[[-0.07463631],[-0.05884157],[-0.03089778]]},{"dense_4_W":[[-0.15029056,-0.63581127,-0.55734146]],"dense_4_b":[[0.04723571]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_GOLF_MK7.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_GOLF_MK7.json deleted file mode 100644 index e3d324afa..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_GOLF_MK7.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.664428],[1.2828087],[0.5358907],[0.04414606],[1.2693248],[1.2751942],[1.279506],[1.249834],[1.2184678],[1.1758597],[1.1319114],[0.04403217],[0.0440777],[0.044111222],[0.044084232],[0.043969695],[0.043677997],[0.043272585]],"model_test_loss":0.016808032989501953,"input_size":18,"current_date_and_time":"2023-08-13_11-43-31","input_mean":[[22.16122],[-0.05841703],[-0.0061066514],[-0.0040392894],[-0.056604024],[-0.05809211],[-0.059522722],[-0.060071282],[-0.059294432],[-0.05636808],[-0.054283537],[-0.004062983],[-0.0040673376],[-0.00406957],[-0.0040102745],[-0.0040264064],[-0.003949198],[-0.003894113]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.512272],[0.8451728],[0.061952885],[0.07117082],[0.0969589],[0.23836812],[-0.029027848]],"dense_1_W":[[2.3165002,-0.7564795,1.4717923,-0.31413803,1.6675323,0.7277529,-1.1163065,-0.019299118,-0.1405304,0.8572948,0.56036603,-0.41108173,-0.12570381,-0.014715486,1.132798,1.0821382,-0.75086635,-0.35031655],[0.9444606,-0.09898757,-0.6954507,0.30675238,-0.08984852,-0.49343133,0.9157946,-0.5570431,-0.3888742,-0.38986117,0.12952603,0.028433489,-0.024435973,-0.1049456,-0.38290912,-0.05392889,-0.015835924,0.14950559],[0.004741928,-1.5810053,0.03134019,0.3235661,1.2505218,-0.083220154,-0.3910901,-0.8460092,-0.74598694,-0.37966868,0.34051073,-0.39719552,-0.07352532,-0.06360439,0.34146932,0.10839794,0.43644786,-0.45806086],[0.00825958,0.47619736,-0.0059394315,-0.06315062,0.3332019,0.8162596,-0.6886139,-0.8321713,-0.23199448,0.13788818,0.27222332,-0.018768186,0.12005634,-0.03360056,-0.010549495,-0.05684962,-0.19241822,0.1521788],[-0.047451854,-0.3197287,-5.9774647,0.67842066,-1.8699528,-1.0736765,-0.22953252,-0.1705645,0.69078326,0.7744919,1.5346897,-0.06659277,-0.33114743,0.1330023,-0.0021685867,-0.14816211,-0.12463087,-0.098877035],[1.5630089,-0.14997533,-1.073808,-0.1734846,-0.3877676,0.683071,-0.9419817,0.057117645,-0.025376081,-0.29716906,-0.39132732,-0.0028707278,0.16397685,-0.19498843,-0.21398357,-0.013821919,0.44912493,-0.16607592],[0.009814496,-2.0713215,-0.044856403,-0.038243193,1.7569181,-0.7712438,-0.08035733,-0.38236764,-0.58137965,0.6674234,0.14389913,-0.6378334,0.14240614,0.24506636,0.6603566,0.014824286,-0.12690313,-0.14285208]],"activation":"σ"},{"dense_2_W":[[-0.42124227,0.33840093,0.44210997,-0.70910984,0.262287,0.18302582,-0.18371895],[-0.29685995,0.5138454,0.755978,0.22568974,-0.43676186,-0.49223867,0.47472122],[-0.2976625,-0.5638202,-0.346919,0.40578872,-0.039912287,0.77207106,-0.8657158],[-0.16169663,0.5898756,0.15860432,-0.48896188,0.14635944,-0.5558217,0.42120898],[0.27724966,-0.5185015,0.32158753,0.6277213,0.057304412,0.3086919,0.21024327],[0.03701429,-0.23197533,-0.30162218,0.72801787,-0.17062007,0.009803557,-0.5481523],[0.4629019,0.4786117,-0.14833471,-0.23350595,-0.29458895,-0.19023602,0.39070475],[0.9625968,-0.97766685,-0.9581983,1.2819734,-0.6076433,0.37645784,-0.79039747],[-0.13950962,-0.20756534,-0.31952453,0.6251145,-0.0893907,0.340857,-0.70461744],[-0.064140044,0.67090803,0.27711052,-0.44350907,0.5274457,0.26619676,-0.29007584],[-0.6253565,-0.072836235,-0.04700242,-0.5451034,-0.37668335,-0.15641896,-0.3610751],[-0.41676444,-0.32975447,0.09918825,0.1933214,0.114000455,0.21399117,0.6502726],[-0.20933664,0.18370156,0.6303221,-0.34840557,0.10767048,-0.12880816,0.43370107]],"activation":"σ","dense_2_b":[[-0.03087346],[0.083590284],[-0.12312114],[-0.015689747],[-0.03287778],[0.07682254],[-0.065336995],[0.29234254],[-0.08852307],[-0.013764559],[-0.2412543],[-0.016014475],[-0.056882493]]},{"dense_3_W":[[-0.17269112,-0.5855207,0.30247316,-0.3700723,0.5919556,0.34082454,-0.5857902,0.71309996,0.2776839,-0.639282,0.30003944,-0.20085171,-0.20065042],[-0.45765534,0.2437524,0.1612162,-0.505311,-0.10535189,0.53285104,-0.035850286,0.6772977,0.32458842,-0.028878551,-0.14009416,-0.08665312,-0.637454],[-0.19389966,0.029339047,-0.64755374,-0.22215632,-0.07883323,-0.5064457,0.13198881,0.22710016,-0.51746994,-0.3380553,0.19166663,0.023132537,0.14991826]],"activation":"identity","dense_3_b":[[-0.007823971],[-0.0085836565],[0.026530033]]},{"dense_4_W":[[0.93978757,0.73359257,-0.55248207]],"dense_4_b":[[-0.011260626]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_JETTA_MK7.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_JETTA_MK7.json deleted file mode 100644 index 829cfc644..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_JETTA_MK7.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[9.103015],[1.0622845],[0.49049565],[0.040089965],[1.0459728],[1.0516889],[1.056568],[1.0408956],[1.019547],[0.99288225],[0.971193],[0.04002349],[0.040028628],[0.040033314],[0.040071882],[0.04004624],[0.039898124],[0.03964297]],"model_test_loss":0.017716435715556145,"input_size":18,"current_date_and_time":"2023-08-13_20-52-08","input_mean":[[23.148537],[0.033288945],[-0.0069383495],[0.006664864],[0.03740209],[0.036363255],[0.035049323],[0.035006184],[0.036647633],[0.039277017],[0.043880757],[0.006671388],[0.0066857547],[0.0066986936],[0.0067147585],[0.006739247],[0.0067356247],[0.006714203]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.6366688],[-0.56371534],[-0.14571653],[-1.4455271],[0.07993529],[-0.0736673],[-0.3548013]],"dense_1_W":[[-1.3113872,0.76172936,0.016918765,0.16224551,0.094115384,0.32684585,-0.19450265,-0.13789567,0.04242289,-0.15509766,0.13169524,-0.13143206,0.032396875,-0.3091977,-0.26571655,-0.13967507,-0.065433465,0.15276721],[-0.07811718,1.0454074,8.495185,-0.7922316,-0.51769626,0.1606819,0.13209969,0.20275009,0.09197654,0.39435092,-0.8629015,0.48206797,0.43022737,0.085256994,-0.39034274,-0.29939228,0.26249692,0.21062453],[-0.0062007825,2.1868382,0.015541467,-0.49308324,-1.4422244,1.0147123,-0.78595483,0.5242463,0.32791784,-0.008197891,-0.23073053,0.31578735,-0.15602784,0.14793761,-0.23083985,0.052981053,0.004748488,0.13156143],[1.2384007,0.6278066,-0.009660281,0.40833205,0.37839705,1.1528418,-1.1164012,-0.32824138,-0.30145752,0.3350114,0.0860737,0.07817285,-0.18830507,-0.33780572,-0.513321,-0.07987069,-0.20404594,0.2723732],[0.0037708185,1.6037707,-0.018128129,0.14369644,1.3666841,1.1831751,1.1010982,1.5845065,1.3880488,0.9383163,0.6016751,0.32569328,0.05112049,-0.3200393,0.6177238,0.070831224,-0.3571441,-0.025784306],[0.0020605826,0.40808862,-0.0019806053,-0.22798932,0.4128132,1.312186,-2.012465,-0.18998149,0.38222578,0.034227915,-0.007133824,0.09108775,0.41027293,-0.35144845,0.41214025,0.18282686,-0.1982243,-0.29242274],[-0.11462315,0.14389442,1.7229052,-0.49408183,0.8118903,0.98040986,-0.1475524,0.32353425,-0.4042175,-0.4816111,-0.08436794,0.30240852,0.011541781,-0.27904144,-0.16726047,0.13386558,0.13543732,0.051627796]],"activation":"σ"},{"dense_2_W":[[-0.30253688,0.01659866,-0.5824275,-0.55473965,-0.65702754,0.4192852,-0.11081115],[0.42800114,-0.20567572,0.73502725,-0.3303795,0.5659001,0.33262393,-0.20845625],[-0.3169161,0.124995895,0.15316603,-0.3496913,0.25013453,0.83376133,0.08400041],[-1.9621079,1.3082521,-0.8913488,0.17462318,0.90885985,-0.7408587,-0.09095186],[0.65295506,-1.0685686,-0.3590795,-1.0821314,0.52553105,-0.33879203,-0.70096666],[0.3209469,-0.25117752,-0.6676659,0.04474845,-0.34462446,-0.6437361,0.2751733],[-0.16672656,0.05766618,0.020867005,-0.14019237,0.19822632,0.58170456,0.371152],[-0.16170846,-0.28313425,-0.72305113,-0.21175383,-0.091973335,0.069761746,-0.13998356],[-0.121987164,0.051230323,0.6086433,0.0826418,0.3024844,0.36294287,0.11378607],[0.23916546,0.32369035,0.29166648,-0.5202349,-0.25274298,0.05645988,0.004484808],[0.476144,-0.20375697,0.7744821,-0.20136273,-0.1997987,0.5086857,-0.13244303],[-0.5018623,0.0039712084,-1.3228892,-0.35630298,0.5103365,0.29102045,-0.42318186],[0.47396633,-0.5094677,-0.7413271,-0.0389592,-1.0502282,0.050273117,0.13152136]],"activation":"σ","dense_2_b":[[0.08725935],[-0.07465063],[0.03314263],[-0.37226093],[-0.023633253],[0.1155244],[-0.035357073],[0.23985702],[-0.20116974],[-0.31014088],[-0.10752753],[0.28552514],[-0.040062964]]},{"dense_3_W":[[-0.6032763,0.62711155,-0.018731741,-0.4367009,-0.33474848,-0.5986305,0.3242449,-0.5550633,0.03024249,0.37429914,0.5477163,-0.11621696,-0.06627925],[0.57853127,-0.07147071,-0.45605588,0.090353325,0.6903964,-0.054210514,0.117629945,-0.07430856,-0.63455236,0.17655165,0.17357552,0.5822009,0.35904822],[0.017287904,-0.4711383,0.31602967,-0.5097068,0.18833941,0.2322238,0.6586847,-0.3739661,-0.35619813,-0.50459105,0.065162025,-0.047679372,-0.048519257]],"activation":"identity","dense_3_b":[[0.030126056],[-0.038708143],[0.07066878]]},{"dense_4_W":[[1.1202317,-1.0828689,0.09244317]],"dense_4_b":[[0.034058213]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_PASSAT_MK8.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_PASSAT_MK8.json deleted file mode 100644 index 420f806e6..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_PASSAT_MK8.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[10.3052],[1.1070998],[0.5069369],[0.037658893],[1.0964528],[1.0996523],[1.102182],[1.0794489],[1.0610045],[1.0333265],[1.00464],[0.037511136],[0.03756209],[0.037611235],[0.037606418],[0.03751489],[0.037262734],[0.03702075]],"model_test_loss":0.012260119430720806,"input_size":18,"current_date_and_time":"2023-08-13_22-59-06","input_mean":[[21.415882],[0.017556097],[-0.004099798],[-0.003401093],[0.020456757],[0.019209672],[0.01819574],[0.01823048],[0.019393403],[0.02141286],[0.022404209],[-0.0034443606],[-0.0034451415],[-0.0034438162],[-0.00339113],[-0.003406753],[-0.003565579],[-0.0037500844]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.3709847],[-6.2942357],[0.09346686],[6.5184207],[-1.5861837],[-0.014835897],[0.027714923]],"dense_1_W":[[-0.5551179,2.6619074,-0.00640388,0.13290244,-1.037943,0.7656338,0.4283093,0.37328,0.26634002,-0.13999927,-0.15548675,0.097528294,-0.3680248,0.25233808,-0.08934639,-0.015347149,-0.11909841,0.111676104],[-3.5742025,-0.40220144,-1.3790281,0.5485811,-0.050429426,-0.45648634,0.7774281,-1.1217349,-0.6165576,0.1251687,-0.20120902,-0.4511548,-0.13060598,0.22547151,-0.016303696,-0.20157799,0.09675224,-0.07398645],[-0.0012344504,1.1922354,-0.0048953234,0.2634142,-0.6455366,1.3841971,-0.45204964,0.1695878,0.063574985,0.10271839,-0.10217061,-0.08847725,-0.13457958,-0.4961231,-0.5403963,-0.34123054,-0.017704021,0.515054],[3.7061737,-0.9532865,-1.424426,0.6954919,-0.022263907,-0.5896788,1.3645809,-1.1818194,-0.56429285,0.19767563,-0.25111258,0.020198058,-0.52572525,-0.16691986,0.31276083,-0.55734074,0.41006702,-0.19204228],[-0.60735714,-3.3537095,-0.0038090213,0.5654296,1.0198475,-0.6862546,0.08697712,-0.5121695,-0.3346962,0.17586575,0.22113432,-0.08847206,-0.3487319,-0.14522201,0.23490162,-0.18125007,0.10122172,-0.13981529],[0.0017254709,0.62618876,-0.0013352685,-0.0367472,0.040667597,1.5291207,-1.528107,-0.38684332,0.16372706,-0.2591873,0.28832328,0.3641689,-0.24908063,0.1472321,-0.119317986,-0.06420556,0.2222137,-0.2624101],[0.0055754874,-1.8040034,-3.361559,1.0961792,-0.3001131,-0.9308391,1.4269178,0.22353382,-0.4215277,-0.15384597,1.3272976,-0.34549853,-0.6220911,0.38486806,-0.33497638,-0.35858622,0.34940526,-0.16165465]],"activation":"σ"},{"dense_2_W":[[-0.5476146,1.6963724,-1.6546803,0.5176808,0.5235883,-0.97987354,0.7380813],[-0.36497906,-0.2612212,-0.016376352,0.10838414,0.073292136,0.0015826789,-0.50295585],[0.6298286,-0.46785268,-0.16137074,-0.07789413,0.27898172,0.3285615,0.4176234],[0.5922487,-0.34946433,-0.048434507,-0.0985068,-0.6583057,1.0643016,-0.46150544],[0.73731494,-0.6556301,0.81423277,-0.6606677,-0.36022863,0.2516511,-0.49312246],[-0.6430194,-0.41603965,-0.10390351,-0.49625757,0.10309995,-0.22808753,-0.30847374],[0.39266315,-0.15612036,-0.58519137,0.49023283,0.09567495,-1.016928,0.08579332],[0.34867492,0.1914456,-0.21379824,0.041593276,-0.5044442,0.9609127,-0.4119613],[0.37885004,-0.37522417,0.56330055,-0.53145355,-0.91467786,0.5687067,-0.043723527],[-0.57495284,0.46496224,-0.4232346,-0.3390447,0.03577091,0.086310275,-0.06801427],[0.37579545,-0.5779554,-0.16705948,-0.33729044,0.04347679,-0.5497756,-0.24243224],[0.5380365,-0.29537776,0.15974742,-0.5128796,-0.23003492,0.6015878,-0.20965582],[-0.9828622,0.75779086,-1.3404784,1.6249025,0.44636276,-0.6208371,0.7130451]],"activation":"σ","dense_2_b":[[-0.3861388],[0.0100793],[0.05162594],[-0.022311607],[-0.009086858],[-0.23065013],[-0.07641792],[-0.026186304],[-0.23643298],[-0.03883572],[0.021982284],[0.0043940307],[-0.09819139]]},{"dense_3_W":[[0.6619464,0.47387305,-0.55588114,-0.4830425,-0.53887093,0.47769704,0.343591,0.23760638,-0.19049422,0.46038502,0.3466442,-0.52039224,-0.02187165],[0.037034765,-0.5791299,-0.46348968,0.33793876,-0.1364937,-0.17524627,0.48086503,-0.31004375,0.11112415,0.4982084,0.36429304,-0.0013359467,0.5441025],[-0.3904947,0.44045958,-0.18596323,0.615597,-0.032387026,-0.014983241,-0.649624,0.26271734,0.26629633,-0.062090363,-0.37463444,0.5122715,-0.24724658]],"activation":"identity","dense_3_b":[[-0.02654226],[-0.035016984],[0.028202571]]},{"dense_4_W":[[-0.2911369,-0.77550566,0.7692582]],"dense_4_b":[[0.03128059]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_PASSAT_NMS.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_PASSAT_NMS.json deleted file mode 100644 index f80e89d1e..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_PASSAT_NMS.json +++ /dev/null @@ -1 +0,0 @@ -{"test_dict":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.835412,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.2336276,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.2189443,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.0102171,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.030764546,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7043263,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.0948871,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.23544258,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.63234776,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.85114586,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.5361517,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.6150184,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.2294357,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-2.1777012,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.1220803,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.256643,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.42655924,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.82392097,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.20633036,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8738396,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.0698426,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.0190142,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-2.2355235,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.11299175,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.7797719,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.0755801,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.90929884,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1290616,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.9102107,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.63283235,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.2970404,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0833684,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-2.1911933,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.201447,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.9321379,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.098811716,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.22733232,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.4293779,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6842653,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.1035659,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.7793283,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.7686179,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.107880056,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.0867288,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.86887354,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.0619769,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.1285523,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.69223654,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.7518216,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0596709,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-2.11871,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.9609706,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.6211437,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.52062637,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.2104128,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.1836823,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.5248347,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.292731,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.138114,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.2132114,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.27300417,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.26868293,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.64426357,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.08701679,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.024351712,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.1174083,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1745512,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.63085973,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.18953863,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.70560896,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.53338933,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-2.187799,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.9880617,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.1916934,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.0533769,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.7911664,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.34528437,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.00016171113,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-2.161565,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.75353914,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.97723967},"input_std":[[8.338225],[1.408846],[1.0394787],[0.03335341],[1.3959996],[1.4030461],[1.407399],[1.384101],[1.3516284],[1.3079585],[1.2541819],[0.033312354],[0.033323247],[0.033341203],[0.033303928],[0.033300698],[0.033334702],[0.0333457]],"model_test_loss":0.016627496108412743,"input_size":18,"current_date_and_time":"2023-07-17_12-56-04","input_mean":[[16.703712],[0.10588005],[-0.010265364],[-0.029445024],[0.10293076],[0.104083925],[0.105137445],[0.10571949],[0.10239706],[0.09606354],[0.09232913],[-0.02939694],[-0.029403588],[-0.02942391],[-0.02959834],[-0.029817479],[-0.030200344],[-0.030651137]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"test_dict_zero_bias":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.0787524,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.35174394,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.41936088,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.2337253,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.13621223,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.49109936,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.439525,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.13884512,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.53931737,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.73874366,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.35439628,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.8166686,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.47153878,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.9580405,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.36217993,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.5416738,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.2621055,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.131006,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.7893468,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.1926978,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.1279483,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.3684851,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.3094211,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.3712977,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.7667332,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.27987432,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.041331887,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1544355,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7870656,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.43408832,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.23026863,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3094313,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.0644252,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.7976848,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.99903697,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.15177456,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.492374,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.3808361,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.9073831,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.32916206,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.106909096,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.6694711,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.2106556,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.4411385,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.9513951,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.412755,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.2576269,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.36055696,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.6838698,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3918278,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.8520211,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.3348066,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.29837233,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.697657,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.1919205,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.7850812,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.21019909,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.42828774,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.4563662,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8075129,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.7073532,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.047708154,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3243128,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.003768146,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.211508,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.4588401,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.4644309,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0761973,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.3106804,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.5213471,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.5822113,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.9868801,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.0855144,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.31297475,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.2781342,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.8265104,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6158317,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.37998584,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.9141586,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.0466149,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0325543},"layers":[{"dense_1_b":[[-2.837288],[-6.5732856],[-0.36112186],[-2.4264846],[-0.53084093],[-0.17624182],[5.4556284]],"dense_1_W":[[-2.3625484,0.70262957,-0.39007878,-0.52770585,0.35169983,-0.35000876,-0.12762427,-1.0095628,-0.83572966,-0.730048,0.6743538,-0.39424068,0.3901122,0.36599886,-0.011965084,0.045552857,0.4666889,-0.3256988],[-3.6053147,-0.31673837,0.66194737,0.3903138,0.98095685,1.2762904,-1.3785179,-1.296343,0.71970254,0.3438452,0.031964917,0.058328565,-0.058488294,-0.33832067,-0.12332722,0.165694,-0.020551614,-0.050333176],[-0.0041524894,0.520019,-0.04355893,-0.05094888,0.60922056,-1.3748976,0.3093316,-1.0256472,0.19658932,0.052907944,0.0067435564,-0.2945121,0.08360483,0.2436637,0.22430366,-0.12585463,0.044775117,-0.054093584],[-1.7719781,-1.0094852,0.5476492,0.15155911,-0.22202487,0.5499667,-0.17507018,1.3075997,0.97578096,0.32534385,-0.32253557,0.19911957,-0.004920554,-0.44574377,0.3794811,-0.23206042,-0.24507338,0.17988442],[-0.096019216,-2.8020802,0.1768002,-0.11615186,1.0867412,-0.4728857,-0.73343986,-1.899336,-1.1828195,1.287238,0.2246014,-0.3443722,0.40425447,0.11932455,0.0037963327,0.3826241,-0.32104075,0.03184444],[0.18515867,0.15802903,11.005427,0.41247886,-2.3798037,-0.84801793,-0.80931455,1.2942814,1.7535613,0.6347409,1.4362186,0.296623,-0.022977732,-0.60491437,0.034293108,-0.08022964,-0.004915833,-0.13788682],[3.219948,-0.5069822,0.39000142,0.34811074,0.6547,0.5350491,-0.30209413,-0.7547057,0.37530193,-0.46802387,0.3797982,0.29564524,-0.28160524,-0.464101,-0.055149645,0.29884568,-0.052221056,-0.08509861]],"activation":"σ"},{"dense_2_W":[[-0.6509598,0.29119527,0.4522418,0.67029077,0.31190413,0.24329087,-0.13738276],[-0.9829914,3.5774024,-1.8433813,1.6228933,-1.0542817,0.96605825,0.16334952],[-0.07484317,1.7878124,-1.9842395,1.3015918,-0.045502957,0.29070792,0.23896325],[-0.017372472,0.5585439,0.38864908,-0.11616016,0.5211495,0.2445178,-0.0821982],[-2.9980035,3.602488,-0.73448294,0.5120281,-1.5761098,1.7105227,2.7474566],[-1.0895693,-0.061832696,1.3823732,0.36133802,-0.51309395,0.6033679,0.18768047],[-0.8188117,0.44345558,1.1498142,0.86907035,-0.38104993,0.18720235,-0.23738712],[0.06584014,-0.61574376,-1.1880105,-0.40490726,-0.46003637,-0.014412597,0.44476265],[2.0212123,1.1144648,-1.0255187,0.9472248,-0.3807562,-3.1219852,-3.644532],[0.0436852,2.2160454,-1.5884769,1.0859653,-0.51730025,0.06356327,0.016509296],[-1.2976134,3.8786354,-1.172869,1.3448112,-1.3144706,1.0707655,0.20357744],[0.3019769,-0.77098906,0.3424374,-0.59369296,0.26005548,-0.20149492,-0.72477216],[0.31829432,0.14789248,-0.20679975,-1.3688983,0.721357,-1.155302,-0.35438472]],"activation":"σ","dense_2_b":[[-0.034817904],[-0.39495024],[-0.16561012],[0.023161512],[0.054840133],[-0.034001518],[-0.05686173],[-0.026203524],[-0.6473888],[0.28907722],[-0.38862142],[-0.091984995],[0.02006307]]},{"dense_3_W":[[-0.2560296,-0.47561207,-0.2180975,0.2697371,-0.28709534,-0.2907532,0.06514903,-0.08777709,0.07678251,-0.14984281,0.20281981,0.027406089,0.26574254],[0.30667484,0.5253529,0.52860755,0.22304007,0.63340044,-0.8269798,-0.36970806,-0.1585502,-1.241306,0.16619857,0.5249275,-0.19621038,0.32695386],[-0.64127594,0.27470827,0.028331403,-0.32301947,0.6665432,-0.8246224,-0.33862486,0.38033482,-1.4627537,0.2530845,0.40247354,-0.49841896,0.30732566]],"activation":"identity","dense_3_b":[[0.06380872],[-0.13593788],[-0.05554244]]},{"dense_4_W":[[-0.17066109,0.67130095,0.99185157]],"dense_4_b":[[-0.057568375]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_TIGUAN_MK2.json b/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_TIGUAN_MK2.json deleted file mode 100644 index 2f0c99541..000000000 --- a/iqpilot/iqpilot_iq_nnff_models/neural_network_lateral_control/VOLKSWAGEN_TIGUAN_MK2.json +++ /dev/null @@ -1 +0,0 @@ -{"input_std":[[8.782441],[1.1398275],[0.4609802],[0.04271673],[1.1238744],[1.1299343],[1.1346341],[1.1119426],[1.0859472],[1.0505929],[1.01332],[0.042612497],[0.042648252],[0.042672537],[0.042585343],[0.042469293],[0.042215183],[0.04179356]],"model_test_loss":0.018630679696798325,"input_size":18,"current_date_and_time":"2023-08-14_01-59-38","input_mean":[[22.468307],[-0.0059960946],[-0.008688168],[-0.003941978],[-0.004109974],[-0.0052409726],[-0.0066701453],[-0.010034277],[-0.013358513],[-0.011732898],[-0.0112503925],[-0.0039730547],[-0.0039907545],[-0.004007257],[-0.0040642004],[-0.004142748],[-0.004199409],[-0.0042553144]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.22421235],[0.022291217],[0.015709542],[-0.04664034],[-0.036350474],[-0.24544194],[-0.04896989]],"dense_1_W":[[-0.015455264,0.35899833,6.998555,0.81398284,0.34668404,0.50750834,-0.30584475,0.6416511,-0.5377552,-0.026296293,-0.6502898,0.43909717,-0.27295533,-0.76501244,-0.5884351,0.22982346,-0.26877192,0.26560456],[-0.01508568,1.8268416,0.00402336,0.2784217,-0.7716931,0.46446714,-0.11456723,0.10766974,0.30401927,-0.085616745,-0.15998937,0.44400185,-0.48933145,-0.23811713,-0.440158,-0.10242332,0.051594254,0.12977812],[-0.009739386,-2.6971612,0.001168384,-0.35022622,0.65414,-0.717214,-0.44903016,-0.49311733,-0.43150806,0.06219255,0.23182331,-0.44158918,-0.49226075,0.47947824,0.6467593,0.34515625,0.09018108,-0.47900265],[1.0840801,-0.7623997,-0.005088885,-0.52213657,-0.22831856,-0.6294846,-1.2465742,0.3222685,0.020507088,-0.024931427,-0.24259277,0.08206772,0.21676067,-0.41708487,0.50989604,0.33494267,-0.079637915,-0.14551927],[0.004391417,-0.10370217,0.0014306986,-0.072918385,-0.63637805,-1.1973468,0.5230291,-0.05261172,0.25703079,0.041062124,-0.34666935,0.0939909,-0.48456657,0.08325979,0.5252982,-0.10210225,-0.12507002,0.05711295],[-0.010150519,0.47018084,1.575968,-0.12638067,0.58264244,1.1620525,-0.6418302,-0.022278491,0.5091847,-0.16685116,0.074821465,0.22004989,-0.099773616,-0.5007223,-0.09964562,0.46015504,0.21582201,-0.23595089],[1.1357191,0.7709306,0.003718608,0.6016892,0.7352459,0.33387783,1.0426474,0.12312558,-0.49904007,0.032169387,0.37637976,-0.05813148,-0.49427262,0.49914685,-0.2028158,-0.5950836,0.2782391,0.028333709]],"activation":"σ"},{"dense_2_W":[[0.43099108,-0.40067255,0.15829495,-0.48378208,0.396984,-0.1558594,-0.1562694],[0.6452132,0.40809157,-0.5897283,1.2150947,-0.6793519,0.78984624,0.66217726],[-1.0487145,-0.15708125,0.48070663,-1.294668,0.44506454,-1.0924927,-1.3423347],[-0.0905496,-0.39283985,-0.560608,-0.4611327,-0.3925291,0.005858116,0.5098873],[-1.3053528,-0.17654762,1.1515645,1.4426079,1.0838766,-0.6442153,1.756127],[-0.34371176,1.1574818,0.017585738,0.20476972,-0.463017,-0.22401343,-0.5996214],[0.20533562,0.79994386,-0.8060774,0.17529243,-0.38612595,0.03759143,-0.22778784],[-0.10523058,1.0248777,-0.5244927,0.58016795,-0.48161384,0.2411753,-0.3102547],[0.041490827,-0.12094459,0.44139338,0.123947956,0.5913839,-0.50927347,0.82576096],[-0.17784683,-0.7949691,0.6407812,0.36980206,-0.045769464,-0.15805046,0.27670377],[0.13153441,-0.9403638,0.2306892,-0.18441507,0.34671855,-0.074668296,0.5032],[-0.04615598,0.71520805,-0.0030287886,-0.17552495,-0.19403128,0.21251689,0.24918763],[0.2859375,-0.5510105,0.31645826,-0.15235336,0.62049425,0.14673771,0.11173112]],"activation":"σ","dense_2_b":[[-0.20544042],[0.14436114],[-0.12040931],[-0.16554375],[0.36716554],[0.17168364],[-0.065600924],[-0.01176559],[-0.03528442],[0.037511505],[-0.11677802],[-0.035834227],[-0.17063564]]},{"dense_3_W":[[-0.3723276,0.4951858,-0.17594789,0.31653145,-0.09435181,0.45912716,-0.30004933,0.41055498,-0.21392249,0.35937718,-0.10425309,-0.2715391,-0.5834551],[-0.25541237,-0.58331114,0.4694298,-0.14703207,0.7632458,-0.35720977,-0.26993504,-0.5713957,0.020457853,0.012436012,-0.049483325,0.1666998,0.33925256],[0.45550138,0.12273135,0.51411545,0.43389788,0.0037848332,-0.41984108,-0.10243085,-0.56994265,0.24741924,0.44959965,0.5980098,-0.37595576,0.34953722]],"activation":"identity","dense_3_b":[[0.048041742],[-0.07375918],[-0.090859294]]},{"dense_4_W":[[0.09198451,-1.1679362,-0.9176557]],"dense_4_b":[[0.08128402]],"activation":"identity"}]} \ No newline at end of file diff --git a/iqpilot/sab/behavior.py b/iqpilot/sab/behavior.py index ea8cec343..287930f78 100644 --- a/iqpilot/sab/behavior.py +++ b/iqpilot/sab/behavior.py @@ -12,8 +12,7 @@ from iqdbc.car import structs from openpilot.common.realtime import DT_CTRL from iqdbc.safety import ALTERNATIVE_EXPERIENCE from openpilot.selfdrive.selfdrived.events import ET -from iqdbc.car.hyundai.values import HyundaiFlags -from iqdbc.iqpilot.car.hyundai.values import HyundaiFlagsIQ, HyundaiSafetyFlagsIQ +from iqdbc.car.hyundai.values import HyundaiFlags, HyundaiFlagsIQ, HyundaiSafetyFlagsIQ from openpilot.selfdrive.selfdrived.state import SOFT_DISABLE_TIME from cereal import log, custom @@ -255,7 +254,8 @@ _BTN = structs.CarState.ButtonEvent.Type _GEAR = structs.CarState.GearShifter _CRUISE_SET_TAPS = frozenset((_BTN.accelCruise, _BTN.resumeCruise, _BTN.decelCruise, _BTN.setCruise)) -_HYUNDAI_LDA_MASK = HyundaiFlags.HAS_LDA_BUTTON | HyundaiFlags.CANFD +_LATERAL_TOGGLE_BUTTONS = (_BTN.lkas, _BTN.lfaButton) +_HYUNDAI_LDA_MASK = HyundaiFlags.CANFD # While a lateral-only session rides through a pause, these stock blockers are # swapped for their silent IQ twins. Order here is not load-bearing (each row @@ -295,7 +295,7 @@ class SteeringAssistanceBehavior: def _apply_brand_capabilities(self): brand = self.CP.brand self.no_main_cruise = brand in BRANDS_WITHOUT_MAIN_CRUISE_TOGGLE - lda_capable = bool(self.CP.flags & _HYUNDAI_LDA_MASK) + lda_capable = bool(self.CP.flags & _HYUNDAI_LDA_MASK) or bool(self.CP_IQ.flags & HyundaiFlagsIQ.HAS_LFA_BUTTON) self.hkg_allow = brand == "hyundai" and lda_capable def _reload_preferences(self, full: bool = False): @@ -461,7 +461,7 @@ class SteeringAssistanceBehavior: for be in cs.buttonEvents: if be.type == _BTN.cancel and long_dropped_out: self._emit(_Q.speedManually) - if not (be.type == _BTN.lkas and be.pressed and self._lateral_offered(cs)): + if not (be.type in _LATERAL_TOGGLE_BUTTONS and be.pressed and self._lateral_offered(cs)): continue if not self.enabled: self._emit(_Q.alcEngaged) diff --git a/iqpilot/sab/tests/test_sab.py b/iqpilot/sab/tests/test_sab.py index 48f30ca88..a4e499416 100644 --- a/iqpilot/sab/tests/test_sab.py +++ b/iqpilot/sab/tests/test_sab.py @@ -6,7 +6,7 @@ from types import SimpleNamespace from cereal import custom from iqdbc.car import structs -from iqdbc.car.hyundai.values import HyundaiFlags +from iqdbc.car.hyundai.values import HyundaiFlags, HyundaiFlagsIQ from openpilot.iqpilot.sab.behavior import SteeringAssistanceBehavior from openpilot.iqpilot.selfdrive.selfdrived.events import IQEvents from openpilot.selfdrive.selfdrived.events import Events @@ -39,7 +39,7 @@ class MockParams: def make_selfdrive(cp_flags: int, brand: str = "hyundai", main_cruise_allowed: bool = False, - aol_enabled: bool = True): + aol_enabled: bool = True, cp_iq_flags: int = 0): cp = SimpleNamespace( brand=brand, flags=cp_flags, @@ -47,7 +47,7 @@ def make_selfdrive(cp_flags: int, brand: str = "hyundai", main_cruise_allowed: b notCar=False, safetyModel=structs.CarParams.SafetyModel.noOutput, ) - cp_iq = SimpleNamespace(flags=0) + cp_iq = SimpleNamespace(flags=cp_iq_flags) return SimpleNamespace( CP=cp, CP_IQ=cp_iq, @@ -100,10 +100,12 @@ def make_vw_car_state(cruise_available: bool, cruise_fault_lateral: bool = False def test_hyundai_lkas_button_can_arm_guidance_before_lateral_available(): - selfdrive = make_selfdrive(HyundaiFlags.HAS_LDA_BUTTON) + selfdrive = make_selfdrive(0, cp_iq_flags=HyundaiFlagsIQ.HAS_LFA_BUTTON) guidance = SteeringAssistanceBehavior(selfdrive) + car_state = make_car_state() + car_state.buttonEvents = [structs.CarState.ButtonEvent(pressed=True, type=ButtonType.lfaButton)] - guidance.update_events(make_car_state()) + guidance.update_events(car_state) assert selfdrive.events_iq.has(EventNameIQ.alcEngaged) diff --git a/iqpilot/selfdrive/assets/offroad/icon_map.png b/iqpilot/selfdrive/assets/offroad/icon_map.png deleted file mode 100644 index 21dd0bacc..000000000 Binary files a/iqpilot/selfdrive/assets/offroad/icon_map.png and /dev/null differ diff --git a/iqpilot/selfdrive/car/interfaces.py b/iqpilot/selfdrive/car/interfaces.py index 3e0a85d52..bff71f9e4 100644 --- a/iqpilot/selfdrive/car/interfaces.py +++ b/iqpilot/selfdrive/car/interfaces.py @@ -69,7 +69,7 @@ def _cleanup_unsupported_params(cp, cp_iq, store=None) -> None: set_speed_limit_controller_availability(cp, cp_iq, store) -def setup_interfaces(ci, store=None) -> None: +def apply_iq_car_config(ci, store=None) -> None: store = store or _Store() if _stamp_lateral_model(ci.CP, ci.CP_IQ, store): ci.configure_torque_tune(ci.CP.carFingerprint, ci.CP.lateralTuning) diff --git a/iqpilot/selfdrive/car/vehicle_catalog.py b/iqpilot/selfdrive/car/vehicle_catalog.py index 254797c6b..42d6e5d38 100644 --- a/iqpilot/selfdrive/car/vehicle_catalog.py +++ b/iqpilot/selfdrive/car/vehicle_catalog.py @@ -81,5 +81,5 @@ def _write(vehicles: dict[str, dict], basedir: str = BASEDIR) -> str: if __name__ == "__main__": - from iqdbc.iqpilot.car.platform_list import get_car_list + from iqdbc.lvbs.car.platform_list import get_car_list print("wrote", _write(get_car_list())) diff --git a/iqpilot/selfdrive/controls/lib/helpers/e2e_alerts.py b/iqpilot/selfdrive/controls/lib/helpers/e2e_alerts.py index 025f19e87..c7c628669 100644 --- a/iqpilot/selfdrive/controls/lib/helpers/e2e_alerts.py +++ b/iqpilot/selfdrive/controls/lib/helpers/e2e_alerts.py @@ -4,152 +4,140 @@ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed from cereal import messaging, custom +from openpilot.common.params import Params from openpilot.common.realtime import DT_MDL from openpilot.iqpilot.selfdrive.selfdrived.events import IQEvents -PATH_QUEUE_GATE = 30 -LEAD_GROWTH_GATE = 1.0 -TRIGGER_HOLD_S = 0.3 +PARAM_PATH = "EndToEndAlert" +PARAM_LEAD = "EndToEndLeadAlert" +PARAM_STRIDE_S = 2.0 + +SETTLE_S = 1.0 +CONFIRM_S = 0.4 +ROLL_MPS = 0.3 + +HORIZON_TAIL = 5 +PATH_SPEED_MPS = 3.0 + +LEAD_QUEUE_M = 12.0 +LEAD_SPEED_MPS = 1.0 +LEAD_GAP_M = 0.5 -class TriggerPhase: - IDLE = 0 - ARMED = 1 - FIRED = 2 +class _Confirm: + def __init__(self, window_s: float): + self._window = window_s + self._held = 0.0 + self._spent = False + + def clear(self) -> None: + self._held = 0.0 + self._spent = False + + def poll(self, holds: bool) -> bool: + if self._spent: + return False + self._held = self._held + DT_MDL if holds else 0.0 + if self._held < self._window: + return False + self._spent = True + return True -class StopAndLeadChimeEngine: +class _Dwell: def __init__(self): - self._frame = -1 - self._toggle = {"path_queue": False, "lead_depart": False} - self._trigger = { - "path_queue": {"phase": TriggerPhase.IDLE, "last_phase": TriggerPhase.IDLE, "fired": False, "hold_ticks": 0, "anchor": -1.0}, - "lead_depart": {"phase": TriggerPhase.IDLE, "last_phase": TriggerPhase.IDLE, "fired": False, "hold_ticks": 0, "anchor": -1.0}, - } - self._standstill_gate = {"open": False, "was_open": False, "moving_frame": -1} - self._lead_state = {"visible": False, "primed": False, "armed": False, "warmup_ticks": 0} + self.seconds = 0.0 + self.lead_floor = float('inf') - def _read_toggles(self) -> None: - self._toggle["path_queue"] = False - self._toggle["lead_depart"] = False + def clear(self) -> None: + self.seconds = 0.0 + self.lead_floor = float('inf') - def _mark_motion(self, standstill: bool, speed_mps: float) -> bool: - is_moving = (not standstill) and speed_mps > 0.1 - if is_moving: - self._standstill_gate["moving_frame"] = self._frame - return is_moving + def tick(self, lead_range: float | None) -> None: + self.seconds += DT_MDL + if lead_range is not None: + self.lead_floor = min(self.lead_floor, lead_range) - def _within_motion_grace(self) -> bool: - stamp = self._standstill_gate["moving_frame"] - if stamp == -1: - return True - return (self._frame - stamp) * DT_MDL < 2.0 + @property + def settled(self) -> bool: + return self.seconds >= SETTLE_S - def _update_gate(self, standstill: bool, speed_mps: float, gas_pressed: bool, controls_enabled: bool) -> None: - moving = self._mark_motion(standstill, speed_mps) - self._standstill_gate["open"] = (not moving) and (not gas_pressed) and (not controls_enabled) and (not self._within_motion_grace()) + @property + def queued(self) -> bool: + return self.lead_floor < LEAD_QUEUE_M - @staticmethod - def _path_end_x(path_x): - return float(path_x[-1]) if len(path_x) else 0.0 - def _path_queue_signal(self, path_x) -> bool: - node = self._trigger["path_queue"] - if node["phase"] != TriggerPhase.ARMED: - node["hold_ticks"] = 0 - return False - node["hold_ticks"] = node["hold_ticks"] + 1 if self._path_end_x(path_x) > PATH_QUEUE_GATE else 0 - return node["hold_ticks"] * DT_MDL > TRIGGER_HOLD_S +class EndToEndAlertEngine: + def __init__(self): + self._params = Params() + self._on = {"path": False, "lead": False} + self._elapsed_since_read = PARAM_STRIDE_S + self._dwell = _Dwell() + self._confirm = {"path": _Confirm(CONFIRM_S), "lead": _Confirm(CONFIRM_S)} + self._fired = {"path": False, "lead": False} - def _update_lead_prime(self, seen: bool, distance_m: float) -> None: - near_lead = seen and distance_m < 8.0 - opened_now = self._standstill_gate["open"] and not self._standstill_gate["was_open"] - - if opened_now and near_lead: - self._lead_state["primed"] = True - elif not self._standstill_gate["open"]: - self._lead_state["primed"] = False - - if self._standstill_gate["open"] and self._lead_state["primed"] and near_lead: - self._lead_state["warmup_ticks"] += 1 - self._lead_state["armed"] = self._lead_state["warmup_ticks"] * DT_MDL >= 1.0 + def _refresh_params(self) -> None: + self._elapsed_since_read += DT_MDL + if self._elapsed_since_read < PARAM_STRIDE_S: return - - self._lead_state["warmup_ticks"] = 0 - self._lead_state["armed"] = False - - def _lead_depart_signal(self, distance_m: float) -> bool: - node = self._trigger["lead_depart"] - if node["phase"] != TriggerPhase.ARMED: - node["anchor"] = -1.0 - node["hold_ticks"] = 0 - return False - - if node["anchor"] == -1.0 or distance_m < node["anchor"]: - node["anchor"] = distance_m - - grew = node["anchor"] != -1.0 and (distance_m - node["anchor"]) > LEAD_GROWTH_GATE - node["hold_ticks"] = node["hold_ticks"] + 1 if grew else 0 - return node["hold_ticks"] * DT_MDL > TRIGGER_HOLD_S - - def _sample_inputs(self, sm: messaging.SubMaster): - cs = sm['carState'] - cc = sm['carControl'] - lead_one = sm['radarState'].leadOne - - self._lead_state["visible"] = lead_one.status - lead_distance = lead_one.dRel - - self._update_gate(cs.standstill, cs.vEgo, cs.gasPressed, cc.enabled) - queue_fire = self._path_queue_signal(sm['modelV2'].position.x) - self._update_lead_prime(self._lead_state["visible"], lead_distance) - lead_fire = self._lead_depart_signal(lead_distance) - - self._standstill_gate["was_open"] = self._standstill_gate["open"] - return queue_fire, lead_fire + self._elapsed_since_read = 0.0 + self._on["path"] = self._params.get_bool(PARAM_PATH) + self._on["lead"] = self._params.get_bool(PARAM_LEAD) @staticmethod - def _step_phase(phase: int, enabled: bool, allowed: bool, fired: bool) -> tuple[int, bool]: - if phase == TriggerPhase.IDLE: - return (TriggerPhase.ARMED, fired) if (allowed and enabled) else (phase, fired) - if not allowed or not enabled: - return TriggerPhase.IDLE, fired - if phase == TriggerPhase.ARMED and fired: - return TriggerPhase.FIRED, fired - return phase, fired + def _car_holds_long(sm: messaging.SubMaster) -> bool: + # AOL steers without raising selfdriveState.enabled, so the pair reads as long authority + return bool(sm['selfdriveState'].enabled or sm['carState'].cruiseState.enabled) - def _advance_trigger(self, key: str, enabled: bool, allowed: bool, fired: bool) -> None: - node = self._trigger[key] - node["last_phase"] = node["phase"] - node["phase"], node["fired"] = self._step_phase(node["phase"], enabled, allowed, fired) + @staticmethod + def _halted(cs) -> bool: + return bool(cs.standstill) or abs(cs.vEgo) < ROLL_MPS + + @staticmethod + def _horizon_speed(model) -> float: + # capnp list readers reject slices + samples = model.velocity.x + count = len(samples) + if count < HORIZON_TAIL: + return 0.0 + return sum(samples[i] for i in range(count - HORIZON_TAIL, count)) / HORIZON_TAIL + + def _rearm(self) -> None: + self._dwell.clear() + for gate in self._confirm.values(): + gate.clear() def update(self, sm: messaging.SubMaster, iq_events: IQEvents) -> None: - self._read_toggles() - queue_fire, lead_fire = self._sample_inputs(sm) + self._refresh_params() + self._fired["path"] = self._fired["lead"] = False - self._advance_trigger("path_queue", self._toggle["path_queue"], self._standstill_gate["open"] and not self._lead_state["visible"], queue_fire) - self._advance_trigger("lead_depart", self._toggle["lead_depart"], self._standstill_gate["open"] and self._lead_state["armed"], lead_fire) + cs = sm['carState'] + lead = sm['radarState'].leadOne + lead_range = float(lead.dRel) if lead.status else None - if self._trigger["path_queue"]["fired"] or self._trigger["lead_depart"]["fired"]: + if not self._halted(cs) or cs.gasPressed or self._car_holds_long(sm): + self._rearm() + return + + self._dwell.tick(lead_range) + if not self._dwell.settled: + return + + if self._on["path"] and lead_range is None: + opened = self._horizon_speed(sm['modelV2']) > PATH_SPEED_MPS + self._fired["path"] = self._confirm["path"].poll(opened) + + if self._on["lead"] and lead_range is not None and self._dwell.queued: + pulling = lead.vLead > LEAD_SPEED_MPS and (lead_range - self._dwell.lead_floor) > LEAD_GAP_M + self._fired["lead"] = self._confirm["lead"].poll(pulling) + + if self._fired["path"] or self._fired["lead"]: iq_events.add(custom.IQOnroadEvent.EventName.e2eChime) - self._frame += 1 + @property + def path_alert(self) -> bool: + return self._fired["path"] @property - def queue_alert(self): - return self._trigger["path_queue"]["fired"] - - @queue_alert.setter - def queue_alert(self, payload): - self._trigger["path_queue"]["fired"] = bool(payload) - - @property - def lead_alert(self): - return self._trigger["lead_depart"]["fired"] - - @lead_alert.setter - def lead_alert(self, payload): - self._trigger["lead_depart"]["fired"] = bool(payload) - - -E2EAlertsHelper = StopAndLeadChimeEngine + def lead_alert(self) -> bool: + return self._fired["lead"] diff --git a/iqpilot/selfdrive/controls/lib/helpers/lane_change.py b/iqpilot/selfdrive/controls/lib/helpers/lane_change.py index 2f5bd0419..f0e720872 100644 --- a/iqpilot/selfdrive/controls/lib/helpers/lane_change.py +++ b/iqpilot/selfdrive/controls/lib/helpers/lane_change.py @@ -50,7 +50,7 @@ class LaneSwapEngine: "sec": 0.0, "tick": 0, "gate": 0.0, - "preset": self._kv.get("AutoLaneChangeTimer", return_default=True), + "preset": self._kv.get("IQLaneChangeTimer", return_default=True), "bsm_hold": False, "braked": False, "ready": False, @@ -59,8 +59,8 @@ class LaneSwapEngine: self.reload_setup() def _pull_setup(self) -> None: - self._mem["bsm_hold"] = self._kv.get_bool("AutoLaneChangeBsmDelay") - self._mem["preset"] = self._kv.get("AutoLaneChangeTimer", return_default=True) + self._mem["bsm_hold"] = self._kv.get_bool("IQLaneChangeBsmDelay") + self._mem["preset"] = self._kv.get("IQLaneChangeTimer", return_default=True) def _idle_phase(self) -> bool: return ( diff --git a/iqpilot/selfdrive/controls/lib/helpers/tests/test_e2e_alerts.py b/iqpilot/selfdrive/controls/lib/helpers/tests/test_e2e_alerts.py new file mode 100644 index 000000000..69a1f9513 --- /dev/null +++ b/iqpilot/selfdrive/controls/lib/helpers/tests/test_e2e_alerts.py @@ -0,0 +1,133 @@ +""" +Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos +""" +from types import SimpleNamespace + +import pytest + +import cereal.messaging as messaging +from cereal import custom +from openpilot.common.realtime import DT_MDL +from openpilot.iqpilot.selfdrive.controls.lib.helpers.e2e_alerts import ( + EndToEndAlertEngine, CONFIRM_S, SETTLE_S, HORIZON_TAIL, PATH_SPEED_MPS, LEAD_SPEED_MPS, LEAD_GAP_M) + +E2E_CHIME = custom.IQOnroadEvent.EventName.e2eChime + + +class _Events(list): + def add(self, name): + self.append(name) + + +def _model(horizon): + msg = messaging.new_message('modelV2') + msg.modelV2.velocity.x = [0.0] * (33 - HORIZON_TAIL) + [horizon] * HORIZON_TAIL + return msg.as_reader().modelV2 + + +def _sm(*, v_ego=0.0, standstill=True, gas=False, enabled=False, cruise=False, + horizon=0.0, lead=None): + lead = lead or SimpleNamespace(status=False, dRel=0.0, vLead=0.0) + return { + 'carState': SimpleNamespace(vEgo=v_ego, standstill=standstill, gasPressed=gas, + cruiseState=SimpleNamespace(enabled=cruise)), + 'selfdriveState': SimpleNamespace(enabled=enabled), + 'radarState': SimpleNamespace(leadOne=lead), + 'modelV2': _model(horizon), + } + + +def _engine(path=True, lead=True): + engine = EndToEndAlertEngine() + engine._refresh_params = lambda: None + engine._on = {"path": path, "lead": lead} + return engine + + +def _run(engine, sm, seconds): + events = _Events() + chimes = 0 + for _ in range(int(seconds / DT_MDL)): + engine.update(sm, events) + chimes += events.count(E2E_CHIME) + events.clear() + return chimes + + +def _lead(d_rel, v_lead=0.0): + return SimpleNamespace(status=True, dRel=d_rel, vLead=v_lead) + + +def test_path_opens_chimes_once(): + engine = _engine() + assert _run(engine, _sm(horizon=0.0), SETTLE_S + 1.0) == 0 + assert _run(engine, _sm(horizon=PATH_SPEED_MPS + 2.0), CONFIRM_S + 1.0) == 1 + assert _run(engine, _sm(horizon=PATH_SPEED_MPS + 2.0), 5.0) == 0 + + +def test_path_needs_the_settle_dwell(): + engine = _engine() + assert _run(engine, _sm(horizon=PATH_SPEED_MPS + 2.0), SETTLE_S - 0.2) == 0 + + +def test_path_silent_while_openpilot_long_is_engaged(): + engine = _engine() + _run(engine, _sm(horizon=0.0, enabled=True), SETTLE_S + 1.0) + assert _run(engine, _sm(horizon=PATH_SPEED_MPS + 2.0, enabled=True), 5.0) == 0 + + +def test_path_silent_while_stock_acc_holds_the_car(): + engine = _engine() + _run(engine, _sm(horizon=0.0, cruise=True), SETTLE_S + 1.0) + assert _run(engine, _sm(horizon=PATH_SPEED_MPS + 2.0, cruise=True), 5.0) == 0 + + +def test_path_chimes_under_aol(): + engine = _engine() + _run(engine, _sm(horizon=0.0), SETTLE_S + 1.0) + assert _run(engine, _sm(horizon=PATH_SPEED_MPS + 2.0), CONFIRM_S + 1.0) == 1 + + +def test_path_ignores_a_visible_lead(): + engine = _engine(lead=False) + _run(engine, _sm(horizon=0.0, lead=_lead(6.0)), SETTLE_S + 1.0) + assert _run(engine, _sm(horizon=PATH_SPEED_MPS + 2.0, lead=_lead(6.0)), 5.0) == 0 + + +def test_lead_pullaway_chimes_once(): + engine = _engine() + assert _run(engine, _sm(lead=_lead(6.0)), SETTLE_S + 1.0) == 0 + moving = _sm(lead=_lead(6.0 + LEAD_GAP_M + 0.5, LEAD_SPEED_MPS + 1.0)) + assert _run(engine, moving, CONFIRM_S + 1.0) == 1 + assert _run(engine, moving, 5.0) == 0 + + +def test_lead_creep_inside_the_gap_stays_silent(): + engine = _engine() + _run(engine, _sm(lead=_lead(6.0)), SETTLE_S + 1.0) + assert _run(engine, _sm(lead=_lead(6.0 + LEAD_GAP_M / 2, LEAD_SPEED_MPS + 1.0)), 5.0) == 0 + + +def test_lead_far_ahead_is_not_a_queue(): + engine = _engine() + _run(engine, _sm(lead=_lead(40.0)), SETTLE_S + 1.0) + assert _run(engine, _sm(lead=_lead(44.0, LEAD_SPEED_MPS + 1.0)), 5.0) == 0 + + +def test_gas_and_motion_rearm_the_dwell(): + engine = _engine() + _run(engine, _sm(horizon=0.0), SETTLE_S + 1.0) + _run(engine, _sm(v_ego=5.0, standstill=False, horizon=8.0), 2.0) + assert _run(engine, _sm(horizon=PATH_SPEED_MPS + 2.0), SETTLE_S - 0.2) == 0 + assert _run(engine, _sm(horizon=PATH_SPEED_MPS + 2.0), CONFIRM_S + 1.0) == 1 + + +@pytest.mark.parametrize("param_off", ["path", "lead"]) +def test_each_param_gates_only_its_own_trigger(param_off): + engine = _engine(path=param_off != "path", lead=param_off != "lead") + if param_off == "path": + _run(engine, _sm(horizon=0.0), SETTLE_S + 1.0) + assert _run(engine, _sm(horizon=PATH_SPEED_MPS + 2.0), 5.0) == 0 + else: + _run(engine, _sm(lead=_lead(6.0)), SETTLE_S + 1.0) + assert _run(engine, _sm(lead=_lead(8.0, LEAD_SPEED_MPS + 1.0)), 5.0) == 0 diff --git a/iqpilot/selfdrive/controls/lib/longitudinal_planner.py b/iqpilot/selfdrive/controls/lib/longitudinal_planner.py index d12405dcd..b99068b3d 100644 --- a/iqpilot/selfdrive/controls/lib/longitudinal_planner.py +++ b/iqpilot/selfdrive/controls/lib/longitudinal_planner.py @@ -13,7 +13,7 @@ from openpilot.selfdrive.car.cruise import V_CRUISE_MAX from openpilot.iqpilot.selfdrive.controls.lib.custom_stop_distance import CustomStopDistance from openpilot.iqpilot.selfdrive.controls.lib.iq_dynamic.engine import IQDynamicController from openpilot.iqpilot.selfdrive.controls.lib.iq_dynamic.imahelper import IQConstants -from openpilot.iqpilot.selfdrive.controls.lib.helpers.e2e_alerts import E2EAlertsHelper +from openpilot.iqpilot.selfdrive.controls.lib.helpers.e2e_alerts import EndToEndAlertEngine from openpilot.iqpilot.selfdrive.controls.lib.slc_vcruise import SLCVCruise from openpilot.iqpilot.selfdrive.controls.lib.speed_limit_controller import LIMIT_ADAPT_ACC from openpilot.iqpilot.selfdrive.selfdrived.events import IQEvents @@ -26,17 +26,15 @@ SpeedLimitSource = custom.IQPlan.SpeedLimit.Source NavProvider = custom.IQNavState.LongitudinalProvider NavLongitudinalState = custom.IQNavState.LongitudinalState - class LongitudinalPlannerIQ: def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams, mpc): self.events_iq = IQEvents() self.iq_dynamic = IQDynamicController(CP, mpc) self.custom_stop_distance = CustomStopDistance() - self.slc = SLCVCruise() + self.slimit = SLCVCruise() self.generation = int(model_bundle.generation) if (model_bundle := get_active_bundle()) else None self.source = LongitudinalPlanSource.cruise - self.e2e_alerts_helper = E2EAlertsHelper() - + self.e2e_alerts = EndToEndAlertEngine() self.output_v_target = 0. self.output_a_target = 0. self.speed_limit_last = 0. @@ -84,17 +82,17 @@ class LongitudinalPlannerIQ: else: clocks = sm.get('clocks', None) if isinstance(sm, dict) else None time_validated = bool(getattr(clocks, 'timeValid', False)) - slc_v_cruise = self.slc.update(slc_apply_enabled, now, time_validated, v_cruise, v_ego, sm) - self.iq_dynamic.set_slc_experimental_mode(self.slc.slc_experimental_mode) + slc_v_cruise = self.slimit.update(slc_apply_enabled, now, time_validated, v_cruise, v_ego, sm) + self.iq_dynamic.set_slc_experimental_mode(self.slimit.slc_experimental_mode) self.iq_dynamic.update(sm) # Prefer confirmed controller output for UI/planner rendering. # Fall back to active (policy-resolved) target/source when confirmed is unavailable. - display_speed_limit = self.slc.slc_target if self.slc.slc_target > 0 else self.slc.slc_active_target - display_source = self.slc.slc_source if self.slc.slc_source != "None" else self.slc.slc_active_source + display_speed_limit = self.slimit.slc_target if self.slimit.slc_target > 0 else self.slimit.slc_active_target + display_source = self.slimit.slc_source if self.slimit.slc_source != "None" else self.slimit.slc_active_source if display_speed_limit > 0: self.speed_limit_last = display_speed_limit - self.speed_limit_final_last = display_speed_limit + self.slc.slc_offset + self.speed_limit_final_last = display_speed_limit + self.slimit.slc_offset elif display_source == "None": self.speed_limit_last = 0.0 self.speed_limit_final_last = 0.0 @@ -120,8 +118,8 @@ class LongitudinalPlannerIQ: self.output_v_target, self.output_a_target = targets[self.source] self.output_v_target = self._apply_force_stop(self.output_v_target, v_ego, sm, slc_apply_enabled) # envelope shaping only in Assist mode: info/warn must never change the plan - self._envelope_enabled = (slc_apply_enabled and bool(getattr(self.slc, "controller_enabled", False)) - and bool(getattr(self.slc, "mode_assist", False))) + self._envelope_enabled = (slc_apply_enabled and bool(getattr(self.slimit, "controller_enabled", False)) + and bool(getattr(self.slimit, "mode_assist", False))) return self.output_v_target, self.output_a_target def cruise_envelope(self, v_target: float, v_ego: float, t_idxs) -> np.ndarray: @@ -131,12 +129,12 @@ class LongitudinalPlannerIQ: env = np.full(len(t_idxs), max(float(v_target), 0.0)) if not getattr(self, "_envelope_enabled", False): return env - slc = getattr(self.slc, "slc", None) + slc = getattr(self.slimit, "slc", None) next_limit = float(getattr(slc, "next_speed_limit", 0.0) or 0.0) next_dist = float(getattr(slc, "next_speed_distance", 0.0) or 0.0) if next_limit <= 0.0 or next_dist <= 0.0: return env - next_target = max(next_limit + float(getattr(self.slc, "slc_offset", 0.0) or 0.0), 0.0) + next_target = max(next_limit + float(getattr(self.slimit, "slc_offset", 0.0) or 0.0), 0.0) if next_target >= env[0]: return env travel = np.maximum(v_ego, 1.0) * np.asarray(t_idxs) @@ -145,10 +143,10 @@ class LongitudinalPlannerIQ: def update(self, sm: messaging.SubMaster) -> None: self.events_iq.clear() - for event_name in getattr(self.slc, 'pending_events', []): + for event_name in getattr(self.slimit, 'pending_events', []): self.events_iq.add(event_name) self.custom_stop_distance.update() - self.e2e_alerts_helper.update(sm, self.events_iq) + self.e2e_alerts.update(sm, self.events_iq) if bool(getattr(sm["iqCarState"], "alcOverrideAlert", False)): self.events_iq.add(custom.IQOnroadEvent.EventName.steeringOverrideReengageAlc) @@ -213,8 +211,8 @@ class LongitudinalPlannerIQ: # Speed Limit speedLimit = plan_msg.speedLimit resolver = speedLimit.resolver - speed_limit = float(self.slc.slc_target if self.slc.slc_target > 0 else self.slc.slc_active_target) - speed_limit_offset = float(self.slc.slc_offset) + speed_limit = float(self.slimit.slc_target if self.slimit.slc_target > 0 else self.slimit.slc_active_target) + speed_limit_offset = float(self.slimit.slc_offset) speed_limit_final = speed_limit + speed_limit_offset if speed_limit > 0 else 0. speed_limit_valid = speed_limit > 0. speed_limit_last_valid = self.speed_limit_last > 0. @@ -230,26 +228,25 @@ class LongitudinalPlannerIQ: resolver.source = self.speed_limit_source assist = speedLimit.assist - slc_assist_state = self.slc.assist_state - assist.enabled = bool(self.slc.slc_target > 0 or self.slc.slc_unconfirmed > 0) - assist.active = self.source == LongitudinalPlanSource.speedLimitAssist and self.slc.slc_target > 0 + slc_assist_state = self.slimit.assist_state + assist.enabled = bool(self.slimit.slc_target > 0 or self.slimit.slc_unconfirmed > 0) + assist.active = self.source == LongitudinalPlanSource.speedLimitAssist and self.slimit.slc_target > 0 if slc_assist_state is not None: assist.state = slc_assist_state elif not assist.enabled: assist.state = SpeedLimitAssistState.disabled - elif self.slc.slc_unconfirmed > 0: + elif self.slimit.slc_unconfirmed > 0: assist.state = SpeedLimitAssistState.preActive elif assist.active: assist.state = SpeedLimitAssistState.active else: assist.state = SpeedLimitAssistState.inactive assist.vTarget = float(self.output_v_target if assist.active else 255.) - assist.aTarget = float(self.slc.slc_a_target if assist.active else 0.) + assist.aTarget = float(self.slimit.slc_a_target if assist.active else 0.) - # E2E Alerts e2eAlerts = plan_msg.e2eAlerts - e2eAlerts.greenLightAlert = self.e2e_alerts_helper.queue_alert - e2eAlerts.leadDepartAlert = self.e2e_alerts_helper.lead_alert + e2eAlerts.pathOpen = self.e2e_alerts.path_alert + e2eAlerts.leadPullaway = self.e2e_alerts.lead_alert valid = sm.all_checks(service_list=['carState', 'controlsState']) diff --git a/iqpilot/selfdrive/controls/lib/neural_network_feed_forward/tests/test_network.py b/iqpilot/selfdrive/controls/lib/neural_network_feed_forward/tests/test_network.py index 2d6195cff..06704488f 100644 --- a/iqpilot/selfdrive/controls/lib/neural_network_feed_forward/tests/test_network.py +++ b/iqpilot/selfdrive/controls/lib/neural_network_feed_forward/tests/test_network.py @@ -12,16 +12,40 @@ import pytest from openpilot.selfdrive.controls.lib.latcontrol_torque import NNTorqueModel from openpilot.selfdrive.controls.lib.latcontrol_torque import TORQUE_NN_MODEL_PATH +# A minimal valid NNFF model (Twilsonco format: column-vector mean/std, dense_N_W/b +# layers). Used as a fallback so the loader logic is still exercised when no trained +# models are shipped (they are removed pending retraining and re-added over time). +_SYNTHETIC_MODEL = { + "input_size": 4, + "output_size": 1, + "input_mean": [[0.0], [0.0], [0.0], [0.0]], + "input_std": [[1.0], [1.0], [1.0], [1.0]], + "layers": [ + {"dense_1_W": [[0.5, 0.5, 0.5, 0.5], [0.5, 0.5, 0.5, 0.5]], "dense_1_b": [[0.0], [0.0]], "activation": "sigmoid"}, + {"dense_2_W": [[2.0, 2.0]], "dense_2_b": [[-1.0]], "activation": "identity"}, + ], +} + MODEL_FILES = sorted(f for f in os.listdir(TORQUE_NN_MODEL_PATH) if f.endswith(".json")) -SAMPLE = [f for f in ("HYUNDAI_IONIQ_5.json", "TOYOTA_RAV4_TSS2_2022.json", "MOCK.json") if f in MODEL_FILES] \ - or MODEL_FILES[:3] +if MODEL_FILES: + _MODEL_DIR = TORQUE_NN_MODEL_PATH + _NAMES = MODEL_FILES +else: + import tempfile + _MODEL_DIR = tempfile.mkdtemp(prefix="nnff_synthetic_") + with open(os.path.join(_MODEL_DIR, "SYNTHETIC.json"), "w") as _f: + json.dump(_SYNTHETIC_MODEL, _f) + _NAMES = ["SYNTHETIC.json"] + +SAMPLE = [f for f in ("HYUNDAI_IONIQ_5.json", "TOYOTA_RAV4_TSS2_2022.json", "MOCK.json") if f in _NAMES] \ + or _NAMES[:3] def _path(name): - return os.path.join(TORQUE_NN_MODEL_PATH, name) + return os.path.join(_MODEL_DIR, name) -@pytest.mark.parametrize("name", MODEL_FILES, ids=[n[:-5] for n in MODEL_FILES]) +@pytest.mark.parametrize("name", _NAMES, ids=[n[:-5] for n in _NAMES]) def test_every_model_loads_and_is_finite(name): m = NNTorqueModel(_path(name)) assert m.input_size >= 2 diff --git a/iqpilot/selfdrive/controls/lib/neural_network_feed_forward/tests/test_nnff_assembly.py b/iqpilot/selfdrive/controls/lib/neural_network_feed_forward/tests/test_nnff_assembly.py index 09bb84f34..5c172f0b7 100644 --- a/iqpilot/selfdrive/controls/lib/neural_network_feed_forward/tests/test_nnff_assembly.py +++ b/iqpilot/selfdrive/controls/lib/neural_network_feed_forward/tests/test_nnff_assembly.py @@ -18,7 +18,12 @@ from openpilot.selfdrive.controls.lib.latcontrol_torque import NeuralNetworkFeed from openpilot.selfdrive.controls.lib.latcontrol_torque import TORQUE_NN_MODEL_PATH _REAL_MODEL = next((f for f in sorted(os.listdir(TORQUE_NN_MODEL_PATH)) - if f.endswith(".json") and f != "MOCK.json")) + if f.endswith(".json") and f != "MOCK.json"), None) + +# Models are shipped separately and re-added as retrained; with none present, +# NNFF is a no-op (falls back to stock torque FF), so the assembly tests skip. +pytestmark = pytest.mark.skipif(_REAL_MODEL is None, + reason="no NNFF models present (nuked pending retraining)") def _torque_fn(): diff --git a/iqpilot/selfdrive/controls/lib/speed_limit/__init__.py b/iqpilot/selfdrive/controls/lib/speed_limit/__init__.py deleted file mode 100644 index f8012f567..000000000 --- a/iqpilot/selfdrive/controls/lib/speed_limit/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos - -Shared speed-limit enums and helpers. The live resolver is IQSpeedLimitResolver -in speed_limit_controller.py. -""" diff --git a/iqpilot/selfdrive/iqmodeld/models/split_model_constants.py b/iqpilot/selfdrive/iqmodeld/models/split_model_constants.py index 5165d6be5..a088fe755 100644 --- a/iqpilot/selfdrive/iqmodeld/models/split_model_constants.py +++ b/iqpilot/selfdrive/iqmodeld/models/split_model_constants.py @@ -1,3 +1,4 @@ +# openpilot model I/O constants (comma.ai, MIT — see LICENSE) import numpy as np @@ -14,7 +15,7 @@ class SplitModelConstants: LEAD_T_OFFSETS = [0., 2., 4.] META_T_IDXS = [2., 4., 6., 8., 10.] - # model inputs constants + # split-model temporal / history run parameters MODEL_FREQ = 20 HISTORY_FREQ = 5 HISTORY_LEN_SECONDS = 5 diff --git a/iqpilot/selfdrive/selfdrived/events.py b/iqpilot/selfdrive/selfdrived/events.py index 04ac5d977..76d81ae9d 100644 --- a/iqpilot/selfdrive/selfdrived/events.py +++ b/iqpilot/selfdrive/selfdrived/events.py @@ -95,8 +95,17 @@ _CAMERA_LABELS = { def speed_camera_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: nav = sm['iqNavState'] - label = _CAMERA_LABELS.get(int(getattr(nav.cameraType, "raw", nav.cameraType)), "Speed Camera") + ctype = int(getattr(nav.cameraType, "raw", nav.cameraType)) + label = _CAMERA_LABELS.get(ctype, "Speed Camera") distance = float(nav.cameraDistance) + # RF (BLE/WiFi) Flock detection is a live proximity hit with no meaningful + # distance — flockd/navd flag it with distance 0 on the alpr camera type. + if ctype == int(custom.IQNavState.CameraType.alpr) and distance <= 0.0: + return Alert( + "Flock Camera Detected", + "", + AlertStatus.normal, AlertSize.small, + Priority.HIGH, VisualAlert.none, AudibleAlert.prompt, .2) if metric: dist_str = f"{distance:.0f} m" if distance < 1000.0 else f"{distance / 1000.0:.1f} km" else: diff --git a/iqpilot/ui/layouts/settings/iq_dynamic.py b/iqpilot/ui/layouts/settings/iq_dynamic.py index a3fb24215..88d5478f9 100644 --- a/iqpilot/ui/layouts/settings/iq_dynamic.py +++ b/iqpilot/ui/layouts/settings/iq_dynamic.py @@ -8,8 +8,8 @@ import pyray as rl from openpilot.common.params import Params from openpilot.selfdrive.ui.ui_state import ui_state from openpilot.system.ui.lib.multilang import tr -from openpilot.system.ui.iqpilot.widgets.list_view import IQListItem, IQToggleAction, SafeIQToggleAction -from openpilot.system.ui.iqpilot.widgets.list_view import OptionControl +from openpilot.system.ui.iqwidgets.widgets.list_view import IQListItem, IQToggleAction, SafeIQToggleAction +from openpilot.system.ui.iqwidgets.widgets.list_view import OptionControl from openpilot.system.ui.widgets import Widget from openpilot.system.ui.widgets.network import NavButton from openpilot.system.ui.widgets.scroller_tici import Scroller diff --git a/iqpilot/ui/layouts/settings/iq_panels.py b/iqpilot/ui/layouts/settings/iq_panels.py index 07a498488..0f023af6d 100644 --- a/iqpilot/ui/layouts/settings/iq_panels.py +++ b/iqpilot/ui/layouts/settings/iq_panels.py @@ -18,17 +18,17 @@ from openpilot.selfdrive.ui.layouts.settings.software import time_ago from openpilot.selfdrive.ui.ui_state import device, ui_state from openpilot.selfdrive.ui.ui_state import ui_state from openpilot.system.hardware.hw import Paths -from openpilot.system.ui.iqpilot.lib.styles import style -from openpilot.system.ui.iqpilot.lib.utils import NoElideButtonAction -from openpilot.system.ui.iqpilot.widgets.list_view import IQListItem, toggle_item -from openpilot.system.ui.iqpilot.widgets.list_view import OptionControl -from openpilot.system.ui.iqpilot.widgets.list_view import multiple_button_item, toggle_item -from openpilot.system.ui.iqpilot.widgets.list_view import option_item, toggle_item, ToggleAction -from openpilot.system.ui.iqpilot.widgets.list_view import progress_item -from openpilot.system.ui.iqpilot.widgets.list_view import toggle_item, multiple_button_item, IQListItem, IQLineSeparator -from openpilot.system.ui.iqpilot.widgets.list_view import toggle_item, option_item, IQLineSeparator -from openpilot.system.ui.iqpilot.widgets.list_view import toggle_item, simple_button_item, option_item, IQLineSeparator -from openpilot.system.ui.iqpilot.widgets.list_view import TreeFolder, TreeNode, TreeOptionDialog +from openpilot.system.ui.iqwidgets.lib.styles import style +from openpilot.system.ui.iqwidgets.lib.utils import WideButtonAction +from openpilot.system.ui.iqwidgets.widgets.list_view import IQListItem, toggle_item +from openpilot.system.ui.iqwidgets.widgets.list_view import OptionControl +from openpilot.system.ui.iqwidgets.widgets.list_view import multiple_button_item, toggle_item +from openpilot.system.ui.iqwidgets.widgets.list_view import option_item, toggle_item, ToggleAction +from openpilot.system.ui.iqwidgets.widgets.list_view import progress_item +from openpilot.system.ui.iqwidgets.widgets.list_view import toggle_item, multiple_button_item, IQListItem, IQLineSeparator +from openpilot.system.ui.iqwidgets.widgets.list_view import toggle_item, option_item, IQLineSeparator +from openpilot.system.ui.iqwidgets.widgets.list_view import toggle_item, simple_button_item, option_item, IQLineSeparator +from openpilot.system.ui.iqwidgets.widgets.list_view import PickerGroup, PickerItem, PickerDialog from openpilot.system.ui.lib.application import gui_app from openpilot.system.ui.lib.multilang import tr from openpilot.system.ui.lib.multilang import tr, tr_noop @@ -60,8 +60,8 @@ from openpilot.iqpilot.selfdrive.iqmodeld.models.runners.model_runner import CUS from openpilot.selfdrive.ui.layouts.settings import settings as OP from openpilot.selfdrive.ui.layouts.settings.toggles import TogglesLayout from openpilot.system.hardware import HARDWARE -from openpilot.system.ui.iqpilot.lib.styles import metrics -from openpilot.system.ui.iqpilot.widgets.list_view import ( +from openpilot.system.ui.iqwidgets.lib.styles import metrics +from openpilot.system.ui.iqwidgets.widgets.list_view import ( option_item as option_item, multiple_button_item as multiple_button_item, button_item as button_item, @@ -69,11 +69,11 @@ from openpilot.system.ui.iqpilot.widgets.list_view import ( NavSectionButton, Spacer, ) -from openpilot.system.ui.iqpilot.widgets.list_view import IQListItem -from openpilot.system.ui.iqpilot.widgets.list_view import IQListItem, IQMultipleButtonAction, IQToggleAction, IQLineSeparator -from openpilot.system.ui.iqpilot.widgets.list_view import button_item, toggle_item -from openpilot.system.ui.iqpilot.widgets.list_view import NoticeModal -from openpilot.system.ui.iqpilot.widgets.list_view import TreeOptionDialog, TreeNode, TreeFolder +from openpilot.system.ui.iqwidgets.widgets.list_view import IQListItem +from openpilot.system.ui.iqwidgets.widgets.list_view import IQListItem, IQMultipleButtonAction, IQToggleAction, IQLineSeparator +from openpilot.system.ui.iqwidgets.widgets.list_view import button_item, toggle_item +from openpilot.system.ui.iqwidgets.widgets.list_view import NoticeModal +from openpilot.system.ui.iqwidgets.widgets.list_view import PickerDialog, PickerItem, PickerGroup from openpilot.system.ui.lib.application import gui_app, MousePos from openpilot.system.ui.lib.multilang import tr_noop from openpilot.system.ui.lib.text_measure import measure_text_cached @@ -96,9 +96,9 @@ from iqdbc.car.hyundai.values import CAR, CANFD_UNSUPPORTED_LONGITUDINAL_CAR, UN from iqdbc.car.subaru.values import CAR, SubaruFlags from iqdbc.car.volkswagen.values import CAR, VolkswagenFlags from openpilot.common.basedir import BASEDIR -from openpilot.system.ui.iqpilot.lib.styles import ink -from openpilot.system.ui.iqpilot.widgets.list_view import multiple_button_item -from openpilot.system.ui.iqpilot.widgets.list_view import toggle_item +from openpilot.system.ui.iqwidgets.lib.styles import ink +from openpilot.system.ui.iqwidgets.widgets.list_view import multiple_button_item +from openpilot.system.ui.iqwidgets.widgets.list_view import toggle_item from openpilot.system.ui.lib.application import gui_app, FontWeight from openpilot.system.ui.widgets.list_view import ButtonAction import json @@ -116,9 +116,9 @@ def _fmt_seconds(value) -> str: def onroad_brightness_label(val) -> str: if val == OnroadBrightness.AUTO: - return tr("Auto (Default)") + return tr("Auto") if val == OnroadBrightness.AUTO_DARK: - return tr("Auto (Dark)") + return tr("Auto — Dim") return f"{(val - 1) * 5} %" @@ -140,17 +140,17 @@ class DisplayLayout(Widget): label_callback=lambda v: tr("Default") if v == 0 else f"{v} %", inline=True, ) self._onroad_brightness_row = option_item( - param="OnroadScreenOffBrightness", title=lambda: tr("Onroad Brightness"), description="", + param="OnroadScreenOffBrightness", title=lambda: tr("Driving Brightness"), description="", min_value=0, max_value=21, value_change_step=1, label_callback=onroad_brightness_label, inline=True, ) self._dim_delay_row = option_item( - param="OnroadScreenOffTimer", title=lambda: tr("Onroad Brightness Delay"), description="", + param="OnroadScreenOffTimer", title=lambda: tr("Dim Delay"), description="", min_value=0, max_value=11, value_change_step=1, value_map=ONROAD_BRIGHTNESS_TIMER_VALUES, label_callback=_fmt_seconds, inline=True, ) self._idle_close_row = option_item( - param="InteractivityTimeout", title=lambda: tr("Interactivity Timeout"), + param="InteractivityTimeout", title=lambda: tr("Auto-Close Settings"), description=lambda: tr("How long the settings screen may sit untouched before it closes itself."), min_value=0, max_value=120, value_change_step=10, label_callback=lambda v: tr("Default") if not v else _fmt_seconds(v), inline=True, @@ -195,7 +195,7 @@ CHEVRON_INFO_DESCRIPTION = { # param key -> (title fn, description fn) _HUD_TOGGLES = { "BlindSpot": ( - lambda: tr("Show Blind Spot Warnings"), + lambda: tr("Blind Spot Alerts"), lambda: tr("Flashes a side warning whenever the car reports something sitting in your blind spot (BSM-equipped cars only)."), ), "IQExpandedStatus": ( @@ -203,20 +203,20 @@ _HUD_TOGGLES = { lambda: tr("Bring back the classic UI's wide offroad status strip: temperature, vehicle, and Konn3kt state at a glance."), ), "TorqueBar": ( - lambda: tr("Steering Arc"), + lambda: tr("Steering Effort Arc"), lambda: tr("Trace an arc over the road view showing how much steering IQ.Pilot is applying while lateral control runs."), ), "RoadNameToggle": ( - lambda: tr("Display Road Name"), + lambda: tr("Road Name Overlay"), lambda: tr("Show the current road's name over the driving view." "
Requires offline map data for your region to be installed."), ), "ShowTurnSignals": ( - lambda: tr("Display Turn Signals"), + lambda: tr("Blinker Indicators"), lambda: tr("Mirror the car's blinkers as arrows on the driving screen."), ), "RocketFuel": ( - lambda: tr("Real-time Acceleration Bar"), + lambda: tr("Acceleration Meter"), lambda: tr("Draw a bar along the left edge tracking measured acceleration and braking — what the car is actually " "doing right now, not the planner's request."), ), @@ -240,7 +240,7 @@ class VisualsLayout(Widget): } self._chevron_info = multiple_button_item( - title=lambda: tr("Display Metrics Below Chevron"), + title=lambda: tr("Lead Vehicle Readouts"), description="", buttons=[lambda: tr("Off"), lambda: tr("Distance"), lambda: tr("Speed"), lambda: tr("Time"), lambda: tr("All")], param="ChevronInfo", @@ -319,7 +319,7 @@ class IQNetworkUI(NetworkUI): def _set_phase(self, phase: ScanPhase): self._phase = phase running = phase == ScanPhase.RUNNING - self.scan_button.set_text(tr("Scanning...") if running else tr("Scan")) + self.scan_button.set_text(tr("Searching...") if running else tr("Scan")) self.scan_button.set_enabled(not running) # keep the manager's spinner in step with the button, not just the quick scan call self._wifi_manager._scanning = running @@ -397,7 +397,7 @@ class IQMapsLayout(Widget): self._scroller = Scroller(self.items, line_separator=True, spacing=0) def _build_rows(self): - self._mapd_version = text_item(tr("Mapd Version"), lambda: ui_state.params.get("MapdVersion") or "Loading...") + self._mapd_version = text_item(tr("Routing Engine Version"), lambda: ui_state.params.get("MapdVersion") or "Loading...") self._online_maps_toggle = toggle_item( tr("Online On-Screen Maps"), tr("Pull live Mapbox tiles for the on-screen map whenever the device has internet."), @@ -409,15 +409,15 @@ class IQMapsLayout(Widget): "take over the moment connectivity drops. Tiles come down with your selected region."), param="OfflineOSMaps", ) - self._delete_maps_btn = IQListItem(tr("Downloaded Maps"), action_item=NoElideButtonAction(tr("DELETE"), enabled=True), + self._delete_maps_btn = IQListItem(tr("Stored Maps"), action_item=WideButtonAction(tr("DELETE"), enabled=True), callback=self._confirm_wipe) - self._progress = progress_item(tr("Downloading Map")) + self._progress = progress_item(tr("Fetching Map")) self._tile_progress = progress_item(tr("Downloading Map Tiles")) - self._update_btn = IQListItem(tr("Database Update"), action_item=NoElideButtonAction(tr("CHECK"), enabled=True), + self._update_btn = IQListItem(tr("Map Database"), action_item=WideButtonAction(tr("CHECK"), enabled=True), callback=self._confirm_db_refresh) - self._country_btn = IQListItem(tr("Country"), action_item=NoElideButtonAction(tr("SELECT"), enabled=True), + self._country_btn = IQListItem(tr("Country"), action_item=WideButtonAction(tr("SELECT"), enabled=True), callback=lambda: self._open_region_picker("Country")) - self._state_btn = IQListItem(tr("State"), action_item=NoElideButtonAction(tr("SELECT"), enabled=True), + self._state_btn = IQListItem(tr("State"), action_item=WideButtonAction(tr("SELECT"), enabled=True), callback=lambda: self._open_region_picker("State")) self.items = [self._mapd_version, self._online_maps_toggle, self._offline_maps_toggle, self._delete_maps_btn, @@ -436,7 +436,7 @@ class IQMapsLayout(Widget): def _start_wipe(self): self._delete_maps_btn.action_item.set_enabled(False) - self._delete_maps_btn.action_item.set_text(tr("DELETING...")) + self._delete_maps_btn.action_item.set_text(tr("REMOVING...")) threading.Thread(target=self._wipe_worker, daemon=True).start() def _wipe_worker(self): @@ -475,7 +475,7 @@ class IQMapsLayout(Widget): def _open_region_picker(self, region_type): btn = self._country_btn if region_type == "Country" else self._state_btn btn.action_item.set_enabled(False) - btn.action_item.set_text(tr("FETCHING...")) + btn.action_item.set_text(tr("LOADING...")) threading.Thread(target=self._region_picker_worker, args=(region_type, btn), daemon=True).start() @staticmethod @@ -483,7 +483,7 @@ class IQMapsLayout(Widget): url = _BOUNDS_BASE_URL + ("nation_bounding_boxes.json" if region_type == "Country" else "us_states_bounding_boxes.json") try: data = requests.get(url, timeout=10).json() - return sorted((TreeNode(ref=k, data={'display_name': v['full_name']}) for k, v in data.items()), + return sorted((PickerItem(ref=k, data={'display_name': v['full_name']}) for k, v in data.items()), key=lambda n: n.data['display_name']) except Exception: return [] @@ -491,14 +491,14 @@ class IQMapsLayout(Widget): def _region_picker_worker(self, region_type, btn): locations = self._fetch_regions(region_type) if region_type == "State": - locations.insert(0, TreeNode(ref="All", data={'display_name': tr("All states (~6.0 GB)")})) + locations.insert(0, PickerItem(ref="All", data={'display_name': tr("All states (~6.0 GB)")})) btn.action_item.set_enabled(True) btn.action_item.set_text(tr("SELECT")) key = "OsmLocation" if region_type == "Country" else "OsmState" current = ui_state.params.get(f"{key}Name") or "" - dialog = TreeOptionDialog(tr(f"Select {region_type}"), [TreeFolder(folder="", nodes=locations)], + dialog = PickerDialog(tr(f"Select {region_type}"), [PickerGroup(folder="", nodes=locations)], current_ref=current, search_prompt=tr("Perform a search")) done = lambda res: self._on_region_picked(region_type, locations, key, res, dialog.selection_ref) # noqa: E731 dialog.on_exit = done @@ -554,14 +554,14 @@ class IQMapsLayout(Widget): if failed: self._current_percent = 0.0 - bar_text, btn_text = "0% - Downloading Maps", tr("Error: Invalid download. Retry.") + bar_text, btn_text = "0% - Downloading Maps", tr("Download failed — try again.") elif total > 0 and downloading: self._current_percent = max(0.0, min(100.0, done / total * 100.0)) pct = int(self._current_percent) bar_text, btn_text = f"{pct}% - Downloading Maps", f"{done}/{total} ({pct}%)" else: self._current_percent = 0.0 - bar_text, btn_text = "0% - Downloading Maps", tr("Downloading Maps...") + bar_text, btn_text = "0% - Downloading Maps", tr("Fetching Maps...") self._progress.action_item.update(self._current_percent, bar_text, show_progress=total > 0 and downloading and not failed) @@ -599,7 +599,7 @@ class IQMapsLayout(Widget): dt = datetime.datetime.fromtimestamp(float(ts), tz=datetime.UTC) except (ValueError, TypeError): dt = None - self._update_btn.action_item.set_value(tr("Last checked {}").format(time_ago(dt))) + self._update_btn.action_item.set_value(tr("Checked {}").format(time_ago(dt))) def _update_state(self): now = monotonic() @@ -618,7 +618,7 @@ class IQMapsLayout(Widget): _TIMER_LABELS = { -1: lambda: tr("Off"), 0: lambda: tr("Nudge"), - 1: lambda: tr("Nudgeless"), + 1: lambda: tr("No Nudge"), 2: lambda: f"0.5 {tr('s')}", 3: lambda: f"1 {tr('s')}", 4: lambda: f"2 {tr('s')}", @@ -635,8 +635,8 @@ class LaneChangeSettingsLayout(Widget): def _build_rows(self): self._lane_change_timer = option_item( - title=lambda: tr("Auto Lane Change by Blinker"), - param="AutoLaneChangeTimer", + title=lambda: tr("Blinker-Initiated Lane Change"), + param="IQLaneChangeTimer", description=lambda: tr("Delay before a blinker-triggered lane change starts on its own — no wheel nudge " "needed once a delay is set (default is Nudge).
Use the blinker for this only " "when traffic and the road actually allow the maneuver."), @@ -644,8 +644,8 @@ class LaneChangeSettingsLayout(Widget): label_callback=lambda x: _TIMER_LABELS[int(x)](), ) self._bsm_delay = toggle_item( - param="AutoLaneChangeBsmDelay", - title=lambda: tr("Auto Lane Change: Delay with Blind Spot"), + param="IQLaneChangeBsmDelay", + title=lambda: tr("Hold Lane Change for Blind Spot"), description=lambda: tr("Hold the automatic lane change while blind spot monitoring reports a car in the " "target lane, releasing it once the lane is clear."), ) @@ -667,9 +667,9 @@ class LaneChangeSettingsLayout(Widget): def _update_state(self): super()._update_state() has_bsm = bool(ui_state.CP and ui_state.CP.enableBsm) - if not has_bsm and ui_state.params.get_bool("AutoLaneChangeBsmDelay"): - ui_state.params.remove("AutoLaneChangeBsmDelay") - timer_armed = ui_state.params.get("AutoLaneChangeTimer", return_default=True) > AutoLaneChangeMode.NUDGE + if not has_bsm and ui_state.params.get_bool("IQLaneChangeBsmDelay"): + ui_state.params.remove("IQLaneChangeBsmDelay") + timer_armed = ui_state.params.get("IQLaneChangeTimer", return_default=True) > AutoLaneChangeMode.NUDGE self._bsm_delay.action_item.set_enabled(has_bsm and timer_armed) def _render(self, rect): @@ -685,7 +685,7 @@ class LaneChangeSettingsLayout(Widget): # (segment label, explanation) — order matches the AolSteeringMode param values SAB_BRAKE_RESPONSE_OPTIONS = [ - (tr("Remain Active"), tr_noop("Remain Active: braking never interrupts steering assistance.")), + (tr("Stay Engaged"), tr_noop("Remain Active: braking never interrupts steering assistance.")), (tr("Standby"), tr_noop("Standby: braking parks steering assistance; it rejoins once you're off the pedal.")), (tr("Disengage"), tr_noop("Disengage: braking shuts steering assistance off entirely.")), ] @@ -829,7 +829,7 @@ class SteeringLayout(Widget): items = self._initialize_items() self._scroller = Scroller(items, line_separator=False, spacing=0) - for ctrl, key in [(self._lane_turn_value_control, "IQLaneTurnValue"), (self._delay_control, "LagdToggleDelay")]: + for ctrl, key in [(self._lane_turn_value_control, "IQLaneTurnValue"), (self._delay_control, "IQSoftwareSteerDelay")]: ctrl.action_item.set_value(int(float(ui_state.params.get(key, return_default=True)) * 100)) def _initialize_items(self): @@ -849,7 +849,7 @@ class SteeringLayout(Widget): callback=lambda: self._set_current_panel(PanelType.SAB) ) self._lane_change_settings_button = simple_button_item( - button_text=lambda: tr("Customize Lane Change"), + button_text=lambda: tr("Lane Change Options"), button_width=800, callback=lambda: self._set_current_panel(PanelType.LANE_CHANGE) ) @@ -859,7 +859,7 @@ class SteeringLayout(Widget): description="" ) self._lane_turn_desire_toggle = toggle_item( - tr("Use Lane Turn Desires"), + tr("Low-Speed Turn Planning"), tr("If you're driving at 20 mph (32 km/h) or below and have your blinker on," " the car will plan a turn in that direction at the nearest drivable path." " This prevents situations (like at red lights) where the car might plan the wrong turn direction."), @@ -872,10 +872,10 @@ class SteeringLayout(Widget): lambda v: f"{int(round(v * (CV.MPH_TO_KPH if ui_state.is_metric else 1)))}" f" {'km/h' if ui_state.is_metric else 'mph'}" ) - self._lagd_toggle = toggle_item(tr("Live Learning Steer Delay"), "", param="LagdToggle") + self._steer_delay_toggle = toggle_item(tr("Self-Tuning Steer Delay"), "", param="IQLiveSteerDelay") self._delay_control = option_item( - tr("Adjust Software Delay"), "LagdToggleDelay", 5, 50, - tr("Adjust the fixed software delay added to steer actuator delay when Live Learning Steer Delay is turned off. The default software delay value is 0.2 s."), + tr("Manual Delay Offset"), "IQSoftwareSteerDelay", 5, 50, + tr("How much lead time to add on top of the car's own steering rack delay while self-tuning is off. Default is 0.2 s."), 1, None, True, "", style.BUTTON_ACTION_WIDTH, None, True, lambda v: f"{float(v):.2f}s" ) @@ -890,7 +890,7 @@ class SteeringLayout(Widget): self._lane_turn_desire_toggle, self._lane_turn_value_control, IQLineSeparator(40), - self._lagd_toggle, + self._steer_delay_toggle, self._delay_control, ] return items @@ -919,22 +919,23 @@ class SteeringLayout(Widget): self._nnff_toggle.action_item.set_enabled(ui_state.is_offroad() and steering_supported) turn_desire = ui_state.params.get_bool("IQLaneTurnDesire") - live_delay = ui_state.params.get_bool("LagdToggle") + live_delay = ui_state.params.get_bool("IQLiveSteerDelay") self._lane_turn_desire_toggle.action_item.set_state(turn_desire) self._lane_turn_value_control.set_visible(turn_desire) - self._lagd_toggle.action_item.set_state(live_delay) + self._steer_delay_toggle.action_item.set_state(live_delay) self._delay_control.set_visible(not live_delay) new_step = int(round(100 / CV.MPH_TO_KPH)) if ui_state.is_metric else 100 if self._lane_turn_value_control.action_item.value_change_step != new_step: self._lane_turn_value_control.action_item.value_change_step = new_step - lagd_desc = tr("Enable this for the car to learn and adapt its steering response time. Disable to use a fixed steering response time.") + delay_desc = tr("Let IQ.Pilot measure how long your steering takes to respond and keep that figure up to date. " + "Switch it off to pin the timing yourself.") if live_delay: - lagd_desc += f"
{tr('Live Steer Delay:')} {ui_state.sm['liveDelay'].lateralDelay:.3f} s" + delay_desc += f"
{tr('Measured:')} {ui_state.sm['liveDelay'].lateralDelay:.3f} s" elif ui_state.CP: - sw = float(ui_state.params.get("LagdToggleDelay", "0.2")) + sw = float(ui_state.params.get("IQSoftwareSteerDelay", "0.2")) cp = ui_state.CP.steerActuatorDelay - lagd_desc += f"
{tr('Actuator Delay:')} {cp:.2f} s + {tr('Software Delay:')} {sw:.2f} s = {tr('Total Delay:')} {cp + sw:.2f} s" - self._lagd_toggle.set_description(lagd_desc) + delay_desc += f"
{tr('Rack:')} {cp:.2f} s + {tr('Offset:')} {sw:.2f} s = {tr('Total:')} {cp + sw:.2f} s" + self._steer_delay_toggle.set_description(delay_desc) def _render(self, rect): if self._current_panel == PanelType.LANE_CHANGE: @@ -1176,7 +1177,7 @@ class IQDeveloperLayout(DeveloperLayout): self._scroller.add_widget(item) def _initialize_items(self): - self.error_log_btn = button_item(tr("Error Log"), tr("VIEW"), tr("View the error log for IQ.Pilot crashes."), callback=self._on_error_log_clicked) + self.error_log_btn = button_item(tr("Crash Log"), tr("VIEW"), tr("View the error log for IQ.Pilot crashes."), callback=self._on_error_log_clicked) self.items: list = [self.error_log_btn] @@ -1187,7 +1188,7 @@ class IQDeveloperLayout(DeveloperLayout): def _on_error_log_closed(self, result, log_exists): if result == DialogResult.CONFIRM and log_exists: - dialog2 = ConfirmDialog(tr("Would you like to delete this log?"), tr("Yes"), tr("No"), rich=False) + dialog2 = ConfirmDialog(tr("Delete this log?"), tr("Yes"), tr("No"), rich=False) gui_app.set_modal_overlay(dialog2, callback=self._on_delete_confirm) def _on_error_log_clicked(self): @@ -1210,16 +1211,16 @@ class IQDeveloperLayout(DeveloperLayout): UPDATES_DESCRIPTIONS = { 'disable_updates_offroad': tr_noop( - "When enabled, automatic software updates will be off.
This requires a reboot to take effect." + "Turns off over-the-air update checks entirely.
Reboot for this to take effect." ), 'disable_updates_onroad': tr_noop( - "Please enable \"Always Offroad\" mode or turn off the vehicle to adjust these toggles." + "Put the device in Always Offroad, or shut the car down, before touching these." ), 'install_mode_offroad': tr_noop( - "Choose whether updates only download and wait for confirmation, or download and install automatically after they are ready." + "Pick whether a ready update just waits for your go-ahead, or downloads and installs on its own." ), 'install_mode_onroad': tr_noop( - "Please enable \"Always Offroad\" mode or turn off the vehicle to adjust update install behavior." + "Put the device in Always Offroad, or shut the car down, before changing how updates install." ) } @@ -1239,7 +1240,7 @@ class IQSoftwareLayout(SoftwareLayout): def __init__(self): super().__init__() self.disable_updates_toggle = toggle_item( - lambda: tr("Disable Updates"), + lambda: tr("Pause Updates"), description="", initial_state=ui_state.params.get_bool("DisableUpdates"), callback=self._on_disable_updates_toggled, @@ -1272,7 +1273,7 @@ class IQSoftwareLayout(SoftwareLayout): self.disable_updates_toggle.action_item.set_state(ui_state.params.get_bool("DisableUpdates")) def _on_disable_updates_toggled(self, enabled): - dialog = ConfirmDialog(tr("System reboot required for changes to take effect. Reboot now?"), tr("Reboot")) + dialog = ConfirmDialog(tr("This needs a reboot to apply. Restart now?"), tr("Reboot")) gui_app.set_modal_overlay(dialog, callback=self._handle_reboot) def _on_change_install_mode(self): @@ -1318,11 +1319,11 @@ class IQSoftwareLayout(SoftwareLayout): # single flat list: pinned branches first, then the rest alphabetically. # prebuilt ("-prebuilt") branches are internal build outputs, not user-selectable. - pinned_nodes = [TreeNode(b, {'display_name': b}) for b in top_level_branches if b in branches] - other_nodes = [TreeNode(b, {'display_name': b}) for b in sorted(branches) + pinned_nodes = [PickerItem(b, {'display_name': b}) for b in top_level_branches if b in branches] + other_nodes = [PickerItem(b, {'display_name': b}) for b in sorted(branches) if b not in top_level_branches and not b.endswith("-prebuilt")] - folders = [TreeFolder("", pinned_nodes + other_nodes)] + folders = [PickerGroup("", pinned_nodes + other_nodes)] def _on_branch_selected(result): if result == DialogResult.CONFIRM and self._branch_dialog is not None: @@ -1333,7 +1334,7 @@ class IQSoftwareLayout(SoftwareLayout): os.system("pkill -SIGUSR1 -f system.updated.updated") self._branch_dialog = None - self._branch_dialog = TreeOptionDialog(tr("Select a branch"), folders, current_target, "", + self._branch_dialog = PickerDialog(tr("Select a branch"), folders, current_target, "", on_exit=_on_branch_selected) gui_app.set_modal_overlay(self._branch_dialog, callback=_on_branch_selected) @@ -1387,12 +1388,12 @@ class IQDeviceLayout(DeviceLayout): DeviceLayout._initialize_items(self) # Using dual button with no right button for better alignment - self._always_offroad_btn = self._left_button(lambda: tr("Enable Always Offroad"), self._handle_always_offroad) + self._always_offroad_btn = self._left_button(lambda: tr("Force Offroad Mode"), self._handle_always_offroad) self._force_onroad_btn = self._left_button(lambda: tr("Force On-Road (10 min)"), self._handle_force_onroad) self._max_time_offroad = option_item( - title=lambda: tr("Max Time Offroad"), - description=lambda: tr("Device will automatically shutdown after set time once the engine is turned off.\n(30h is the default)"), + title=lambda: tr("Offroad Shutdown Timer"), + description=lambda: tr("Powers the device down once it has sat this long with the engine off.\n(30h by default)"), param="MaxTimeOffroad", min_value=0, max_value=11, @@ -1408,7 +1409,7 @@ class IQDeviceLayout(DeviceLayout): ) self._device_wake_mode = multiple_button_item( - title=lambda: tr("Wake Up Behavior"), + title=lambda: tr("Boot State"), description=self.wake_mode_description, param="DeviceBootMode", buttons=[lambda: tr("Default"), lambda: tr("Offroad")], @@ -1418,8 +1419,8 @@ class IQDeviceLayout(DeviceLayout): ) self._change_language_btn = button_item(lambda: tr("Change Language"), lambda: tr("CHANGE"), callback=self._show_language_dialog) - # Quiet Mode moved to the settings-hub top bar (bell bubble); this is just the dcam preview now. - self._driver_camera_btn = button_item(lambda: tr("Driver Camera Preview"), lambda: tr("PREVIEW"), + # Silent Mode moved to the settings-hub top bar (bell bubble); this is just the dcam preview now. + self._driver_camera_btn = button_item(lambda: tr("Driver Camera Check"), lambda: tr("PREVIEW"), callback=self._show_driver_camera) self._reg_and_training = dual_button_item( @@ -1431,9 +1432,9 @@ class IQDeviceLayout(DeviceLayout): self._reg_and_training.action_item.right_button.set_button_style(ButtonStyle.NORMAL) self._onroad_uploads_and_reset_settings = dual_button_item( - left_text=lambda: tr("Onroad Uploads"), + left_text=lambda: tr("Upload While Driving"), left_callback=lambda: ui_state.params.put_bool("OnroadUploads", not ui_state.params.get_bool("OnroadUploads")), - right_text=lambda: tr("Reset Settings"), + right_text=lambda: tr("Restore Defaults"), right_callback=self._reset_settings ) @@ -1505,9 +1506,9 @@ class IQDeviceLayout(DeviceLayout): @staticmethod def wake_mode_description() -> str: - def_str = tr("Default: Device will boot/wake-up normally & will be ready to engage.") - offrd_str = tr("Offroad: Device will be in Always Offroad mode after boot/wake-up.") - header = tr("Controls state of the device after boot/sleep.") + def_str = tr("Default: comes up ready to drive, engagement available straight away.") + offrd_str = tr("Offroad: lands in Always Offroad every time it boots or wakes.") + header = tr("Sets which state the device settles into after a boot or a wake from sleep.") return f"{header}\n\n{def_str}\n{offrd_str}" @@ -1522,7 +1523,7 @@ class IQDeviceLayout(DeviceLayout): def _second_confirm(result: int): if result == DialogResult.CONFIRM: gui_app.set_modal_overlay(ConfirmDialog( - text=tr("The reset cannot be undone. You have been warned."), + text=tr("There's no undo once this runs — last chance to back out."), confirm_text=tr("Confirm") ), callback=_do_reset) @@ -1534,18 +1535,18 @@ class IQDeviceLayout(DeviceLayout): @staticmethod def _handle_always_offroad(): if ui_state.engaged: - gui_app.set_modal_overlay(alert_dialog(tr("Disengage to Enter Always Offroad Mode"))) + gui_app.set_modal_overlay(alert_dialog(tr("Disengage before forcing offroad"))) return - _offroad_mode_state = ui_state.params.get_bool("OffroadMode") - _offroad_mode_str = tr("Are you sure you want to exit Always Offroad mode?") if _offroad_mode_state else \ - tr("Are you sure you want to enter Always Offroad mode?") + _offroad_mode_state = ui_state.params.get_bool("IQAlwaysOffroad") + _offroad_mode_str = tr("Leave Always Offroad mode now?") if _offroad_mode_state else \ + tr("Switch the device into Always Offroad mode?") def _set_always_offroad(result: int): if result == DialogResult.CONFIRM and not ui_state.engaged: if _offroad_mode_state: ui_state.params.put(FORCE_ONROAD_PARAM, 0) - ui_state.params.put_bool("OffroadMode", not _offroad_mode_state) + ui_state.params.put_bool("IQAlwaysOffroad", not _offroad_mode_state) gui_app.set_modal_overlay(ConfirmDialog(_offroad_mode_str, tr("Confirm")), callback=lambda result: _set_always_offroad(result)) @@ -1570,14 +1571,14 @@ class IQDeviceLayout(DeviceLayout): def _set_force_onroad(result: int): if result == DialogResult.CONFIRM and not ui_state.engaged: # Force On-Road relies on Always Offroad being active so expiry returns to offroad. - ui_state.params.put_bool("OffroadMode", True) + ui_state.params.put_bool("IQAlwaysOffroad", True) ui_state.params.put(FORCE_ONROAD_PARAM, int(time.time()) + FORCE_ONROAD_DURATION_SEC) gui_app.set_modal_overlay(ConfirmDialog(prompt, tr("Confirm")), callback=_set_force_onroad) @staticmethod def _update_max_time_offroad_label(value: int) -> str: - label = tr("Always On") if value == 0 else f"{value}" + tr("m") if value < 60 else f"{value // 60}" + tr("h") + label = tr("Never Sleep") if value == 0 else f"{value}" + tr("m") if value < 60 else f"{value // 60}" + tr("h") label += tr(" (Default)") if value == 1800 else "" return label @@ -1585,13 +1586,13 @@ class IQDeviceLayout(DeviceLayout): super()._update_state() # Handle Always Offroad button - always_offroad = ui_state.params.get_bool("OffroadMode") + always_offroad = ui_state.params.get_bool("IQAlwaysOffroad") now = int(time.time()) force_onroad_until = ui_state.params.get(FORCE_ONROAD_PARAM, return_default=True) force_onroad_active = force_onroad_until > now # Text & Color - offroad_mode_btn_text = tr("Exit Always Offroad") if always_offroad else tr("Enable Always Offroad") + offroad_mode_btn_text = tr("Exit Offroad Mode") if always_offroad else tr("Force Offroad Mode") offroad_mode_btn_style = ButtonStyle.PRIMARY if always_offroad else ButtonStyle.DANGER self._always_offroad_btn.action_item.left_button.set_text(offroad_mode_btn_text) self._always_offroad_btn.action_item.left_button.set_button_style(offroad_mode_btn_style) @@ -1666,7 +1667,7 @@ class IQDeviceLayout(DeviceLayout): # ===== models ===== if gui_app.iqpilot_ui(): - from openpilot.system.ui.iqpilot.widgets.list_view import button_item as button_item + from openpilot.system.ui.iqwidgets.widgets.list_view import button_item as button_item _ACTIVE_BUNDLE_KEY = "ModelManager_ActiveBundle" _DOWNLOAD_INDEX_KEY = "ModelManager_DownloadIndex" @@ -1691,27 +1692,27 @@ class ModelsLayout(Widget): def _initialize_items(self): self.current_model_item = IQListItem( - title=tr("Current Model"), + title=tr("Active Model"), description="", - action_item=NoElideButtonAction(tr("SELECT")), + action_item=WideButtonAction(tr("SELECT")), callback=self._handle_current_model_clicked ) - self.supercombo_label = progress_item(tr("Driving Model")) - self.vision_label = progress_item(tr("Vision Model")) - self.policy_label = progress_item(tr("Policy Model")) + self.supercombo_label = progress_item(tr("Combined Model")) + self.vision_label = progress_item(tr("Vision Weights")) + self.policy_label = progress_item(tr("Policy Weights")) - self.refresh_item = button_item(tr("Refresh Model List"), tr("REFRESH"), "", self._on_refresh_models) + self.refresh_item = button_item(tr("Reload Model List"), tr("REFRESH"), "", self._on_refresh_models) self.clear_cache_item = IQListItem( - title=tr("Clear Model Cache"), + title=tr("Purge Model Cache"), description="", - action_item=NoElideButtonAction(tr("CLEAR")), + action_item=WideButtonAction(tr("CLEAR")), callback=self._clear_cache ) self.redownload_item = button_item(tr("Redownload Current Model"), tr("REDOWNLOAD"), "", self._redownload_model) - self.cancel_download_item = button_item(tr("Cancel Download"), tr("Cancel"), "", self._cancel_model_request) + self.cancel_download_item = button_item(tr("Stop Download"), tr("Cancel"), "", self._cancel_model_request) self.items = [self.current_model_item, self.cancel_download_item, self.supercombo_label, self.vision_label, self.policy_label, self.redownload_item, self.refresh_item, self.clear_cache_item] @@ -1937,7 +1938,7 @@ class ModelsLayout(Widget): @staticmethod def _bundle_to_node(bundle): - return TreeNode(bundle.ref, {'display_name': bundle.displayName, 'short_name': bundle.internalName}) + return PickerItem(bundle.ref, {'display_name': bundle.displayName, 'short_name': bundle.internalName}) def _get_folders(self, favorites): bundles = self.model_manager.availableBundles @@ -1945,14 +1946,14 @@ class ModelsLayout(Widget): for bundle in bundles: folders.setdefault(next((ov_ride.value for ov_ride in bundle.overrides if ov_ride.key == "folder"), ""), []).append(bundle) - folders_list = [TreeFolder("", [TreeNode("Default", {'display_name': tr("Default (CD210)"), 'short_name': "Default"})])] + folders_list = [PickerGroup("", [PickerItem("Default", {'display_name': tr("Default (CD210)"), 'short_name': "Default"})])] for folder, folder_bundles in sorted(folders.items(), key=lambda x: max((bundle.index for bundle in x[1]), default=-1), reverse=True): folder_bundles.sort(key=lambda bundle: bundle.index, reverse=True) name = folder + (f" - (Updated: {m.group(1)})" if folder_bundles and (m := re.search(r'\(([^)]*)\)[^(]*$', folder_bundles[0].displayName)) else "") - folders_list.append(TreeFolder(name, [self._bundle_to_node(bundle) for bundle in folder_bundles])) + folders_list.append(PickerGroup(name, [self._bundle_to_node(bundle) for bundle in folder_bundles])) if favorites and (fav_bundles := [bundle for bundle in bundles if bundle.ref in favorites]): - folders_list.insert(1, TreeFolder("Favorites", [self._bundle_to_node(bundle) for bundle in fav_bundles])) + folders_list.insert(1, PickerGroup("Favorites", [self._bundle_to_node(bundle) for bundle in fav_bundles])) return folders_list def _handle_current_model_clicked(self): @@ -1961,7 +1962,7 @@ class ModelsLayout(Widget): folders_list = self._get_folders(favorites) active_ref = self.model_manager.activeBundle.ref if self._has_active_bundle_param() and self.model_manager.activeBundle else "Default" - self.model_dialog = TreeOptionDialog(tr("Select a Model"), folders_list, active_ref, "ModelManager_Favs", + self.model_dialog = PickerDialog(tr("Choose a Model"), folders_list, active_ref, "ModelManager_Favs", get_folders_fn=self._get_folders, on_exit=self._on_model_selected) gui_app.set_modal_overlay(self.model_dialog, callback=self._on_model_selected) @@ -2006,7 +2007,7 @@ class ModelsLayout(Widget): if not ui_state.is_offroad(): self.current_model_item.action_item.set_enabled(False) - self.current_model_item.set_description(tr("Only available when vehicle is off, or always offroad mode is on")) + self.current_model_item.set_description(tr("Reachable only with the car switched off or Always Offroad turned on.")) else: self.current_model_item.action_item.set_enabled(True) self.current_model_item.set_description("") @@ -2164,7 +2165,7 @@ class IQSettingsLayout(OP.SettingsLayout): # ===== vehicle_brands_base ===== -class BrandSettings: +class BrandPanel: """Per-brand extra settings rows; brands without any simply don't register.""" def __init__(self): @@ -2183,12 +2184,12 @@ _TUNING_BLURBS = ( ) -class HyundaiSettings(BrandSettings): +class HyundaiSettings(BrandPanel): def __init__(self): super().__init__() self.alpha_long_available = False self.longitudinal_tuning_item = multiple_button_item( - tr("Custom Longitudinal Tuning"), "", + tr("Longitudinal Tune Profile"), "", [tr("Off"), tr("Dynamic"), tr("Predictive")], button_width=300, param="HyundaiLongitudinalTuning", inline=False, callback=lambda index: ui_state.params.put("HyundaiLongitudinalTuning", index)) @@ -2226,14 +2227,14 @@ class HyundaiSettings(BrandSettings): _UNSUPPORTED_FLAGS = SubaruFlags.GLOBAL_GEN2 | SubaruFlags.HYBRID -class SubaruSettings(BrandSettings): +class SubaruSettings(BrandPanel): def __init__(self): super().__init__() self._supported = False - self.stop_and_go_toggle = toggle_item(tr("Stop and Go (Beta)"), "", param="SubaruStopAndGo", + self.stop_and_go_toggle = toggle_item(tr("Creep from Standstill (Beta)"), "", param="SubaruStopAndGo", callback=lambda _: self.update_settings()) self.stop_and_go_manual_parking_brake_toggle = toggle_item( - tr("Stop and Go for Manual Parking Brake (Beta)"), "", + tr("Creep from Standstill — Manual Handbrake (Beta)"), "", param="SubaruStopAndGoManualParkingBrake", callback=lambda _: self.update_settings()) self.items = [self.stop_and_go_toggle, self.stop_and_go_manual_parking_brake_toggle] @@ -2248,7 +2249,7 @@ class SubaruSettings(BrandSettings): if not self._supported: return tr("Not available on this Subaru platform.") if not ui_state.is_offroad(): - return tr("Enable \"Always Offroad\" in Device panel, or turn vehicle off to toggle.") + return tr("Flip on Always Offroad from the Device panel, or power the car down, to change this.") return "" def update_settings(self): @@ -2282,7 +2283,7 @@ def _speed_text(kmh: int) -> str: return f"{round(kmh * KM_TO_MILE)} mph" -class TeslaSettings(BrandSettings): +class TeslaSettings(BrandPanel): def __init__(self): super().__init__() self.coop_steering_toggle = toggle_item(tr("VTB (Virtual Torque Blending)"), "", param="TeslaCoopSteering") @@ -2296,7 +2297,7 @@ class TeslaSettings(BrandSettings): f"{tr('Active above {} only.').format(_speed_text(COOP_STEERING_MIN_KMH))}") if not ui_state.is_offroad(): - blocker = tr("Enable \"Always Offroad\" in Device panel, or turn vehicle off to toggle.") + blocker = tr("Flip on Always Offroad from the Device panel, or power the car down, to change this.") body = f"{blocker}

{body}" self.coop_steering_toggle.set_description(body) @@ -2305,11 +2306,11 @@ class TeslaSettings(BrandSettings): # ===== vehicle_brands_toyota ===== -class ToyotaSettings(BrandSettings): +class ToyotaSettings(BrandPanel): def __init__(self): super().__init__() self.enforce_stock_longitudinal = toggle_item( - lambda: tr("Enforce Factory Longitudinal Control"), + lambda: tr("Keep Factory Gas and Brake"), description=lambda: tr("Keeps gas and brakes with the factory Toyota system; IQ.Pilot steers only."), initial_state=ui_state.params.get_bool("ToyotaEnforceStockLongitudinal"), callback=self._on_toggled, @@ -2360,7 +2361,7 @@ DESCRIPTIONS = { } -class VolkswagenSettings(BrandSettings): +class VolkswagenSettings(BrandPanel): def __init__(self): super().__init__() @@ -2444,7 +2445,7 @@ class VolkswagenSettings(BrandSettings): # ===== vehicle_brands_factory ===== # Only brands that actually ship extra rows appear here; every other brand gets None. -_REGISTRY: dict[str, type[BrandSettings]] = { +_REGISTRY: dict[str, type[BrandPanel]] = { "hyundai": HyundaiSettings, "subaru": SubaruSettings, "tesla": TeslaSettings, @@ -2453,12 +2454,12 @@ _REGISTRY: dict[str, type[BrandSettings]] = { } -def brand_settings_for(brand: str) -> BrandSettings | None: +def brand_settings_for(brand: str) -> BrandPanel | None: cls = _REGISTRY.get(brand) return cls() if cls else None -class BrandSettingsFactory: +class BrandPanelFactory: """Legacy shim for callers using the old factory name.""" create_brand_settings = staticmethod(brand_settings_for) @@ -2502,7 +2503,7 @@ class VehicleSelection: return bundle.get("name", "") if ui_state.CP and ui_state.CP.carFingerprint != "MOCK": return ui_state.CP.carFingerprint - return tr("No vehicle selected") + return tr("No vehicle set") def force(self, platform_name: str) -> bool: data = self.platforms.get(platform_name) @@ -2515,22 +2516,22 @@ class VehicleSelection: def clear(): ui_state.params.remove("CarPlatformBundle") - def picker_folders(self) -> list[TreeFolder]: - def node_for(name: str) -> TreeNode: + def picker_folders(self) -> list[PickerGroup]: + def node_for(name: str) -> PickerItem: info = self.platforms[name] years = ' '.join(map(str, info.get('year', []))) - return TreeNode(name, { + return PickerItem(name, { 'display_name': name, 'search_tags': f"{name} {info.get('make')} {years} {info.get('model', name)}", }) names = sorted(self.platforms) makes = sorted({self.platforms[n].get('make') for n in names}) - return [TreeFolder(make, [node_for(n) for n in names if self.platforms[n].get('make') == make]) + return [PickerGroup(make, [node_for(n) for n in names if self.platforms[n].get('make') == make]) for make in makes] -class PlatformSelector(Button): +class VehiclePicker(Button): """Row button that either clears a forced platform or opens the vehicle picker.""" def __init__(self, on_platform_change: Callable[[], None] | None = None): @@ -2573,12 +2574,12 @@ class PlatformSelector(Button): self._open_picker() def _open_picker(self): - dialog = TreeOptionDialog( - tr("Select a vehicle"), + dialog = PickerDialog( + tr("Pick your vehicle"), self.selection.picker_folders(), search_prompt=tr("Search make or model"), - search_title=tr("Search your vehicle"), - search_subtitle=tr("Enter model year (e.g., 2021) and model (Toyota Corolla):"), + search_title=tr("Find your vehicle"), + search_subtitle=tr("Type a year then a model — for example, 2021 Toyota Corolla:"), search_funcs=[lambda node: node.data.get('display_name', ''), lambda node: node.data.get('search_tags', '')], ) done = partial(self._on_picked, dialog) @@ -2588,8 +2589,8 @@ class PlatformSelector(Button): def _on_picked(self, dialog, res): if res != DialogResult.CONFIRM or not dialog.selection_ref: return - when = tr("This setting will take effect immediately.") if ui_state.is_offroad else \ - tr("This setting will take effect once the device enters offroad state.") + when = tr("Applies right away.") if ui_state.is_offroad else \ + tr("Applies the next time the device goes offroad.") def confirm(result): if result == DialogResult.CONFIRM and self.selection.force(dialog.selection_ref): @@ -2599,16 +2600,16 @@ class PlatformSelector(Button): _LEGEND = ( - (FingerprintStatus.AUTO, lambda: tr("Fingerprinted automatically")), - (FingerprintStatus.FORCED, lambda: tr("Manually selected fingerprint")), - (FingerprintStatus.NONE, lambda: tr("Not fingerprinted or manually selected")), + (FingerprintStatus.AUTO, lambda: tr("Detected automatically")), + (FingerprintStatus.FORCED, lambda: tr("Chosen manually")), + (FingerprintStatus.NONE, lambda: tr("Undetected and unset")), ) class LegendWidget(Widget): """Explains the fingerprint status colours; the active row is highlighted.""" - def __init__(self, platform_selector: PlatformSelector): + def __init__(self, platform_selector: VehiclePicker): super().__init__() self.set_rect(rl.Rectangle(0, 0, 0, 350)) self._selector = platform_selector @@ -2618,9 +2619,9 @@ class LegendWidget(Widget): def _render(self, rect): x = rect.x + 20 y = rect.y + 20 - rl.draw_text_ex(self._font, tr("Select vehicle to force fingerprint manually."), rl.Vector2(x, y), 40, 0, ink.CAPTION) + rl.draw_text_ex(self._font, tr("Pin a vehicle to skip auto-detection."), rl.Vector2(x, y), 40, 0, ink.CAPTION) y += 80 - rl.draw_text_ex(self._font, tr("Colors represent vehicle fingerprint status:"), rl.Vector2(x, y), 40, 0, ink.CAPTION) + rl.draw_text_ex(self._font, tr("Colour key for fingerprint state:"), rl.Vector2(x, y), 40, 0, ink.CAPTION) y += 80 active = self._selector.status @@ -2649,7 +2650,7 @@ class VehicleLayout(Widget): super().__init__() self._brand_settings = None self._current_brand = None - self._platform_selector = PlatformSelector(self._on_vehicle_changed) + self._platform_selector = VehiclePicker(self._on_vehicle_changed) self._vehicle_item = IQListItem(title=self._platform_selector.text, action_item=ButtonAction(text=tr("SELECT")), callback=self._platform_selector._on_clicked) self._legend_widget = LegendWidget(self._platform_selector) diff --git a/iqpilot/ui/mici/onroad/hud_renderer.py b/iqpilot/ui/mici/onroad/hud_renderer.py index 5895ffa31..e0806409d 100644 --- a/iqpilot/ui/mici/onroad/hud_renderer.py +++ b/iqpilot/ui/mici/onroad/hud_renderer.py @@ -4,7 +4,7 @@ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed import pyray as rl from openpilot.selfdrive.ui.mici.onroad.hud_renderer import HudRenderer -from openpilot.iqpilot.ui.onroad.hud_overlays import BlindSpotIndicators +from openpilot.iqpilot.ui.onroad.hud_overlays import IQBlindSpotOverlay class IQMiciHudRenderer(HudRenderer): @@ -16,7 +16,7 @@ class IQMiciHudRenderer(HudRenderer): def __init__(self): super().__init__() - self._overlays = [BlindSpotIndicators()] + self._overlays = [IQBlindSpotOverlay()] def _update_state(self) -> None: super()._update_state() diff --git a/iqpilot/ui/onroad/driver_state.py b/iqpilot/ui/onroad/driver_state.py index 216d4b5ce..1f3a93d16 100644 --- a/iqpilot/ui/onroad/driver_state.py +++ b/iqpilot/ui/onroad/driver_state.py @@ -8,7 +8,7 @@ import pyray as rl from openpilot.common.params import Params from openpilot.selfdrive.ui import UI_BORDER_SIZE from openpilot.selfdrive.ui.onroad.driver_state import DriverStateRenderer, BTN_SIZE, ARC_LENGTH -from openpilot.iqpilot.ui.onroad.hud_overlays import DeveloperUiRenderer +from openpilot.iqpilot.ui.onroad.hud_overlays import IQDevMetricsOverlay from openpilot.system.ui.lib.application import gui_app, FontWeight from openpilot.system.ui.lib.text_measure import measure_text_cached @@ -50,7 +50,7 @@ class DriverStateRendererIQ(DriverStateRenderer): self._toast_color: rl.Color = rl.WHITE self._font = gui_app.font(FontWeight.SEMI_BOLD) - self.dev_ui_offset = DeveloperUiRenderer.get_bottom_dev_ui_offset() + self.dev_ui_offset = IQDevMetricsOverlay.get_bottom_dev_ui_offset() self._dm_background = gui_app.texture("icons_mici/onroad/driver_monitoring/dm_background.png", BTN_SIZE, BTN_SIZE) self._dm_person = gui_app.texture("icons_mici/onroad/driver_monitoring/dm_person.png", 118, 118) self._dm_cone = gui_app.texture("icons_mici/onroad/driver_monitoring/dm_cone.png", 118, 118) diff --git a/iqpilot/ui/onroad/hud_overlays.py b/iqpilot/ui/onroad/hud_overlays.py index 489e6a4c9..33598f667 100644 --- a/iqpilot/ui/onroad/hud_overlays.py +++ b/iqpilot/ui/onroad/hud_overlays.py @@ -22,7 +22,7 @@ from openpilot.selfdrive.ui.mici.onroad.alert_renderer import IconSide, TURN_SIG from openpilot.system.ui.lib.application import gui_app, FontWeight from openpilot.system.ui.lib.multilang import tr from openpilot.system.ui.widgets import Widget -from openpilot.system.ui.iqpilot.lib import canvas +from openpilot.system.ui.iqwidgets.lib import canvas from iqdbc.car.volkswagen.values import VolkswagenFlags @@ -40,13 +40,29 @@ def _speed_scale() -> float: # Accel strip # ============================================================================ _STRIP_WIDTH = 28 +_STRIP_INSET = 14 _STRIP_CEILING = 0.85 _STRIP_EMA = 5.0 -_STRIP_GO = canvas.shade(0, 245, 0, 200) -_STRIP_STOP = canvas.shade(245, 0, 0, 200) +_STRIP_ARC_SEGMENTS = 24 +_STRIP_ACCEL = (33, 112, 115) +_STRIP_ACCEL_NEON = (94, 232, 236) +_STRIP_DECEL = (255, 0, 247) +_STRIP_DECEL_NEON = (255, 145, 251) +_STRIP_TIP_ALPHA = 235 +_STRIP_ROOT_ALPHA = 55 +_STRIP_CORE_DEPTH = 7.0 +_STRIP_CORE_LAYERS = 8 +_STRIP_CORE_ALPHA = 0.15 +_STRIP_CORE_FLOOR = 0.3 +_STRIP_CORE_TAIL = 22.0 +_STRIP_HALO_SPREAD = 11.0 +_STRIP_HALO_LAYERS = 11 +_STRIP_HALO_ALPHA = 0.095 +_STRIP_HALO_TAIL = 34.0 +_STRIP_NEON_FULL = 2.0 # m/s^2 at which the edges reach full brightness -class RocketFuel: +class IQAccelBar: def __init__(self): self._eased = 0.0 @@ -54,6 +70,52 @@ class RocketFuel: mag = abs(self._eased) return 0.0 if mag == 0.0 else max(0.0, _STRIP_CEILING - 0.1 / mag) + @staticmethod + def _tint(fill, frac: float): + return canvas.shade(*fill, int(_STRIP_TIP_ALPHA + (_STRIP_ROOT_ALPHA - _STRIP_TIP_ALPHA) * frac)) + + @staticmethod + def _halo(center, cap: float, up: bool, neon, heat: float, tail: float) -> None: + step = int(255 * _STRIP_HALO_ALPHA * heat) + if step < 1: + return + start, end = (180.0, 360.0) if up else (0.0, 180.0) + tint = canvas.shade(*neon, step) + faded = canvas.shade(*neon, 0) + top, bottom = (tint, faded) if up else (faded, tint) + for i in range(_STRIP_HALO_LAYERS): + spread = _STRIP_HALO_SPREAD * (1.0 - i / _STRIP_HALO_LAYERS) + if spread <= 0.0: + continue + canvas.annulus(center, cap, cap + spread, start, end, _STRIP_ARC_SEGMENTS, tint) + if tail <= 0.0: + continue + run = min(tail, _STRIP_HALO_TAIL) + y = center.y if up else center.y - run + canvas.v_sweep(center.x - cap - spread, y, spread, run, top, bottom) + canvas.v_sweep(center.x + cap, y, spread, run, top, bottom) + + @staticmethod + def _cap(center, cap: float, up: bool, fill, neon, heat: float, tail: float) -> None: + start, end = (180.0, 360.0) if up else (0.0, 180.0) + canvas.annulus(center, 0.0, cap, start, end, _STRIP_ARC_SEGMENTS, fill) + IQAccelBar._halo(center, cap, up, neon, heat, tail) + lit = _STRIP_CORE_FLOOR + (1.0 - _STRIP_CORE_FLOOR) * heat + core = canvas.shade(*neon, max(1, int(255 * _STRIP_CORE_ALPHA * lit))) + faded = canvas.shade(*neon, 0) + top, bottom = (core, faded) if up else (faded, core) + run = min(tail, _STRIP_CORE_TAIL) + for i in range(_STRIP_CORE_LAYERS): + depth = _STRIP_CORE_DEPTH * (1.0 - i / _STRIP_CORE_LAYERS) + if depth <= 0.0: + continue + canvas.annulus(center, max(0.0, cap - depth), cap, start, end, _STRIP_ARC_SEGMENTS, core) + if run <= 0.0: + continue + y = center.y if up else center.y - run + canvas.v_sweep(center.x - cap, y, depth, run, top, bottom) + canvas.v_sweep(center.x + cap - depth, y, depth, run, top, bottom) + def render(self, rect, sm) -> None: if not ui_state.rocket_fuel: return @@ -61,9 +123,21 @@ class RocketFuel: reach = self._reach() * rect.height / 2.0 if reach <= 0.0: return + accelerating = self._eased > 0.0 mid = rect.y + rect.height / 2.0 - top, tint = (mid - reach, _STRIP_GO) if self._eased > 0.0 else (mid, _STRIP_STOP) - canvas.slab(rect.x, top, _STRIP_WIDTH, reach, tint) + top = mid - reach if accelerating else mid + x = rect.x + _STRIP_INSET + cap = min(_STRIP_WIDTH / 2.0, reach / 2.0) + fill, neon = (_STRIP_ACCEL, _STRIP_ACCEL_NEON) if accelerating else (_STRIP_DECEL, _STRIP_DECEL_NEON) + near = cap / reach + frac_top, frac_bottom = (near, 1.0 - near) if accelerating else (1.0 - near, near) + heat = min(abs(self._eased) / _STRIP_NEON_FULL, 1.0) + + canvas.v_sweep(x, top + cap, cap * 2.0, reach - cap * 2.0, + self._tint(fill, frac_top), self._tint(fill, frac_bottom)) + tail = max(0.0, reach / 2.0 - cap) + self._cap(canvas.Pt(x + cap, top + cap), cap, True, self._tint(fill, frac_top), neon, heat, tail) + self._cap(canvas.Pt(x + cap, top + reach - cap), cap, False, self._tint(fill, frac_bottom), neon, heat, tail) # ============================================================================ @@ -92,7 +166,7 @@ class _BlindSide: canvas.stamp(tex, x, rect.y + _BS_DROP, canvas.shade(255, 255, 255, int(255 * self.glow.x))) -class BlindSpotIndicators: +class IQBlindSpotOverlay: def __init__(self): self._left = _BlindSide("left") self._right = _BlindSide("right") @@ -121,7 +195,7 @@ _MQB_CLUSTER_EXEMPT = (VolkswagenFlags.PQ | VolkswagenFlags.MLB | VolkswagenFlag VolkswagenFlags.MEB_GEN2 | VolkswagenFlags.MQB_EVO) -class SpeedRenderer: +class IQSpeedOverlay: def __init__(self): self.speed: float = 0.0 self._cluster_ever_live: bool = False @@ -285,7 +359,7 @@ def _lamp_modes(event_name: str, cs, remembered): return left, right, None -class TurnSignalController: +class IQTurnSignalOverlay: def __init__(self, config: TurnSignalConfig | None = None): self._config = config or TurnSignalConfig() self._lamps = {IconSide.left: _IndicatorLamp(IconSide.left), @@ -702,7 +776,7 @@ def _desired_probe(sm): return desired_lat_accel -class DeveloperUiRenderer(Widget): +class IQDevMetricsOverlay(Widget): DEV_UI_OFF = 0 DEV_UI_RIGHT = 1 DEV_UI_BOTTOM = 2 @@ -716,7 +790,7 @@ class DeveloperUiRenderer(Widget): @staticmethod def get_bottom_dev_ui_offset(): - return DeveloperUiRenderer.BOTTOM_BAR_HEIGHT if ui_state.developer_ui != DeveloperUiRenderer.DEV_UI_OFF else 0 + return IQDevMetricsOverlay.BOTTOM_BAR_HEIGHT if ui_state.developer_ui != IQDevMetricsOverlay.DEV_UI_OFF else 0 def _update_state(self) -> None: self.dev_ui_mode = ui_state.developer_ui @@ -775,7 +849,7 @@ def _dim(color, alpha: float): return canvas.with_opacity(color, 255 * alpha) -class SpeedLimitRenderer(Widget): +class IQSpeedLimitOverlay(Widget): """Regulatory sign, upcoming-limit preview and pre-active nudge arrows.""" def __init__(self): diff --git a/iqpilot/ui/onroad/hud_renderer.py b/iqpilot/ui/onroad/hud_renderer.py index a376531bd..d0505dbdf 100644 --- a/iqpilot/ui/onroad/hud_renderer.py +++ b/iqpilot/ui/onroad/hud_renderer.py @@ -1,18 +1,24 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +IQ.Pilot road-view HUD: extends the stock renderer and layers on the IQ overlays +(developer bar, nav map, road name, speed + speed-limit, turn signals, rocket-fuel +accel bar, soft warnings, steering arc). """ import pyray as rl from openpilot.selfdrive.ui.mici.onroad.torque_bar import TorqueBar from openpilot.selfdrive.ui.ui_state import ui_state from openpilot.selfdrive.ui.onroad.hud_renderer import HudRenderer -from openpilot.iqpilot.ui.onroad.hud_overlays import DeveloperUiRenderer +from openpilot.iqpilot.ui.onroad.hud_overlays import ( + IQDevMetricsOverlay, + RoadNameRenderer, + IQAccelBar, + IQSpeedLimitOverlay, + IQTurnSignalOverlay, + IQSpeedOverlay, +) from openpilot.iqpilot.ui.onroad.nav_map_panel import NavMapPanel -from openpilot.iqpilot.ui.onroad.hud_overlays import RoadNameRenderer -from openpilot.iqpilot.ui.onroad.hud_overlays import RocketFuel -from openpilot.iqpilot.ui.onroad.hud_overlays import SpeedLimitRenderer -from openpilot.iqpilot.ui.onroad.hud_overlays import TurnSignalController -from openpilot.iqpilot.ui.onroad.hud_overlays import SpeedRenderer from openpilot.iqpilot.ui.onroad.soft_warning import SoftWarningRenderer ENABLE_FLOATING_NAV_MAP_PANEL = False @@ -22,13 +28,13 @@ ENABLE_SPLIT_NAV_MAP_PANEL = True class IQHudRenderer(HudRenderer): def __init__(self): super().__init__() - self.developer_ui = DeveloperUiRenderer() + self.developer_ui = IQDevMetricsOverlay() self.nav_map_panel = NavMapPanel() self.road_name_renderer = RoadNameRenderer() - self.rocket_fuel = RocketFuel() - self.speed_limit_renderer = SpeedLimitRenderer() - self.turn_signal_controller = TurnSignalController() - self.speed_renderer = SpeedRenderer() + self.rocket_fuel = IQAccelBar() + self.speed_limit_renderer = IQSpeedLimitOverlay() + self.turn_signal_controller = IQTurnSignalOverlay() + self.speed_renderer = IQSpeedOverlay() self.soft_warning_renderer = SoftWarningRenderer() self._torque_bar = TorqueBar(scale=3.0, always=True) @@ -53,8 +59,8 @@ class IQHudRenderer(HudRenderer): if ui_state.torque_bar: torque_rect = rect - if ui_state.developer_ui in (DeveloperUiRenderer.DEV_UI_BOTTOM, DeveloperUiRenderer.DEV_UI_BOTH): - torque_rect = rl.Rectangle(rect.x, rect.y, rect.width, rect.height - DeveloperUiRenderer.BOTTOM_BAR_HEIGHT) + if ui_state.developer_ui in (IQDevMetricsOverlay.DEV_UI_BOTTOM, IQDevMetricsOverlay.DEV_UI_BOTH): + torque_rect = rl.Rectangle(rect.x, rect.y, rect.width, rect.height - IQDevMetricsOverlay.BOTTOM_BAR_HEIGHT) self._torque_bar.render(torque_rect) if not self.split_nav_enabled(): diff --git a/launch_env.sh b/launch_env.sh index b1803f0c3..2869567fb 100755 --- a/launch_env.sh +++ b/launch_env.sh @@ -23,7 +23,7 @@ if [ -z "$AGNOS_VERSION" ]; then case "$DEVICE_MODEL" in *) - export AGNOS_VERSION="IQ.OS 4.5" + export AGNOS_VERSION="IQ.OS 4.9" ;; esac fi diff --git a/msgq_repo/msgq/msgq.cc b/msgq_repo/msgq/msgq.cc index d9e4ed4c0..2b2493a0d 100644 --- a/msgq_repo/msgq/msgq.cc +++ b/msgq_repo/msgq/msgq.cc @@ -161,6 +161,7 @@ void msgq_init_publisher(msgq_queue_t * q) { //std::cout << "Starting publisher" << std::endl; uint64_t uid = msgq_get_uid(); + q->last_reap_us = 0; *q->write_uid = uid; *q->num_readers = 0; @@ -173,6 +174,7 @@ void msgq_init_publisher(msgq_queue_t * q) { } static void thread_signal(uint32_t tid) { + if (tid == 0) return; #ifdef __APPLE__ // macOS doesn't have tkill, rely on polling instead (void)tid; @@ -184,6 +186,39 @@ static void thread_signal(uint32_t tid) { #endif } +#ifdef __linux__ +// Zero reader slots whose owning thread died without closing, so the notify loop +// stops signaling their TIDs: the kernel recycles TIDs, and a stale slot means +// every send fires SIGUSR2 at an unrelated process — fatal for one with no +// handler installed (e.g. a subscriber's short-lived compiler child). Amortized +// to ~1Hz per publisher; reclaim-at-overflow alone leaves stale slots signaled +// indefinitely while the table has free space. +static void msgq_reap_dead_readers(msgq_queue_t *q) { + int64_t now_us = std::chrono::duration_cast( + std::chrono::steady_clock::now().time_since_epoch()).count(); + if (now_us - q->last_reap_us < 1000000) + return; + q->last_reap_us = now_us; + + uint64_t num_readers = std::min(NUM_READERS, *q->num_readers); + for (uint64_t i = 0; i < num_readers; i++){ + uint64_t slot_uid = *q->read_uids[i]; + uint32_t slot_tid = slot_uid & 0xFFFFFFFF; + if (slot_uid == 0 || slot_tid == 0) + continue; + char proc_path[32]; + snprintf(proc_path, sizeof(proc_path), "/proc/%u", slot_tid); + struct stat st; + if (stat(proc_path, &st) == 0) + continue; + uint64_t expected = slot_uid; + if (std::atomic_compare_exchange_strong(q->read_uids[i], &expected, (uint64_t)0)){ + *q->read_valids[i] = false; + } + } +} +#endif + // claim slot i (its uid CAS already succeeded) for the calling thread static void msgq_claim_slot(msgq_queue_t * q, size_t i, uint64_t uid) { q->reader_id = i; @@ -378,6 +413,10 @@ int msgq_msg_send(msgq_msg_t * msg, msgq_queue_t *q){ uint32_t new_ptr = ALIGN(write_pointer + msg->size + sizeof(int64_t)); PACK64(*q->write_pointer, write_cycles, new_ptr); +#ifdef __linux__ + msgq_reap_dead_readers(q); +#endif + // Notify readers for (uint64_t i = 0; i < num_readers; i++){ uint64_t reader_uid = *q->read_uids[i]; diff --git a/msgq_repo/msgq/msgq.h b/msgq_repo/msgq/msgq.h index 195ae06da..539e4dc86 100644 --- a/msgq_repo/msgq/msgq.h +++ b/msgq_repo/msgq/msgq.h @@ -41,6 +41,7 @@ struct msgq_queue_t { int reader_id; uint64_t read_uid_local; uint64_t write_uid_local; + int64_t last_reap_us; bool read_conflate; std::string endpoint; diff --git a/selfdrive/car/card.py b/selfdrive/car/card.py index a0b6d472b..0b2bdc112 100755 --- a/selfdrive/car/card.py +++ b/selfdrive/car/card.py @@ -129,7 +129,7 @@ class Car: self.CI = get_car(*self.can_callbacks, obd_callback(self.params), alpha_long_allowed, is_release, num_pandas, cached_params, fixed_fingerprint, init_params_list_iq, is_release_iq) - iqpilot_interfaces.setup_interfaces(self.CI, self.params) + iqpilot_interfaces.apply_iq_car_config(self.CI, self.params) self.RI = interfaces[self.CI.CP.carFingerprint].RadarInterface(self.CI.CP, self.CI.CP_IQ) self.CP = self.CI.CP self.CP_IQ = self.CI.CP_IQ diff --git a/selfdrive/car/tests/test_car_interfaces.py b/selfdrive/car/tests/test_car_interfaces.py index 286cdbb2e..29913009d 100644 --- a/selfdrive/car/tests/test_car_interfaces.py +++ b/selfdrive/car/tests/test_car_interfaces.py @@ -39,7 +39,7 @@ class TestCarInterfaces: car_interface.CP.openpilotLongitudinalControl = False car_params = car_interface.CP.as_reader() car_params_iq = car_interface.CP_IQ - iqpilot_interfaces.setup_interfaces(car_interface) + iqpilot_interfaces.apply_iq_car_config(car_interface) cc_msg = FuzzyGenerator.get_random_msg(data.draw, car.CarControl, real_floats=True) cc_sp_msg = FuzzyGenerator.get_random_msg(data.draw, custom.IQCarControl, real_floats=True) diff --git a/selfdrive/controls/lib/latcontrol_torque.py b/selfdrive/controls/lib/latcontrol_torque.py index b676e1184..a407ffadf 100644 --- a/selfdrive/controls/lib/latcontrol_torque.py +++ b/selfdrive/controls/lib/latcontrol_torque.py @@ -10,8 +10,8 @@ import numpy as np from cereal import log, custom # noqa: F401 (custom kept available for downstream imports) from iqdbc.car import structs from iqdbc.car.lateral import FRICTION_THRESHOLD, get_friction -from iqdbc.iqpilot.car.interfaces import LatControlInputs -from iqdbc.iqpilot.car.lateral_ext import get_friction as get_friction_in_torque_space +from iqdbc.lvbs.car.interfaces import LatControlInputs +from iqdbc.lvbs.car.iq_lateral import get_friction as get_friction_in_torque_space from openpilot.common.basedir import BASEDIR from openpilot.common.constants import ACCELERATION_DUE_TO_GRAVITY from openpilot.common.filter_simple import FirstOrderFilter @@ -365,8 +365,12 @@ class NeuralNetworkFeedForward(PilotLateralBrain): super().__init__(lac_torque, CP, CP_IQ, CI) self.params = Params() self.enabled = self.params.get_bool("NeuralNetworkFeedForward") - self.has_nn_model = CP_IQ.iqLateralNet.model.path != MOCK_MODEL_PATH - self.model = NNTorqueModel(CP_IQ.iqLateralNet.model.path) + # NNFF applies only when a real trained model for this car is present on disk. + # No models shipped (or no match / MOCK) -> skip NNFF entirely and fall back to + # the stock torque feed-forward. Models are re-added as they are retrained. + self.has_nn_model = (CP_IQ.iqLateralNet.model.path != MOCK_MODEL_PATH + and os.path.isfile(CP_IQ.iqLateralNet.model.path)) + self.model = NNTorqueModel(CP_IQ.iqLateralNet.model.path) if self.has_nn_model else None self.pitch = FirstOrderFilter(0.0, 0.5, 0.01) self.pitch_last = 0.0 diff --git a/selfdrive/controls/lib/longitudinal_planner.py b/selfdrive/controls/lib/longitudinal_planner.py index 298ae0dc8..fb9266ab6 100755 --- a/selfdrive/controls/lib/longitudinal_planner.py +++ b/selfdrive/controls/lib/longitudinal_planner.py @@ -6,6 +6,7 @@ import cereal.messaging as messaging from iqdbc.car.interfaces import ACCEL_MIN, ACCEL_MAX from openpilot.common.constants import CV from openpilot.common.filter_simple import FirstOrderFilter +from openpilot.common.params import Params, UnknownKeyName from openpilot.common.realtime import DT_MDL from openpilot.selfdrive.modeld.constants import ModelConstants from openpilot.selfdrive.controls.lib.longcontrol import LongCtrlState @@ -31,6 +32,12 @@ LAUNCH_COMMIT_T = 3.5 LAUNCH_MOVING_SPEED = 1.2 LAUNCH_MAX_ACCEL = 1.5 +E2E_CRUISE_CONVERGENCE_TAU = 15.0 +E2E_CRUISE_ACCEL_MAX = 0.5 +E2E_MODEL_SPEED_HORIZON = 5.0 +E2E_ACCEL_INTENT_BP = [-0.05, 0.05] +E2E_MODEL_SPEED_INTENT_BP = [-0.5, 0.0] + # Lookup table for turns _A_TOTAL_MAX_V = [1.7, 3.2] _A_TOTAL_MAX_BP = [20., 40.] @@ -69,6 +76,35 @@ def get_cruise_accel(e2e, v_cruise, v_ego, a_cruise_prev, angle_steers, CP, dt, return target_accel, cruise_should_stop +def get_e2e_accel(v_ego, v_cruise, model_v, a_target, should_stop): + if should_stop or v_cruise <= v_ego or len(model_v) != len(T_IDXS_MPC): + return a_target + + convergence_accel = min((v_cruise - v_ego) / E2E_CRUISE_CONVERGENCE_TAU, E2E_CRUISE_ACCEL_MAX) + if convergence_accel <= a_target: + return a_target + + # Only help the model converge to cruise when both its immediate action and + # velocity trajectory show no active deceleration intent. The lead MPC and + # cruise candidates remain hard upper bounds on the final acceleration. + accel_intent = np.interp(a_target, E2E_ACCEL_INTENT_BP, [0.0, 1.0]) + model_speed = np.interp(E2E_MODEL_SPEED_HORIZON, T_IDXS_MPC, model_v) + speed_intent = np.interp(model_speed - v_ego, E2E_MODEL_SPEED_INTENT_BP, [0.0, 1.0]) + return float(np.interp(min(accel_intent, speed_intent), [0.0, 1.0], [a_target, convergence_accel])) + + +def get_accel_candidates(e2e, has_lead, mpc_candidate, cruise_candidate, e2e_candidate): + candidates = [] + # With no lead, the MPC follows a synthetic fast lead. It remains the ACC + # policy, but must not limit the model policy in full E2E. + if not e2e or has_lead: + candidates.append(mpc_candidate) + candidates.append(cruise_candidate) + if e2e: + candidates.append(e2e_candidate) + return candidates + + class LongitudinalPlanner(LongitudinalPlannerIQ): def __init__(self, CP, CP_IQ, init_v=0.0, init_a=0.0, dt=DT_MDL): self.CP = CP @@ -85,6 +121,10 @@ class LongitudinalPlanner(LongitudinalPlannerIQ): self.output_a_target = 0.0 self.output_should_stop = False self.launch_armed = False + try: + self.exp_speed_conv = Params().get_bool("expSpeedConv") + except UnknownKeyName: + self.exp_speed_conv = False self.v_desired_trajectory = np.zeros(CONTROL_N) self.a_desired_trajectory = np.zeros(CONTROL_N) @@ -173,6 +213,8 @@ class LongitudinalPlanner(LongitudinalPlannerIQ): output_a_target_e2e = sm['modelV2'].action.desiredAcceleration output_should_stop_e2e = sm['modelV2'].action.shouldStop output_a_target_e2e, output_should_stop_e2e = self.apply_e2e_stop_distance(sm, v_ego, output_a_target_e2e, output_should_stop_e2e) + if self.is_e2e(sm) and self.exp_speed_conv and not self.mpc.status: + output_a_target_e2e = get_e2e_accel(v_ego, v_cruise, model_v, output_a_target_e2e, output_should_stop_e2e) if sm['carState'].standstill: self.launch_armed = True @@ -193,10 +235,13 @@ class LongitudinalPlanner(LongitudinalPlannerIQ): steer_angle_without_offset, self.CP, self.dt, accel_coast, self.allow_throttle) - candidates = [(output_a_target_mpc, self.mpc.source, output_should_stop_mpc), - (self.a_cruise, LongitudinalPlanSource.cruise, cruise_should_stop)] - if e2e: - candidates.append((output_a_target_e2e, LongitudinalPlanSource.e2e, output_should_stop_e2e)) + candidates = get_accel_candidates( + e2e, + self.mpc.status, + (output_a_target_mpc, self.mpc.source, output_should_stop_mpc), + (self.a_cruise, LongitudinalPlanSource.cruise, cruise_should_stop), + (output_a_target_e2e, LongitudinalPlanSource.e2e, output_should_stop_e2e), + ) output_a_target, self.mpc.source, _ = min(candidates, key=lambda c: c[0]) self.output_should_stop = any(should_stop for _, _, should_stop in candidates) diff --git a/selfdrive/controls/radard.py b/selfdrive/controls/radard.py index 48d2b69db..14b00ec73 100755 --- a/selfdrive/controls/radard.py +++ b/selfdrive/controls/radard.py @@ -13,8 +13,7 @@ from openpilot.common.swaglog import cloudlog from openpilot.common.simple_kalman import KF1D from iqdbc.car import structs -from iqdbc.car.hyundai.values import HyundaiFlags -from iqdbc.iqpilot.car.hyundai.values import HyundaiFlagsIQ +from iqdbc.car.hyundai.values import HyundaiFlags, HyundaiFlagsIQ from openpilot.iqpilot.selfdrive.controls.lib.custom_stop_distance import CustomStopDistance diff --git a/selfdrive/controls/tests/test_latcontrol.py b/selfdrive/controls/tests/test_latcontrol.py index 5d543978d..93e8f30a8 100644 --- a/selfdrive/controls/tests/test_latcontrol.py +++ b/selfdrive/controls/tests/test_latcontrol.py @@ -26,7 +26,7 @@ class TestLatControl: CP = CarInterface.get_non_essential_params(car_name) CP_IQ = CarInterface.get_non_essential_params_iq(CP, car_name) CI = CarInterface(CP, CP_IQ) - iqpilot_interfaces.setup_interfaces(CI) + iqpilot_interfaces.apply_iq_car_config(CI) CP_IQ = convert_to_capnp(CP_IQ) VM = VehicleModel(CP) diff --git a/selfdrive/controls/tests/test_latcontrol_torque_buffer.py b/selfdrive/controls/tests/test_latcontrol_torque_buffer.py index 798d49be1..06aac5e0e 100644 --- a/selfdrive/controls/tests/test_latcontrol_torque_buffer.py +++ b/selfdrive/controls/tests/test_latcontrol_torque_buffer.py @@ -17,7 +17,7 @@ def get_controller(car_name): CP = CarInterface.get_non_essential_params(car_name) CP_IQ = CarInterface.get_non_essential_params_iq(CP, car_name) CI = CarInterface(CP, CP_IQ) - iqpilot_interfaces.setup_interfaces(CI) + iqpilot_interfaces.apply_iq_car_config(CI) CP_IQ = convert_to_capnp(CP_IQ) VM = VehicleModel(CP) controller = LatControlTorque(CP.as_reader(), CP_IQ.as_reader(), CI, DT_CTRL) diff --git a/selfdrive/controls/tests/test_longitudinal_planner.py b/selfdrive/controls/tests/test_longitudinal_planner.py new file mode 100644 index 000000000..03395f930 --- /dev/null +++ b/selfdrive/controls/tests/test_longitudinal_planner.py @@ -0,0 +1,54 @@ +import numpy as np +import pytest + +from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import T_IDXS +from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import LongitudinalPlanSource +from openpilot.selfdrive.controls.lib.longitudinal_planner import get_accel_candidates, get_e2e_accel + + +def model_velocity(v_ego, v_future): + return np.interp(T_IDXS, [T_IDXS[0], T_IDXS[-1]], [v_ego, v_future]) + + +class TestE2eCruiseConvergence: + def test_converges_when_model_wants_to_accelerate(self): + assert get_e2e_accel(20.0, 30.0, model_velocity(20.0, 25.0), 0.1, False) == pytest.approx(0.5) + + def test_scales_down_near_cruise_speed(self): + assert get_e2e_accel(28.5, 30.0, model_velocity(28.5, 30.0), 0.0, False) == pytest.approx(0.05) + + def test_preserves_active_model_deceleration(self): + assert get_e2e_accel(20.0, 30.0, model_velocity(20.0, 25.0), -0.05, False) == pytest.approx(-0.05) + + def test_preserves_future_model_slowdown(self): + assert get_e2e_accel(20.0, 30.0, model_velocity(20.0, 18.0), 0.1, False) == pytest.approx(0.1) + + @pytest.mark.parametrize("v_ego, v_cruise, should_stop", [ + (30.0, 30.0, False), + (31.0, 30.0, False), + (20.0, 30.0, True), + ]) + def test_never_overrides_cruise_or_stop(self, v_ego, v_cruise, should_stop): + assert get_e2e_accel(v_ego, v_cruise, model_velocity(v_ego, v_ego + 5.0), -0.2, should_stop) == pytest.approx(-0.2) + + +class TestAccelCandidates: + MPC = (-0.2, LongitudinalPlanSource.lead0, True) + CRUISE = (0.5, LongitudinalPlanSource.cruise, False) + E2E = (0.1, LongitudinalPlanSource.e2e, False) + + def test_e2e_without_lead_frees_model_from_mpc(self): + candidates = get_accel_candidates(True, False, self.MPC, self.CRUISE, self.E2E) + assert candidates == [self.CRUISE, self.E2E] + assert min(candidates, key=lambda c: c[0])[1] == LongitudinalPlanSource.e2e + assert not any(should_stop for _, _, should_stop in candidates) + + def test_e2e_with_lead_keeps_mpc_safety_constraint(self): + candidates = get_accel_candidates(True, True, self.MPC, self.CRUISE, self.E2E) + assert candidates == [self.MPC, self.CRUISE, self.E2E] + assert min(candidates, key=lambda c: c[0])[1] == LongitudinalPlanSource.lead0 + assert any(should_stop for _, _, should_stop in candidates) + + def test_acc_without_lead_keeps_mpc_policy(self): + candidates = get_accel_candidates(False, False, self.MPC, self.CRUISE, self.E2E) + assert candidates == [self.MPC, self.CRUISE] diff --git a/selfdrive/modeld/SConscript b/selfdrive/modeld/SConscript index caf1fcb33..71989c8b3 100644 --- a/selfdrive/modeld/SConscript +++ b/selfdrive/modeld/SConscript @@ -60,7 +60,7 @@ def host_tinygrad_flags(*, float16=False): return f"{base} FLOAT16=1" if float16 else base # Compile small models -for model_name in ['dmonitoring_model']: +for model_name in ['dmonitoring_model', 'dmonitoring_model_mici']: # The optimization flags are mandatory on QCOM: without FLOAT16/NOLOCALS/JIT_BATCH_SIZE/OPENPILOT_HACKS these # models compile to unoptimized QCOM kernels and run ~20x slower (dmonitoring_model: ~300ms -> ~14ms), # which starves the driving model on the shared Adreno. IMAGE=2 (not upstream's IMAGE=1) because the @@ -72,7 +72,10 @@ for model_name in ['dmonitoring_model']: # inputs (onnx + tinygrad_repo + flags + metadata script) and output hashes; if it matches, skip # declaring the targets entirely. Any mismatch falls back to a normal on-device compile. if arch == "larch64": - from openpilot.selfdrive.modeld.prebuilt_models import verify_prebuilt, outputs_match + from openpilot.selfdrive.modeld.prebuilt_models import packaged_prebuilt_matches, verify_prebuilt, outputs_match + if packaged_prebuilt_matches(model_name): + print(lenv.PrettyNote('SKIP', f"{model_name} — packaged prebuilt pkl")) + continue if verify_prebuilt(model_name, flags): print(lenv.PrettyNote('SKIP', f"{model_name} — prebuilt pkl")) continue diff --git a/selfdrive/modeld/dmonitoringmodeld.py b/selfdrive/modeld/dmonitoringmodeld.py index 73a4af242..422a4a9ba 100755 --- a/selfdrive/modeld/dmonitoringmodeld.py +++ b/selfdrive/modeld/dmonitoringmodeld.py @@ -20,19 +20,25 @@ from openpilot.selfdrive.locationd.calibration_helpers import get_calibrated_rpy from openpilot.selfdrive.modeld.models.commonmodel_pyx import CLContext, MonitoringModelFrame from openpilot.selfdrive.modeld.parse_model_outputs import sigmoid, safe_exp from openpilot.selfdrive.modeld.runners.tinygrad_helpers import qcom_tensor_from_opencl_address +from openpilot.system.hardware import HARDWARE PROCESS_NAME = "selfdrive.modeld.dmonitoringmodeld" SEND_RAW_PRED = os.getenv('SEND_RAW_PRED') -MODEL_PKL_PATH = Path(__file__).parent / 'models/dmonitoring_model_tinygrad.pkl' -METADATA_PATH = Path(__file__).parent / 'models/dmonitoring_model_metadata.pkl' +MODELS_PATH = Path(__file__).parent / 'models' + + +def get_model_paths(device_type: str) -> tuple[Path, Path]: + model_name = 'dmonitoring_model_mici' if device_type == 'mici' else 'dmonitoring_model' + return MODELS_PATH / f'{model_name}_tinygrad.pkl', MODELS_PATH / f'{model_name}_metadata.pkl' class ModelState: inputs: dict[str, np.ndarray] output: np.ndarray - def __init__(self, cl_ctx): - with open(METADATA_PATH, 'rb') as f: + def __init__(self, cl_ctx, device_type=None): + model_path, metadata_path = get_model_paths(device_type or HARDWARE.get_device_type()) + with open(metadata_path, 'rb') as f: model_metadata = pickle.load(f) self.input_shapes = model_metadata['input_shapes'] self.output_slices = model_metadata['output_slices'] @@ -43,7 +49,7 @@ class ModelState: } self.tensor_inputs = {k: Tensor(v, device='NPY').realize() for k,v in self.numpy_inputs.items()} - with open(MODEL_PKL_PATH, "rb") as f: + with open(model_path, "rb") as f: self.model_run = pickle.load(f) def run(self, buf: VisionBuf, calib: np.ndarray, transform: np.ndarray) -> tuple[np.ndarray, float]: @@ -76,7 +82,9 @@ def parse_model_output(model_output): parsed[f'face_descs_{ds_suffix}'] = face_descs[:, :-6] parsed[f'face_descs_{ds_suffix}_std'] = safe_exp(face_descs[:, -6:]) for key in ['face_prob', 'left_eye_prob', 'right_eye_prob','left_blink_prob', 'right_blink_prob', 'sunglasses_prob', 'using_phone_prob', 'sleep_prob']: - parsed[f'{key}_{ds_suffix}'] = sigmoid(model_output[f'{key}_{ds_suffix}']) + output_key = f'{key}_{ds_suffix}' + if output_key in model_output: + parsed[output_key] = sigmoid(model_output[output_key]) return parsed def fill_driver_data(msg, model_output, ds_suffix): @@ -91,7 +99,8 @@ def fill_driver_data(msg, model_output, ds_suffix): msg.rightBlinkProb = model_output[f'right_blink_prob_{ds_suffix}'][0, 0].item() msg.sunglassesProb = model_output[f'sunglasses_prob_{ds_suffix}'][0, 0].item() msg.phoneProb = model_output[f'using_phone_prob_{ds_suffix}'][0, 0].item() - msg.sleepProb = model_output[f'sleep_prob_{ds_suffix}'][0, 0].item() + sleep_prob = model_output.get(f'sleep_prob_{ds_suffix}') + msg.sleepProb = sleep_prob[0, 0].item() if sleep_prob is not None else 0. def get_driverstate_packet(model_output, frame_id: int, location_ts: int, exec_time: float, gpu_exec_time: float): msg = messaging.new_message('driverStateV2', valid=True) diff --git a/selfdrive/modeld/models/dmonitoring_model_mici.onnx b/selfdrive/modeld/models/dmonitoring_model_mici.onnx new file mode 100644 index 000000000..51d184985 Binary files /dev/null and b/selfdrive/modeld/models/dmonitoring_model_mici.onnx differ diff --git a/selfdrive/modeld/models/dmonitoring_model_mici_metadata.pkl b/selfdrive/modeld/models/dmonitoring_model_mici_metadata.pkl new file mode 100644 index 000000000..7869f9d66 Binary files /dev/null and b/selfdrive/modeld/models/dmonitoring_model_mici_metadata.pkl differ diff --git a/selfdrive/modeld/models/dmonitoring_model_mici_tinygrad.pkl b/selfdrive/modeld/models/dmonitoring_model_mici_tinygrad.pkl new file mode 100644 index 000000000..a89f4f1f9 Binary files /dev/null and b/selfdrive/modeld/models/dmonitoring_model_mici_tinygrad.pkl differ diff --git a/selfdrive/modeld/models/prebuilt_check.json b/selfdrive/modeld/models/prebuilt_check.json index a40a808f9..1014aa46f 100644 --- a/selfdrive/modeld/models/prebuilt_check.json +++ b/selfdrive/modeld/models/prebuilt_check.json @@ -5,5 +5,12 @@ "dmonitoring_model_tinygrad.pkl": "5aca89a35b42376d56f67ccd28a1080806706d546dd8c63f6e1b4c681f8e2c01" }, "signature": "2364ebd4bb95c4b4e539c9b1ba68324b713cbb56617396b73262accf9cdcfbfc" + }, + "dmonitoring_model_mici": { + "outputs": { + "dmonitoring_model_mici_metadata.pkl": "31a86ab7a92dc0af088b15787a440dd3b210aa662e445a15145900e559a1b5c3", + "dmonitoring_model_mici_tinygrad.pkl": "806c0ea75df6bf6dfeb81b832314c68e31df5865a52d0359e6eeb76d93ad2b52" + }, + "signature": "e1eeb5ce45774a816c8da2394e6ee35ebf700b71dff345e0141dbab8ff592349" } } diff --git a/selfdrive/modeld/prebuilt_models.py b/selfdrive/modeld/prebuilt_models.py index 0f62ff359..384939f5e 100644 --- a/selfdrive/modeld/prebuilt_models.py +++ b/selfdrive/modeld/prebuilt_models.py @@ -11,7 +11,7 @@ BASEDIR = MODELD_DIR.parents[1] TINYGRAD_DIR = BASEDIR / 'tinygrad_repo' METADATA_SCRIPT = MODELD_DIR / 'get_model_metadata.py' -MODEL_NAMES = ['dmonitoring_model'] +MODEL_NAMES = ['dmonitoring_model', 'dmonitoring_model_mici'] def _hash_file(h, path: Path) -> None: @@ -77,7 +77,13 @@ def outputs_match(model_name: str) -> bool: return True +def packaged_prebuilt_matches(model_name: str) -> bool: + return not (MODELS_DIR / f'{model_name}.onnx').is_file() and outputs_match(model_name) + + def verify_prebuilt(model_name: str, flags: str) -> bool: + if not (MODELS_DIR / f'{model_name}.onnx').is_file(): + return False data = _load_checks().get(model_name, {}) if data.get('signature') != compute_signature(model_name, flags): return False diff --git a/selfdrive/modeld/test_dmonitoringmodeld.py b/selfdrive/modeld/test_dmonitoringmodeld.py index af23f4690..daf7be663 100644 --- a/selfdrive/modeld/test_dmonitoringmodeld.py +++ b/selfdrive/modeld/test_dmonitoringmodeld.py @@ -1,13 +1,31 @@ import pickle import numpy as np +import pytest -from openpilot.selfdrive.modeld.dmonitoringmodeld import get_driverstate_packet, parse_model_output, slice_outputs -from openpilot.selfdrive.modeld.dmonitoringmodeld import METADATA_PATH +from openpilot.selfdrive.modeld.dmonitoringmodeld import get_driverstate_packet, get_model_paths, parse_model_output, slice_outputs -def test_sleep_probability_output(): - with open(METADATA_PATH, 'rb') as f: +@pytest.mark.parametrize("device_type, model_name", [ + ("mici", "dmonitoring_model_mici"), + ("tici", "dmonitoring_model"), + ("tizi", "dmonitoring_model"), +]) +def test_model_paths(device_type, model_name): + model_path, metadata_path = get_model_paths(device_type) + + assert model_path.name == f"{model_name}_tinygrad.pkl" + assert metadata_path.name == f"{model_name}_metadata.pkl" + + +@pytest.mark.parametrize("device_type, expected_sleep_prob", [ + ("mici", 0.), + ("tici", 0.5), + ("tizi", 0.5), +]) +def test_sleep_probability_output(device_type, expected_sleep_prob): + _, metadata_path = get_model_paths(device_type) + with open(metadata_path, 'rb') as f: metadata = pickle.load(f) output = np.zeros(metadata['output_shapes']['outputs'][1], dtype=np.float32) @@ -15,5 +33,5 @@ def test_sleep_probability_output(): parsed['raw_pred'] = b'' msg = get_driverstate_packet(parsed, 1, 0, 0., 0.) - assert msg.driverStateV2.leftDriverData.sleepProb == 0.5 - assert msg.driverStateV2.rightDriverData.sleepProb == 0.5 + assert msg.driverStateV2.leftDriverData.sleepProb == expected_sleep_prob + assert msg.driverStateV2.rightDriverData.sleepProb == expected_sleep_prob diff --git a/selfdrive/modeld/test_prebuilt_models.py b/selfdrive/modeld/test_prebuilt_models.py new file mode 100644 index 000000000..1b05e51d2 --- /dev/null +++ b/selfdrive/modeld/test_prebuilt_models.py @@ -0,0 +1,52 @@ +import hashlib +import json + +import pytest + +from openpilot.selfdrive.modeld import prebuilt_models + + +def write_outputs(models_dir, check_path, model_names): + checks = {} + for model_name in model_names: + outputs = {} + for suffix, contents in { + 'tinygrad.pkl': b'tinygrad', + 'metadata.pkl': b'metadata', + }.items(): + name = f'{model_name}_{suffix}' + (models_dir / name).write_bytes(contents) + outputs[name] = hashlib.sha256(contents).hexdigest() + checks[model_name] = {'outputs': outputs} + check_path.write_text(json.dumps(checks)) + + +@pytest.fixture +def packaged_models(tmp_path, monkeypatch): + models_dir = tmp_path / 'models' + models_dir.mkdir() + check_path = models_dir / 'prebuilt_check.json' + write_outputs(models_dir, check_path, prebuilt_models.MODEL_NAMES) + monkeypatch.setattr(prebuilt_models, 'MODELS_DIR', models_dir) + monkeypatch.setattr(prebuilt_models, 'CHECK_PATH', check_path) + return models_dir + + +@pytest.mark.parametrize("model_name", prebuilt_models.MODEL_NAMES) +def test_packaged_prebuilt_without_onnx(packaged_models, model_name): + assert prebuilt_models.packaged_prebuilt_matches(model_name) + assert not prebuilt_models.verify_prebuilt(model_name, 'flags') + + +@pytest.mark.parametrize("model_name", prebuilt_models.MODEL_NAMES) +def test_packaged_prebuilt_rejects_corrupt_output(packaged_models, model_name): + (packaged_models / f'{model_name}_tinygrad.pkl').write_bytes(b'corrupt') + + assert not prebuilt_models.packaged_prebuilt_matches(model_name) + + +@pytest.mark.parametrize("model_name", prebuilt_models.MODEL_NAMES) +def test_source_checkout_is_not_packaged_prebuilt(packaged_models, model_name): + (packaged_models / f'{model_name}.onnx').write_bytes(b'onnx') + + assert not prebuilt_models.packaged_prebuilt_matches(model_name) diff --git a/selfdrive/monitoring/dmonitoringd.py b/selfdrive/monitoring/dmonitoringd.py index ffefe3225..552b8fb12 100755 --- a/selfdrive/monitoring/dmonitoringd.py +++ b/selfdrive/monitoring/dmonitoringd.py @@ -4,7 +4,20 @@ from types import SimpleNamespace import cereal.messaging as messaging from openpilot.common.params import Params from openpilot.common.realtime import config_realtime_process -from openpilot.selfdrive.monitoring.policy import DriverMonitoring +from openpilot.selfdrive.monitoring.legacy_policy import DRIVER_MONITOR_SETTINGS as LegacySettings +from openpilot.selfdrive.monitoring.legacy_policy import DriverMonitoring as LegacyDriverMonitoring +from openpilot.selfdrive.monitoring.policy import DriverMonitoring as UpstreamDriverMonitoring +from openpilot.system.hardware import HARDWARE + + +def use_legacy_dm(device_type: str) -> bool: + return device_type == 'mici' + + +def create_driver_monitoring(device_type: str, rhd_saved: bool, always_on: bool): + if use_legacy_dm(device_type): + return LegacyDriverMonitoring(rhd_saved=rhd_saved, settings=LegacySettings(device_type), always_on=always_on) + return UpstreamDriverMonitoring(rhd_saved=rhd_saved, always_on=always_on) def get_dm_inputs(sm): @@ -25,7 +38,9 @@ def dmonitoringd_thread(): sm = messaging.SubMaster(['driverStateV2', 'liveCalibration', 'carState', 'selfdriveState', 'modelV2', 'carControl'], poll='driverStateV2') - DM = DriverMonitoring(rhd_saved=params.get_bool("IsRhdDetected"), always_on=params.get_bool("AlwaysOnDM")) + device_type = HARDWARE.get_device_type() + legacy_dm = use_legacy_dm(device_type) + DM = create_driver_monitoring(device_type, params.get_bool("IsRhdDetected"), params.get_bool("AlwaysOnDM")) demo_mode=False # 20Hz <- dmonitoringmodeld @@ -37,9 +52,9 @@ def dmonitoringd_thread(): valid = sm.all_checks() if demo_mode and sm.valid['driverStateV2']: - DM.run_step(get_dm_inputs(sm), demo=True) + DM.run_step(sm if legacy_dm else get_dm_inputs(sm), demo=True) elif valid: - DM.run_step(get_dm_inputs(sm), demo=demo_mode) + DM.run_step(sm if legacy_dm else get_dm_inputs(sm), demo=demo_mode) # publish dat = DM.get_state_packet(valid=valid) @@ -51,9 +66,10 @@ def dmonitoringd_thread(): demo_mode = params.get_bool("IsDriverViewEnabled") # save rhd virtual toggle every 5 mins + wheelpos_offsetter = DM.wheelpos.prob_offseter if legacy_dm else DM.wheelpos_offsetter if (sm['driverStateV2'].frameId % 6000 == 0 and not demo_mode and - DM.wheelpos_offsetter.filtered_stat.n > DM.settings._WHEELPOS_FILTER_MIN_COUNT and - DM.wheel_on_right == (DM.wheelpos_offsetter.filtered_stat.M > DM.settings._WHEELPOS_THRESHOLD)): + wheelpos_offsetter.filtered_stat.n > DM.settings._WHEELPOS_FILTER_MIN_COUNT and + DM.wheel_on_right == (wheelpos_offsetter.filtered_stat.M > DM.settings._WHEELPOS_THRESHOLD)): params.put_bool("IsRhdDetected", DM.wheel_on_right) def main(): diff --git a/selfdrive/monitoring/legacy_policy.py b/selfdrive/monitoring/legacy_policy.py new file mode 100644 index 000000000..c450fd724 --- /dev/null +++ b/selfdrive/monitoring/legacy_policy.py @@ -0,0 +1,497 @@ +from math import atan2 +import numpy as np + +from cereal import car, log +import cereal.messaging as messaging +from openpilot.selfdrive.selfdrived.events import Events +from openpilot.common.realtime import DT_DMON +from openpilot.common.filter_simple import FirstOrderFilter +from openpilot.common.params import Params +from openpilot.common.stat_live import RunningStatFilter +from openpilot.common.transformations.camera import DEVICE_CAMERAS +from openpilot.selfdrive.locationd.calibration_helpers import get_calibrated_rpy +from openpilot.system.hardware import HARDWARE + +EventName = log.OnroadEvent.EventName +AlertLevel = log.DriverMonitoringState.AlertLevel +MonitoringPolicy = log.DriverMonitoringState.MonitoringPolicy + + +def to_percent(v): + return int(min(max(v * 100., 0.), 100.)) + +# ****************************************************************************************** +# NOTE: To fork maintainers. +# Disabling or nerfing safety features will get you and your users banned from our servers. +# We recommend that you do not change these numbers from the defaults. +# ****************************************************************************************** + +class DRIVER_MONITOR_SETTINGS: + def __init__(self, device_type): + self._DT_DMON = DT_DMON + # ref (page15-16): https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:42018X1947&rid=2 + self._AWARENESS_TIME = 30. # passive wheeltouch total timeout + self._AWARENESS_PRE_TIME_TILL_TERMINAL = 15. + self._AWARENESS_PROMPT_TIME_TILL_TERMINAL = 6. + self._DISTRACTED_TIME = 11. # active monitoring total timeout + self._DISTRACTED_PRE_TIME_TILL_TERMINAL = 8. + self._DISTRACTED_PROMPT_TIME_TILL_TERMINAL = 6. + + self._FACE_THRESHOLD = 0.7 + self._EYE_THRESHOLD = 0.65 + self._SG_THRESHOLD = 0.9 + self._BLINK_THRESHOLD = 0.865 + + self._PHONE_THRESH = 0.75 if device_type == 'mici' else 0.4 + self._PHONE_THRESH2 = 15.0 + self._PHONE_MAX_OFFSET = 0.06 + self._PHONE_MIN_OFFSET = 0.025 + self._PHONE_DATA_AVG = 0.05 + self._PHONE_DATA_VAR = 3*0.005 + self._PHONE_MAX_COUNT = int(360 / self._DT_DMON) + + self._POSE_PITCH_THRESHOLD = 0.3133 + self._POSE_PITCH_THRESHOLD_SLACK = 0.3237 + self._POSE_PITCH_THRESHOLD_STRICT = self._POSE_PITCH_THRESHOLD + self._POSE_YAW_THRESHOLD = 0.4020 + self._POSE_YAW_THRESHOLD_SLACK = 0.5042 + self._POSE_YAW_THRESHOLD_STRICT = self._POSE_YAW_THRESHOLD + self._PITCH_NATURAL_OFFSET = 0.011 # initial value before offset is learned + self._PITCH_NATURAL_THRESHOLD = 0.449 + self._YAW_NATURAL_OFFSET = 0.075 # initial value before offset is learned + self._PITCH_NATURAL_VAR = 3*0.01 + self._YAW_NATURAL_VAR = 3*0.05 + self._PITCH_MAX_OFFSET = 0.124 + self._PITCH_MIN_OFFSET = -0.0881 + self._YAW_MAX_OFFSET = 0.289 + self._YAW_MIN_OFFSET = -0.0246 + + self._DCAM_UNCERTAIN_ALERT_THRESHOLD = 0.1 + self._DCAM_UNCERTAIN_RESET_COUNT = int(20 / self._DT_DMON) + self._POSESTD_THRESHOLD = 0.3 + self._HI_STD_FALLBACK_TIME = int(10 / self._DT_DMON) # fall back to wheel touch if model is uncertain for 10s + self._DISTRACTED_FILTER_TS = 0.25 # 0.6Hz + self._ALWAYS_ON_ALERT_MIN_SPEED = 11 + + self._POSE_CALIB_MIN_SPEED = 13 # 30 mph + self._POSE_OFFSET_MIN_COUNT = int(60 / self._DT_DMON) # valid data counts before calibration completes, 1min cumulative + self._POSE_OFFSET_MAX_COUNT = int(360 / self._DT_DMON) # stop deweighting new data after 6 min, aka "short term memory" + + self._WHEELPOS_CALIB_MIN_SPEED = 11 + self._WHEELPOS_THRESHOLD = 0.5 + self._WHEELPOS_FILTER_MIN_COUNT = int(15 / self._DT_DMON) # allow 15 seconds to converge wheel side + self._WHEELPOS_DATA_AVG = 0.03 + self._WHEELPOS_DATA_VAR = 3*5.5e-5 + self._WHEELPOS_MAX_COUNT = -1 + + self._RECOVERY_FACTOR_MAX = 5. # relative to minus step change + self._RECOVERY_FACTOR_MIN = 1.25 # relative to minus step change + + self._MAX_TERMINAL_ALERTS = 3 # not allowed to engage after 3 terminal alerts + self._MAX_TERMINAL_DURATION = int(30 / self._DT_DMON) # not allowed to engage after 30s of terminal alerts + +class DistractedType: + + NOT_DISTRACTED = 0 + DISTRACTED_POSE = 1 << 0 + DISTRACTED_BLINK = 1 << 1 + DISTRACTED_PHONE = 1 << 2 + +class DriverPose: + def __init__(self, settings): + pitch_filter_raw_priors = (settings._PITCH_NATURAL_OFFSET, settings._PITCH_NATURAL_VAR, 2) + yaw_filter_raw_priors = (settings._YAW_NATURAL_OFFSET, settings._YAW_NATURAL_VAR, 2) + self.yaw = 0. + self.pitch = 0. + self.roll = 0. + self.yaw_std = 0. + self.pitch_std = 0. + self.roll_std = 0. + self.pitch_offseter = RunningStatFilter(raw_priors=pitch_filter_raw_priors, max_trackable=settings._POSE_OFFSET_MAX_COUNT) + self.yaw_offseter = RunningStatFilter(raw_priors=yaw_filter_raw_priors, max_trackable=settings._POSE_OFFSET_MAX_COUNT) + self.calibrated = False + self.low_std = True + self.cfactor_pitch = 1. + self.cfactor_yaw = 1. + +class DriverProb: + def __init__(self, raw_priors, max_trackable): + self.prob = 0. + self.prob_offseter = RunningStatFilter(raw_priors=raw_priors, max_trackable=max_trackable) + self.prob_calibrated = False + +class DriverBlink: + def __init__(self): + self.left = 0. + self.right = 0. + + +# model output refers to center of undistorted+leveled image +EFL = 598.0 # focal length in K +cam = DEVICE_CAMERAS[("tici", "ar0231")] # corrected image has same size as raw +W, H = (cam.dcam.width, cam.dcam.height) # corrected image has same size as raw + +def face_orientation_from_net(angles_desc, pos_desc, rpy_calib): + # the output of these angles are in device frame + # so from driver's perspective, pitch is up and yaw is right + + pitch_net, yaw_net, roll_net = angles_desc + + face_pixel_position = ((pos_desc[0]+0.5)*W, (pos_desc[1]+0.5)*H) + yaw_focal_angle = atan2(face_pixel_position[0] - W//2, EFL) + pitch_focal_angle = atan2(face_pixel_position[1] - H//2, EFL) + + pitch = pitch_net + pitch_focal_angle + yaw = -yaw_net + yaw_focal_angle + + # no calib for roll + pitch -= rpy_calib[1] + yaw -= rpy_calib[2] + return roll_net, pitch, yaw + + +class DriverMonitoring: + def __init__(self, rhd_saved=False, settings=None, always_on=False): + # init policy settings + self.settings = settings if settings is not None else DRIVER_MONITOR_SETTINGS(device_type=HARDWARE.get_device_type()) + + # init driver status + wheelpos_filter_raw_priors = (self.settings._WHEELPOS_DATA_AVG, self.settings._WHEELPOS_DATA_VAR, 2) + phone_filter_raw_priors = (self.settings._PHONE_DATA_AVG, self.settings._PHONE_DATA_VAR, 2) + self.wheelpos = DriverProb(raw_priors=wheelpos_filter_raw_priors, max_trackable=self.settings._WHEELPOS_MAX_COUNT) + self.phone = DriverProb(raw_priors=phone_filter_raw_priors, max_trackable=self.settings._PHONE_MAX_COUNT) + self.pose = DriverPose(settings=self.settings) + self.blink = DriverBlink() + + self.always_on = always_on + self.distracted_types = [] + self.driver_distracted = False + self.driver_distraction_filter = FirstOrderFilter(0., self.settings._DISTRACTED_FILTER_TS, self.settings._DT_DMON) + self.wheel_on_right = False + self.wheel_on_right_last = None + self.wheel_on_right_default = rhd_saved + self.face_detected = False + self.terminal_alert_cnt = 0 + self.terminal_time = 0 + self.step_change = 0. + self.active_monitoring_mode = True + self.is_model_uncertain = False + self.hi_stds = 0 + self.threshold_pre = self.settings._DISTRACTED_PRE_TIME_TILL_TERMINAL / self.settings._DISTRACTED_TIME + self.threshold_prompt = self.settings._DISTRACTED_PROMPT_TIME_TILL_TERMINAL / self.settings._DISTRACTED_TIME + self.dcam_uncertain_cnt = 0 + self.dcam_reset_cnt = 0 + + self.params = Params() + self.too_distracted = self.params.get_bool("DriverTooDistracted") + + self._reset_awareness() + self._set_timers(active_monitoring=True) + self._reset_events() + + def _reset_awareness(self): + self.awareness = 1. + self.awareness_active = 1. + self.awareness_passive = 1. + + def _reset_events(self): + self.current_events = Events() + + def _set_timers(self, active_monitoring): + if self.active_monitoring_mode and self.awareness <= self.threshold_prompt: + if active_monitoring: + self.step_change = self.settings._DT_DMON / self.settings._DISTRACTED_TIME + else: + self.step_change = 0. + return # no exploit after orange alert + elif self.awareness <= 0.: + return + + if active_monitoring: + # when falling back from passive mode to active mode, reset awareness to avoid false alert + if not self.active_monitoring_mode: + self.awareness_passive = self.awareness + self.awareness = self.awareness_active + + self.threshold_pre = self.settings._DISTRACTED_PRE_TIME_TILL_TERMINAL / self.settings._DISTRACTED_TIME + self.threshold_prompt = self.settings._DISTRACTED_PROMPT_TIME_TILL_TERMINAL / self.settings._DISTRACTED_TIME + self.step_change = self.settings._DT_DMON / self.settings._DISTRACTED_TIME + self.active_monitoring_mode = True + else: + if self.active_monitoring_mode: + self.awareness_active = self.awareness + self.awareness = self.awareness_passive + + self.threshold_pre = self.settings._AWARENESS_PRE_TIME_TILL_TERMINAL / self.settings._AWARENESS_TIME + self.threshold_prompt = self.settings._AWARENESS_PROMPT_TIME_TILL_TERMINAL / self.settings._AWARENESS_TIME + self.step_change = self.settings._DT_DMON / self.settings._AWARENESS_TIME + self.active_monitoring_mode = False + + def _set_policy(self, brake_disengage_prob, car_speed): + bp = brake_disengage_prob + k1 = max(-0.00156*((car_speed-16)**2)+0.6, 0.2) + bp_normal = max(min(bp / k1, 0.5),0) + self.pose.cfactor_pitch = np.interp(bp_normal, [0, 0.5], + [self.settings._POSE_PITCH_THRESHOLD_SLACK, + self.settings._POSE_PITCH_THRESHOLD_STRICT]) / self.settings._POSE_PITCH_THRESHOLD + self.pose.cfactor_yaw = np.interp(bp_normal, [0, 0.5], + [self.settings._POSE_YAW_THRESHOLD_SLACK, + self.settings._POSE_YAW_THRESHOLD_STRICT]) / self.settings._POSE_YAW_THRESHOLD + + def _get_distracted_types(self): + distracted_types = [] + + if not self.pose.calibrated: + pitch_error = self.pose.pitch - self.settings._PITCH_NATURAL_OFFSET + yaw_error = self.pose.yaw - self.settings._YAW_NATURAL_OFFSET + else: + pitch_error = self.pose.pitch - min(max(self.pose.pitch_offseter.filtered_stat.mean(), + self.settings._PITCH_MIN_OFFSET), self.settings._PITCH_MAX_OFFSET) + yaw_error = self.pose.yaw - min(max(self.pose.yaw_offseter.filtered_stat.mean(), + self.settings._YAW_MIN_OFFSET), self.settings._YAW_MAX_OFFSET) + pitch_error = 0 if pitch_error > 0 else abs(pitch_error) # no positive pitch limit + yaw_error = abs(yaw_error) + + pitch_threshold = self.settings._POSE_PITCH_THRESHOLD * self.pose.cfactor_pitch if self.pose.calibrated else self.settings._PITCH_NATURAL_THRESHOLD + yaw_threshold = self.settings._POSE_YAW_THRESHOLD * self.pose.cfactor_yaw + + if pitch_error > pitch_threshold or yaw_error > yaw_threshold: + distracted_types.append(DistractedType.DISTRACTED_POSE) + + if (self.blink.left + self.blink.right)*0.5 > self.settings._BLINK_THRESHOLD: + distracted_types.append(DistractedType.DISTRACTED_BLINK) + + if self.phone.prob_calibrated: + using_phone = self.phone.prob > max(min(self.phone.prob_offseter.filtered_stat.M, self.settings._PHONE_MAX_OFFSET), self.settings._PHONE_MIN_OFFSET) \ + * self.settings._PHONE_THRESH2 + else: + using_phone = self.phone.prob > self.settings._PHONE_THRESH + if using_phone: + distracted_types.append(DistractedType.DISTRACTED_PHONE) + + return distracted_types + + def _update_states(self, driver_state, cal_rpy, car_speed, op_engaged, standstill, demo_mode=False): + rhd_pred = driver_state.wheelOnRightProb + # calibrates only when there's movement and either face detected + if car_speed > self.settings._WHEELPOS_CALIB_MIN_SPEED and (driver_state.leftDriverData.faceProb > self.settings._FACE_THRESHOLD or + driver_state.rightDriverData.faceProb > self.settings._FACE_THRESHOLD): + self.wheelpos.prob_offseter.push_and_update(rhd_pred) + + self.wheelpos.prob_calibrated = self.wheelpos.prob_offseter.filtered_stat.n > self.settings._WHEELPOS_FILTER_MIN_COUNT + + if self.wheelpos.prob_calibrated or demo_mode: + self.wheel_on_right = self.wheelpos.prob_offseter.filtered_stat.M > self.settings._WHEELPOS_THRESHOLD + else: + self.wheel_on_right = self.wheel_on_right_default # use default/saved if calibration is unfinished + # make sure no switching when engaged + if op_engaged and self.wheel_on_right_last is not None and self.wheel_on_right_last != self.wheel_on_right and not demo_mode: + self.wheel_on_right = self.wheel_on_right_last + driver_data = driver_state.rightDriverData if self.wheel_on_right else driver_state.leftDriverData + if not all(len(x) > 0 for x in (driver_data.faceOrientation, driver_data.facePosition, + driver_data.faceOrientationStd, driver_data.facePositionStd)): + return + + self.face_detected = driver_data.faceProb > self.settings._FACE_THRESHOLD + self.pose.roll, self.pose.pitch, self.pose.yaw = face_orientation_from_net(driver_data.faceOrientation, driver_data.facePosition, cal_rpy) + if self.wheel_on_right: + self.pose.yaw *= -1 + self.wheel_on_right_last = self.wheel_on_right + self.pose.pitch_std = driver_data.faceOrientationStd[0] + self.pose.yaw_std = driver_data.faceOrientationStd[1] + model_std_max = max(self.pose.pitch_std, self.pose.yaw_std) + self.pose.low_std = model_std_max < self.settings._POSESTD_THRESHOLD + self.blink.left = driver_data.leftBlinkProb * (driver_data.leftEyeProb > self.settings._EYE_THRESHOLD) \ + * (driver_data.sunglassesProb < self.settings._SG_THRESHOLD) + self.blink.right = driver_data.rightBlinkProb * (driver_data.rightEyeProb > self.settings._EYE_THRESHOLD) \ + * (driver_data.sunglassesProb < self.settings._SG_THRESHOLD) + self.phone.prob = driver_data.phoneProb + + self.distracted_types = self._get_distracted_types() + self.driver_distracted = (DistractedType.DISTRACTED_PHONE in self.distracted_types + or DistractedType.DISTRACTED_POSE in self.distracted_types + or DistractedType.DISTRACTED_BLINK in self.distracted_types) \ + and driver_data.faceProb > self.settings._FACE_THRESHOLD and self.pose.low_std + self.driver_distraction_filter.update(self.driver_distracted) + + # update offseter + # only update when driver is actively driving the car above a certain speed + if self.face_detected and car_speed > self.settings._POSE_CALIB_MIN_SPEED and self.pose.low_std and (not op_engaged or not self.driver_distracted): + self.pose.pitch_offseter.push_and_update(self.pose.pitch) + self.pose.yaw_offseter.push_and_update(self.pose.yaw) + self.phone.prob_offseter.push_and_update(self.phone.prob) + + self.pose.calibrated = self.pose.pitch_offseter.filtered_stat.n > self.settings._POSE_OFFSET_MIN_COUNT and \ + self.pose.yaw_offseter.filtered_stat.n > self.settings._POSE_OFFSET_MIN_COUNT + self.phone.prob_calibrated = self.phone.prob_offseter.filtered_stat.n > self.settings._POSE_OFFSET_MIN_COUNT + + if self.face_detected and not self.driver_distracted: + if model_std_max > self.settings._DCAM_UNCERTAIN_ALERT_THRESHOLD: + if not standstill: + self.dcam_uncertain_cnt += 1 + self.dcam_reset_cnt = 0 + else: + self.dcam_reset_cnt += 1 + if self.dcam_reset_cnt > self.settings._DCAM_UNCERTAIN_RESET_COUNT: + self.dcam_uncertain_cnt = 0 + + self.is_model_uncertain = self.hi_stds > self.settings._HI_STD_FALLBACK_TIME + self._set_timers(self.face_detected and not self.is_model_uncertain) + if self.face_detected and not self.pose.low_std and not self.driver_distracted: + self.hi_stds += 1 + elif self.face_detected and self.pose.low_std: + self.hi_stds = 0 + + def _update_events(self, driver_engaged, op_engaged, standstill, wrong_gear, car_speed): + self._reset_events() + # Block engaging until ignition cycle after max number or time of distractions + if self.terminal_alert_cnt >= self.settings._MAX_TERMINAL_ALERTS or \ + self.terminal_time >= self.settings._MAX_TERMINAL_DURATION: + if not self.too_distracted: + self.params.put_bool_nonblocking("DriverTooDistracted", True) + self.too_distracted = True + + # Always-on distraction lockout is temporary + if self.too_distracted or (self.always_on and self.awareness <= self.threshold_prompt): + self.current_events.add(EventName.tooDistracted) + + always_on_valid = self.always_on and not wrong_gear + if (driver_engaged and self.awareness > 0 and not self.active_monitoring_mode) or \ + (not always_on_valid and not op_engaged) or \ + (always_on_valid and not op_engaged and self.awareness <= 0): + # always reset on disengage with normal mode; disengage resets only on red if always on + self._reset_awareness() + return + + driver_attentive = self.driver_distraction_filter.x < 0.37 + awareness_prev = self.awareness + + if (driver_attentive and self.face_detected and self.pose.low_std and self.awareness > 0): + if driver_engaged: + self._reset_awareness() + return + # only restore awareness when paying attention and alert is not red + self.awareness = min(self.awareness + ((self.settings._RECOVERY_FACTOR_MAX-self.settings._RECOVERY_FACTOR_MIN)* + (1.-self.awareness)+self.settings._RECOVERY_FACTOR_MIN)*self.step_change, 1.) + if self.awareness == 1.: + self.awareness_passive = min(self.awareness_passive + self.step_change, 1.) + # don't display alert banner when awareness is recovering and has cleared orange + if self.awareness > self.threshold_prompt: + return + + _reaching_audible = self.awareness - self.step_change <= self.threshold_prompt + _reaching_terminal = self.awareness - self.step_change <= 0 + standstill_orange_exemption = standstill and _reaching_audible + always_on_red_exemption = always_on_valid and not op_engaged and _reaching_terminal + always_on_lowspeed_exemption = always_on_valid and not op_engaged and car_speed < self.settings._ALWAYS_ON_ALERT_MIN_SPEED + + certainly_distracted = self.driver_distraction_filter.x > 0.63 and self.driver_distracted and self.face_detected + maybe_distracted = self.hi_stds > self.settings._HI_STD_FALLBACK_TIME or not self.face_detected + + if certainly_distracted or maybe_distracted: + # should always be counting if distracted unless at standstill (lowspeed for always-on) and reaching orange + # also will not be reaching 0 if DM is active when not engaged + if not (standstill_orange_exemption or always_on_red_exemption or (always_on_lowspeed_exemption and _reaching_audible)): + self.awareness = max(self.awareness - self.step_change, -0.1) + + alert = None + if self.awareness <= 0.: + # terminal red alert: disengagement required + alert = EventName.driverDistracted3 if self.active_monitoring_mode else EventName.driverUnresponsive3 + self.terminal_time += 1 + if awareness_prev > 0.: + self.terminal_alert_cnt += 1 + elif self.awareness <= self.threshold_prompt: + # prompt orange alert + alert = EventName.driverDistracted2 if self.active_monitoring_mode else EventName.driverUnresponsive2 + elif self.awareness <= self.threshold_pre and not always_on_lowspeed_exemption: + # pre green alert + alert = EventName.driverDistracted1 if self.active_monitoring_mode else EventName.driverUnresponsive1 + + if alert is not None: + self.current_events.add(alert) + + def get_state_packet(self, valid=True): + dat = messaging.new_message('driverMonitoringState', valid=valid) + dm = dat.driverMonitoringState + + dm.lockout = self.too_distracted + dm.alert3Count = self.terminal_alert_cnt + dm.noResponseCount = int(self.terminal_time >= self.settings._MAX_TERMINAL_DURATION) + dm.noResponseForceDecel = self.awareness <= 0. + dm.alwaysOn = self.always_on + dm.alwaysOnLockout = self.always_on and self.awareness <= self.threshold_prompt + if self.awareness <= 0.: + dm.alertLevel = AlertLevel.three + elif self.awareness <= self.threshold_prompt: + dm.alertLevel = AlertLevel.two + elif self.awareness <= self.threshold_pre: + dm.alertLevel = AlertLevel.one + dm.activePolicy = MonitoringPolicy.vision if self.active_monitoring_mode else MonitoringPolicy.wheeltouch + dm.isRHD = self.wheel_on_right + dm.rhdCalibration.calibratedPercent = to_percent(self.wheelpos.prob_offseter.filtered_stat.n / self.settings._WHEELPOS_FILTER_MIN_COUNT) + dm.rhdCalibration.offset = self.wheelpos.prob_offseter.filtered_stat.M + + dm.visionPolicyState.awarenessPercent = to_percent(self.awareness if self.active_monitoring_mode else self.awareness_active) + dm.visionPolicyState.awarenessStep = self.step_change if self.active_monitoring_mode else 0. + dm.visionPolicyState.isDistracted = self.driver_distracted + dm.visionPolicyState.distractedTypes.pose = DistractedType.DISTRACTED_POSE in self.distracted_types + dm.visionPolicyState.distractedTypes.eye = DistractedType.DISTRACTED_BLINK in self.distracted_types + dm.visionPolicyState.distractedTypes.phone = DistractedType.DISTRACTED_PHONE in self.distracted_types + dm.visionPolicyState.faceDetected = self.face_detected + dm.visionPolicyState.pose.pitch = self.pose.pitch + dm.visionPolicyState.pose.yaw = self.pose.yaw + dm.visionPolicyState.pose.calibrated = self.pose.calibrated + dm.visionPolicyState.pose.pitchCalib.calibratedPercent = to_percent(self.pose.pitch_offseter.filtered_stat.n / self.settings._POSE_OFFSET_MIN_COUNT) + dm.visionPolicyState.pose.pitchCalib.offset = self.pose.pitch_offseter.filtered_stat.M + dm.visionPolicyState.pose.yawCalib.calibratedPercent = to_percent(self.pose.yaw_offseter.filtered_stat.n / self.settings._POSE_OFFSET_MIN_COUNT) + dm.visionPolicyState.pose.yawCalib.offset = self.pose.yaw_offseter.filtered_stat.M + dm.visionPolicyState.pose.uncertainty = max(self.pose.pitch_std, self.pose.yaw_std) + dm.visionPolicyState.wheeltouchFallbackPercent = to_percent(self.hi_stds / self.settings._HI_STD_FALLBACK_TIME) + dm.visionPolicyState.uncertainOffroadAlertPercent = to_percent(self.dcam_uncertain_cnt / int(60 / self.settings._DT_DMON)) + + dm.wheeltouchPolicyState.awarenessPercent = to_percent(self.awareness if not self.active_monitoring_mode else self.awareness_passive) + dm.wheeltouchPolicyState.awarenessStep = self.step_change if not self.active_monitoring_mode else 0. + return dat + + def run_step(self, sm, demo=False): + if demo: + highway_speed = 30 + enabled = True + wrong_gear = False + standstill = False + driver_engaged = False + brake_disengage_prob = 1.0 + rpyCalib = [0., 0., 0.] + else: + highway_speed = sm['carState'].vEgo + enabled = sm['selfdriveState'].enabled or sm['carControl'].latActive + wrong_gear = sm['carState'].gearShifter not in (car.CarState.GearShifter.drive, car.CarState.GearShifter.low) + standstill = sm['carState'].standstill + driver_engaged = sm['carState'].steeringPressed or sm['carState'].gasPressed + brake_disengage_prob = sm['modelV2'].meta.disengagePredictions.brakeDisengageProbs[0] # brake disengage prob in next 2s + calib_rpy = get_calibrated_rpy(sm['liveCalibration']) + rpyCalib = calib_rpy.tolist() if calib_rpy is not None else [0., 0., 0.] + self._set_policy( + brake_disengage_prob=brake_disengage_prob, + car_speed=highway_speed, + ) + + # Parse data from dmonitoringmodeld + self._update_states( + driver_state=sm['driverStateV2'], + cal_rpy=rpyCalib, + car_speed=highway_speed, + op_engaged=enabled, + standstill=standstill, + demo_mode=demo, + ) + + # Update distraction events + self._update_events( + driver_engaged=driver_engaged, + op_engaged=enabled, + standstill=standstill, + wrong_gear=wrong_gear, + car_speed=highway_speed + ) diff --git a/selfdrive/monitoring/test_dmonitoringd.py b/selfdrive/monitoring/test_dmonitoringd.py index 8aae92e3c..750489d2a 100644 --- a/selfdrive/monitoring/test_dmonitoringd.py +++ b/selfdrive/monitoring/test_dmonitoringd.py @@ -2,7 +2,28 @@ from types import SimpleNamespace import pytest -from openpilot.selfdrive.monitoring.dmonitoringd import get_dm_inputs +from cereal import log +from openpilot.selfdrive.monitoring.dmonitoringd import create_driver_monitoring, get_dm_inputs, use_legacy_dm +from openpilot.selfdrive.monitoring.legacy_policy import DriverMonitoring as LegacyDriverMonitoring +from openpilot.selfdrive.monitoring.policy import DriverMonitoring as UpstreamDriverMonitoring + + +@pytest.mark.parametrize("device_type, expected_type", [ + ("mici", LegacyDriverMonitoring), + ("tici", UpstreamDriverMonitoring), + ("tizi", UpstreamDriverMonitoring), +]) +def test_policy_selection(device_type, expected_type): + assert use_legacy_dm(device_type) == (device_type == "mici") + assert isinstance(create_driver_monitoring(device_type, False, False), expected_type) + + +def test_mici_uses_legacy_thresholds(): + dm = create_driver_monitoring("mici", False, False) + + assert dm.settings._DISTRACTED_TIME == 11. + assert dm.settings._AWARENESS_TIME == 30. + assert dm.settings._PHONE_THRESH == 0.75 @pytest.mark.parametrize("enabled, lat_active, expected", [ @@ -22,3 +43,19 @@ def test_iq_enabled_adapter(enabled, lat_active, expected): } assert get_dm_inputs(sm)['selfdriveState'].enabled == expected + + +def test_legacy_policy_packet_uses_shared_schema(): + dm = create_driver_monitoring("mici", False, False) + dm.awareness = 0. + dm.terminal_alert_cnt = 2 + dm.terminal_time = dm.settings._MAX_TERMINAL_DURATION + dm.too_distracted = True + + state = dm.get_state_packet().driverMonitoringState + + assert state.lockout + assert state.alert3Count == 2 + assert state.noResponseCount == 1 + assert state.noResponseForceDecel + assert state.alertLevel == log.DriverMonitoringState.AlertLevel.three diff --git a/selfdrive/pandad/panda_safety.cc b/selfdrive/pandad/panda_safety.cc index d0eb03a0b..27bff40e8 100644 --- a/selfdrive/pandad/panda_safety.cc +++ b/selfdrive/pandad/panda_safety.cc @@ -90,6 +90,6 @@ void PandaSafety::setSafetyMode(const std::vector ¶ms_string) { } bool PandaSafety::getOffroadMode() { - auto offroad_mode = params_.getBool("OffroadMode"); + auto offroad_mode = params_.getBool("IQAlwaysOffroad"); return offroad_mode; } diff --git a/selfdrive/selfdrived/events.py b/selfdrive/selfdrived/events.py index a76a62003..5f4750845 100755 --- a/selfdrive/selfdrived/events.py +++ b/selfdrive/selfdrived/events.py @@ -82,6 +82,8 @@ def below_steer_speed_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.S def too_distracted_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: if sm['driverMonitoringState'].lockout: mins_left = sm['driverMonitoringState'].lockoutMinutesRemaining + if mins_left <= 0: + return NoEntryAlert("Distraction Level Too High", priority=Priority.HIGH) return NoEntryAlert("Too Distracted", f"{mins_left} minute{'s' if mins_left != 1 else ''} Left", priority=Priority.HIGH) return NoEntryAlert("Pay Attention to Engage", priority=Priority.HIGH) @@ -233,7 +235,8 @@ def invalid_lkas_setting_alert(CP: car.CarParams, CS: car.CarState, sm: messagin return NormalPermanentAlert(title, text) -def invalid_lkas_setting_no_entry_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: +def invalid_lkas_setting_no_entry_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, + metric: bool, soft_disable_time: int, personality) -> Alert: if CP.brand == "tesla": return NoEntryAlert("FSD / Autosteer is active", alert_text_1="Dashcam Mode") return NoEntryAlert("Invalid LKAS setting") diff --git a/selfdrive/selfdrived/tests/test_driver_monitoring.py b/selfdrive/selfdrived/tests/test_driver_monitoring.py index 3d47a9bd6..71bf8dd34 100644 --- a/selfdrive/selfdrived/tests/test_driver_monitoring.py +++ b/selfdrive/selfdrived/tests/test_driver_monitoring.py @@ -30,3 +30,11 @@ def test_driver_monitoring_lockout_alert(): assert alert.alert_text_1 == "5 minutes Left" assert alert.alert_text_2 == "Too Distracted" + + +def test_legacy_driver_monitoring_lockout_alert(): + callback = EVENTS[EventName.tooDistracted][ET.NO_ENTRY] + sm = {'driverMonitoringState': SimpleNamespace(lockout=True, lockoutMinutesRemaining=0)} + alert = callback(None, None, sm, False, 0, None) + + assert alert.alert_text_2 == "Distraction Level Too High" diff --git a/selfdrive/ui/layouts/settings/developer.py b/selfdrive/ui/layouts/settings/developer.py index c2004e924..7a45da0b0 100644 --- a/selfdrive/ui/layouts/settings/developer.py +++ b/selfdrive/ui/layouts/settings/developer.py @@ -9,7 +9,7 @@ from openpilot.system.ui.lib.application import gui_app from openpilot.system.ui.lib.multilang import tr, tr_noop if gui_app.iqpilot_ui(): - from openpilot.system.ui.iqpilot.widgets.list_view import toggle_item + from openpilot.system.ui.iqwidgets.widgets.list_view import toggle_item # Description constants DESCRIPTIONS = { diff --git a/selfdrive/ui/layouts/settings/device.py b/selfdrive/ui/layouts/settings/device.py index 30aebc75d..f65eb7a31 100644 --- a/selfdrive/ui/layouts/settings/device.py +++ b/selfdrive/ui/layouts/settings/device.py @@ -21,7 +21,7 @@ from openpilot.system.ui.widgets.option_dialog import MultiOptionDialog from openpilot.system.ui.widgets.scroller_tici import Scroller if gui_app.iqpilot_ui(): - from openpilot.system.ui.iqpilot.widgets.list_view import button_item + from openpilot.system.ui.iqwidgets.widgets.list_view import button_item # Description constants DESCRIPTIONS = { diff --git a/selfdrive/ui/layouts/settings/software.py b/selfdrive/ui/layouts/settings/software.py index 9dc8e3eb9..712eb9fbd 100644 --- a/selfdrive/ui/layouts/settings/software.py +++ b/selfdrive/ui/layouts/settings/software.py @@ -12,7 +12,7 @@ from openpilot.system.ui.widgets.option_dialog import MultiOptionDialog from openpilot.system.ui.widgets.scroller_tici import Scroller if gui_app.iqpilot_ui(): - from openpilot.system.ui.iqpilot.widgets.list_view import button_item + from openpilot.system.ui.iqwidgets.widgets.list_view import button_item # TODO: remove this. updater fails to respond on startup if time is not correct UPDATED_TIMEOUT = 10 # seconds to wait for updated to respond @@ -237,7 +237,7 @@ class SoftwareLayout(Widget): def _on_auth_branch(self): # Collect username then token; store encrypted and signal the updater to # re-check (refreshing the available-branch list for private repos). - from openpilot.system.ui.iqpilot.widgets.list_view import open_text_prompt + from openpilot.system.ui.iqwidgets.widgets.list_view import open_text_prompt from openpilot.common import git_creds creds = git_creds.get_credentials() diff --git a/selfdrive/ui/layouts/settings/toggles.py b/selfdrive/ui/layouts/settings/toggles.py index 9974ebf60..eda7e3bfa 100644 --- a/selfdrive/ui/layouts/settings/toggles.py +++ b/selfdrive/ui/layouts/settings/toggles.py @@ -10,8 +10,8 @@ from openpilot.system.ui.widgets import DialogResult from openpilot.selfdrive.ui.ui_state import ui_state if gui_app.iqpilot_ui(): - from openpilot.system.ui.iqpilot.widgets.list_view import toggle_item - from openpilot.system.ui.iqpilot.widgets.list_view import multiple_button_item + from openpilot.system.ui.iqwidgets.widgets.list_view import toggle_item + from openpilot.system.ui.iqwidgets.widgets.list_view import multiple_button_item from openpilot.iqpilot.ui.layouts.settings.iq_dynamic import IQDynamicLayout PERSONALITY_TO_INT = log.LongitudinalPersonality.schema.enumerants diff --git a/selfdrive/ui/layouts/settings_hub.py b/selfdrive/ui/layouts/settings_hub.py index 29d1c7e8e..7142f498f 100644 --- a/selfdrive/ui/layouts/settings_hub.py +++ b/selfdrive/ui/layouts/settings_hub.py @@ -162,7 +162,7 @@ class SettingsHubLayout(Widget): self._power_rect = rl.Rectangle(0, 0, 0, 0) self._offroad_rect = rl.Rectangle(0, 0, 0, 0) self._night_rect = rl.Rectangle(0, 0, 0, 0) - self._quiet_rect = rl.Rectangle(0, 0, 0, 0) + self._silent_rect = rl.Rectangle(0, 0, 0, 0) # Build the grid from the settings panels, skipping ones hidden from navigation (e.g. Cruise). panels = self._settings._panels @@ -442,14 +442,14 @@ class SettingsHubLayout(Widget): self._power_rect = rl.Rectangle(bx + BUBBLE_SIZE + 18, cy - BUBBLE_SIZE / 2, BUBBLE_SIZE, BUBBLE_SIZE) self._offroad_rect = rl.Rectangle(bx + 2 * (BUBBLE_SIZE + 18), cy - BUBBLE_SIZE / 2, BUBBLE_SIZE, BUBBLE_SIZE) self._night_rect = rl.Rectangle(bx + 3 * (BUBBLE_SIZE + 18), cy - BUBBLE_SIZE / 2, BUBBLE_SIZE, BUBBLE_SIZE) - self._quiet_rect = rl.Rectangle(bx + 4 * (BUBBLE_SIZE + 18), cy - BUBBLE_SIZE / 2, BUBBLE_SIZE, BUBBLE_SIZE) + self._silent_rect = rl.Rectangle(bx + 4 * (BUBBLE_SIZE + 18), cy - BUBBLE_SIZE / 2, BUBBLE_SIZE, BUBBLE_SIZE) mouse = rl.get_mouse_position() for r, icon in ((self._restart_rect, self._restart_icon), (self._power_rect, self._power_icon)): pressed = self.is_pressed and rl.check_collision_point_rec(mouse, r) rl.draw_circle(int(r.x + BUBBLE_SIZE / 2), int(cy), BUBBLE_SIZE / 2, BUBBLE_RED_PRESSED if pressed else BUBBLE_RED) rl.draw_texture(icon, int(r.x + (BUBBLE_SIZE - icon.width) / 2), int(cy - icon.height / 2), rl.WHITE) # Always Offroad bubble (grey when off, teal when on) - offroad_active = ui_state.params.get_bool("OffroadMode") + offroad_active = ui_state.params.get_bool("IQAlwaysOffroad") pressed = self.is_pressed and rl.check_collision_point_rec(mouse, self._offroad_rect) offroad_color = (BUBBLE_TEAL_PRESSED if pressed else BUBBLE_TEAL) if offroad_active else (BUBBLE_GREY_PRESSED if pressed else BUBBLE_GREY) rl.draw_circle(int(self._offroad_rect.x + BUBBLE_SIZE / 2), int(cy), BUBBLE_SIZE / 2, offroad_color) @@ -465,15 +465,15 @@ class SettingsHubLayout(Widget): int(self._night_rect.x + (BUBBLE_SIZE - self._night_icon.width) / 2), int(cy - self._night_icon.height / 2), rl.WHITE) - # Quiet Mode bubble (grey bell when off, red bell-with-slash when on) - quiet_active = ui_state.params.get_bool("IQAlertSilence") - pressed = self.is_pressed and rl.check_collision_point_rec(mouse, self._quiet_rect) - quiet_color = (BUBBLE_RED_PRESSED if pressed else BUBBLE_RED) if quiet_active else (BUBBLE_GREY_PRESSED if pressed else BUBBLE_GREY) - quiet_icon = self._bell_slash_icon if quiet_active else self._bell_icon - rl.draw_circle(int(self._quiet_rect.x + BUBBLE_SIZE / 2), int(cy), BUBBLE_SIZE / 2, quiet_color) - rl.draw_texture(quiet_icon, - int(self._quiet_rect.x + (BUBBLE_SIZE - quiet_icon.width) / 2), - int(cy - quiet_icon.height / 2), rl.WHITE) + # Silent Mode bubble (grey bell when off, red bell-with-slash when on) + silent_active = ui_state.params.get_bool("IQAlertSilence") + pressed = self.is_pressed and rl.check_collision_point_rec(mouse, self._silent_rect) + silent_color = (BUBBLE_RED_PRESSED if pressed else BUBBLE_RED) if silent_active else (BUBBLE_GREY_PRESSED if pressed else BUBBLE_GREY) + silent_icon = self._bell_slash_icon if silent_active else self._bell_icon + rl.draw_circle(int(self._silent_rect.x + BUBBLE_SIZE / 2), int(cy), BUBBLE_SIZE / 2, silent_color) + rl.draw_texture(silent_icon, + int(self._silent_rect.x + (BUBBLE_SIZE - silent_icon.width) / 2), + int(cy - silent_icon.height / 2), rl.WHITE) # Small version label, top-right of the header row. Its scroll viewport # starts after the title, so long branch text does not clip at the bubbles. @@ -517,7 +517,7 @@ class SettingsHubLayout(Widget): self._toggle_offroad_prompt() elif rl.check_collision_point_rec(mouse_pos, self._night_rect): ui_state.params.put_bool("NightMode", not ui_state.params.get_bool("NightMode")) - elif rl.check_collision_point_rec(mouse_pos, self._quiet_rect): + elif rl.check_collision_point_rec(mouse_pos, self._silent_rect): ui_state.params.put_bool("IQAlertSilence", not ui_state.params.get_bool("IQAlertSilence")) def _reboot_prompt(self): @@ -544,13 +544,13 @@ class SettingsHubLayout(Widget): def _toggle_offroad_prompt(self): if ui_state.engaged: - gui_app.set_modal_overlay(alert_dialog(tr("Disengage to Enter Always Offroad Mode"))) + gui_app.set_modal_overlay(alert_dialog(tr("Disengage before forcing offroad"))) return - active = ui_state.params.get_bool("OffroadMode") - msg = tr("Are you sure you want to exit Always Offroad mode?") if active else tr("Are you sure you want to enter Always Offroad mode?") + active = ui_state.params.get_bool("IQAlwaysOffroad") + msg = tr("Leave forced-offroad mode now?") if active else tr("Switch the device into forced-offroad mode?") def _confirm(result: int): if result == DialogResult.CONFIRM and not ui_state.engaged: - ui_state.params.put_bool("OffroadMode", not active) + ui_state.params.put_bool("IQAlwaysOffroad", not active) gui_app.set_modal_overlay(ConfirmDialog(msg, tr("Confirm")), callback=_confirm) diff --git a/selfdrive/ui/mici/layouts/settings/display.py b/selfdrive/ui/mici/layouts/settings/display.py index e2a16a61a..894360574 100644 --- a/selfdrive/ui/mici/layouts/settings/display.py +++ b/selfdrive/ui/mici/layouts/settings/display.py @@ -27,7 +27,7 @@ class DisplayLayoutMici(NavScroller): self._force_mici = BigParamControl("force mici UI", "ForceSmallUI") self._display_bright = MappedParamToggle("display brightness", "Brightness", _DISPLAY_BRIGHT_OPTIONS, _DISPLAY_BRIGHT_VALUES) - self._onroad_bright = MappedParamToggle("onroad brightness", "OnroadScreenOffBrightness", + self._onroad_bright = MappedParamToggle("driving brightness", "OnroadScreenOffBrightness", _ONROAD_BRIGHT_OPTIONS, _ONROAD_BRIGHT_VALUES) self._delay = MappedParamToggle("brightness delay", "OnroadScreenOffTimer", _DELAY_OPTIONS, _DELAY_VALUES) diff --git a/selfdrive/ui/mici/layouts/settings/models.py b/selfdrive/ui/mici/layouts/settings/models.py index 772696951..23fd33833 100644 --- a/selfdrive/ui/mici/layouts/settings/models.py +++ b/selfdrive/ui/mici/layouts/settings/models.py @@ -10,7 +10,7 @@ import pyray as rl from cereal import custom -from openpilot.system.ui.iqpilot.widgets.helpers.glyphs import draw_star +from openpilot.system.ui.iqwidgets.widgets.helpers.glyphs import draw_star from openpilot.selfdrive.ui.ui_state import ui_state from openpilot.system.ui.lib.application import gui_app @@ -96,10 +96,10 @@ class ModelsLayoutMici(NavScroller): self._redownload_icon = gui_app.texture("icons_mici/settings/device/update.png", 56, 56, keep_aspect_ratio=True) self._reset_icon = gui_app.texture("icons_mici/wheel.png", 56, 56) - self._current = BigButton("current model") + self._current = BigButton("active model") self._current.set_click_callback(self._show_folders) - self._cancel = BigButton("cancel download") + self._cancel = BigButton("stop download") self._cancel.set_click_callback(self._cancel_model_request) self._cancel.set_visible(self._is_downloading) @@ -107,30 +107,30 @@ class ModelsLayoutMici(NavScroller): self._redownload.set_click_callback(self._confirm_redownload_model) self._redownload.set_enabled(self._can_redownload) - self._refresh = BigButton("refresh model list") + self._refresh = BigButton("reload model list") self._refresh.set_click_callback(lambda: ui_state.params.put("ModelManager_LastSyncTime", 0)) - self._supercombo = GreyBigButton("driving model") + self._supercombo = GreyBigButton("combined model") self._supercombo.set_visible(False) - self._vision = GreyBigButton("vision model") + self._vision = GreyBigButton("vision weights") self._vision.set_visible(False) - self._policy = GreyBigButton("policy model") + self._policy = GreyBigButton("policy weights") self._policy.set_visible(False) - self._clear = BigButton("clear model cache") + self._clear = BigButton("purge model cache") self._clear.set_click_callback(self._confirm_clear_cache) self._clear.set_enabled(lambda: ui_state.is_offroad()) - self._lagd = BigParamControl("live learning steer delay", "LagdToggle") - self._sw_delay = MappedParamToggle("software delay", "LagdToggleDelay", _DELAY_OPTIONS, _DELAY_VALUES) - self._sw_delay.set_visible(lambda: not self._lagd._checked) + self._steer_delay = BigParamControl("self-tuning steer delay", "IQLiveSteerDelay") + self._sw_delay = MappedParamToggle("manual delay offset", "IQSoftwareSteerDelay", _DELAY_OPTIONS, _DELAY_VALUES) + self._sw_delay.set_visible(lambda: not self._steer_delay._checked) - self._lane_turn = BigParamControl("use lane turn desires", "IQLaneTurnDesire") + self._lane_turn = BigParamControl("low-speed turn planning", "IQLaneTurnDesire") self._lane_speed = MappedParamToggle("lane turn speed", "IQLaneTurnValue", _LANE_TURN_OPTIONS, _LANE_TURN_VALUES) self._lane_speed.set_visible(lambda: self._lane_turn._checked) self._main_items = [self._current, self._cancel, self._supercombo, self._vision, self._policy, self._redownload, self._refresh, self._clear, - self._lagd, self._sw_delay, self._lane_turn, self._lane_speed] + self._steer_delay, self._sw_delay, self._lane_turn, self._lane_speed] self._scroller.add_widgets(self._main_items) @property @@ -368,7 +368,7 @@ class ModelsLayoutMici(NavScroller): self._last_cache_t = now self._clear.set_value(f"{self._calculate_cache_size():.1f} MB") - self._update_lagd_subtext() + self._update_steer_delay_subtext() def _progress_target_bundle(self): try: @@ -445,21 +445,21 @@ class ModelsLayoutMici(NavScroller): return f"failed: {_display_model_name(bundle)}" return self._active_model_name() - def _update_lagd_subtext(self): - if self._lagd._checked: + def _update_steer_delay_subtext(self): + if self._steer_delay._checked: try: - self._lagd.set_value(f"live {ui_state.sm['liveDelay'].lateralDelay:.3f} s") + self._steer_delay.set_value(f"measured {ui_state.sm['liveDelay'].lateralDelay:.3f} s") except Exception: - self._lagd.set_value("") + self._steer_delay.set_value("") return try: - sw = float(ui_state.params.get("LagdToggleDelay", return_default=True)) + sw = float(ui_state.params.get("IQSoftwareSteerDelay", return_default=True)) except (TypeError, ValueError): sw = 0.2 if ui_state.CP is not None: - self._lagd.set_value(f"total {ui_state.CP.steerActuatorDelay + sw:.2f} s") + self._steer_delay.set_value(f"total {ui_state.CP.steerActuatorDelay + sw:.2f} s") else: - self._lagd.set_value(f"+{sw:.2f} s software") + self._steer_delay.set_value(f"+{sw:.2f} s offset") def _active_model_name(self) -> str: if not self._has_active_bundle_param(): @@ -495,5 +495,5 @@ class ModelsLayoutMici(NavScroller): def show_event(self): super().show_event() - for w in (self._lagd, self._sw_delay, self._lane_turn, self._lane_speed): + for w in (self._steer_delay, self._sw_delay, self._lane_turn, self._lane_speed): w.refresh() diff --git a/selfdrive/ui/mici/layouts/settings/network/wifi_ui.py b/selfdrive/ui/mici/layouts/settings/network/wifi_ui.py index ea4863355..cfca7246a 100644 --- a/selfdrive/ui/mici/layouts/settings/network/wifi_ui.py +++ b/selfdrive/ui/mici/layouts/settings/network/wifi_ui.py @@ -99,6 +99,32 @@ class ForgetButton(Widget): rl.draw_texture_ex(self._trash_txt, (trash_x, trash_y), 0, 1.0, rl.WHITE) +class DisconnectButton(Widget): + MARGIN = 12 + RADIUS = 42 + # the only round button art is the destructive red one, and dropping a connection is not destructive + BG = rl.Color(56, 56, 61, 255) + BG_PRESSED = rl.Color(84, 84, 90, 255) + + def __init__(self, disconnect_network: Callable): + super().__init__() + self._disconnect_network = disconnect_network + self._slash_txt = gui_app.texture("icons_mici/settings/network/wifi_strength_slash.png", 38, 38) + self.set_rect(rl.Rectangle(0, 0, 84 + self.MARGIN * 2, 84 + self.MARGIN * 2)) + + def _handle_mouse_release(self, mouse_pos: MousePos): + super()._handle_mouse_release(mouse_pos) + dlg = BigConfirmationDialog("slide to\ndisconnect", gui_app.texture("icons_mici/settings/network/wifi_strength_slash.png", 54, 54), + self._disconnect_network) + gui_app.push_widget(dlg) + + def _render(self, _): + center = rl.Vector2(self._rect.x + self._rect.width / 2, self._rect.y + self._rect.height / 2) + rl.draw_circle_v(center, self.RADIUS, self.BG_PRESSED if self.is_pressed else self.BG) + rl.draw_texture_ex(self._slash_txt, (center.x - self._slash_txt.width / 2, center.y - self._slash_txt.height / 2), + 0, 1.0, rl.WHITE) + + class WifiButton(BigButton): LABEL_PADDING = 98 LABEL_WIDTH = 402 - 98 - 28 @@ -111,9 +137,11 @@ class WifiButton(BigButton): self._connecting_ssid = connecting_ssid self._wifi_icon = WifiIcon(network) self._forget_btn = ForgetButton(self._forget_network) + self._disconnect_btn = DisconnectButton(self._disconnect_network) self._check_txt = gui_app.texture("icons_mici/setup/driver_monitoring/dm_check.png", 32, 32) self._network_missing = False self._network_forgetting = False + self._network_disconnecting = False self._wrong_password = False @property @@ -142,9 +170,18 @@ class WifiButton(BigButton): self._network_forgetting = True self._wifi_manager.forget_connection(self._network.ssid) + def _disconnect_network(self): + if self._network_disconnecting: + return + self._network_disconnecting = True + self._wifi_manager.disconnect_connection(self._network.ssid) + def on_forgotten(self): self._network_forgetting = False + def on_disconnected(self): + self._network_disconnecting = False + def set_network_missing(self, missing: bool): self._network_missing = missing self._wifi_icon.set_network_missing(missing) @@ -171,31 +208,44 @@ class WifiButton(BigButton): @property def _show_forget_btn(self) -> bool: - if self._is_tethering or self._network_forgetting: + if self._is_tethering or self._network_forgetting or self._show_disconnect_btn: return False return (self._is_saved and not self._wrong_password) or self._is_connecting + @property + def _show_disconnect_btn(self) -> bool: + # 402 units of row cannot hold both buttons plus the status word, so the slot is contextual: + # disconnect while connected, forget once it is only saved + if self._is_tethering or self._network_forgetting or self._network_disconnecting: + return False + return self._is_connected + def _handle_mouse_release(self, mouse_pos: MousePos): if self._show_forget_btn and rl.check_collision_point_rec(mouse_pos, self._forget_btn.rect): return + if self._show_disconnect_btn and rl.check_collision_point_rec(mouse_pos, self._disconnect_btn.rect): + return super()._handle_mouse_release(mouse_pos) def _get_label_font_size(self): return 48 def set_touch_valid_callback(self, touch_callback: Callable[[], bool]) -> None: - super().set_touch_valid_callback(lambda: touch_callback() and not self._forget_btn.is_pressed) + super().set_touch_valid_callback(lambda: touch_callback() and not self._forget_btn.is_pressed and not self._disconnect_btn.is_pressed) self._forget_btn.set_touch_valid_callback(touch_callback) + self._disconnect_btn.set_touch_valid_callback(touch_callback) def _update_state(self): super()._update_state() if any((self._network_missing, self._is_connecting, self._is_connected, self._network_forgetting, - self._network.security_type == SecurityType.UNSUPPORTED)): + self._network_disconnecting, self._network.security_type == SecurityType.UNSUPPORTED)): self.set_enabled(False) self._sub_label.set_color(rl.Color(255, 255, 255, int(255 * 0.585))) self._sub_label.set_font_weight(FontWeight.ROMAN) if self._network_forgetting: self.set_value("forgetting...") + elif self._network_disconnecting: + self.set_value("disconnecting...") elif self._is_connecting: self.set_value("starting..." if self._is_tethering else "connecting...") elif self._is_connected: @@ -219,9 +269,10 @@ class WifiButton(BigButton): if self.value: sub_label_x = self._rect.x + self.LABEL_HORIZONTAL_PADDING label_y = btn_y + self._rect.height - self.LABEL_VERTICAL_PADDING - sub_label_w = self.SUB_LABEL_WIDTH - (self._forget_btn.rect.width if self._show_forget_btn else 0) + sub_label_w = self.SUB_LABEL_WIDTH - (self._forget_btn.rect.width if self._show_forget_btn else 0) \ + - (self._disconnect_btn.rect.width if self._show_disconnect_btn else 0) sub_label_height = self._sub_label.get_content_height(sub_label_w) - if self._is_connected and not self._network_forgetting: + if self._is_connected and not self._network_forgetting and not self._network_disconnecting: check_y = int(label_y - sub_label_height + (sub_label_height - self._check_txt.height) / 2) rl.draw_texture_ex(self._check_txt, rl.Vector2(sub_label_x, check_y), 0.0, 1.0, rl.Color(255, 255, 255, int(255 * 0.9 * 0.65))) sub_label_x += self._check_txt.width + 14 @@ -230,11 +281,19 @@ class WifiButton(BigButton): self._wifi_icon.render(rl.Rectangle(self._rect.x + 30, btn_y + 30, self._wifi_icon.rect.width, self._wifi_icon.rect.height)) + btn_right = self._rect.x + self._rect.width if self._show_forget_btn: self._forget_btn.render(rl.Rectangle( - self._rect.x + self._rect.width - self._forget_btn.rect.width, + btn_right - self._forget_btn.rect.width, btn_y + self._rect.height - self._forget_btn.rect.height, self._forget_btn.rect.width, self._forget_btn.rect.height)) + btn_right -= self._forget_btn.rect.width + + if self._show_disconnect_btn: + self._disconnect_btn.render(rl.Rectangle( + btn_right - self._disconnect_btn.rect.width, + btn_y + self._rect.height - self._disconnect_btn.rect.height, + self._disconnect_btn.rect.width, self._disconnect_btn.rect.height)) class ScanningButton(BigButton): @@ -298,6 +357,9 @@ class WifiUIMici(NavScroller): def _on_disconnected(self): self._connecting = None + for btn in self._scroller.items: + if isinstance(btn, WifiButton): + btn.on_disconnected() def _on_forgotten(self, ssid=None): self._connecting = None diff --git a/selfdrive/ui/mici/layouts/settings/steering.py b/selfdrive/ui/mici/layouts/settings/steering.py index 9141291f0..70711d2fd 100644 --- a/selfdrive/ui/mici/layouts/settings/steering.py +++ b/selfdrive/ui/mici/layouts/settings/steering.py @@ -47,7 +47,7 @@ class SabSettingsPanel(NavScroller): self._main_cruise = BigParamControl("Availability While Cruise Changes", "AolMainCruiseAllowed") self._brake = SabBrakeToggle() self._mode = MappedParamToggle("Brake Response Mode", "AolSteeringMode", - ["remain active", "standby", "disengage"], [0, 1, 2]) + ["stay engaged", "standby", "disengage"], [0, 1, 2]) self._scroller.add_widgets([self._main_cruise, self._brake, self._mode]) def show_event(self): @@ -66,10 +66,10 @@ class SabSettingsPanel(NavScroller): class LaneChangePanel(NavScroller): def __init__(self): super().__init__() - self._timer = MappedParamToggle("Auto Lane Change", "AutoLaneChangeTimer", - ["off", "nudge", "nudgeless", "0.5 s", "1 s", "2 s", "3 s"], + self._timer = MappedParamToggle("Auto Lane Change", "IQLaneChangeTimer", + ["off", "nudge", "no nudge", "0.5 s", "1 s", "2 s", "3 s"], [-1, 0, 1, 2, 3, 4, 5]) - self._bsm_delay = BigParamControl("Delay with Blind Spot", "AutoLaneChangeBsmDelay") + self._bsm_delay = BigParamControl("Delay with Blind Spot", "IQLaneChangeBsmDelay") self._continuous = BigParamControl("Continuous Changes", "LaneChangeContinuous") self._scroller.add_widgets([self._timer, self._bsm_delay, self._continuous]) @@ -77,17 +77,17 @@ class LaneChangePanel(NavScroller): super().show_event() self._timer.refresh() enable_bsm = bool(ui_state.CP and ui_state.CP.enableBsm) - if not enable_bsm and ui_state.params.get_bool("AutoLaneChangeBsmDelay"): - ui_state.params.remove("AutoLaneChangeBsmDelay") + if not enable_bsm and ui_state.params.get_bool("IQLaneChangeBsmDelay"): + ui_state.params.remove("IQLaneChangeBsmDelay") self._bsm_delay.refresh() self._bsm_delay.set_enabled( - enable_bsm and int(ui_state.params.get("AutoLaneChangeTimer", return_default=True)) > AutoLaneChangeMode.NUDGE + enable_bsm and int(ui_state.params.get("IQLaneChangeTimer", return_default=True)) > AutoLaneChangeMode.NUDGE ) self._continuous.refresh() class SteeringLayoutMici(NavScroller): - _AOL_MODES = ["remain active", "standby", "disengage"] + _AOL_MODES = ["stay engaged", "standby", "disengage"] def __init__(self): super().__init__() diff --git a/selfdrive/ui/mici/layouts/settings/vehicle.py b/selfdrive/ui/mici/layouts/settings/vehicle.py index 571c575b2..be0f29d59 100644 --- a/selfdrive/ui/mici/layouts/settings/vehicle.py +++ b/selfdrive/ui/mici/layouts/settings/vehicle.py @@ -73,7 +73,7 @@ class VehicleLayoutMici(NavScroller): toggle_callback=self._on_toyota_long) self._hyundai_tuning = MappedParamToggle("hyundai long. tuning", "HyundaiLongitudinalTuning", ["off", "dynamic", "predictive"], [0, 1, 2]) - self._subaru_snag = BigParamControl("stop and go (beta)", "SubaruStopAndGo") + self._subaru_snag = BigParamControl("creep from standstill (beta)", "SubaruStopAndGo") self._subaru_manual = BigParamControl("stop and go manual brake", "SubaruStopAndGoManualParkingBrake") self._vw_pq_hca = BigParamControl("PQ HCA status 7 mode", "pqhca5or7Toggle") self._vw_lateral = BigParamControl("lateral when cruise faulted", "AllowLateralWhenLongUnavailable") diff --git a/selfdrive/ui/mici/layouts/settings/visuals.py b/selfdrive/ui/mici/layouts/settings/visuals.py index 1abbba93c..67f7cce90 100644 --- a/selfdrive/ui/mici/layouts/settings/visuals.py +++ b/selfdrive/ui/mici/layouts/settings/visuals.py @@ -10,7 +10,7 @@ class VisualsLayoutMici(NavScroller): def __init__(self): super().__init__() self._blind_spot = BigParamControl("Blind Spot Warnings", "BlindSpot") - self._steering_arc = BigParamControl("Steering Arc", "TorqueBar") + self._steering_arc = BigParamControl("Steering Effort Arc", "TorqueBar") self._road_name = BigParamControl("Road Name", "RoadNameToggle") self._turn_signals = BigParamControl("Turn Signals", "ShowTurnSignals") self._accel_bar = BigParamControl("Acceleration Bar", "RocketFuel") diff --git a/selfdrive/ui/onroad/model_renderer.py b/selfdrive/ui/onroad/model_renderer.py index 4e12fab1b..ec10c6456 100644 --- a/selfdrive/ui/onroad/model_renderer.py +++ b/selfdrive/ui/onroad/model_renderer.py @@ -52,6 +52,22 @@ class LeadVehicle: fill_alpha: int = 0 +@dataclass +class VisionDot: + x: float + y: float + tx: float + ty: float + radius: float + tradius: float + alpha: float = 0.0 + talpha: float = 1.0 + rgb: tuple[int, int, int] | None = None + + +_VD_EASE = 0.4 + + class ModelRenderer(Widget, IQModelRenderer): def __init__(self): Widget.__init__(self) @@ -66,14 +82,14 @@ class ModelRenderer(Widget, IQModelRenderer): self._road_edge_stds = np.zeros(2, dtype=np.float32) self._lead_vehicles = [LeadVehicle(), LeadVehicle()] self._track_dots: list[LeadVehicle] = [] - self._vision_dots: list[LeadVehicle] = [] - self._sign_dots: list[tuple[float, float, float, rl.Color]] = [] + self._vision_dots: list[VisionDot] = [] + self._vt_frame = -1 self._frame_transform: np.ndarray | None = None self._frame_transform_wide = False self._path_offset_z = HEIGHT_INIT[0] self._counter = -1 self._camera_offset = ui_state.params.get("CameraOffset", return_default=True) if ui_state.active_bundle else 0.0 - self._ambient_dots = ui_state.params.get_bool("AmbientTrackDots") + self._ambient_dots = bool(ui_state.params.get("AmbientTrackDots", return_default=True)) # Initialize ModelPoints objects self._path = ModelPoints() self._lane_lines = [ModelPoints() for _ in range(4)] @@ -127,7 +143,7 @@ class ModelRenderer(Widget, IQModelRenderer): if self._counter % 60 == 0: self._camera_offset = ui_state.params.get("CameraOffset", return_default=True) if ui_state.active_bundle else 0.0 - self._ambient_dots = ui_state.params.get_bool("AmbientTrackDots") + self._ambient_dots = bool(ui_state.params.get("AmbientTrackDots", return_default=True)) self._counter += 1 if sm.updated['carParams']: @@ -164,7 +180,6 @@ class ModelRenderer(Widget, IQModelRenderer): if self._ambient_dots: self._update_vision_dots(sm) self._draw_vision_dots() - self._draw_sign_dots() if render_lead_indicator and radar_state: if self._ambient_dots: @@ -230,20 +245,34 @@ class ModelRenderer(Widget, IQModelRenderer): self._track_dots.append(LeadVehicle(center=(float(x), float(y)), radius=float(radius), sz=float(sz))) def _update_vision_dots(self, sm): - self._vision_dots = [] - if (self._frame_transform is None or self._frame_transform_wide or - not sm.alive['iqVehicleTracks'] or not sm.valid['iqVehicleTracks']): - return + # iqVehicleTracks arrives at a few Hz; the dots are eased toward the latest + # detection every render frame so they glide instead of teleporting. + hidden = (self._frame_transform is None or + not sm.alive['iqVehicleTracks'] or not sm.valid['iqVehicleTracks']) + if not hidden: + vt = sm['iqVehicleTracks'] + hidden = bool(vt.wide) != self._frame_transform_wide or vt.frameWidth == 0 or vt.frameHeight == 0 - self._sign_dots = [] - vt = sm['iqVehicleTracks'] + if hidden: + for d in self._vision_dots: + d.talpha = 0.0 + elif vt.frameId != self._vt_frame: + self._vt_frame = vt.frameId + self._retarget_vision_dots(vt) + + for d in self._vision_dots: + d.x += (d.tx - d.x) * _VD_EASE + d.y += (d.ty - d.y) * _VD_EASE + d.radius += (d.tradius - d.radius) * _VD_EASE + d.alpha += (d.talpha - d.alpha) * _VD_EASE + self._vision_dots = [d for d in self._vision_dots if d.alpha > 0.02 or d.talpha > 0.0] + + def _retarget_vision_dots(self, vt): fw, fh = vt.frameWidth, vt.frameHeight - if fw == 0 or fh == 0: - return - + m = self._frame_transform occupied = [d.center for d in self._lead_vehicles + self._track_dots if d.center is not None] - m = self._frame_transform + targets = [] for t in vt.tracks: is_vehicle = t.label in VEHICLE_TRACK_LABELS sign_color = SIGN_TRACK_COLORS.get(t.label) @@ -256,18 +285,34 @@ class ModelRenderer(Widget, IQModelRenderer): if not (self._rect.x <= x <= self._rect.x + self._rect.width and self._rect.y <= y <= self._rect.y + self._rect.height): continue - box_h = (t.y2 - t.y1) * fh * m[1, 1] radius = float(np.clip(box_h * 0.35, 14.0, 40.0)) - if sign_color is not None: - self._sign_dots.append((float(x), float(y), min(radius, 22.0), sign_color)) - continue + targets.append((x, y, min(radius, 22.0), (sign_color.r, sign_color.g, sign_color.b))) + elif not any((x - ox) ** 2 + (y - oy) ** 2 < (radius * 2.2) ** 2 for ox, oy in occupied): + targets.append((x, y, radius, None)) - if any((x - ox) ** 2 + (y - oy) ** 2 < (radius * 2.2) ** 2 for ox, oy in occupied): - continue + dots = self._vision_dots + used = [False] * len(dots) + for tx, ty, tr, rgb in targets: + best, best_d2 = -1, 1e18 + for i, d in enumerate(dots): + if used[i] or (d.rgb is None) != (rgb is None): + continue + d2 = (d.x - tx) ** 2 + (d.y - ty) ** 2 + if d2 < best_d2: + best, best_d2 = i, d2 + if best >= 0 and best_d2 <= (max(tr, dots[best].radius) * 3.0) ** 2: + d = dots[best] + used[best] = True + d.tx, d.ty, d.tradius, d.talpha, d.rgb = tx, ty, tr, 1.0, rgb + else: + dots.append(VisionDot(x=tx, y=ty, tx=tx, ty=ty, radius=tr, tradius=tr, alpha=0.0, talpha=1.0, rgb=rgb)) + used.append(True) - self._vision_dots.append(LeadVehicle(center=(float(x), float(y)), radius=radius, sz=radius)) + for i, d in enumerate(dots): + if not used[i]: + d.talpha = 0.0 def _update_model(self, lead, path_x_array): """Update model visualization data based on model message""" @@ -411,17 +456,17 @@ class ModelRenderer(Widget, IQModelRenderer): draw_polygon(self._rect, self._path.projected_points, gradient=gradient) def _draw_vision_dots(self): - src = rl.Rectangle(0, 0, self._lead_orb.width, self._lead_orb.height) for dot in self._vision_dots: - cx, cy = dot.center - r = dot.radius - dest = rl.Rectangle(cx, cy, r * 2.0, r * 2.0) - rl.draw_texture_pro(self._lead_orb, src, dest, rl.Vector2(r, r), 0.0, rl.Color(255, 255, 255, 90)) - - def _draw_sign_dots(self): - for x, y, r, color in self._sign_dots: - rl.draw_circle(int(x), int(y), r, color) - rl.draw_circle_lines(int(x), int(y), r, rl.Color(255, 255, 255, 160)) + a = dot.alpha + if a <= 0.02: + continue + x, y, r = int(dot.x), int(dot.y), dot.radius + if dot.rgb is None: + # soft teal glow, brighter in the center fading to transparent at the edge + rl.draw_circle_gradient(x, y, r, rl.Color(120, 235, 225, int(165 * a)), rl.Color(0, 150, 150, 0)) + else: + rl.draw_circle_gradient(x, y, r, rl.Color(dot.rgb[0], dot.rgb[1], dot.rgb[2], int(210 * a)), + rl.Color(dot.rgb[0], dot.rgb[1], dot.rgb[2], 0)) def _draw_track_dots(self): src = rl.Rectangle(0, 0, self._lead_orb.width, self._lead_orb.height) diff --git a/selfdrive/ui/ui_state.py b/selfdrive/ui/ui_state.py index d82f7c056..f18176371 100644 --- a/selfdrive/ui/ui_state.py +++ b/selfdrive/ui/ui_state.py @@ -189,7 +189,7 @@ class IQDevice: def _set_awake(self, on: bool): if on and self._params.get("DeviceBootMode", return_default=True) == 1: - self._params.put_bool("OffroadMode", True) + self._params.put_bool("IQAlwaysOffroad", True) @staticmethod def set_onroad_brightness(_ui_state, awake: bool, cur_brightness: float) -> float: diff --git a/system/flockd.service b/system/flockd.service new file mode 100644 index 000000000..78e6bcf7a --- /dev/null +++ b/system/flockd.service @@ -0,0 +1,34 @@ +# Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos + +[Unit] +Description=Konn3kt Flock/ALPR RF Detector +Documentation=https://gitlvb.teallvbs.xyz/teal/iqpilot +After=bluetooth.service dbus.service NetworkManager.service +Wants=bluetooth.service dbus.service +StartLimitIntervalSec=300 +StartLimitBurst=10 + +[Service] +Type=simple +User=comma +AmbientCapabilities=CAP_SYS_NICE +Environment="IQPILOT_SOURCE_ROOT=/data/openpilot/openpilot" +Environment="PYTHONPATH=/usr/libexec/iqpilot/python:/data/openpilot" +Environment="PYTHONSAFEPATH=1" +Environment="PATH=/usr/local/venv/bin:/usr/sbin:/usr/bin:/sbin:/bin" +WorkingDirectory=/data/openpilot +ExecStartPre=/bin/bash -c 'for i in $(seq 1 120); do if [ -x /usr/libexec/iqpilot/iqpilot_bundle_runner ]; then exit 0; fi; echo "Waiting for iqpilot_bundle_runner..."; sleep 5; done; exit 1' +ExecStartPre=/bin/bash -c 'if [ -f /data/openpilot/artifacts/runtime/ensure_private_installed.sh ]; then bash /data/openpilot/artifacts/runtime/ensure_private_installed.sh || true; fi' +ExecStart=/bin/bash -lc 'exec /usr/libexec/iqpilot/iqpilot_bundle_runner --bundle iqpilot_hephaestusd_private --mode python-module --entry iqpilot_private.konn3kt.flockd.flockd --daemon-name flockd' +TimeoutStartSec=600 +Restart=always +RestartSec=15 +StandardOutput=journal +StandardError=journal +PrivateTmp=yes +NoNewPrivileges=false +ProtectSystem=full +ProtectHome=no + +[Install] +WantedBy=multi-user.target diff --git a/system/hardware/base.py b/system/hardware/base.py index 455dcfad9..6dac5f662 100644 --- a/system/hardware/base.py +++ b/system/hardware/base.py @@ -200,6 +200,9 @@ class HardwareBase(ABC): def reboot_modem(self): pass + def recover_sim_detection(self) -> bool: + return False + def get_networks(self): return None diff --git a/system/hardware/hardwared.py b/system/hardware/hardwared.py index 03af45836..8a9a7e0ec 100755 --- a/system/hardware/hardwared.py +++ b/system/hardware/hardwared.py @@ -204,6 +204,7 @@ def hw_state_thread(end_event, hw_queue): modem_configured = False modem_missing_count = 0 modem_restart_count = 0 + sim_detection_recovered = False while not end_event.is_set(): # these are expensive calls. update every 10s @@ -254,6 +255,10 @@ def hw_state_thread(end_event, hw_queue): HARDWARE.configure_modem() modem_configured = True + if modem_configured and not sim_detection_recovered and HARDWARE.recover_sim_detection(): + cloudlog.event("sim missing with hot-swap detect armed, rebooting modem with detect disabled", error=True) + sim_detection_recovered = True + prev_hw_state = hw_state except Exception: cloudlog.exception("Error getting hardware state") @@ -462,7 +467,7 @@ def hardware_thread(end_event, hw_queue) -> None: startup_conditions["device_booted"] = startup_conditions.get("device_booted", False) or HARDWARE.booted() # user-forced status (Always Offroad can be temporarily overridden) - offroad_mode = params.get_bool("OffroadMode") + offroad_mode = params.get_bool("IQAlwaysOffroad") force_onroad_until = params.get("ForceOnroadUntil", return_default=True) now = int(time.time()) force_onroad_active = offroad_mode and force_onroad_until > now @@ -549,15 +554,17 @@ def hardware_thread(end_event, hw_queue) -> None: som_power_draw = HARDWARE.get_som_power_draw() msg.deviceState.somPowerDrawW = som_power_draw - # FastSleep deep standby: shed heavy processes at low battery instead of shutting down, - # recover on ignition or once the alternator is charging + # FastSleep deep standby: shed heavy processes once parked with the screen idled off + # (or at low battery) instead of shutting down, recover on ignition or once the + # alternator is charging fast_sleep = params.get_bool("FastSleep") if fast_sleep and not tesla_no_sleep: if low_power: if onroad_conditions["ignition"] or power_monitor.car_voltage_mV >= (VBATT_LOW_POWER_EXIT * 1e3): low_power = False else: - low_power = power_monitor.should_enter_low_power(onroad_conditions["ignition"], in_car, off_ts) + screen_off = msg.deviceState.screenBrightnessPercent < 1e-3 + low_power = power_monitor.should_enter_low_power(onroad_conditions["ignition"], in_car, off_ts, screen_off) else: low_power = False diff --git a/system/hardware/power_monitoring.py b/system/hardware/power_monitoring.py index ff7adfa70..a72ee5804 100644 --- a/system/hardware/power_monitoring.py +++ b/system/hardware/power_monitoring.py @@ -13,11 +13,13 @@ CAR_CHARGING_RATE_W = 45 VBATT_PAUSE_CHARGING = 11.8 # Lower limit on the LPF car battery voltage -# FastSleep (deep standby): enter low power at the normal shutdown voltage, shut down -# at a lower floor, exit once the alternator is charging +# FastSleep (deep standby): enter low power once parked with the screen idled off, or +# immediately at the normal shutdown voltage; shut down at a lower floor, exit once the +# alternator is charging VBATT_LOW_POWER_ENTRY = 11.8 VBATT_LOW_POWER_EXIT = 12.8 VBATT_HARD_SHUTDOWN = 11.5 +LOW_POWER_ENTRY_TIME_S = 300 MAX_TIME_OFFROAD_S = 30*3600 MIN_ON_TIME_S = 3600 DELAY_SHUTDOWN_TIME_S = 300 # Wait at least DELAY_SHUTDOWN_TIME_S seconds after offroad_time to shutdown. @@ -124,14 +126,18 @@ class PowerMonitoring: return 0 < iq_max_time_val_s <= offroad_time # FastSleep: see if we should enter low power mode instead of shutting down - def should_enter_low_power(self, ignition: bool, in_car: bool, offroad_timestamp: float | None) -> bool: + def should_enter_low_power(self, ignition: bool, in_car: bool, offroad_timestamp: float | None, screen_off: bool) -> bool: if offroad_timestamp is None or ignition or not in_car: return False if not self.params.get_bool("FastSleep"): return False offroad_time = time.monotonic() - offroad_timestamp - return (self.car_voltage_mV < (VBATT_LOW_POWER_ENTRY * 1e3) and - offroad_time > VOLTAGE_SHUTDOWN_MIN_OFFROAD_TIME_S) + # a healthy battery rests above VBATT_LOW_POWER_ENTRY, so parked entry must be + # time-based; the voltage trigger stays as the sagging-battery fast path + low_voltage = (self.car_voltage_mV < (VBATT_LOW_POWER_ENTRY * 1e3) and + offroad_time > VOLTAGE_SHUTDOWN_MIN_OFFROAD_TIME_S) + parked_idle = screen_off and offroad_time > LOW_POWER_ENTRY_TIME_S + return low_voltage or parked_idle # See if we need to shutdown def should_shutdown(self, ignition: bool, in_car: bool, offroad_timestamp: float | None, started_seen: bool): @@ -141,12 +147,15 @@ class PowerMonitoring: now = time.monotonic() should_shutdown = False offroad_time = (now - offroad_timestamp) - vbatt_min = VBATT_HARD_SHUTDOWN if self.params.get_bool("FastSleep") else VBATT_PAUSE_CHARGING + fast_sleep = self.params.get_bool("FastSleep") + vbatt_min = VBATT_HARD_SHUTDOWN if fast_sleep else VBATT_PAUSE_CHARGING low_voltage_shutdown = (self.car_voltage_mV < (vbatt_min * 1e3) and offroad_time > VOLTAGE_SHUTDOWN_MIN_OFFROAD_TIME_S) should_shutdown |= self.max_time_offroad_exceeded(offroad_time) should_shutdown |= low_voltage_shutdown - should_shutdown |= (self.car_battery_capacity_uWh <= 0) + # the 30 Wh bookkeeping model empties within hours at offroad draw regardless of the + # real battery state; under FastSleep the measured voltage floors govern instead + should_shutdown |= (self.car_battery_capacity_uWh <= 0) and not fast_sleep should_shutdown &= not ignition should_shutdown &= (not self.params.get_bool("DisablePowerDown")) should_shutdown &= in_car diff --git a/system/hardware/tests/test_power_monitoring.py b/system/hardware/tests/test_power_monitoring.py index 451efcd73..c0b014673 100644 --- a/system/hardware/tests/test_power_monitoring.py +++ b/system/hardware/tests/test_power_monitoring.py @@ -2,7 +2,8 @@ import pytest from openpilot.common.params import Params from openpilot.system.hardware.power_monitoring import PowerMonitoring, CAR_BATTERY_CAPACITY_uWh, \ - CAR_CHARGING_RATE_W, VBATT_PAUSE_CHARGING, DELAY_SHUTDOWN_TIME_S, MAX_TIME_OFFROAD_S + CAR_CHARGING_RATE_W, VBATT_PAUSE_CHARGING, DELAY_SHUTDOWN_TIME_S, MAX_TIME_OFFROAD_S, \ + VBATT_HARD_SHUTDOWN, LOW_POWER_ENTRY_TIME_S # Create fake time ssb = 0. @@ -232,3 +233,59 @@ class TestPowerMonitoring: result = pm.max_time_offroad_exceeded(offroad_time_s) assert result == expected_result + + # FastSleep must not shut down on the empty bookkeeping model while voltage is healthy + def test_fast_sleep_ignores_battery_capacity_model(self, mocker): + self.params.put_bool("FastSleep", True) + self.params.put("MaxTimeOffroad", 0) + try: + pm_patch(mocker, "HARDWARE.get_current_power_draw", 0) + pm = PowerMonitoring() + pm.car_battery_capacity_uWh = 0 + start_time = ssb + for _ in range(DELAY_SHUTDOWN_TIME_S + 100): + pm.calculate(GOOD_VOLTAGE, False) + assert not pm.should_shutdown(False, True, start_time, True) + finally: + self.params.put_bool("FastSleep", False) + + # FastSleep still shuts down below the hard voltage floor + def test_fast_sleep_hard_voltage_floor(self, mocker): + self.params.put_bool("FastSleep", True) + try: + pm_patch(mocker, "HARDWARE.get_current_power_draw", 0) + pm = PowerMonitoring() + pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh + start_time = ssb + for _ in range(DELAY_SHUTDOWN_TIME_S + 100): + pm.calculate((VBATT_HARD_SHUTDOWN - 0.5) * 1e3, False) + assert pm.should_shutdown(False, True, start_time, True) + finally: + self.params.put_bool("FastSleep", False) + + def test_fast_sleep_low_power_entry(self, mocker): + self.params.put_bool("FastSleep", True) + try: + pm_patch(mocker, "HARDWARE.get_current_power_draw", 0) + + # parked with the screen idled off: time-based entry at healthy voltage + pm = PowerMonitoring() + start_time = ssb + for _ in range(LOW_POWER_ENTRY_TIME_S + 10): + pm.calculate(GOOD_VOLTAGE, False) + assert pm.should_enter_low_power(False, True, start_time, screen_off=True) + assert not pm.should_enter_low_power(False, True, start_time, screen_off=False) + assert not pm.should_enter_low_power(True, True, start_time, screen_off=True) + assert not pm.should_enter_low_power(False, False, start_time, screen_off=True) + + # sagging battery: voltage entry regardless of screen state + pm = PowerMonitoring() + start_time = ssb + for _ in range(100): + pm.calculate((VBATT_HARD_SHUTDOWN + 0.1) * 1e3, False) + assert pm.should_enter_low_power(False, True, start_time, screen_off=False) + + self.params.put_bool("FastSleep", False) + assert not pm.should_enter_low_power(False, True, start_time, screen_off=True) + finally: + self.params.put_bool("FastSleep", False) diff --git a/system/hardware/tici/agnos.json b/system/hardware/tici/agnos.json index 45f31ff82..2c4b332a3 100644 --- a/system/hardware/tici/agnos.json +++ b/system/hardware/tici/agnos.json @@ -78,17 +78,17 @@ }, { "name": "system", - "url": "https://sdn.konn3kt.com/agnos/16-iqlvbs/system-036bb0bcf945115c6488efadcdb56a42192201290a5fe4572ac7b46549146c79.img.xz", - "hash": "a0bf6d22e1134fc6c47158d63901c06324ea3b3808ed2fec35801a888cf3d526", - "hash_raw": "036bb0bcf945115c6488efadcdb56a42192201290a5fe4572ac7b46549146c79", + "url": "https://sdn.konn3kt.com/agnos/16-iqlvbs/system-03397de3da2e9a6d2808b95b72c945b3af71ab79f7f0298624aed62b8749fc5a.img.xz", + "hash": "0c9e7dee6c7365600c77b33c4996456459d04aad005e3e41bf6ee2e8af74ceb9", + "hash_raw": "03397de3da2e9a6d2808b95b72c945b3af71ab79f7f0298624aed62b8749fc5a", "size": 6291456000, "sparse": true, "full_check": false, "has_ab": true, - "ondevice_hash": "9a08b97618dceceed48205ec674330bb97c7f76487a6cca2f68288aaa42aaf8e", + "ondevice_hash": "1ee589d3d728a03561718383bf640171f1aef048573e46fe17239617c7c19fff", "alt": { - "hash": "036bb0bcf945115c6488efadcdb56a42192201290a5fe4572ac7b46549146c79", - "url": "https://sdn.konn3kt.com/agnos/16-iqlvbs/system-036bb0bcf945115c6488efadcdb56a42192201290a5fe4572ac7b46549146c79.img", + "hash": "03397de3da2e9a6d2808b95b72c945b3af71ab79f7f0298624aed62b8749fc5a", + "url": "https://sdn.konn3kt.com/agnos/16-iqlvbs/system-03397de3da2e9a6d2808b95b72c945b3af71ab79f7f0298624aed62b8749fc5a.img", "size": 6291456000 } } diff --git a/system/hardware/tici/agnos.json.sig b/system/hardware/tici/agnos.json.sig index 87abc87ba..362267ffc 100644 --- a/system/hardware/tici/agnos.json.sig +++ b/system/hardware/tici/agnos.json.sig @@ -1 +1 @@ -Xmaq5VKDz8zpg4uJI4cTwgkgKp+HzFlL+5pzHfWvJXqVSNnlOZ/H5dNzm2MScLgzjnxcRYxferbIXjTyZKrzAw== ++LyP/p4uBBxbTwRwPrwR/2qPaHkAXmlFkg0GdxOBuujPY89GxP4t5SNKxirqiw9LmMcfA0JfVwMeR3QD9rQ6Dg== diff --git a/system/hardware/tici/agnos_tici_15_1.json b/system/hardware/tici/agnos_tici_15_1.json index 323348f49..da5a9abe7 100644 --- a/system/hardware/tici/agnos_tici_15_1.json +++ b/system/hardware/tici/agnos_tici_15_1.json @@ -67,17 +67,17 @@ }, { "name": "system", - "url": "https://sdn.konn3kt.com/agnos/16-iqlvbs/system-036bb0bcf945115c6488efadcdb56a42192201290a5fe4572ac7b46549146c79.img.xz", - "hash": "a0bf6d22e1134fc6c47158d63901c06324ea3b3808ed2fec35801a888cf3d526", - "hash_raw": "036bb0bcf945115c6488efadcdb56a42192201290a5fe4572ac7b46549146c79", + "url": "https://sdn.konn3kt.com/agnos/16-iqlvbs/system-03397de3da2e9a6d2808b95b72c945b3af71ab79f7f0298624aed62b8749fc5a.img.xz", + "hash": "0c9e7dee6c7365600c77b33c4996456459d04aad005e3e41bf6ee2e8af74ceb9", + "hash_raw": "03397de3da2e9a6d2808b95b72c945b3af71ab79f7f0298624aed62b8749fc5a", "size": 6291456000, "sparse": true, "full_check": false, "has_ab": true, - "ondevice_hash": "9a08b97618dceceed48205ec674330bb97c7f76487a6cca2f68288aaa42aaf8e", + "ondevice_hash": "1ee589d3d728a03561718383bf640171f1aef048573e46fe17239617c7c19fff", "alt": { - "hash": "036bb0bcf945115c6488efadcdb56a42192201290a5fe4572ac7b46549146c79", - "url": "https://sdn.konn3kt.com/agnos/16-iqlvbs/system-036bb0bcf945115c6488efadcdb56a42192201290a5fe4572ac7b46549146c79.img", + "hash": "03397de3da2e9a6d2808b95b72c945b3af71ab79f7f0298624aed62b8749fc5a", + "url": "https://sdn.konn3kt.com/agnos/16-iqlvbs/system-03397de3da2e9a6d2808b95b72c945b3af71ab79f7f0298624aed62b8749fc5a.img", "size": 6291456000 } } diff --git a/system/hardware/tici/agnos_tici_15_1.json.sig b/system/hardware/tici/agnos_tici_15_1.json.sig index f6d2b4125..fc701fd6b 100644 --- a/system/hardware/tici/agnos_tici_15_1.json.sig +++ b/system/hardware/tici/agnos_tici_15_1.json.sig @@ -1 +1 @@ -IeObYseNfOAYVt6hNKkFMX+RmBAQBU9iiwbox8y6sUdZZs7ZdrUqWJ1ou6yxxsx2JCkgOCQk8z9yT5frz5CeDg== +RCYk34Ifjx7S9PIhPm6p49vFMhamPwvw8Lfbb6a6HO8sUOi3J2PcY4VDUcqQZWU6+Am++HP3nJSea8OmAsckAg== diff --git a/system/hardware/tici/hardware.py b/system/hardware/tici/hardware.py index 7091275da..e1b17c8f9 100644 --- a/system/hardware/tici/hardware.py +++ b/system/hardware/tici/hardware.py @@ -69,6 +69,9 @@ NetworkStrength = log.DeviceState.NetworkStrength MM_MODEM_ACCESS_TECHNOLOGY_UMTS = 1 << 5 MM_MODEM_ACCESS_TECHNOLOGY_LTE = 1 << 14 +# MMModemStateFailedReason +MM_MODEM_STATE_FAILED_REASON_SIM_MISSING = 2 + def affine_irq(val, action): irqs = get_irqs_for_action(action) @@ -605,6 +608,32 @@ class Tici(HardwareBase): os.system(f"sudo cp {tf.name} {dest}") os.system(f"sudo nmcli con load {dest}") + def recover_sim_detection(self) -> bool: + # A worn SIM-tray presence switch can read "removed" while the SIM pads still make + # contact; with hot-swap detect armed (AT+QSIMDET=1) the modem never powers the SIM + # and lands in failed/sim-missing. Disabling detect and rebooting the modem makes it + # probe the SIM electrically. Safe to retry on failure: firing disarms the QSIMDET + # gate, so a genuinely SIM-less device gets at most one extra modem reboot per boot. + if self.get_device_type() not in ("tici", "tizi"): + return False + + try: + modem = self.get_modem() + state = modem.Get(MM_MODEM, 'State', dbus_interface=DBUS_PROPS, timeout=TIMEOUT) + if state != MM_MODEM_STATE.FAILED: + return False + reason = modem.Get(MM_MODEM, 'StateFailedReason', dbus_interface=DBUS_PROPS, timeout=TIMEOUT) + if reason != MM_MODEM_STATE_FAILED_REASON_SIM_MISSING: + return False + detect = str(modem.Command('AT+QSIMDET?', math.ceil(TIMEOUT), dbus_interface=MM_MODEM, timeout=TIMEOUT)).strip() + if not detect.startswith('+QSIMDET: 1'): + return False + modem.Command('AT+QSIMDET=0,0', math.ceil(TIMEOUT), dbus_interface=MM_MODEM, timeout=TIMEOUT) + modem.Command('AT+CFUN=1,1', math.ceil(TIMEOUT), dbus_interface=MM_MODEM, timeout=TIMEOUT) + return True + except Exception: + return False + def reboot_modem(self): modem = None try: diff --git a/system/install_flockd_service.sh b/system/install_flockd_service.sh new file mode 100644 index 000000000..21b4a8a13 --- /dev/null +++ b/system/install_flockd_service.sh @@ -0,0 +1,42 @@ +#!/usr/bin/bash +set -e + +SERVICE_FILE="/data/openpilot/system/flockd.service" +SERVICE_NAME="flockd.service" +SERVICE_OVERRIDE="/etc/systemd/system/${SERVICE_NAME}" +SERVICE_BAKED="/lib/systemd/system/${SERVICE_NAME}" + +echo "Installing Flock RF detector systemd service..." + +if [ -f "$SERVICE_BAKED" ] && grep -q "/usr/libexec/iqpilot/iqpilot_bundle_runner" "$SERVICE_BAKED"; then + echo "Using IQ.OS baked ${SERVICE_NAME}; removing stale override if present..." + sudo mount -o remount,rw / + sudo rm -f "$SERVICE_OVERRIDE" + sudo systemctl daemon-reload + sudo mount -o remount,ro / +else + if [ ! -f "$SERVICE_FILE" ]; then + echo "ERROR: Service file not found at $SERVICE_FILE" + exit 1 + fi + + echo "IQ.OS baked unit unavailable; installing fallback override into /etc/systemd/system..." + sudo cp "$SERVICE_FILE" "$SERVICE_OVERRIDE" + sudo systemctl daemon-reload +fi + +echo "Enabling $SERVICE_NAME to start at boot..." +sudo systemctl enable "$SERVICE_NAME" + +echo "Starting $SERVICE_NAME..." +sudo systemctl restart "$SERVICE_NAME" + +echo "" +echo "Service status:" +sudo systemctl status "$SERVICE_NAME" --no-pager + +echo "" +echo "Useful commands:" +echo " sudo systemctl status flockd - Check service status" +echo " sudo systemctl restart flockd - Restart service" +echo " sudo journalctl -u flockd -f - View live logs" diff --git a/system/loggerd/loggerd.h b/system/loggerd/loggerd.h index 63f68b559..e8c8c0436 100644 --- a/system/loggerd/loggerd.h +++ b/system/loggerd/loggerd.h @@ -28,6 +28,13 @@ const int SEGMENT_LENGTH = LOGGERD_TEST ? atoi(getenv("LOGGERD_SEGMENT_LENGTH")) constexpr char PRESERVE_ATTR_NAME[] = "user.preserve"; constexpr char PRESERVE_ATTR_VALUE = '1'; +// 2.5x the stock 526x330 qcamera, rounded up to even. The msm_vidc encoder rejects +// VIDIOC_S_FMT with ENOTSUPP (524) on an odd width or height, which throws out of +// encoder_thread and SIGABRTs all of encoderd -- taking fcamera/dcamera/ecamera with it. +constexpr int QCAM_WIDTH = 1316; +constexpr int QCAM_HEIGHT = 826; +static_assert(QCAM_WIDTH % 2 == 0 && QCAM_HEIGHT % 2 == 0, "qcamera dimensions must be even"); + struct EncoderSettings { cereal::EncodeIndex::Type encode_type; int bitrate; @@ -43,10 +50,10 @@ struct EncoderSettings { } static EncoderSettings QcamEncoderSettings() { - // qcamera.ts is the small "dashcam" copy uploaded to konn3kt. Stock 256kbps @ 526x330 is potato; - // bump the bitrate to match the higher resolution below. Still H264/.ts (web/HLS compatible) and - // ~1/4 the bitrate of fcamera.hevc, so the file stays small. Override with QCAM_BITRATE if needed. - int _qcam_bitrate = getenv("QCAM_BITRATE") ? atoi(getenv("QCAM_BITRATE")) : 1'600'000; + // Keep Konn3kt route uploads useful without turning each 60-second qcamera + // segment into a 26 MB file. This is still a substantial improvement over + // stock qcam, while CBR keeps storage and upload usage predictable. + int _qcam_bitrate = getenv("QCAM_BITRATE") ? atoi(getenv("QCAM_BITRATE")) : 2'400'000; return EncoderSettings{.encode_type = cereal::EncodeIndex::Type::QCAMERA_H264, .bitrate = _qcam_bitrate, .gop_size = 15}; } @@ -140,8 +147,8 @@ const EncoderInfo qcam_encoder_info = { .filename = "qcamera.ts", .cbr = true, // enforce the bitrate so upload size stays predictable (no VBR overshoot) .get_settings = [](int){return EncoderSettings::QcamEncoderSettings();}, - .frame_width = 1052, // 2x the stock 526x330, same road-cam aspect ratio - .frame_height = 660, + .frame_width = QCAM_WIDTH, + .frame_height = QCAM_HEIGHT, .include_audio = Params().getBool("RecordAudio"), INIT_ENCODE_FUNCTIONS(QRoadEncode), }; diff --git a/system/manager/helpers.py b/system/manager/helpers.py index 5902d16a5..23fb35bfb 100644 --- a/system/manager/helpers.py +++ b/system/manager/helpers.py @@ -11,7 +11,6 @@ import threading from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params -from openpilot.common.swaglog import cloudlog def unblock_stdout() -> None: # get a non-blocking stdout @@ -103,51 +102,3 @@ def save_bootlog(): t = threading.Thread(target=fn, args=(tmp, )) t.daemon = True t.start() - - -# REVERT ME! --------------------------------------------------------------- -# One-shot migration carrying values across the sunny -> IQ param key renames. -# Old keys are no longer registered in params_keys.h, so their values are read -# straight off disk, copied to the new IQ key, and the stale file removed. -# Delete this block (and its manager_init() call) once fielded devices have -# booted past it at least once. -_RENAMED_PARAMS = { - "QuietMode": "IQAlertSilence", - "SpeedLimitMode": "IQSpeedAssistMode", - "SpeedLimitPolicy": "IQSpeedAssistPolicy", - "SpeedLimitOffsetType": "IQSpeedAssistOffsetType", - "SpeedLimitValueOffset": "IQSpeedAssistValueOffset", - "LaneTurnDesire": "IQLaneTurnDesire", - "LaneTurnValue": "IQLaneTurnValue", - "BlinkerPauseLateralControl": "IQBlinkerPauseLateral", - "BlinkerMinLateralControlSpeed": "IQBlinkerMinLateralSpeed", - "DevUIInfo": "IQDevUIInfo", -} - - -def migrate_renamed_params(params: Params | None = None) -> None: - """REVERT ME! carry stored values across the sunny->IQ key renames, then drop the old files. - - Copies at the file level: on-disk param values are raw bytes, so this preserves the exact - stored representation and sidesteps put()'s typed-value check for BOOL/INT/FLOAT keys. - """ - p = params if params is not None else Params() - for old, new in _RENAMED_PARAMS.items(): - try: - old_path = p.get_param_path(old) - if not os.path.isfile(old_path): - continue - new_path = p.get_param_path(new) - if not os.path.exists(new_path): - with open(old_path, "rb") as f: - value = f.read() - tmp = new_path + ".tmp" - with open(tmp, "wb") as f: - f.write(value) - f.flush() - os.fsync(f.fileno()) - os.rename(tmp, new_path) - os.remove(old_path) - except Exception: - cloudlog.exception(f"param rename migration failed for {old} -> {new}") -# END REVERT ME! ------------------------------------------------------------ diff --git a/system/manager/manager.py b/system/manager/manager.py index 80bdcbf54..158fe8b39 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -17,7 +17,7 @@ from openpilot.common.params import Params, ParamKeyFlag from openpilot.common.text_window import TextWindow from openpilot.system.hardware import HARDWARE from openpilot.system.loggerd.crash_recovery import recover_unclean_segments -from openpilot.system.manager.helpers import unblock_stdout, write_onroad_params, save_bootlog, heal_param_perms, migrate_renamed_params +from openpilot.system.manager.helpers import unblock_stdout, write_onroad_params, save_bootlog, heal_param_perms from openpilot.system.manager.process import ensure_running from openpilot.system.manager.process_config import managed_processes from openpilot.iqpilot.konn3kt.registration import register, UNREGISTERED_DONGLE_ID @@ -40,7 +40,6 @@ def manager_init() -> None: build_metadata = get_build_metadata() params = Params() - migrate_renamed_params(params) # REVERT ME! sunny->IQ param key migration (runs before defaults are filled) params.clear_all(ParamKeyFlag.CLEAR_ON_MANAGER_START) params.clear_all(ParamKeyFlag.CLEAR_ON_ONROAD_TRANSITION) params.clear_all(ParamKeyFlag.CLEAR_ON_OFFROAD_TRANSITION) @@ -50,7 +49,7 @@ def manager_init() -> None: # device boot mode if params.get("DeviceBootMode") == 1: # start in Always Offroad mode - params.put_bool("OffroadMode", True) + params.put_bool("IQAlwaysOffroad", True) if params.get_bool("RecordFrontLock"): params.put_bool("RecordFront", True) diff --git a/system/manager/process.py b/system/manager/process.py index 0415d0884..1314b1192 100644 --- a/system/manager/process.py +++ b/system/manager/process.py @@ -181,6 +181,32 @@ class NativeProcess(ManagerProcess): self.shutting_down = False +def _normalize_bundle_modes(bundle: str) -> None: + import json + candidates = [] + if env_root := os.environ.get("IQPILOT_PROPRIETARY_ROOT"): + candidates += [os.path.join(env_root, bundle), env_root] + candidates += [ + os.path.join(BASEDIR, ".iqpilot", "bundles", bundle), + os.path.join(os.path.dirname(BASEDIR), ".iqpilot", "bundles", bundle), + os.path.join(BASEDIR, "artifacts", bundle), + ] + root = next((c for c in candidates if os.path.isfile(os.path.join(c, "manifest.json"))), None) + if root is None: + return + try: + with open(os.path.join(root, "manifest.json")) as f: + manifest = json.load(f) + for rel, meta in manifest.items(): + if not (isinstance(meta, dict) and "mode" in meta and "sha256" in meta): + continue + path = os.path.join(root, rel) + if os.path.isfile(path) and (os.stat(path).st_mode & 0o777) != meta["mode"]: + os.chmod(path, meta["mode"]) + except Exception: + cloudlog.exception(f"failed to normalize bundle modes for {bundle}") + + class BundleProcess(NativeProcess): def __init__(self, name, bundle, entry, should_run, enabled=True, sigkill=False, restart_if_crash=False): self.bundle = bundle @@ -204,6 +230,11 @@ class BundleProcess(NativeProcess): sigkill=sigkill, ) + def start(self) -> None: + if self.proc is None: + _normalize_bundle_modes(self.bundle) + super().start() + class PythonProcess(ManagerProcess): def __init__(self, name, module, should_run, enabled=True, sigkill=False, restart_if_crash=False): diff --git a/system/ui/iqpilot/__init__.py b/system/ui/iqpilot/__init__.py deleted file mode 100644 index 297dca9e1..000000000 --- a/system/ui/iqpilot/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" diff --git a/system/ui/iqpilot/lib/__init__.py b/system/ui/iqpilot/lib/__init__.py deleted file mode 100644 index 297dca9e1..000000000 --- a/system/ui/iqpilot/lib/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" diff --git a/system/ui/iqpilot/widgets/__init__.py b/system/ui/iqpilot/widgets/__init__.py deleted file mode 100644 index 297dca9e1..000000000 --- a/system/ui/iqpilot/widgets/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos -""" diff --git a/iqdbc_repo/iqdbc/iqpilot/car/hyundai/__init__.py b/system/ui/iqwidgets/__init__.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/hyundai/__init__.py rename to system/ui/iqwidgets/__init__.py diff --git a/iqdbc_repo/iqdbc/iqpilot/car/mazda/__init__.py b/system/ui/iqwidgets/lib/__init__.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/mazda/__init__.py rename to system/ui/iqwidgets/lib/__init__.py diff --git a/system/ui/iqpilot/lib/application.py b/system/ui/iqwidgets/lib/application.py similarity index 100% rename from system/ui/iqpilot/lib/application.py rename to system/ui/iqwidgets/lib/application.py diff --git a/system/ui/iqpilot/lib/canvas.py b/system/ui/iqwidgets/lib/canvas.py similarity index 100% rename from system/ui/iqpilot/lib/canvas.py rename to system/ui/iqwidgets/lib/canvas.py diff --git a/system/ui/iqpilot/lib/styles.py b/system/ui/iqwidgets/lib/styles.py similarity index 100% rename from system/ui/iqpilot/lib/styles.py rename to system/ui/iqwidgets/lib/styles.py diff --git a/system/ui/iqpilot/lib/utils.py b/system/ui/iqwidgets/lib/utils.py similarity index 61% rename from system/ui/iqpilot/lib/utils.py rename to system/ui/iqwidgets/lib/utils.py index 3bd63df8a..213b2eaad 100644 --- a/system/ui/iqpilot/lib/utils.py +++ b/system/ui/iqwidgets/lib/utils.py @@ -1,9 +1,9 @@ """ Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos """ -from openpilot.system.ui.iqpilot.widgets.list_view import IQButtonAction +from openpilot.system.ui.iqwidgets.widgets.list_view import IQButtonAction -class NoElideButtonAction(IQButtonAction): +class WideButtonAction(IQButtonAction): def get_width_hint(self): return super().get_width_hint() + 1 diff --git a/iqdbc_repo/iqdbc/iqpilot/car/nissan/__init__.py b/system/ui/iqwidgets/widgets/__init__.py similarity index 100% rename from iqdbc_repo/iqdbc/iqpilot/car/nissan/__init__.py rename to system/ui/iqwidgets/widgets/__init__.py diff --git a/system/ui/iqwidgets/widgets/helpers/__init__.py b/system/ui/iqwidgets/widgets/helpers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/system/ui/iqpilot/widgets/helpers/glyphs.py b/system/ui/iqwidgets/widgets/helpers/glyphs.py similarity index 100% rename from system/ui/iqpilot/widgets/helpers/glyphs.py rename to system/ui/iqwidgets/widgets/helpers/glyphs.py diff --git a/system/ui/iqpilot/widgets/list_view.py b/system/ui/iqwidgets/widgets/list_view.py similarity index 99% rename from system/ui/iqpilot/widgets/list_view.py rename to system/ui/iqwidgets/widgets/list_view.py index 11d3c1605..3736934b6 100644 --- a/system/ui/iqpilot/widgets/list_view.py +++ b/system/ui/iqwidgets/widgets/list_view.py @@ -7,9 +7,9 @@ import time from collections.abc import Callable import pyray as rl -from openpilot.system.ui.iqpilot.lib.styles import ink, metrics +from openpilot.system.ui.iqwidgets.lib.styles import ink, metrics from openpilot.system.ui.widgets.button import Button, ButtonStyle -from openpilot.system.ui.iqpilot.lib import canvas +from openpilot.system.ui.iqwidgets.lib import canvas from openpilot.system.ui.widgets.scroller_tici import LineSeparator, LINE_COLOR, LINE_PADDING from openpilot.system.ui.lib.text_measure import measure_text_cached from openpilot.system.ui.widgets.toggle import Toggle @@ -899,8 +899,8 @@ def progress_item(title): from dataclasses import dataclass, field from openpilot.common.params import Params -from openpilot.system.ui.iqpilot.lib.styles import ink -from openpilot.system.ui.iqpilot.widgets.helpers.glyphs import draw_star +from openpilot.system.ui.iqwidgets.lib.styles import ink +from openpilot.system.ui.iqwidgets.widgets.helpers.glyphs import draw_star from openpilot.system.ui.lib.application import FontWeight, gui_app from openpilot.system.ui.lib.application import gui_app from openpilot.system.ui.lib.multilang import tr @@ -925,13 +925,13 @@ _FRAME_PAD = 50 @dataclass -class TreeNode: +class PickerItem: ref: str data: dict = field(default_factory=dict) @dataclass -class TreeFolder: +class PickerGroup: folder: str nodes: list @@ -999,7 +999,7 @@ class _TreeRow(Button): return super()._handle_mouse_release(mouse_pos) -class TreeOptionDialog(MultiOptionDialog): +class PickerDialog(MultiOptionDialog): """Folder/leaf picker with search, favourites, and a pinned current selection.""" def __init__(self, title, folders, current_ref="", fav_param="", option_font_weight=FontWeight.MEDIUM, search_prompt=None, @@ -1018,7 +1018,7 @@ class TreeOptionDialog(MultiOptionDialog): self.on_exit = on_exit self.display_func = display_func or (lambda node: node.data.get('display_name', node.ref)) self.search_funcs = search_funcs or [lambda node: node.data.get('display_name', ''), lambda node: node.data.get('short_name', '')] - self.search_title = search_title or tr("Enter search query") + self.search_title = search_title or tr("Type to search") self.search_subtitle = search_subtitle self._search_rect: rl.Rectangle | None = None self._search_pressed = False diff --git a/system/ui/lib/application.py b/system/ui/lib/application.py index b145bad1d..404854a13 100644 --- a/system/ui/lib/application.py +++ b/system/ui/lib/application.py @@ -26,7 +26,7 @@ from openpilot.system.hardware import HARDWARE, PC from openpilot.system.ui.lib.multilang import multilang from openpilot.common.realtime import Ratekeeper -from openpilot.system.ui.iqpilot.lib.application import IQAppHooks +from openpilot.system.ui.iqwidgets.lib.application import IQAppHooks from openpilot.system.ui.lib.screen_recorder import ScreenRecorder _DEFAULT_FPS = int(os.getenv("FPS", {'tizi': 20, 'tici': 20}.get(HARDWARE.get_device_type(), 60))) diff --git a/system/ui/lib/emoji.py b/system/ui/lib/emoji.py index 37228e2d4..17f99d4a0 100644 --- a/system/ui/lib/emoji.py +++ b/system/ui/lib/emoji.py @@ -33,10 +33,19 @@ EMOJI_REGEX = re.compile( flags=re.UNICODE ) +_emoji_font_loaded = False + def _load_emoji_font() -> ImageFont.FreeTypeFont | None: - global _emoji_font - if _emoji_font is None: - _emoji_font = ImageFont.truetype(str(FONT_DIR.joinpath("NotoColorEmoji.ttf")), 109) + global _emoji_font, _emoji_font_loaded + if not _emoji_font_loaded: + _emoji_font_loaded = True + try: + # FONT_DIR is an importlib.resources path. Inside the setup zipapp it points into the archive, + # so str() yields a path through the .zip that PIL can't open ("cannot open resource"). Read + # the bytes and hand PIL a file object so it works both on disk and inside the zipapp. + _emoji_font = ImageFont.truetype(io.BytesIO(FONT_DIR.joinpath("NotoColorEmoji.ttf").read_bytes()), 109) + except Exception: + _emoji_font = None # never crash the whole UI over an emoji glyph return _emoji_font def find_emoji(text): @@ -44,12 +53,15 @@ def find_emoji(text): def emoji_tex(emoji): if emoji not in _cache: + font = _load_emoji_font() + if font is None: + return None img = Image.new("RGBA", (128, 128), (0, 0, 0, 0)) draw = ImageDraw.Draw(img) - draw.text((0, 0), emoji, font=_load_emoji_font(), embedded_color=True) + draw.text((0, 0), emoji, font=font, embedded_color=True) with io.BytesIO() as buffer: img.save(buffer, format="PNG") l = buffer.tell() buffer.seek(0) _cache[emoji] = rl.load_texture_from_image(rl.load_image_from_memory(".png", buffer.getvalue(), l)) - return _cache[emoji] + return _cache.get(emoji) diff --git a/system/ui/lib/wifi_manager.py b/system/ui/lib/wifi_manager.py index 0993f04b8..e5659df0b 100644 --- a/system/ui/lib/wifi_manager.py +++ b/system/ui/lib/wifi_manager.py @@ -67,6 +67,9 @@ class MeteredType(IntEnum): NO = 2 +_WARNED_UNSUPPORTED_NETWORKS: set[tuple[int, int, int]] = set() + + def get_security_type(flags: int, wpa_flags: int, rsn_flags: int) -> SecurityType: wpa_props = wpa_flags | rsn_flags @@ -83,7 +86,10 @@ def get_security_type(flags: int, wpa_flags: int, rsn_flags: int) -> SecurityTyp # WPA2, WPA2+WPA3 mixed, or WPA — all handled via WPA key_mgmt (NM negotiates SAE if available) return SecurityType.WPA2 else: - cloudlog.warning(f"Unsupported network! flags: {flags}, wpa_flags: {wpa_flags}, rsn_flags: {rsn_flags}") + _key = (flags, wpa_flags, rsn_flags) + if _key not in _WARNED_UNSUPPORTED_NETWORKS: + _WARNED_UNSUPPORTED_NETWORKS.add(_key) + cloudlog.warning(f"Unsupported network! flags: {flags}, wpa_flags: {wpa_flags}, rsn_flags: {rsn_flags}") return SecurityType.UNSUPPORTED @@ -630,6 +636,7 @@ class WifiManager: cloudlog.warning("No WiFi device found") return + self._set_device_autoconnect(True) self._connecting_to_ssid = ssid self._router_main.send(new_method_call(self._nm, 'ActivateConnection', 'ooo', (conn_path, self._wifi_device, "/"))) @@ -639,6 +646,37 @@ class WifiManager: else: threading.Thread(target=worker, daemon=True).start() + def disconnect_connection(self, ssid: str, block: bool = False): + def worker(): + if self._router_main is None: + cloudlog.warning(f"WiFi not ready while disconnecting {ssid}") + return + + if ssid not in self._get_connections(): + return + + # the profile stays saved and untouched; without clearing autoconnect on the device + # NetworkManager re-associates within seconds + self._set_device_autoconnect(False) + self._connecting_to_ssid = "" + self._deactivate_connection(ssid) + self._update_networks() + self._enqueue_callbacks(self._disconnected) + + if block: + worker() + else: + threading.Thread(target=worker, daemon=True).start() + + def _set_device_autoconnect(self, enabled: bool) -> None: + if self._router_main is None or self._wifi_device is None: + return + + dev_addr = DBusAddress(self._wifi_device, bus_name=NM, interface=NM_DEVICE_IFACE) + reply = self._router_main.send_and_get_reply(Properties(dev_addr).set('Autoconnect', 'b', enabled)) + if reply.header.message_type == MessageType.error: + cloudlog.warning(f'Failed to set device autoconnect={enabled}: {reply}') + def _deactivate_connection(self, ssid: str): target_conn_path = self._get_connections().get(ssid, None) if target_conn_path is None: diff --git a/system/ui/mici_setup.py b/system/ui/mici_setup.py index a371ac615..afbb9d689 100755 --- a/system/ui/mici_setup.py +++ b/system/ui/mici_setup.py @@ -50,6 +50,8 @@ INSTALLER_URL_PATH = "/tmp/installer_url" # "/" maps to a GitHub fork. IQ.OS uses the DRM "magic" compositor, not Wayland, # so comma's downloaded installers (installer.comma.ai) crash on launch; clone the fork directly. GITHUB_FORK_URL = "https://github.com/{user}/openpilot.git" +# IQ.Pilot lives on the IQ Lvbs git server; github.com/IQLvbs is DMCA'd and dead. +GIT_URL_OVERRIDES = {"IQLvbs": "https://git.konn3kt.com/IQ.Lvbs/IQ.Pilot.git"} CONTINUE = """#!/usr/bin/env bash @@ -756,7 +758,7 @@ class Setup(Widget): pass def _fork_install_thread(self, user: str, branch: str): - git_url = GITHUB_FORK_URL.format(user=user) + git_url = GIT_URL_OVERRIDES.get(user) or GITHUB_FORK_URL.format(user=user) label = f"{user}/{branch}" try: subprocess.run(["rm", "-rf", TMP_INSTALL_PATH], check=False) @@ -774,7 +776,8 @@ class Setup(Widget): subprocess.run(["git", "-C", TMP_INSTALL_PATH, "submodule", "update", "--init"], check=False) run_cmd(["rm", "-f", VALID_CACHE_PATH]) - run_cmd(["rm", "-rf", INSTALL_PATH]) + # sudo: a prior *run* install can leave root-owned .pyc here that a comma-user rm can't delete. + run_cmd(["sudo", "rm", "-rf", INSTALL_PATH]) run_cmd(["mv", TMP_INSTALL_PATH, INSTALL_PATH]) self._ble_progress("installing", 90) @@ -882,6 +885,11 @@ class Setup(Widget): # AGNOS might try to execute the installer before this process exits. # Therefore, important to close the fd before renaming the installer. os.close(fd) + # comma's ELF installer does `rm -rf /data/openpilot` as the comma user and asserts it + # succeeds; a prior *run* install leaves root-owned __pycache__ .pyc it can't delete, so it + # aborts before continue.sh and bounces back to setup. Clear the old tree first (sudo) so the + # installer's rm succeeds. + subprocess.run(["sudo", "rm", "-rf", INSTALL_PATH], check=False) os.rename(tmpfile, INSTALLER_DESTINATION_PATH) with open(INSTALLER_URL_PATH, "w") as f: diff --git a/system/ui/tici_setup.py b/system/ui/tici_setup.py index 6eda8e344..2a33bc4cd 100755 --- a/system/ui/tici_setup.py +++ b/system/ui/tici_setup.py @@ -51,6 +51,8 @@ INSTALLER_DESTINATION_PATH = "/tmp/installer" INSTALLER_URL_PATH = "/tmp/installer_url" GITHUB_FORK_URL = "https://github.com/{user}/openpilot.git" +# IQ.Pilot lives on the IQ Lvbs git server; github.com/IQLvbs is DMCA'd and dead. +GIT_URL_OVERRIDES = {"IQLvbs": "https://git.konn3kt.com/IQ.Lvbs/IQ.Pilot.git"} CONTINUE = """#!/usr/bin/env bash @@ -589,7 +591,7 @@ class Setup(Widget): pass def _fork_install_thread(self, user: str, branch: str): - git_url = GITHUB_FORK_URL.format(user=user) + git_url = GIT_URL_OVERRIDES.get(user) or GITHUB_FORK_URL.format(user=user) label = f"{user}/{branch}" fail_msg = "Ensure the entered URL is valid, and the device's internet connection is good." try: @@ -609,7 +611,8 @@ class Setup(Widget): subprocess.run(["git", "-C", TMP_INSTALL_PATH, "submodule", "update", "--init"], check=False) run_cmd(["rm", "-f", VALID_CACHE_PATH]) - run_cmd(["rm", "-rf", INSTALL_PATH]) + # sudo: a prior *run* install can leave root-owned .pyc here that a comma-user rm can't delete. + run_cmd(["sudo", "rm", "-rf", INSTALL_PATH]) run_cmd(["mv", TMP_INSTALL_PATH, INSTALL_PATH]) self._ble_progress("installing", 90) @@ -718,6 +721,11 @@ class Setup(Widget): # AGNOS might try to execute the installer before this process exits. # Therefore, important to close the fd before renaming the installer. os.close(fd) + # comma's ELF installer does `rm -rf /data/openpilot` as the comma user and asserts it + # succeeds; a prior *run* install leaves root-owned __pycache__ .pyc it can't delete, so it + # aborts before continue.sh and bounces back to setup. Clear the old tree first (sudo) so the + # installer's rm succeeds. + subprocess.run(["sudo", "rm", "-rf", INSTALL_PATH], check=False) os.rename(tmpfile, INSTALLER_DESTINATION_PATH) with open(INSTALLER_URL_PATH, "w") as f: diff --git a/system/ui/widgets/label.py b/system/ui/widgets/label.py index e7fe6af44..b368e040c 100644 --- a/system/ui/widgets/label.py +++ b/system/ui/widgets/label.py @@ -406,7 +406,8 @@ class Label(Widget): line_pos.x += width_before.x tex = emoji_tex(emoji) - rl.draw_texture_ex(tex, line_pos, 0.0, self._font_size / tex.height * FONT_SCALE, self._text_color) + if tex is not None: + rl.draw_texture_ex(tex, line_pos, 0.0, self._font_size / tex.height * FONT_SCALE, self._text_color) line_pos.x += self._font_size * FONT_SCALE prev_index = end rl.draw_text_ex(self._font, text[prev_index:], line_pos, self._font_size, 0, self._text_color) @@ -849,8 +850,9 @@ class UnifiedLabel(Widget): # Draw emoji tex = emoji_tex(emoji) - emoji_scale = self._font_size / tex.height * FONT_SCALE - rl.draw_texture_ex(tex, line_pos, 0.0, emoji_scale, self._text_color) + if tex is not None: + emoji_scale = self._font_size / tex.height * FONT_SCALE + rl.draw_texture_ex(tex, line_pos, 0.0, emoji_scale, self._text_color) # Emoji width is font_size * FONT_SCALE (as per measure_text_cached) line_pos.x += self._font_size * FONT_SCALE prev_index = end diff --git a/system/ui/widgets/network.py b/system/ui/widgets/network.py index cc3167d36..c67d26ca7 100644 --- a/system/ui/widgets/network.py +++ b/system/ui/widgets/network.py @@ -17,10 +17,10 @@ from openpilot.system.ui.widgets.scroller_tici import Scroller from openpilot.system.ui.widgets.list_view import ButtonAction, ListItem, MultipleButtonAction, ToggleAction, button_item, text_item if gui_app.iqpilot_ui(): - from openpilot.system.ui.iqpilot.widgets.list_view import button_item - from openpilot.system.ui.iqpilot.widgets.list_view import IQListItem as ListItem - from openpilot.system.ui.iqpilot.widgets.list_view import IQToggleAction as ToggleAction - from openpilot.system.ui.iqpilot.widgets.list_view import IQMultipleButtonAction as MultipleButtonAction + from openpilot.system.ui.iqwidgets.widgets.list_view import button_item + from openpilot.system.ui.iqwidgets.widgets.list_view import IQListItem as ListItem + from openpilot.system.ui.iqwidgets.widgets.list_view import IQToggleAction as ToggleAction + from openpilot.system.ui.iqwidgets.widgets.list_view import IQMultipleButtonAction as MultipleButtonAction # These are only used for AdvancedNetworkSettings, standalone apps just need WifiManagerUI try: @@ -66,6 +66,7 @@ class UIState(IntEnum): NEEDS_AUTH = 2 SHOW_FORGET_CONFIRM = 3 FORGETTING = 4 + DISCONNECTING = 5 class NavButton(Widget): @@ -328,6 +329,7 @@ class WifiManagerUI(Widget): self._state_network: Network | None = None # for CONNECTING / NEEDS_AUTH / SHOW_FORGET_CONFIRM / FORGETTING self._password_retry: bool = False # for NEEDS_AUTH self.btn_width: int = 200 + self.disconnect_btn_width: int = 300 self.scroll_panel = GuiScrollPanel() self.keyboard = Keyboard(max_text_size=MAX_PASSWORD_LENGTH, min_text_size=MIN_PASSWORD_LENGTH, show_password_toggle=True) self._load_icons() @@ -335,6 +337,7 @@ class WifiManagerUI(Widget): self._networks: list[Network] = [] self._networks_buttons: dict[str, Button] = {} self._forget_networks_buttons: dict[str, Button] = {} + self._disconnect_networks_buttons: dict[str, Button] = {} self._wifi_manager.add_callbacks(need_auth=self._on_need_auth, activated=self._on_activated, @@ -417,7 +420,9 @@ class WifiManagerUI(Widget): def _draw_network_item(self, rect, network: Network): spacing = 50 - ssid_rect = rl.Rectangle(rect.x, rect.y, rect.width - self.btn_width * 2, ITEM_HEIGHT) + show_disconnect = network.is_connected and self.state not in (UIState.CONNECTING, UIState.DISCONNECTING) + reserved = self.btn_width * 2 + (self.disconnect_btn_width + spacing if show_disconnect else 0) + ssid_rect = rl.Rectangle(rect.x, rect.y, rect.width - reserved, ITEM_HEIGHT) signal_icon_rect = rl.Rectangle(rect.x + rect.width - ICON_SIZE, rect.y + (ITEM_HEIGHT - ICON_SIZE) / 2, ICON_SIZE, ICON_SIZE) security_icon_rect = rl.Rectangle(signal_icon_rect.x - spacing - ICON_SIZE, rect.y + (ITEM_HEIGHT - ICON_SIZE) / 2, ICON_SIZE, ICON_SIZE) @@ -434,6 +439,10 @@ class WifiManagerUI(Widget): if self._state_network.ssid == network.ssid: self._networks_buttons[network.ssid].set_enabled(False) status_text = tr("FORGETTING...") + elif self.state == UIState.DISCONNECTING and self._state_network: + if self._state_network.ssid == network.ssid: + self._networks_buttons[network.ssid].set_enabled(False) + status_text = tr("DISCONNECTING...") elif network.security_type == SecurityType.UNSUPPORTED: self._networks_buttons[network.ssid].set_enabled(False) else: @@ -455,6 +464,15 @@ class WifiManagerUI(Widget): ) self._forget_networks_buttons[network.ssid].render(forget_btn_rect) + if show_disconnect: + disconnect_btn_rect = rl.Rectangle( + forget_btn_rect.x - self.btn_width - spacing, + forget_btn_rect.y, + self.btn_width, + 80, + ) + self._disconnect_networks_buttons[network.ssid].render(disconnect_btn_rect) + self._draw_status_icon(security_icon_rect, network) self._draw_signal_strength_icon(signal_icon_rect, network) @@ -470,6 +488,9 @@ class WifiManagerUI(Widget): self.state = UIState.SHOW_FORGET_CONFIRM self._state_network = network + def _disconnect_networks_buttons_callback(self, network): + self.disconnect_network(network) + def _draw_status_icon(self, rect, network: Network): """Draw the status icon based on network's connection state""" icon_file = None @@ -506,6 +527,11 @@ class WifiManagerUI(Widget): self._state_network = network self._wifi_manager.forget_connection(network.ssid) + def disconnect_network(self, network: Network): + self.state = UIState.DISCONNECTING + self._state_network = network + self._wifi_manager.disconnect_connection(network.ssid) + def _on_network_updated(self, networks: list[Network]): self._networks = networks for n in self._networks: @@ -515,6 +541,9 @@ class WifiManagerUI(Widget): self._forget_networks_buttons[n.ssid] = Button(tr("Forget"), partial(self._forget_networks_buttons_callback, n), button_style=ButtonStyle.FORGET_WIFI, font_size=45) self._forget_networks_buttons[n.ssid].set_touch_valid_callback(lambda: self.scroll_panel.is_touch_valid()) + self._disconnect_networks_buttons[n.ssid] = Button(tr("Disconnect"), partial(self._disconnect_networks_buttons_callback, n), + button_style=ButtonStyle.FORGET_WIFI, font_size=45) + self._disconnect_networks_buttons[n.ssid].set_touch_valid_callback(lambda: self.scroll_panel.is_touch_valid()) def _on_need_auth(self, ssid): network = next((n for n in self._networks if n.ssid == ssid), None) @@ -532,7 +561,7 @@ class WifiManagerUI(Widget): self.state = UIState.IDLE def _on_disconnected(self): - if self.state == UIState.CONNECTING: + if self.state in (UIState.CONNECTING, UIState.DISCONNECTING): self.state = UIState.IDLE diff --git a/tools/iqpilot/mici_preview.py b/tools/iqpilot/mici_preview.py index 2cf0325ad..d77fbf49b 100755 --- a/tools/iqpilot/mici_preview.py +++ b/tools/iqpilot/mici_preview.py @@ -141,8 +141,8 @@ def _patch_mock_state(): mp.put("AolMainCruiseAllowed", True) mp.put("AolUnifiedEngagementMode", False) mp.put("NeuralNetworkFeedForward", False) - mp.put("AutoLaneChangeTimer", 0) # nudge - mp.put("AutoLaneChangeBsmDelay", False) + mp.put("IQLaneChangeTimer", 0) # nudge + mp.put("IQLaneChangeBsmDelay", False) # ── Visuals (correct param keys matching visuals.py) ───────────────────── mp.put("BlindSpot", True) @@ -165,7 +165,7 @@ def _patch_mock_state(): mp.put("Version", "IQ.Pilot 0.9.5-mici") # ── Models ──────────────────────────────────────────────────────────────── - mp.put("LagdToggle", False) + mp.put("IQLiveSteerDelay", False) mp.put("IQLaneTurnDesire", False) mp.put("IQLaneTurnValue", "19.0")