diff --git a/artifacts/iqpilot_hephaestusd_private/.source_sha b/artifacts/iqpilot_hephaestusd_private/.source_sha deleted file mode 100644 index 2033a7325..000000000 --- a/artifacts/iqpilot_hephaestusd_private/.source_sha +++ /dev/null @@ -1 +0,0 @@ -5dd3eebe813d76a72d63c76b1aac25e1c70b36bf diff --git a/artifacts/iqpilot_hephaestusd_private/manifest.json b/artifacts/iqpilot_hephaestusd_private/manifest.json index e88924fb8..066e8b1c9 100644 --- a/artifacts/iqpilot_hephaestusd_private/manifest.json +++ b/artifacts/iqpilot_hephaestusd_private/manifest.json @@ -1,8 +1,8 @@ { "python/_iqclosure/_vendored.json": { "mode": 420, - "sha256": "6312a5dbc6e57c32c9ac07dbc30244d76e30f628f3633e576a02782fc140f522", - "size": 1734 + "sha256": "7129a872d199127747c6b251d90633857f0e179a8079063d060eeafbdced03ab", + "size": 1773 }, "python/_iqclosure/iqpilot/__init__.py": { "mode": 420, @@ -156,8 +156,8 @@ }, "python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py": { "mode": 420, - "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "size": 0 + "sha256": "5865243a95ca4557d2a960302124a9898545cc3a8387e88ef569308e3d0f7077", + "size": 119 }, "python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/fetcher.py": { "mode": 420, @@ -356,27 +356,27 @@ }, "python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "33808d1f465badf479acd5c52421820b1099ba45dffd05069ae020c0ab27956b", + "sha256": "ac62a6876710b148e793f3bab5e6a52d22e83468992fa05dbaa7d29e846ac399", "size": 135552 }, "python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "447102fb8ebb45404bb34c7a8219e77a6813b841596a590f0c649c8b016d161e", + "sha256": "02107df593150737b365238580006470af5f394c29a04516d07fcea6c0c7969f", "size": 67664 }, "python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f560709ef0c7b2b2186fe79369b52e4825ea9de7dd931492528605315b4e88bf", + "sha256": "8fd8fa511d44cf667faad7c5dd92bd68ba7f98457d1e65b57115c9cc920fb316", "size": 204640 }, "python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "a26def1e1570d41ff76289be1232c9eb2f6d401006a817ec0e6d1892dbdfca3e", + "sha256": "e9a8759405e96ace952c49004303d189fb2be1a777b56956d9a90fa32e325f19", "size": 69768 }, "python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "e00f1fde78e58eb86270730f41279615dd8f1132e0d37f6e75e0b07b6a14967a", + "sha256": "d495b424ec0066020e1694a22cfca59e4998d4b11de4823fd8aee4add91a2407", "size": 203088 }, "python/iqpilot_private/konn3kt/flockd/__init__.py": { @@ -386,12 +386,12 @@ }, "python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "d240551319c007e1defd47d9e280b54199f32905024f3c549f8abf4f2183cb8a", + "sha256": "466054f522dd6eb7e32f85bfd2d014cab5534662deb5b7b4d2842668f34bde6e", "size": 202184 }, "python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "b756bbe5241a27cb1eeb3bd7acc881eaf533ecb88a81d44b0b28d0355c2ce67a", + "sha256": "9b96c82bf946c8e4166d41487902a23750dec210d684ae153d86e7922d64b7bf", "size": 68080 }, "python/iqpilot_private/konn3kt/hephaestus/__init__.py": { @@ -401,67 +401,67 @@ }, "python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip": { "mode": 420, - "sha256": "ebd0dfe45771ce084690a6dfe4f8f5c198a167b4df2ed7a609fc31bccea7d6a1", + "sha256": "7a9fe9bc8d6141e80e8e4c2befb5860ee287d820a62893729098114628d00357", "size": 2100238 }, "python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f4a10a4ade9e9104eaa95b6cccbee87485293090437106683ac157596f305620", + "sha256": "d7befce62715f669cbd763bac96e33eae8289ebe8085e2a842e7daa8bb42aeec", "size": 268080 }, "python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "81588dedf772af8847505f2b6ff2bb99f9988140b0ed26bbaaf8b178038881e8", + "sha256": "134fa9773cd5b502b6c791bad720f8c1b22ef71571543d366feb27fd2ce11b21", "size": 406176 }, "python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "1d847dc09d7a9253e75b4712ea74a57cfacc45f7af28eb8e4096390f50512548", + "sha256": "3b34c918c56bd534d661470c44f0aa1149126f68f013d8d0b631e6fcbf6b7fb3", "size": 68048 }, "python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "3ce8f20ab0cf2d72f8f7003b5ef669b82eabbf42a1232ebb1858532d4607947f", + "sha256": "c5e5b50579d97356e67db887588ffc2b5fa2225dc59a6c473bcfb0bd9c4fa482", "size": 335776 }, "python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "0c40d0452abf32d61c589f6c0450ace82b394daeef5ffa37578f4cbc2eed3ab2", + "sha256": "3b6704277d4c5a8713bfc45673c548e30a3d2111dc2b39bbba05ad98a072b4f8", "size": 272112 }, "python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "92844c34453ae2c7848be78d2694014696194f7d3f1bdce3f9200f5f02c46afd", + "sha256": "914e0027aa9926ed8433e40ec9b31a09826ccf145f243f1c228174ef618d69ef", "size": 134408 }, "python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "960b75c5cd0a71268e5b7feeb2564ec955b787620a878cd9568072cc0f856172", - "size": 3782232 + "sha256": "2ea4610ac0d27268d2764beb86d3f0e363325de591f02bb1139b6ce5ccefdc8e", + "size": 3847768 }, "python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "a56bc2bec547cda4b7301d4f39899f2178a985b36fd82f7c8440f44e3a18714b", + "sha256": "172ff41c5d3728f6186fd705c56313bd8910bd271d76d38ebbe9f94f1110d88d", "size": 136472 }, "python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f75e5bb8b1f08b0091e048402a80592a53e5c3c8ee9c299fc9a06538f74cae7e", + "sha256": "b3b96b633a4e5ced01b382cb423d2d44e5acd2ed08bc36b376c74ef0db5ef763", "size": 68208 }, "python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "558bdc66ebaa83b24f967ebc7f67479119d5ff8dc1853fd4ed6137b292050cbf", + "sha256": "b49c0e72b91db359e9c97ef91362e2a708228361b90e028a4cf029495aae65a5", "size": 67840 }, "python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "fa5503ef3e8b428a290252de3a7f7dae1bdbcc276505b20e77993057feb48c08", + "sha256": "0d9389cd00d0bcf85ece329b3e7ff0a106fea9772cf6663d995c059eabd680ae", "size": 135664 }, "python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "865c3c52118802edab7999b9f046de23757d26c504b3d33d77d7862c9e49bc7f", + "sha256": "650079ec882ae4aac58c2251c57617a47fe29f2848097a703dd4e4dd11cd4df1", "size": 269600 }, "python/iqpilot_private/konn3kt/uploaderd/__init__.py": { @@ -471,7 +471,7 @@ }, "python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "af6f8c6d5c7e99316953f4249317a6c86ae68263445e570c659809fb05c03e15", + "sha256": "fdd33b9c9bbe5b6c699461f627c1d5fb327cb2f1494a83f09e0ecfd1d6eb8ddb", "size": 336280 }, "runtime": { @@ -515,25 +515,25 @@ } }, "signatures": { - "python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "I5WvMYxvGUQ21GFf3z5Bb/iwHyX9DXkImJPcJ2+pvYKepYkWXfKv44bsoN4gi+MszZDRfByXWOBpglSVL5G3Aw==", - "python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "rE32aIZL5MMCi/bx9Xn2i6YA8wg1Y2FkkrKpZcXRvd7k+eIPny0Rftle54HfxuKm6atBp8Gy2yWTgt2+pl8+AQ==", - "python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "QqiXU+Mfh/tcjB7S2ZBGoV0F4QrCi1Fz1NgBDWVQhYwnZh99vrBcZWuKkpCf8l1ej7cfsei6dPEIZ2ppnGIwCw==", - "python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "h4w1OXzywntiUNy9DZ4lIoimrIqzPbmD/Kx66veVsAZYuH4U2mAtTSRIU3OVD+01QCJTraux0ky21UmdbLLWBQ==", - "python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "NFd15/tCR0axTA271DvJDg/UkGT7hJztxpjS9SnwgjSGawY3OseP8RjFT1eBk7aj6+j4zld3gIzfBbbYv6gxBQ==", - "python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": "Kd1ueNtTDzE6rVn8dfTA6NtjGgzQOTuNq/eSmnvX+Y3CqSZXHsSEdts/hXTcieJaPBX3S1HYb9lJCRYPqqHJBg==", - "python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": "bA+/ixBULXSP2307fH18UnkQH8Ld6L9F9RtiFTgLeNC+sPyAM917lN7FBeY2HmFhOY3fqrwWmKI/2l1krgXcAg==", - "python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "z1gIQSglkHTy0Kt3fNocuxc8A6BxpsOgCWNkU0+bqU04YDibWFTYMhWwysMyG7rs8WH286R6oHAQJXCSD9FUAg==", - "python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "l0jmZ40q0Don2N8dqLWbWXfjA1QSE0hpWN9egEVlKeW+uKEEzdEqdCuVhpgGEhqwpT7T0PRIyu9ljs9BM0lLCw==", - "python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "KsBNelgm9ymfgcNkxKIPCGs0u3XY4cZV/WoWZ0a2kc75EeGb18Wvb/sEoNFIZJ5TAuUjty0CPGXSrBsQhzTZAQ==", - "python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "pqqHfl09zhLuNxfuUjbN8CKrXJhlSzLdkXn37Lw8XnwCBZKzYeq8FT/PCvi3EF/YTMi/Xd/tfLP4Zs86Jn5YDA==", - "python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "tC0FMPYQToZvSvG/DIAUEpuRDGyhHt7KvygVWwdk9Iz1/oIp8zquQ9tIGM5xAEt2y+i2w2jSz88OJBaYZvmtDA==", - "python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "uDYCHGcv2Mp1RURMROVAyJBFLOumSOzUJGEQoioXkyVoAhRG2UoguXikj0oBWGXKos98L4kI/TIAv0z73F5hBw==", - "python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "F8BHYoLSCoNw9SVvp0cH8ZRFGuj7Ojg9FzJvKOgLiNkKsr5Kp5Da/t0jqLljUjRlEZh0a6lSBGRCj0VqS6n7BQ==", - "python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "sJXu00WLY6Xsbkc7YqoGbyKz8V07TTAda+LbtFmVyKTsfx1I/w4BrR6rK9QQ0uIvG80X/onVyWcJYkHcHI8GAg==", - "python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "2g0YPlO4c9mwv2p1FtVrQEatX/WM69bLDhVEhIg5rHeBBx75sdWRaKmnCKfR/odNleLhXWLolABESA830u4cAg==", - "python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "ATjdthMRDwYdJT00DALdiXQVoHTUNB9iyjPU6vUIf4GfC4vaOOBirUPZ4gtBOrLQS+hLn9w7nM2gF4fbSMsxCg==", - "python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "7N+zB4DBl9X2izAm4qBVafrtg5uaX7/sKyU4WzHgYtwo38qNZPSEALXcLdFHZ0bF3n3qvOZPKL7zGDLgNuapAg==", - "python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "LS6HrT0pDfbHnLHbfH60IRhAwO3kK5oFYsCiJhDbpPI8MxyNSqg7tU7SOoo3m0a+CzBKfEQP7ri0ZC2FFBhIBw==", - "python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "uQbFciwEpkVFn/LMozK0Jm9+ZDh2VuNpryBmT6m1NaC4v9bxJSFxC/CT4JvvtipRgJRTbFnzxOppiX+bt5pOBQ==" + "python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "OZaZmVdETSWhIHiKL/tiS8BJH9nIhZvOSdwokaWwz8A4DAXHDc6ZxPVvNthpt9tWeD3gdLVA1l3NoDxOL+vaAQ==", + "python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "fOnIVo0lkVPJccWVr+i3LLVzhlIkAQ/jUM8JRV78Cyyzy7mLepnN38qQ/Y/zLIMNgYowM5Uh3lQtXhpi73HRCw==", + "python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "KBZ0V3Saibcb3sbD9LIMTYibszxoEV+pprWLZTf8FeWRrIh6s8aFLWSPALrv3AsdP9OQ4Uu6qH4gPY7+7BUADw==", + "python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "gqMC+b4o9TzEZaIJLTZeQcjBZO0dePgGtEl754YpxiYTwJKNsu8wDgip960+dRs4TH30RNppSnsKTzByEHFfDQ==", + "python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "zMoW2sGwo+O9QurXu/kI1rBuy88//+heDjhrtmloEk7m6BUGGCVaYo18RTyERN5lhpjGGArC4uo+qQ0XqWlODA==", + "python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": "j+x6R2Kc3lmR3Vbzsfue/kYuK5n1pNdEUQm8DpgZK66xDSsMTxBd/hK+ucfiutfFXchOitBvNegqBjXD+qa3AA==", + "python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": "orpZvvoluLpjZ+92jmyrUbyqD7EOv2WlEBsEaMAFOCZiWxXrQxnHgUs/Van6gBmDMyT8zKTYuqsMovupBmQkDQ==", + "python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "tbeuIL+jaDy4IJya/gJHNWGvU8xA2JcCyLRmQdopF68DCVwhzBnpF+9l2cPTPQ4+c+j/itwGwkwlkfMYDrVWDw==", + "python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "HdkKaV0vEn/qnNPiMoKQ9BmUJOn/fFs8WKBYtT2VtAxP/UNOnHzVidOCEthgFBmcDGia2iJpAUzJJtaVW2plBg==", + "python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "khgAZ6q6XZA4DyrNn+GeWl/pbVExjxfiiYgVDVb91TcfExQ0NKOHVFDjEOw+4sWDzjwJgqVOrq6ctFtZ4P+HCw==", + "python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "6ncETsGmDllGix8F7eEECALhCYjhzzBVz1ZtNIDs1l3Ydy2XJ8L8FigNJ/bed9SBb20gtGwYXMXRmiu/hZZfDA==", + "python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "3CNA1ZxBEwKX1/XftG3bGEYjN/+j6Hts1JKM0gfgd9qW1J90XCF1U4sYUvutBXyITBAFoGwPG813d/juwCGkBg==", + "python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "2VuGKUTtPfuwSxnLs5/EQ4QteD+6wgxDpzUiIkrxIbdeQ5RNeTWdq1oju6bPctUXZ97SJgm2q26rZhchF13PDg==", + "python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "7QUTUZNrIxuFyMR5Ksp8LZvUsziXqLrXN2XAcTeY5jOSl0eu0wwk0Vn0KUA4/C+zBJWF7Azok3m2oIPV+vQiBQ==", + "python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "4/CrUNcQQM+QRtZeRoUWHh0dlq2tFVYESqXn9ByRNG5jcwvCaTMhA3qbHnK7LnNcLqZf6nKPlKJG8gNZrnW3CA==", + "python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "6j0Fl7SPymEo9Bhj8Rg2+56pkjZVY7yFPFjz1Mv5PnkZZUzCvmqbqArrxfKY8tmt17Zfn+Uq0XUx/A4ns868Aw==", + "python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "8/td493hepBmhe7AGfTiZ0DyGy7G1R2aQM8S5kOH8/7lxP1yOzPJNp0Q4IUdiO7PAv4K/Qs3mZXRqIb9m6muAQ==", + "python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "YL4VfWwVM4LA30Ug/D5da0dpL2CrtS9k1iZGcHzxn0UZXg7gvn/CwofgPrAgqxKOuvwy8OAN4dseKCgvVl7tBw==", + "python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "9ae5f6k/QFWnu/NcLHR4Jdp9teHEreFVqMstcgCS2krd2WDrA4RyenCMpAW5DssCVgK/SSYZ5R/mt784LtX5Dg==", + "python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "FEavK888fANFifz5HwjkSnzyUicwrDoVMor1xg7dIDlflvBGeE+q+N45+EJNYuT+Gtu7z5NeBh3QWx8S9KHTDw==" } } diff --git a/artifacts/iqpilot_hephaestusd_private/manifest.json.sig b/artifacts/iqpilot_hephaestusd_private/manifest.json.sig index 50d3605c8..3dfcea909 100644 --- a/artifacts/iqpilot_hephaestusd_private/manifest.json.sig +++ b/artifacts/iqpilot_hephaestusd_private/manifest.json.sig @@ -1 +1 @@ -0MdDcjhhpW0t9PD/b+przWxHmtrchzKk9Q24ViXNM7b46lNHbM1s5AfPwX2gFYhaJb9HKrSNDqq6GukmhdUBAw== +7unLWRQJMpEA37ml8a0VSDmIhihtSdBcl8LG9zT7eXqtHofgwK7hTGUGVWvGro/g7STaxm2yDGLe9maVHRpcAg== diff --git a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/_vendored.json b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/_vendored.json index 690846176..d87b2930f 100644 --- a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/_vendored.json +++ b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/_vendored.json @@ -22,6 +22,7 @@ "iqpilot.konn3kt.service_health", "iqpilot.selfdrive.car.vehicle_catalog", "iqpilot.selfdrive.iqmodeld.config", + "iqpilot.selfdrive.iqmodeld.models", "iqpilot.selfdrive.iqmodeld.models.fetcher", "iqpilot.selfdrive.iqmodeld.models.helpers", "iqpilot.selfdrive.locationd.calibrationd", diff --git a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py index e69de29bb..5ece1c074 100644 --- a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py +++ b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py @@ -0,0 +1,3 @@ +""" +Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos/ +""" 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 addac886e..5f959ba26 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 832d5967d..45c9b6d93 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 4ea31033a..e9dd27c7b 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 909a78f6f..06da1fe85 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 7a00713df..be1b86806 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/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 index 29bcca501..152c2de8f 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so 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 index 842f07960..28f1efc0f 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so 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 468682314..54855fc86 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 e149b758c..247046323 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 978035f8a..b6d17a37c 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 7d10d5fd8..1f56b672a 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 ef5f3876b..de574b98c 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 ed7aae638..50a74b028 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 762bc22c0..d71ae75a3 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 140967bc6..974ebd768 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 e978da013..0159569ce 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 b063fb40e..0a525d0e3 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 99a52db37..178e0562e 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 b725e01fb..71887ce94 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 ced13e8bb..283e1996f 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 1ee65f358..5dbd4b3d8 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/iqpilot/selfdrive/controls/controlsd.py b/iqpilot/selfdrive/controls/controlsd.py index ea563c9cb..ff0469d48 100755 --- a/iqpilot/selfdrive/controls/controlsd.py +++ b/iqpilot/selfdrive/controls/controlsd.py @@ -22,6 +22,7 @@ from iqpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID from iqpilot.selfdrive.controls.lib.latcontrol_angle import LatControlAngle, STEER_ANGLE_SATURATION_THRESHOLD from iqpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque from iqpilot.selfdrive.controls.lib.latcontrol_torque_pq import LatControlTorquePQ +from iqpilot.selfdrive.controls.lib.latcontrol_torque_v0 import LatControlTorqueV0, is_vw_mqb_torque from iqpilot.selfdrive.controls.lib.longcontrol import LongControl from iqpilot.system.proprietary_runtime._verified_import import import_verified_module from iqpilot.selfdrive.locationd.helpers import PoseCalibrator, Pose @@ -111,12 +112,20 @@ class Controls(IQControlsLayer): elif self.CP.lateralTuning.which() == 'pid': self.LaC = LatControlPID(self.CP, self.CP_IQ, self.CI, DT_CTRL) elif self.CP.lateralTuning.which() == 'torque': - self.LaC = LatControlTorque(self.CP, self.CP_IQ, self.CI, DT_CTRL) if self._use_pq_torque(): try: self.LaC = LatControlTorquePQ(self.CP, self.CP_IQ, self.CI, DT_CTRL) except Exception: cloudlog.exception("LatControlTorquePQ init failed; using generic torque") + self.LaC = LatControlTorque(self.CP, self.CP_IQ, self.CI, DT_CTRL) + elif self._use_mqb_torque_v0(): + try: + self.LaC = LatControlTorqueV0(self.CP, self.CP_IQ, self.CI, DT_CTRL) + except Exception: + cloudlog.exception("LatControlTorqueV0 init failed; using generic torque") + self.LaC = LatControlTorque(self.CP, self.CP_IQ, self.CI, DT_CTRL) + else: + self.LaC = LatControlTorque(self.CP, self.CP_IQ, self.CI, DT_CTRL) def _use_pq_torque(self) -> bool: try: @@ -128,6 +137,13 @@ class Controls(IQControlsLayer): cloudlog.exception("pq torque selection failed; using generic torque") return False + def _use_mqb_torque_v0(self) -> bool: + try: + return is_vw_mqb_torque(self.CP) + except Exception: + cloudlog.exception("mqb torque v0 selection failed; using generic torque") + return False + def _update_params(self) -> None: self.enable_curvature_controller = self.params.get_bool("EnableCurvatureController") self.enable_smooth_steer = self.params.get_bool("EnableSmoothSteer") @@ -320,7 +336,7 @@ class Controls(IQControlsLayer): hudControl.leftLaneDepart = self.sm['driverAssistance'].leftLaneDeparture hudControl.rightLaneDepart = self.sm['driverAssistance'].rightLaneDeparture - if self.sm['selfdriveState'].active: + if CC.latActive: CO = self.sm['carOutput'] if self.CP.steerControlType in (car.CarParams.SteerControlType.angle, car.CarParams.SteerControlType.curvatureDEPRECATED): self.steer_limited_by_safety = abs(CC.actuators.steeringAngleDeg - CO.actuatorsOutput.steeringAngleDeg) > \ diff --git a/iqpilot/selfdrive/controls/lib/latcontrol_torque_v0.py b/iqpilot/selfdrive/controls/lib/latcontrol_torque_v0.py new file mode 100644 index 000000000..c76d28f38 --- /dev/null +++ b/iqpilot/selfdrive/controls/lib/latcontrol_torque_v0.py @@ -0,0 +1,118 @@ +# Copyright (c) 2018, Comma.ai, Inc. +# +# 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. + +import math +from collections import deque + +import numpy as np + +from iqpilot.cereal import log +from iqdbc.car.lateral import FRICTION_THRESHOLD, get_friction +from iqpilot.common.constants import ACCELERATION_DUE_TO_GRAVITY +from iqpilot.common.filter_simple import FirstOrderFilter +from iqpilot.common.pid import PIDController +from iqpilot.selfdrive.controls.lib.latcontrol import LatControl + + +KP = 1.0 +KI = 0.3 +KD = 0.0 +INTERP_SPEEDS = [1, 1.5, 2.0, 3.0, 5, 7.5, 10, 15, 30] +KP_INTERP = [250, 120, 65, 30, 11.5, 5.5, 3.5, 2.0, KP] + +LP_FILTER_CUTOFF_HZ = 1.2 +LAT_ACCEL_REQUEST_BUFFER_SECONDS = 1.0 +VERSION = 0 + + +def is_vw_mqb_torque(CP): + if CP.brand != 'volkswagen': + return False + from iqdbc.car.volkswagen.values import VolkswagenFlags + excluded_platforms = VolkswagenFlags.PQ | VolkswagenFlags.MLB | VolkswagenFlags.MEB | VolkswagenFlags.MQB_EVO + return not bool(CP.flags & excluded_platforms) + + +class LatControlTorqueV0(LatControl): + def __init__(self, CP, CP_IQ, CI, dt): + super().__init__(CP, CP_IQ, CI, dt) + self.torque_params = CP.lateralTuning.torque.as_builder() + self.torque_from_lateral_accel = CI.torque_from_lateral_accel() + self.lateral_accel_from_torque = CI.lateral_accel_from_torque() + self.pid = PIDController([INTERP_SPEEDS, KP_INTERP], KI, KD, rate=1 / self.dt) + self.update_limits() + self.steering_angle_deadzone_deg = self.torque_params.steeringAngleDeadzoneDeg + self.lat_accel_request_buffer_len = int(LAT_ACCEL_REQUEST_BUFFER_SECONDS / self.dt) + self.lat_accel_request_buffer = deque([0.] * self.lat_accel_request_buffer_len, maxlen=self.lat_accel_request_buffer_len) + self.previous_measurement = 0.0 + self.measurement_rate_filter = FirstOrderFilter(0.0, 1 / (2 * np.pi * LP_FILTER_CUTOFF_HZ), self.dt) + + def update_live_torque_params(self, latAccelFactor, latAccelOffset, friction): + self.torque_params.latAccelFactor = latAccelFactor + self.torque_params.latAccelOffset = latAccelOffset + self.torque_params.friction = friction + self.update_limits() + + def update_limits(self): + self.pid.set_limits(self.lateral_accel_from_torque(self.steer_max, self.torque_params), + self.lateral_accel_from_torque(-self.steer_max, self.torque_params)) + + def update(self, active, CS, VM, params, steer_limited_by_safety, desired_curvature, calibrated_pose, curvature_limited, lat_delay, + lookahead_curvature=None): + pid_log = log.ControlsState.LateralTorqueState.new_message() + pid_log.version = VERSION + if not active: + output_torque = 0.0 + pid_log.active = False + else: + measured_curvature = -VM.calc_curvature(math.radians(CS.steeringAngleDeg - params.angleOffsetDeg), CS.vEgo, params.roll) + roll_compensation = params.roll * ACCELERATION_DUE_TO_GRAVITY + curvature_deadzone = abs(VM.calc_curvature(math.radians(self.steering_angle_deadzone_deg), CS.vEgo, 0.0)) + lateral_accel_deadzone = curvature_deadzone * CS.vEgo ** 2 + + delay_frames = int(np.clip(lat_delay / self.dt, 1, self.lat_accel_request_buffer_len)) + expected_lateral_accel = self.lat_accel_request_buffer[-delay_frames] + future_desired_lateral_accel = desired_curvature * CS.vEgo ** 2 + self.lat_accel_request_buffer.append(future_desired_lateral_accel) + gravity_adjusted_future_lateral_accel = future_desired_lateral_accel - roll_compensation + desired_lateral_jerk = (future_desired_lateral_accel - expected_lateral_accel) / lat_delay + + measurement = measured_curvature * CS.vEgo ** 2 + measurement_rate = self.measurement_rate_filter.update((measurement - self.previous_measurement) / self.dt) + self.previous_measurement = measurement + + setpoint = lat_delay * desired_lateral_jerk + expected_lateral_accel + error = setpoint - measurement + + pid_log.error = float(error) + feedforward = gravity_adjusted_future_lateral_accel + feedforward -= self.torque_params.latAccelOffset + feedforward += get_friction(error, lateral_accel_deadzone, FRICTION_THRESHOLD, self.torque_params) + + freeze_integrator = steer_limited_by_safety or CS.steeringPressed or CS.vEgo < 5 + output_lataccel = self.pid.update(pid_log.error, -measurement_rate, feedforward=feedforward, speed=CS.vEgo, + freeze_integrator=freeze_integrator) + output_torque = self.torque_from_lateral_accel(output_lataccel, self.torque_params) + + pid_log.active = True + pid_log.p = float(self.pid.p) + pid_log.i = float(self.pid.i) + pid_log.d = float(self.pid.d) + pid_log.f = float(self.pid.f) + pid_log.output = float(-output_torque) + pid_log.actualLateralAccel = float(measurement) + pid_log.desiredLateralAccel = float(setpoint) + pid_log.desiredLateralJerk = float(desired_lateral_jerk) + pid_log.saturated = bool(self._check_saturation(self.steer_max - abs(output_torque) < 1e-3, CS, steer_limited_by_safety, curvature_limited)) + + return -output_torque, 0.0, pid_log diff --git a/iqpilot/selfdrive/controls/tests/test_latcontrol.py b/iqpilot/selfdrive/controls/tests/test_latcontrol.py index 05ad23f67..7f5ee6e28 100644 --- a/iqpilot/selfdrive/controls/tests/test_latcontrol.py +++ b/iqpilot/selfdrive/controls/tests/test_latcontrol.py @@ -6,12 +6,14 @@ from iqdbc.car.honda.values import CAR as HONDA from iqdbc.car.toyota.values import CAR as TOYOTA from iqdbc.car.nissan.values import CAR as NISSAN from iqdbc.car.gm.values import CAR as GM +from iqdbc.car.volkswagen.values import CAR as VOLKSWAGEN from iqdbc.car.vehicle_model import VehicleModel from iqpilot.common.realtime import DT_CTRL from iqpilot.selfdrive.car.helpers import convert_to_capnp from iqpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID from iqpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque from iqpilot.selfdrive.controls.lib.latcontrol_torque_pq import LatControlTorquePQ +from iqpilot.selfdrive.controls.lib.latcontrol_torque_v0 import LatControlTorqueV0, is_vw_mqb_torque import iqpilot.selfdrive.controls.lib.latcontrol_torque_pq as latcontrol_torque_pq from iqpilot.selfdrive.controls.lib.latcontrol_angle import LatControlAngle from iqpilot.selfdrive.locationd.helpers import Pose @@ -31,7 +33,17 @@ class TestLatControl: iqpilot_interfaces.apply_iq_car_config(CI) return CP, LatControlTorquePQ(CP.as_reader(), convert_to_capnp(CP_IQ).as_reader(), CI, DT_CTRL) - @parameterized.expand([(HONDA.HONDA_CIVIC, LatControlPID), (TOYOTA.TOYOTA_RAV4, LatControlTorque), + @staticmethod + def build_v0_controller(): + car_name = TOYOTA.TOYOTA_RAV4 + CarInterface = interfaces[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.apply_iq_car_config(CI) + return CP, LatControlTorqueV0(CP.as_reader(), convert_to_capnp(CP_IQ).as_reader(), CI, DT_CTRL) + + @parameterized.expand([(HONDA.HONDA_CIVIC, LatControlPID), (TOYOTA.TOYOTA_RAV4, LatControlTorque), (TOYOTA.TOYOTA_RAV4, LatControlTorqueV0), (NISSAN.NISSAN_LEAF, LatControlAngle), (GM.CHEVROLET_BOLT_EUV, LatControlTorque)]) def test_saturation(self, car_name, controller): CarInterface = interfaces[car_name] @@ -78,6 +90,28 @@ class TestLatControl: _, _, lac_log = controller.update(True, CS, VM, params, False, 0.001, pose, False, 0.2) assert lac_log.active + def test_v0_uses_current_lateral_acceleration_setpoint(self): + CP, controller = self.build_v0_controller() + VM = VehicleModel(CP) + CS = car.CarState.new_message(vEgo=30) + params = log.VehicleParameters.new_message() + pose = Pose.from_live_pose(generate_deviceMotion().deviceMotion) + + _, _, lac_log = controller.update(True, CS, VM, params, False, 0.001, pose, False, 0.3) + + assert lac_log.version == 0 + assert abs(lac_log.desiredLateralAccel - 0.9) < 1e-6 + + def test_v0_platform_selection(self): + mqb_interface = interfaces[VOLKSWAGEN.VOLKSWAGEN_PASSAT_MK8] + mqb_params = mqb_interface.get_non_essential_params(VOLKSWAGEN.VOLKSWAGEN_PASSAT_MK8) + + assert is_vw_mqb_torque(mqb_params) + for car_name in (VOLKSWAGEN.VOLKSWAGEN_PASSAT_MK7, VOLKSWAGEN.VOLKSWAGEN_GOLF_MK8, + VOLKSWAGEN.VOLKSWAGEN_ID4_MK1, VOLKSWAGEN.AUDI_A4_MK4, TOYOTA.TOYOTA_RAV4): + CarInterface = interfaces[car_name] + assert not is_vw_mqb_torque(CarInterface.get_non_essential_params(car_name)) + def test_pq_controller_inactive_lookahead_and_slew_reset(self): CP, controller = self.build_pq_controller() controller.curvature_lookahead_enabled = True diff --git a/iqpilot/selfdrive/locationd/lagd.py b/iqpilot/selfdrive/locationd/lagd.py index 226f58007..40d69871b 100755 --- a/iqpilot/selfdrive/locationd/lagd.py +++ b/iqpilot/selfdrive/locationd/lagd.py @@ -21,7 +21,7 @@ MIN_VEGO = 50.0 * CV.MPH_TO_MS MIN_ABS_YAW_RATE = 0.0 MAX_YAW_RATE_SANITY_CHECK = 1.0 MIN_NCC = 0.95 -MAX_LAG = 1.0 +MAX_LAG = 0.65 MIN_LAG = 0.15 MAX_LAG_STD = 0.1 MAX_LAT_ACCEL = 2.0 diff --git a/iqpilot/selfdrive/locationd/test/test_lagd.py b/iqpilot/selfdrive/locationd/test/test_lagd.py index 95b7ad793..0b4cfc51e 100644 --- a/iqpilot/selfdrive/locationd/test/test_lagd.py +++ b/iqpilot/selfdrive/locationd/test/test_lagd.py @@ -88,7 +88,7 @@ class TestLagd: assert np.argmax(corr) in range(lag_frames - MAX_ERR_FRAMES, lag_frames + MAX_ERR_FRAMES + 1) def test_empty_estimator(self): - mocked_CP = car.CarParams(steerActuatorDelay=0.8) + mocked_CP = car.CarParams(steerActuatorDelay=0.5) estimator = LateralLagEstimator(mocked_CP, DT) msg = estimator.get_msg(True) assert msg.lateralDelay.status == 'unestimated' @@ -100,7 +100,7 @@ class TestLagd: def test_estimator_basics(self, subtests): for lag_frames in range(LAGD_MIN_LAG_FRAMES, LAGD_MAX_LAG_FRAMES - 1): with subtests.test(msg=f"lag_frames={lag_frames}"): - mocked_CP = car.CarParams(steerActuatorDelay=0.8) + mocked_CP = car.CarParams(steerActuatorDelay=0.5) estimator = LateralLagEstimator(mocked_CP, DT, min_recovery_buffer_sec=0.0, min_yr=0.0) process_messages(estimator, lag_frames, int(MIN_OKAY_WINDOW_SEC / DT) + BLOCK_NUM_NEEDED * BLOCK_SIZE) msg = estimator.get_msg(True) @@ -112,7 +112,7 @@ class TestLagd: assert msg.lateralDelay.calPerc == 100 def test_estimator_masking(self): - mocked_CP, lag_frames = car.CarParams(steerActuatorDelay=0.8), random.randint(LAGD_MIN_LAG_FRAMES, LAGD_MAX_LAG_FRAMES - 1) + mocked_CP, lag_frames = car.CarParams(steerActuatorDelay=0.5), random.randint(LAGD_MIN_LAG_FRAMES, LAGD_MAX_LAG_FRAMES - 1) estimator = LateralLagEstimator(mocked_CP, DT, min_recovery_buffer_sec=0.0, min_yr=0.0, min_valid_block_count=1) process_messages(estimator, lag_frames, (int(MIN_OKAY_WINDOW_SEC / DT) + BLOCK_SIZE) * 2, rejection_threshold=0.4) msg = estimator.get_msg(True) @@ -122,7 +122,7 @@ class TestLagd: @pytest.mark.timeout(60) def test_estimator_performance(self): - mocked_CP = car.CarParams(steerActuatorDelay=0.8) + mocked_CP = car.CarParams(steerActuatorDelay=0.5) estimator = LateralLagEstimator(mocked_CP, DT) ds = []