diff --git a/artifacts/iqpilot_navd_private/manifest.json b/artifacts/iqpilot_navd_private/manifest.json index 281b750f3..b2935a48f 100644 --- a/artifacts/iqpilot_navd_private/manifest.json +++ b/artifacts/iqpilot_navd_private/manifest.json @@ -51,8 +51,8 @@ }, "python/_iqclosure/iqpilot/common/realtime.py": { "mode": 420, - "sha256": "ff112acc1fdc227e2ffa4b0fa74f27b967a488bb72fe21c5be82fc70d1104f02", - "size": 3488 + "sha256": "f137ef62c1602a1f7c329731883dc518c62288bd25596891858d460ae3209ae2", + "size": 3966 }, "python/_iqclosure/iqpilot/common/slc_utilities.py": { "mode": 420, @@ -186,7 +186,7 @@ }, "python/iqpilot_private/navd/__init__.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "09570dc0155dfac0ee0f43a7c648c0cdeff927d900616c67bd5fc427f910cfe6", + "sha256": "be5f9700cc95bf33007afb85745c5aef7d6de4f1f1e3971956bdf4f9c4524922", "size": 67616 }, "python/iqpilot_private/navd/__init__.py": { @@ -196,103 +196,103 @@ }, "python/iqpilot_private/navd/amap_client.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "a97ae99ab0a40db0f484c2f160568f4d6490e27ad0f41bfe8db0e68fde7d4a7e", + "sha256": "c9bb61739b00f9b241d689851e671cf261001f2fe867802afa2c7ed47ec59eab", "size": 202040 }, "python/iqpilot_private/navd/event_builder.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "5ad083f16196c7bbfa31706c9b3e2838d3930ff99d902629bfe83dbb886da834", - "size": 136944 + "sha256": "150db8f37b8237bfb2e145d9a3bd2e824f15238a21b5c84ba62498bbb0f83300", + "size": 136960 }, "python/iqpilot_private/navd/helpers.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f605d2a075a54f849ef78a3e9bab17388e79c5c0c6fbcccbb9d220280ae80a7b", - "size": 135936 + "sha256": "f945d8440598055e7de1902af3c99f4b58f42a664160c46a98d0b6c501e2ddb2", + "size": 135960 }, "python/iqpilot_private/navd/incident_feed.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "2a53684448796dae21cdf163408741682272319aeb25ba16dc8a01568d02c0c6", - "size": 135496 + "sha256": "829175e4f8a14caf06dd5d7bc99fca728a34dd527625329f43138ff60af00105", + "size": 135528 }, "python/iqpilot_private/navd/iqmapd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "21460301b6e7f50e6229120f69c014721cd7582988c180585ce62572b49fdbe4", - "size": 135608 + "sha256": "f361ab42f1a8682a2c36c65ef2c2126d225d80fdcb7301b346b1566eb1248ca0", + "size": 135632 }, "python/iqpilot_private/navd/long_decel.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "c3c26ee2723a170cf15e45ad2763b26bc94fb05f09f25e45ed45e0bce1ce84b9", - "size": 69728 + "sha256": "f65a487d3316e672a3cce96dd1bf1f3629f5ae7d60529494e41420b3b5a7d0f9", + "size": 69752 }, "python/iqpilot_private/navd/mapbox_client.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "abae4e7ff3ec6f32784708815f06e88d9f9e3db8613f997872240147faf76787", + "sha256": "638115c15efc7db1e33cf003eeadd5c1c416a0ada7d786df721ff2c03f99e3e9", "size": 68144 }, "python/iqpilot_private/navd/nav_cameras.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "b820fcdacd75f085cf59ca0275ccf54a8393f2ccd2318f7004169271f7b9de4d", - "size": 135576 + "sha256": "205750c1ce62efe88c2de65c7be25ccbc3fe28055f147a262f65f3b440da1bfa", + "size": 135600 }, "python/iqpilot_private/navd/nav_turn_signals.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "628d0c440e7b815a104a927a68c3fde36298482f5f4e2db7fb425fec4b038a4f", - "size": 135544 + "sha256": "379f7bc251937da2c6edbb039ec249773c83c7145e19a5f375d9afa2a5bcffb7", + "size": 135560 }, "python/iqpilot_private/navd/navd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "17178f3c4e435def59d6a5217cf7017f3ac0ec0cc86112b79de7fb106555e150", - "size": 797272 + "sha256": "0c43fd3566bfa772dde16209aeafa01a1831294d46d6b4b57b818aafb1729647", + "size": 797296 }, "python/iqpilot_private/navd/navincidentd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "91485f5f804e78df018cc8f8e2141bcd4f195f72b1c5f90354be0048d3049dca", - "size": 135320 + "sha256": "37c9074d18a0492d58c1176d2dade4d452c60d0f4e47d83d59ea859111629c6e", + "size": 135344 }, "python/iqpilot_private/navd/navrenderd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "bcff7c84933fc8d9ddb9bf9bbbfc1fd5c88b56c8c38ecf10eb323d363812b3a0", - "size": 135560 + "sha256": "fd74128599c4c4cc6a0d5c545430f292aceb9b0dadcda9b7a37c0a868176bb6a", + "size": 135584 }, "python/iqpilot_private/navd/osm_cameras.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "037ecb86f7a34f858353d4f63b59d80e8882e33036f07e3fef9ef3f21f361df7", - "size": 136368 + "sha256": "b8f93b885107e0c2a36b717bc3fa80873505c8a7d067861342dc33283f2052c0", + "size": 136392 }, "python/iqpilot_private/navd/reroute.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f795ddf5145457fe03e998c9d59bb09cf92fdc7a131a5d9206c8de8e0211ca24", - "size": 136192 + "sha256": "4c5a07107ba60783d67810def5dd4df285dbb67482ad239f48350e38a46b8e9e", + "size": 136216 }, "python/iqpilot_private/navd/road_incidents.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "a4901645dc73c97718056562a8ddb7054c755fb96527a16a81c0b74e3fe3cfc2", - "size": 203112 + "sha256": "969d6d5b6f42193ff476b989b0dad034dd1a18d1633e8d1fb268f03b63b4ced2", + "size": 203136 }, "python/iqpilot_private/navd/route_manager.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "e87493497fa8eb3a5d9515b348c288c5856c4ad1c5c8c3c48e96d380c12319af", - "size": 877832 + "sha256": "bb9694f32928acfb5402dba9ca5a7755f44f3ab32078813991b6497dfe213d63", + "size": 877864 }, "python/iqpilot_private/navd/runtime_common.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "ac4def546038345a83c2a3bab96f49c7c356629cde881b741af83097f91d64c5", - "size": 135752 + "sha256": "309f170a1f21ba35e8ff30680a582a959178622a236e8ecf52a92a932818ffd7", + "size": 135760 }, "python/iqpilot_private/navd/traffic.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "6d396fefa3abccf457233e601a50eb884b2c6c2b33d9176e6141c0a8f0d520db", - "size": 69704 + "sha256": "4568e6b232a4f57d52152d04cfe819e0a3c614130a027ec46e881554dfe91355", + "size": 69720 }, "python/iqpilot_private/navd/turn_desire.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "769fa2929212886d99d6b38b0f9ae573a91245aad909f8330389de536effe7da", - "size": 69752 + "sha256": "f8200244ca7a21c4593a1fc5ad4243ccfab49b6cf2b5e4a94d4a703a0b449d9a", + "size": 69768 }, "python/iqpilot_private/navd/web_server.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "3545b34b58014870e4ba11813f0a3a9361f8ecf4c179e9cac83b237fd8925eda", - "size": 201384 + "sha256": "ed05513ace7c59ba86d3d9b813dd1b87efffd039424ec403fc87a47ecc2cb0e7", + "size": 201400 }, "runtime": { "entries": { @@ -331,26 +331,26 @@ } }, "signatures": { - "python/iqpilot_private/navd/__init__.cpython-312-aarch64-linux-gnu.so": "yl55nNL7twb8/AbcwWig55B0ZRl38OjDSOa3/KW75gCRXedL5+AuyqyfZoea1gvnaqIHIP4Un5mqGzBJbYxJCA==", - "python/iqpilot_private/navd/amap_client.cpython-312-aarch64-linux-gnu.so": "HSfuPN8O3FYCdK1TgE2V8Xgp9sETxzD3WzOiZFkt9qwDj9EBQWvdeZfaWNsiayxBQn2j/CroPtt87caThEQBCw==", - "python/iqpilot_private/navd/event_builder.cpython-312-aarch64-linux-gnu.so": "s3METdDm+vPRPE6/AdtQwuMZgwPfuRS2RK7AtUa6GDbbrEEGUzJ65vF4gJwMGzDPYlXPm2/aXpQCozIF6nKnCQ==", - "python/iqpilot_private/navd/helpers.cpython-312-aarch64-linux-gnu.so": "nFAKqKowI7kSPyh+fAG1yc6BArFr7VZe6Gihag1WRWrhCf872yynJvrrEvB+5ckIgxW/R+dR6IfqDT6zEng8Bw==", - "python/iqpilot_private/navd/incident_feed.cpython-312-aarch64-linux-gnu.so": "xVYK7jJkOWGok37YrhDGErg1LN9wAXg/G/vvXJTMwkS/aL/ntVT13mTj9+4fMfuED0j/xpORS9nXanQvuL9VBA==", - "python/iqpilot_private/navd/iqmapd.cpython-312-aarch64-linux-gnu.so": "et1IszCWS1xeeq0DCiAHqh4wyKOywFUY1nvBwIwdrKvYEklddK3zF7YoVN5Z6rPluw2n1AEWlQE92JsY6curDg==", - "python/iqpilot_private/navd/long_decel.cpython-312-aarch64-linux-gnu.so": "99iE6KCnINCOnW5QU7NLRl+mGMtngCDpNiYekjKxkYhGf8EJVBysv0rUA9oVK8EbtymTgRcU1TwOEFbawDe6CA==", - "python/iqpilot_private/navd/mapbox_client.cpython-312-aarch64-linux-gnu.so": "EveeEaNk8Q++H+5XU5DyZavY+BDogi7053aR+EF/cuHjk5037bqndUCdaOIlKvqUdrVaiJcEOA2Mt+8yV6LpCQ==", - "python/iqpilot_private/navd/nav_cameras.cpython-312-aarch64-linux-gnu.so": "rHtL7+GUTm2VL8gSwnYtYqbOhmqFHUSa+/KJpfB8ncjkQYbDD6Uic6DGuSJzzk2BQN32LFB1sTlLDj4U+oOEDQ==", - "python/iqpilot_private/navd/nav_turn_signals.cpython-312-aarch64-linux-gnu.so": "vQSmPNd7Dwsf/CwGcS/iL0pw4WxaKHXrU0O1Df2q3bBdwAkAMwN9DIou/tOQRtM5YqCtPO98qkX8Ut3Zp1dJCQ==", - "python/iqpilot_private/navd/navd.cpython-312-aarch64-linux-gnu.so": "pMr7NwjDNwma7y1mUf/ZAbl42LcKA7qvZdmG6o1flfHYGkXpzHnBsgTkmtJHW757rKYFWZYVwWs6tUeAiNnnDw==", - "python/iqpilot_private/navd/navincidentd.cpython-312-aarch64-linux-gnu.so": "SXTuhzNb1o/GPLhBR0MQj1CaZVxo74z3c/k3rlbeeYQgbip/uCLq2kEE3qtCgByD8T+of3Jz8Q6eD/+ldk6AAQ==", - "python/iqpilot_private/navd/navrenderd.cpython-312-aarch64-linux-gnu.so": "IfGrgWQtLBnU0qHoqGzPxtyNGOVaWo0HE9UVe9j+zCtpqrdAySkoEAcjcKW6kH/5bEz7x23ZAL9xXvWpm2xBAw==", - "python/iqpilot_private/navd/osm_cameras.cpython-312-aarch64-linux-gnu.so": "QY17ZHn3PcCf6Qt8i5TM1sqfRCTZng9Rpln+UJpHycGidh7EsxrBtw1IHru9mkaL7SUrq1faBhneW6GsPoyIAA==", - "python/iqpilot_private/navd/reroute.cpython-312-aarch64-linux-gnu.so": "e8lxcce1x0l44bOMcOj8Qhv8gxITV7YiIlY2pL9HWZx4QKy1Dfi5fbfZJgxGNaWKPZSLYBxvzcj9mV6Lxv7XBw==", - "python/iqpilot_private/navd/road_incidents.cpython-312-aarch64-linux-gnu.so": "cMi1i3Zdq6o8lycjJm/ehiPqGp1ROfMuLTge3ByIWdcLigeFMoWPeK1/jt/TDRqZa0nLtIEBB5Scd2tN+jgQBg==", - "python/iqpilot_private/navd/route_manager.cpython-312-aarch64-linux-gnu.so": "pYlvQW60hCPcNgXDF+AC9Gce2flCPgxrd2m4Trxhj7H+VeKheMjGE3ghiXK2L7tE7YT5p+iNqO0z+GMInNv3DQ==", - "python/iqpilot_private/navd/runtime_common.cpython-312-aarch64-linux-gnu.so": "hp1fhtfzGO7YwllryCsnvweQd9A2o4fdDBeLNVfBEm3d1P/tROK7R7nLRIdlTK8/fc8rqxFHY5lYERyU9sN3AA==", - "python/iqpilot_private/navd/traffic.cpython-312-aarch64-linux-gnu.so": "5ApZT2zRewbOCe7iZuBMLzsUvc13iX5+1O28NSIIqgmd3OobJIZGuXxeit7CvsR2sucxJt9Xuw4QKFehHJ2sDw==", - "python/iqpilot_private/navd/turn_desire.cpython-312-aarch64-linux-gnu.so": "RW9KnywXYAkZL+NM6tAqcTamMi8RA0wqoXntM1n3B851+PXrJF8ThLl6agHGawBqaKYLAPsehF7ayCN4mzmdAA==", - "python/iqpilot_private/navd/web_server.cpython-312-aarch64-linux-gnu.so": "3iozDeFP76pN0cIDHohtBvYzr3KZW9vOHDI5H7da5bv+ZCDGMtrnhqWWt5ujnZExl29mPnerQ/3Ogm+y7Z4RCQ==" + "python/iqpilot_private/navd/__init__.cpython-312-aarch64-linux-gnu.so": "Bym+fZhzakHRgZxpugkxuqC1r6maOmNhWskzqaL/+wg6XkC0MviLzM8D+XJJ3H8alcbO1Dc9W4QNPmAv/U2HCg==", + "python/iqpilot_private/navd/amap_client.cpython-312-aarch64-linux-gnu.so": "A/nm3hEKPsdXJSMxUFIYvTjAHMkgfstExgRnZYz0PF51stMz++1J43i13xLAyrokupD0ScBt/0k1n3tfpSpqDA==", + "python/iqpilot_private/navd/event_builder.cpython-312-aarch64-linux-gnu.so": "D/rORB3ZH8FnXpPEyXsiGO7sQydBx56DKfd8WYAhwiuwFtjiftKNfVygpYET8QebyWL953SGi+w3roztjbumDQ==", + "python/iqpilot_private/navd/helpers.cpython-312-aarch64-linux-gnu.so": "cfzYrfQCUw9BZbapQoz6/zRyIIEujw08sE5HFdbsM9pRl7JEyaleQUWqE01BxizHN/JCYqKQVPkvJFuwpnbVAw==", + "python/iqpilot_private/navd/incident_feed.cpython-312-aarch64-linux-gnu.so": "tmj9dLFSCQad5OHKnkuy3cguWDd0A0timHw1V75vushxaRmqwlxAt5xT9YoAPm7ZUKHBQqmC/bjfbmLqMKPkDA==", + "python/iqpilot_private/navd/iqmapd.cpython-312-aarch64-linux-gnu.so": "GEet1xOOsahT0sdJ9bInk+7YjMFj/aAqQCpmFxVY8JVEKpAJlNAZ3SgNoTz352nS1c1iKvqRHV1o0qzjdIp3Dw==", + "python/iqpilot_private/navd/long_decel.cpython-312-aarch64-linux-gnu.so": "ZxX5vhARJ++kMGlLY2WOdVQa85TXoDiVPrBwt9wOVchDVkvTNJk6qVHRYZBo0AfdbQsnThjyZwN/omZRvr87Cg==", + "python/iqpilot_private/navd/mapbox_client.cpython-312-aarch64-linux-gnu.so": "pIrMiS6pex0rzXiFZomlloKH+2VwWa/+DiIqaDzV0/dVSz6u9CCP5IHXFfe0mtuO7t3UYElJtMPPo8WiXvJIDQ==", + "python/iqpilot_private/navd/nav_cameras.cpython-312-aarch64-linux-gnu.so": "HGJYD9jqC/FT6wg32BtuMWkwNUyiurcYnXraycJ5XwX1k6RU4cNeiVhEBNy3Cl+kJ0Z0S3uZPMGnNWucabwYDA==", + "python/iqpilot_private/navd/nav_turn_signals.cpython-312-aarch64-linux-gnu.so": "70G6k1Zuv9ZFU6s64PjH5M2ik2Lx3IFuCFMjHw3GmoOZ+BEg7WheHK0yJyzDLjznAYaoakvZmwnc1yx8q2k5Dw==", + "python/iqpilot_private/navd/navd.cpython-312-aarch64-linux-gnu.so": "3Z74roPOVqxeKoCJ8YJfn//HQXiTvxtLAboGMIKRwxraVkZNvN76YgrAsCDt4Afm4HgJYqh5WsZa0KgmwXnfBA==", + "python/iqpilot_private/navd/navincidentd.cpython-312-aarch64-linux-gnu.so": "uKZkF9G18QvfZq4hpRJLaBCLUfXq9akzGngbnfqNnYvk3hOZmpH0wPOKk/a6uRSq3U2Sa5QAGgbaqnSkg98FBQ==", + "python/iqpilot_private/navd/navrenderd.cpython-312-aarch64-linux-gnu.so": "SrCbs4y1iLpqUDphjbBiLjBkh6eMzB385g6qckMjZuAdZNMVFleUTb7y5a6w4+wzIuq9c5/CnaKt8zD51C9HBQ==", + "python/iqpilot_private/navd/osm_cameras.cpython-312-aarch64-linux-gnu.so": "H8QMggB9nBDH7FJpg0nSzZyvD+gAOAzH9Tdh5Vxz54J/n6nrK9f2r9hZQlytxS+todSFB0mZ/74QyVykTrOnCA==", + "python/iqpilot_private/navd/reroute.cpython-312-aarch64-linux-gnu.so": "mypKWKF1VCOraNagzwyBmDXCmBjaczS5QUzLfojmMCIdM5ZDd/1+sh1iiGLnbjpPMqJOwy4TjmUB6lSU5BTsBA==", + "python/iqpilot_private/navd/road_incidents.cpython-312-aarch64-linux-gnu.so": "49f0GOsPRfZ4+olg8XyZOH+L+SFxf2OIM8Gg0UWyO77xjjqbrk07aLsnT69y+tctlrI8vJfsD9zLDjMK6ft5Cw==", + "python/iqpilot_private/navd/route_manager.cpython-312-aarch64-linux-gnu.so": "uH7oan6d8TJwFt1G++mr0mdjjOIPH7SOc9LoJ/YbyZG50WAo+diuylGcgrP1PVm5irBdHRRL5tG/aSfNReMiDQ==", + "python/iqpilot_private/navd/runtime_common.cpython-312-aarch64-linux-gnu.so": "+SSt76X4/yF4Vw4Th9yRXGhoQWpMsWLeuxZBwf/cZFQeYYBNt5b6Ak60QpvoBjvSzPf9NEfotXfSHyo8MmxUCQ==", + "python/iqpilot_private/navd/traffic.cpython-312-aarch64-linux-gnu.so": "49QjqzjQVF7pSzxScl6BpTHIiknMkSi+y3vR3H09XIixFsjbAhBo4RCMwhTBvVv9bYe1dELhvT2YNUGu4lPYDA==", + "python/iqpilot_private/navd/turn_desire.cpython-312-aarch64-linux-gnu.so": "tMufwFdf87IWEraRxzA1FKJmqTHLYvREg89dxAHqDNfPHVldaTQMccl2sxvk7fBJHs13D0r/Cb1NsfG9oyEWDw==", + "python/iqpilot_private/navd/web_server.cpython-312-aarch64-linux-gnu.so": "KbRqUHWVJSPq3bmhYaX2ZWTJTxNqhpWAuhmvjhrUTcDI70qFvyD8Wx/T7fvhh01CgKI7rVvAuT7nZX+fhYKfCw==" } } diff --git a/artifacts/iqpilot_navd_private/manifest.json.sig b/artifacts/iqpilot_navd_private/manifest.json.sig index 5c1b9539b..03a720033 100644 --- a/artifacts/iqpilot_navd_private/manifest.json.sig +++ b/artifacts/iqpilot_navd_private/manifest.json.sig @@ -1 +1 @@ -11YORph+xdz7ZCuSqO+hm75pQoo2oQPoaspCpBitlCSZZSN0VXLqiL78R99dNIhYqt9A1GOb2slFFE0WDlVwBA== +j1FfVkm/xulHA9W24Ipwnx3XKOZeoIp5yl+/iPAyKihtRp+NWavwvTQpdBgLKrprhskq4ihlY0g7ZPE2gjkJDg== diff --git a/artifacts/iqpilot_navd_private/python/_iqclosure/iqpilot/common/realtime.py b/artifacts/iqpilot_navd_private/python/_iqclosure/iqpilot/common/realtime.py index d19d801e3..9fd2f695d 100644 --- a/artifacts/iqpilot_navd_private/python/_iqclosure/iqpilot/common/realtime.py +++ b/artifacts/iqpilot_navd_private/python/_iqclosure/iqpilot/common/realtime.py @@ -41,6 +41,12 @@ def config_realtime_process(cores: int | list[int], priority: int) -> None: set_core_affinity(c) +def config_background_thread() -> None: + if sys.platform == 'linux' and not PC: + os.sched_setscheduler(0, os.SCHED_OTHER, os.sched_param(0)) + set_core_affinity(list(range(os.cpu_count() or 1))) + + def lock_memory() -> None: """mlockall this process so memory reclaim/compaction can't stall it. RT control procs only (locking ui/modeld would worsen pressure). Best-effort.""" @@ -76,6 +82,13 @@ class Ratekeeper: self.avg_dt = MovingAverage(100) self.avg_dt.add_value(self._interval) + def reset(self) -> None: + self._remaining = 0.0 + self._last_monitor_time = -1. + self._next_frame_time = -1. + self.avg_dt = MovingAverage(100) + self.avg_dt.add_value(self._interval) + @property def frame(self) -> int: return self._frame @@ -84,6 +97,10 @@ class Ratekeeper: def remaining(self) -> float: return self._remaining + @property + def lag(self) -> float: + return max(0., -self._remaining) + @property def lagging(self) -> bool: expected_dt = self._interval * (1 / 0.9) 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 766eacfee..2060125c3 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/amap_client.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/amap_client.cpython-312-aarch64-linux-gnu.so index 2ee7532e4..7c4bfdfee 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/amap_client.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/amap_client.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 8028a45cd..0bbf1cf10 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 4281f3078..9959a9f07 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/incident_feed.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/incident_feed.cpython-312-aarch64-linux-gnu.so index 6ad84b318..085cac948 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/incident_feed.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/incident_feed.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 dcfb96487..ba49ab0f6 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 0bc482b00..a8c0f3043 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 0e0b11c18..4f8d3fb2b 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 a227ba8f7..812847a98 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/nav_turn_signals.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/nav_turn_signals.cpython-312-aarch64-linux-gnu.so index e8f2c80f0..4d0fd8e5e 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/nav_turn_signals.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/nav_turn_signals.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 8cbc801f9..fc1397f4c 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/navincidentd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navincidentd.cpython-312-aarch64-linux-gnu.so index 0064eae8b..797c66875 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navincidentd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/navincidentd.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 96eea901e..fe7ec37ee 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 73234c4bd..ee61109b5 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 b363e5660..2f5d46d59 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/road_incidents.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/road_incidents.cpython-312-aarch64-linux-gnu.so index 67f110016..57d368358 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/road_incidents.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/road_incidents.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 47204a520..5dffe6c00 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 1c8aa9e82..4a7201d0e 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/traffic.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/traffic.cpython-312-aarch64-linux-gnu.so index f89eb76ea..0aa2ead44 100755 Binary files a/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/traffic.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_navd_private/python/iqpilot_private/navd/traffic.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 2f398f463..26c33a4f6 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 f5f2fc9ce..6770a1be1 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/artifacts/package_sources/iqdbc/iqdbc/car/volkswagen/carcontroller.py b/artifacts/package_sources/iqdbc/iqdbc/car/volkswagen/carcontroller.py index 04c967b37..d452c583d 100644 --- a/artifacts/package_sources/iqdbc/iqdbc/car/volkswagen/carcontroller.py +++ b/artifacts/package_sources/iqdbc/iqdbc/car/volkswagen/carcontroller.py @@ -366,8 +366,8 @@ class CarController(CarControllerBase): min_power = max(self.steering_power_last - self.CCP.STEERING_POWER_STEP, self.CCP.STEERING_POWER_MIN) max_power = min(self.steering_power_last + self.CCP.STEERING_POWER_STEP, self.CCP.STEERING_POWER_MAX) - target_power_driver = int(np.interp(CS.out.steeringTorque, [self.CCP.STEER_DRIVER_ALLOWANCE, self.CCP.STEER_DRIVER_MAX], - [self.CCP.STEERING_POWER_MAX, self.CCP.STEERING_POWER_MIN])) + target_power_driver = int(np.interp(abs(CS.out.steeringTorque), [self.CCP.STEER_DRIVER_ALLOWANCE, self.CCP.STEER_DRIVER_MAX], + [self.CCP.STEERING_POWER_MAX, self.CCP.STEERING_POWER_MIN])) target_power = int(np.interp(CS.out.vEgo, [0., 0.5], [self.CCP.STEERING_POWER_MIN, target_power_driver])) steering_power = min(max(target_power, min_power), max_power) else: @@ -486,7 +486,7 @@ class CarController(CarControllerBase): acc_control = self.CCS.acc_control_value(CS.out.cruiseState.available, CS.out.accFaulted, CC.enabled, long_override) acc_hold_type, self.acc_hold_ramp_counter = self.CCS.acc_hold_type( CS.out.cruiseState.available, CS.out.accFaulted, CC.enabled, starting, stopping, - CS.esp_hold_confirmation, long_override, self.acc_hold_type_last, self.acc_hold_ramp_counter) + CS.esp_hold_confirmation, CS.out.vEgo, self.acc_hold_type_last, self.acc_hold_ramp_counter) self.acc_hold_type_last = acc_hold_type can_sends.extend(self.CCS.create_acc_accel_control( self.packer_pt, self.CAN.pt, self.CP, CS.acc_type, CC.enabled, diff --git a/artifacts/package_sources/iqdbc/iqdbc/car/volkswagen/mebcan.py b/artifacts/package_sources/iqdbc/iqdbc/car/volkswagen/mebcan.py index c178a454d..6d2a031ee 100644 --- a/artifacts/package_sources/iqdbc/iqdbc/car/volkswagen/mebcan.py +++ b/artifacts/package_sources/iqdbc/iqdbc/car/volkswagen/mebcan.py @@ -17,6 +17,7 @@ ACC_HMS_RELEASE = 4 ACC_HMS_HOLD = 1 ACC_HMS_NO_REQUEST = 0 ACC_HMS_RAMP_FRAMES = 5 +ACC_HMS_RELEASE_SPEED = 5 * CV.KPH_TO_MS ACC_HUD_ERROR = 6 ACC_HUD_OVERRIDE = 4 @@ -161,33 +162,34 @@ def acc_control_value(main_switch_on, acc_faulted, long_active, override): return acc_control -def acc_hold_type(main_switch_on, acc_faulted, long_active, starting, stopping, esp_hold, override, +def acc_hold_type(main_switch_on, acc_faulted, long_active, starting, stopping, esp_hold, v_ego, prev_acc_hold_type, ramp_counter): # warning: car is reacting to hold mechanic even with long control off + # HALTEN or ANFAHREN straight to KEINE_ANFORDERUNG faults the car into park, so a ramp always sits + # in between: going inactive ramps for a fixed time, and a release while engaged ramps until the + # car is actually rolling + active = long_active and not acc_faulted - if acc_faulted: - acc_hold_type = ACC_HMS_NO_REQUEST # no hold request - elif not long_active: - acc_hold_type = ACC_HMS_NO_REQUEST # no hold request - elif override: - acc_hold_type = ACC_HMS_NO_REQUEST # overriding / no request - elif starting: - acc_hold_type = ACC_HMS_RELEASE # release request and startup - elif stopping or esp_hold: - acc_hold_type = ACC_HMS_HOLD # hold or hold request + if not active: + if ramp_counter > 0: + acc_hold_type = ACC_HMS_RAMP_RELEASE + ramp_counter -= 1 + else: + acc_hold_type = ACC_HMS_NO_REQUEST else: - acc_hold_type = ACC_HMS_NO_REQUEST # no hold request - - if acc_hold_type == ACC_HMS_HOLD: - ramp_counter = 0 - elif prev_acc_hold_type == ACC_HMS_HOLD and acc_hold_type == ACC_HMS_NO_REQUEST: - acc_hold_type = ACC_HMS_RAMP_RELEASE + was_active = ramp_counter == ACC_HMS_RAMP_FRAMES ramp_counter = ACC_HMS_RAMP_FRAMES - elif ramp_counter > 0: - acc_hold_type = ACC_HMS_RAMP_RELEASE - ramp_counter -= 1 - else: - pass + + if stopping: + acc_hold_type = ACC_HMS_HOLD + elif starting: + acc_hold_type = ACC_HMS_RELEASE + else: + releasing = was_active and prev_acc_hold_type in (ACC_HMS_HOLD, ACC_HMS_RELEASE, ACC_HMS_RAMP_RELEASE) + if releasing and v_ego < ACC_HMS_RELEASE_SPEED: + acc_hold_type = ACC_HMS_RAMP_RELEASE + else: + acc_hold_type = ACC_HMS_NO_REQUEST return acc_hold_type, ramp_counter diff --git a/iqpilot/common/params_keys.h b/iqpilot/common/params_keys.h index 092d3d1ca..43eb96077 100644 --- a/iqpilot/common/params_keys.h +++ b/iqpilot/common/params_keys.h @@ -398,6 +398,7 @@ inline static std::unordered_map keys = { {"OfflineRoutingOnly", {PERSISTENT, BOOL, "0"}}, {"OfflineRoutingHost", {PERSISTENT, STRING, "http://127.0.0.1:8002"}}, {"EnableCurvatureController", {PERSISTENT, BOOL, "0"}}, + {"EnableSmoothSteer", {PERSISTENT, BOOL, "0"}}, {"EnableSpeedLimitControl", {PERSISTENT, BOOL, "0"}}, {"MapCurveSpeedController", {PERSISTENT, BOOL, "0"}}, {"VisionCurveSpeedController", {PERSISTENT, BOOL, "0"}}, diff --git a/iqpilot/common/pt2.py b/iqpilot/common/pt2.py new file mode 100644 index 000000000..c1afc545b --- /dev/null +++ b/iqpilot/common/pt2.py @@ -0,0 +1,40 @@ +import math + + +class PT2Filter: + def __init__(self, w0: float, zeta: float, dt: float): + self.w0 = w0 + self.zeta = zeta + self.dt = dt + self.a1, self.a2, self.b0, self.b1, self.b2 = self._design(w0, zeta, dt) + self.y1 = 0.0 + self.y2 = 0.0 + self.u1 = 0.0 + self.u2 = 0.0 + + @staticmethod + def _design(w0: float, zeta: float, dt: float): + # bilinear transform of H(s) = w0^2 / (s^2 + 2*zeta*w0*s + w0^2) + alpha = 2.0 / dt + a2_den = alpha**2 + (2.0 * zeta * w0 * alpha) + w0**2 + a1_den = (-2.0 * alpha**2) + (2.0 * w0**2) + a0_den = alpha**2 - (2.0 * zeta * w0 * alpha) + w0**2 + return (a1_den / a2_den, a0_den / a2_den, + w0**2 / a2_den, 2.0 * w0**2 / a2_den, w0**2 / a2_den) + + def reset(self, value: float = 0.0) -> None: + self.y1 = value + self.y2 = value + self.u1 = value + self.u2 = value + + def update(self, u: float) -> float: + y = (-self.a1 * self.y1) - (self.a2 * self.y2) + (self.b0 * u) + (self.b1 * self.u1) + (self.b2 * self.u2) + self.y2 = self.y1 + self.y1 = y + self.u2 = self.u1 + self.u1 = u + return y + + def steady_state_steps(self) -> int: + return math.ceil((4.0 / (self.zeta * self.w0)) / self.dt) diff --git a/iqpilot/selfdrive/controls/controlsd.py b/iqpilot/selfdrive/controls/controlsd.py index bf6a83a6b..9e856c232 100755 --- a/iqpilot/selfdrive/controls/controlsd.py +++ b/iqpilot/selfdrive/controls/controlsd.py @@ -8,6 +8,7 @@ import iqpilot.cereal.messaging as messaging from iqpilot.common.constants import CV from iqpilot.common.iq_perf import PerfSample, PerfTraceEmitter, PerfTraceRing from iqpilot.common.params import Params +from iqpilot.common.pt2 import PT2Filter from iqpilot.common.realtime import config_realtime_process, lock_memory, DT_CTRL, Priority, Ratekeeper from iqpilot.common.swaglog import cloudlog @@ -45,6 +46,8 @@ CTRL_PHASE_WARN_US = 8_000 CTRL_TAIL_WARN_US = 8_000 CTRL_FLAG_MISSING_INPUTS = 1 << 0 CTRL_FLAG_RK_OVERRUN = 1 << 1 +SMOOTH_STEER_W0 = 46.0 +SMOOTH_STEER_ZETA = 1.0 LAT_SMOOTH_SECONDS = 0.0 @@ -77,6 +80,7 @@ class Controls(IQControlsLayer): self._param_update_time = 0.0 self.enable_curvature_controller = False + self.enable_smooth_steer = False self.enable_speed_limit_control = False self.enable_speed_limit_predicative = False self.enable_pred_react_to_speed_limits = False @@ -94,6 +98,11 @@ class Controls(IQControlsLayer): self.LoC = LongControl(self.CP, self.CP_IQ) self.VM = VehicleModel(self.CP) + + self.smooth_steer = PT2Filter(SMOOTH_STEER_W0, SMOOTH_STEER_ZETA, DT_CTRL) + self.is_curvature_car = self.CP.steerControlType == car.CarParams.SteerControlType.curvatureDEPRECATED + if self.is_curvature_car and self.params.get("EnableSmoothSteer") is None: + self.params.put_bool("EnableSmoothSteer", True) self.LaC: LatControl if self.CP.steerControlType in (car.CarParams.SteerControlType.angle, car.CarParams.SteerControlType.curvatureDEPRECATED): self.LaC = LatControlAngle(self.CP, self.CP_IQ, self.CI, DT_CTRL) @@ -119,6 +128,7 @@ class Controls(IQControlsLayer): def _update_params(self) -> None: self.enable_curvature_controller = self.params.get_bool("EnableCurvatureController") + self.enable_smooth_steer = self.params.get_bool("EnableSmoothSteer") self.enable_speed_limit_control = self.params.get_bool("EnableSpeedLimitControl") self.enable_speed_limit_predicative = self.params.get_bool("EnableSpeedLimitPredicative") self.enable_pred_react_to_speed_limits = self.params.get_bool("EnableSLPredReactToSL") @@ -225,6 +235,11 @@ class Controls(IQControlsLayer): else: new_desired_curvature = model_v2.action.desiredCurvature + if self.is_curvature_car and self.enable_smooth_steer and CC.latActive: + new_desired_curvature = self.smooth_steer.update(new_desired_curvature) + else: + self.smooth_steer.reset(new_desired_curvature) + lat_accel_override = bool(CS.gasPressed) or bool(self.sm['iqState'].aol.active) self.desired_curvature, curvature_limited = clip_curvature(CS.vEgo, self.desired_curvature, new_desired_curvature, lp.roll, lat_accel_override) lat_delay = lateral_action_delay(self.params, self.CP, self.sm["lateralDelay"].lateralDelay) + LAT_SMOOTH_SECONDS diff --git a/iqpilot/selfdrive/ui/mici/layouts/home.py b/iqpilot/selfdrive/ui/mici/layouts/home.py index c2db2d018..0c986bd77 100644 --- a/iqpilot/selfdrive/ui/mici/layouts/home.py +++ b/iqpilot/selfdrive/ui/mici/layouts/home.py @@ -198,7 +198,8 @@ class MiciHomeLayout(Widget): # Expect "version / branch / commit / date"; be tolerant of other formats try: version, branch, commit, date = description.split(" / ") - return version, branch, commit, date + # version/date/branch share one 536px line: the brand prefix and clock time push the branch off screen + return version.removeprefix(HOME_TITLE_TEXT).strip() or version, branch, commit, date.split(" ")[0] except Exception: return None diff --git a/iqpilot/selfdrive/ui/mici/layouts/settings/software.py b/iqpilot/selfdrive/ui/mici/layouts/settings/software.py index 4fcc22119..b29ad6cb0 100644 --- a/iqpilot/selfdrive/ui/mici/layouts/settings/software.py +++ b/iqpilot/selfdrive/ui/mici/layouts/settings/software.py @@ -321,7 +321,7 @@ class TargetBranchButton(BigButton): class DisableUpdatesButton(BigButton): def __init__(self): - super().__init__(tr("disable\nupdates"), tr("currently on")) + super().__init__(tr("automatic\nupdates"), tr("on")) self.set_enabled(lambda: ui_state.is_offroad()) self.set_press_effect_enabled(False) self._label.set_font_size(40) @@ -335,8 +335,7 @@ class DisableUpdatesButton(BigButton): def _sync_from_params(self): disabled = ui_state.params.get_bool("DisableUpdates") - self.set_text(tr("enable\nupdates") if disabled else tr("disable\nupdates")) - self.set_value(tr("currently off") if disabled else tr("currently on")) + self.set_value(tr("off") if disabled else tr("on")) def _update_state(self): super()._update_state() diff --git a/iqpilot/selfdrive/ui/mici/layouts/settings/vehicle.py b/iqpilot/selfdrive/ui/mici/layouts/settings/vehicle.py index ee255206b..25c89566e 100644 --- a/iqpilot/selfdrive/ui/mici/layouts/settings/vehicle.py +++ b/iqpilot/selfdrive/ui/mici/layouts/settings/vehicle.py @@ -80,6 +80,8 @@ class VehicleLayoutMici(NavScroller): self._vw_lateral = BigParamControl(tr("lateral when cruise faulted"), "AllowLateralWhenLongUnavailable") self._vw_mqb_acc_resume = BigParamControl(tr("MQB ACC resume"), "iqMqbAccResume") self._vw_mqb_steering_lockout = BigParamControl(tr("MQB steering lockout"), "iqMqbSteeringLockout") + self._vw_curvature_controller = BigParamControl(tr("curvature controller"), "EnableCurvatureController") + self._vw_smooth_steer = BigParamControl(tr("smooth steering"), "EnableSmoothSteer") self._tesla_vtb = BigParamControl(tr("virtual torque blending"), "IQTeslaTorqueBlend") self._tesla_fsd_visualization = BigParamControl(tr("FSD visuals"), "IQTeslaFsdVisualization") @@ -87,7 +89,8 @@ class VehicleLayoutMici(NavScroller): "toyota": [self._toyota_long], "hyundai": [self._hyundai_tuning], "subaru": [self._subaru_snag, self._subaru_manual], - "volkswagen": [self._vw_pq_hca, self._vw_lateral, self._vw_mqb_acc_resume, self._vw_mqb_steering_lockout], + "volkswagen": [self._vw_pq_hca, self._vw_lateral, self._vw_mqb_acc_resume, self._vw_mqb_steering_lockout, + self._vw_curvature_controller, self._vw_smooth_steer], "tesla": [self._tesla_vtb, self._tesla_fsd_visualization], } self._all_brand_widgets = [w for ws in self._brand_widgets.values() for w in ws] @@ -123,6 +126,10 @@ class VehicleLayoutMici(NavScroller): flags = self._vw_flags() return not bool(flags & (VolkswagenFlags.PQ | VolkswagenFlags.MLB | VolkswagenFlags.MEB | VolkswagenFlags.MEB_GEN2 | VolkswagenFlags.MQB_EVO)) + def _is_vw_curvature_car(self) -> bool: + from iqdbc.car.volkswagen.values import VolkswagenFlags + return bool(self._vw_flags() & (VolkswagenFlags.MEB | VolkswagenFlags.MQB_EVO)) + def _supports_vw_lateral_when_faulted(self) -> bool: from iqdbc.car.volkswagen.values import VolkswagenFlags # PQ, MEB, MQB_EVO and base MQB all implement cruiseFaultLateralMode in carstate.py. @@ -193,6 +200,7 @@ class VehicleLayoutMici(NavScroller): uses_hca_status_toggle = self._uses_vw_hca_status_toggle() is_mqb = self._is_vw_mqb() supports_lateral_when_faulted = self._supports_vw_lateral_when_faulted() + is_curvature_car = self._is_vw_curvature_car() visible = set(self._brand_widgets.get(brand, [])) for w in self._all_brand_widgets: show = w in visible @@ -202,6 +210,8 @@ class VehicleLayoutMici(NavScroller): show = show and is_mqb elif w is self._vw_lateral: show = show and supports_lateral_when_faulted + elif w in (self._vw_curvature_controller, self._vw_smooth_steer): + show = show and is_curvature_car w.set_visible(show) if show: w.refresh() diff --git a/iqpilot/selfdrive/ui/mici/onroad/model_renderer.py b/iqpilot/selfdrive/ui/mici/onroad/model_renderer.py index 17fa290d8..b4169be20 100644 --- a/iqpilot/selfdrive/ui/mici/onroad/model_renderer.py +++ b/iqpilot/selfdrive/ui/mici/onroad/model_renderer.py @@ -1,7 +1,7 @@ import colorsys import numpy as np import pyray as rl -from iqpilot.cereal import messaging, car +from iqpilot.cereal import car from dataclasses import dataclass, field from iqpilot.common.params import Params from iqpilot.common.filter_simple import FirstOrderFilter @@ -9,7 +9,7 @@ from iqpilot.selfdrive.locationd.calibrationd import HEIGHT_INIT from iqpilot.ui.onroad.hud_overlays import ChevronMetrics from iqpilot.ui.onroad.lead_confidence import driving_confidence from iqpilot.selfdrive.locationd.calibration_helpers import get_render_path_height -from iqpilot.selfdrive.ui.ui_state import ui_state, UIStatus +from iqpilot.selfdrive.ui.ui_state import ui_state, UIStatus, log_param_from_bytes from iqpilot.selfdrive.ui.mici.onroad import blend_colors from iqpilot.system.ui.lib.application import gui_app from iqpilot.system.ui.lib.shader_polygon import draw_polygon, Gradient @@ -94,8 +94,7 @@ class ModelRenderer(Widget): ) # Get longitudinal control setting from car parameters - if car_params := Params().get("CarParams"): - cp = messaging.log_from_bytes(car_params, car.CarParams) + if (cp := log_param_from_bytes(Params(), "CarParams", car.CarParams)) is not None: self._longitudinal_control = cp.openpilotLongitudinalControl def set_transform(self, transform: np.ndarray): diff --git a/iqpilot/selfdrive/ui/onroad/model_renderer.py b/iqpilot/selfdrive/ui/onroad/model_renderer.py index 9acb63986..6b4462a7b 100644 --- a/iqpilot/selfdrive/ui/onroad/model_renderer.py +++ b/iqpilot/selfdrive/ui/onroad/model_renderer.py @@ -1,13 +1,13 @@ import colorsys import numpy as np import pyray as rl -from iqpilot.cereal import messaging, car, custom +from iqpilot.cereal import car, custom from dataclasses import dataclass, field from iqpilot.common.filter_simple import FirstOrderFilter from iqpilot.common.params import Params from iqpilot.selfdrive.locationd.calibrationd import HEIGHT_INIT from iqpilot.selfdrive.locationd.calibration_helpers import get_render_path_height -from iqpilot.selfdrive.ui.ui_state import ui_state +from iqpilot.selfdrive.ui.ui_state import ui_state, log_param_from_bytes from iqpilot.system.ui.lib.application import gui_app from iqpilot.system.ui.lib.shader_polygon import draw_polygon, Gradient from iqpilot.system.ui.widgets import Widget @@ -108,8 +108,7 @@ class ModelRenderer(Widget): ) # Get longitudinal control setting from car parameters - if car_params := Params().get("CarParams"): - cp = messaging.log_from_bytes(car_params, car.CarParams) + if (cp := log_param_from_bytes(Params(), "CarParams", car.CarParams)) is not None: self._longitudinal_control = cp.openpilotLongitudinalControl def set_transform(self, transform: np.ndarray): diff --git a/iqpilot/selfdrive/ui/translations/app.pot b/iqpilot/selfdrive/ui/translations/app.pot index 40d5df865..f41b0060e 100644 --- a/iqpilot/selfdrive/ui/translations/app.pot +++ b/iqpilot/selfdrive/ui/translations/app.pot @@ -2026,6 +2026,7 @@ msgstr "" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "" @@ -2665,29 +2666,16 @@ msgid "target branch" msgstr "" #: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "" -"disable\n" +"automatic\n" "updates" msgstr "" #: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "" - #: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently off" +msgid "on" msgstr "" #: openpilot/selfdrive/ui/mici/layouts/settings/software.py:353 @@ -3986,6 +3974,39 @@ msgid "" "speed LKAS faults." msgstr "" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" + +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "" + +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "" + +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" + +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "" + +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 +#, python-brace-format +msgid "curvature controller" +msgstr "" + #: iqpilot/ui/layouts/settings/iq_panels.py:2369 #, python-brace-format msgid "PQ HCA Status 7 Mode" diff --git a/iqpilot/selfdrive/ui/translations/app_ar.po b/iqpilot/selfdrive/ui/translations/app_ar.po index 72619e8bc..620d8d74b 100644 --- a/iqpilot/selfdrive/ui/translations/app_ar.po +++ b/iqpilot/selfdrive/ui/translations/app_ar.po @@ -450,6 +450,15 @@ msgstr "مسح ذاكرة النموذج المحدد وتنزيله مرة أخ msgid "Close" msgstr "إغلاق" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"يغلق حلقة التوجيه في مركبات MEB وMQB Evo. يصحّح IQ.Pilot أمر التوجيه بناءً " +"على الانحناء الفعلي للسيارة بدلاً من إرسال الانحناء المخطط مباشرةً." + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -579,6 +588,11 @@ msgstr "مثبّت السرعة" msgid "Current Version" msgstr "الإصدار الحالي" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "متحكم الانحناء" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1570,6 +1584,15 @@ msgstr "استباق أدنى" msgid "Low-Speed Turn Planning" msgstr "تخطيط الانعطاف عند السرعات المنخفضة" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"يمرّر الانحناء المخطط عبر مرشّح تمرير منخفض قبل وصوله إلى صندوق التوجيه في " +"مركبات MEB وMQB Evo، ما يخفّف التذبذب الجانبي. مفعّل افتراضيًا لهذه " +"السيارات." + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2554,6 +2577,11 @@ msgstr "" "يعرض اسم الطريق الحالي فوق عرض القيادة.
يتطلب تثبيت بيانات الخرائط دون " "اتصال لمنطقتك." +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "توجيه سلس" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3200,6 +3228,15 @@ msgstr "تلقائي" msgid "auto dark" msgstr "تلقائي داكن" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"التحديثات\n" +"التلقائية" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3305,16 +3342,10 @@ msgstr "الانطلاق من الثبات (تجريبي)" msgid "cruise" msgstr "مثبّت السرعة" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "معطّل حاليًا" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "مفعّل حاليًا" +msgid "curvature controller" +msgstr "متحكم الانحناء" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3355,16 +3386,6 @@ msgstr "الجهاز" msgid "device ID" msgstr "معرّف الجهاز" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"تعطيل\n" -"التحديثات" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3444,15 +3465,6 @@ msgstr "ديناميكي" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"تفعيل\n" -"التحديثات" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3744,6 +3756,7 @@ msgstr "لمسة على المقود" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "إيقاف" @@ -3753,6 +3766,12 @@ msgstr "إيقاف" msgid "offline" msgstr "غير متصل" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "تشغيل" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -4008,6 +4027,11 @@ msgstr "" msgid "slow" msgstr "بطيء" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "توجيه سلس" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_de.po b/iqpilot/selfdrive/ui/translations/app_de.po index 991cb38bc..a292f6435 100644 --- a/iqpilot/selfdrive/ui/translations/app_de.po +++ b/iqpilot/selfdrive/ui/translations/app_de.po @@ -454,6 +454,16 @@ msgstr "Cache des gewählten Modells leeren und erneut herunterladen?" msgid "Close" msgstr "Schließen" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"Schließt den Lenkregelkreis bei MEB- und MQB-Evo-Fahrzeugen. IQ.Pilot " +"korrigiert seinen Lenkbefehl anhand der Krümmung, die das Fahrzeug " +"tatsächlich fährt, statt die geplante Krümmung direkt durchzureichen." + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -586,6 +596,11 @@ msgstr "Tempomat" msgid "Current Version" msgstr "Aktuelle Version" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "Krümmungsregler" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1595,6 +1610,15 @@ msgstr "vorausschau niedriger" msgid "Low-Speed Turn Planning" msgstr "Abbiegeplanung bei niedriger Geschwindigkeit" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"Filtert die geplante Krümmung bei MEB- und MQB-Evo-Fahrzeugen tiefpass, " +"bevor sie die Lenkung erreicht, und dämpft so seitliches Pendeln. Für " +"diese Fahrzeuge standardmäßig an." + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2600,6 +2624,11 @@ msgstr "" "Zeigt den Namen der aktuellen Straße über der Fahransicht.
Erfordert " "installierte Offline-Kartendaten für deine Region." +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "Sanfte Lenkung" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3266,6 +3295,15 @@ msgstr "auto" msgid "auto dark" msgstr "auto dunkel" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"automatische\n" +"Updates" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3371,16 +3409,10 @@ msgstr "anfahren aus dem stand (beta)" msgid "cruise" msgstr "tempomat" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "derzeit aus" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "derzeit an" +msgid "curvature controller" +msgstr "krümmungsregler" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3421,16 +3453,6 @@ msgstr "gerät" msgid "device ID" msgstr "geräte-ID" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"updates\n" -"deaktivieren" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3510,15 +3532,6 @@ msgstr "dynamisch" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"updates\n" -"aktivieren" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3810,6 +3823,7 @@ msgstr "lenkimpuls" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "aus" @@ -3819,6 +3833,12 @@ msgstr "aus" msgid "offline" msgstr "offline" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "an" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -4074,6 +4094,11 @@ msgstr "" msgid "slow" msgstr "langsam" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "sanfte lenkung" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_en.po b/iqpilot/selfdrive/ui/translations/app_en.po index 1df75e3eb..66f23dd7c 100644 --- a/iqpilot/selfdrive/ui/translations/app_en.po +++ b/iqpilot/selfdrive/ui/translations/app_en.po @@ -450,6 +450,16 @@ msgstr "Clear the selected model cache and download it again?" msgid "Close" msgstr "Close" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -580,6 +590,11 @@ msgstr "Cruise" msgid "Current Version" msgstr "Current Version" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "Curvature Controller" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1577,6 +1592,14 @@ msgstr "Lookahead Lower" msgid "Low-Speed Turn Planning" msgstr "Low-Speed Turn Planning" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2567,6 +2590,11 @@ msgstr "" "Show the current road's name over the driving view.
Requires offline map " "data for your region to be installed." +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "Smooth Steering" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3225,6 +3253,15 @@ msgstr "auto" msgid "auto dark" msgstr "auto dark" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"automatic\n" +"updates" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3330,16 +3367,10 @@ msgstr "creep from standstill (beta)" msgid "cruise" msgstr "cruise" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "currently off" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "currently on" +msgid "curvature controller" +msgstr "curvature controller" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3380,16 +3411,6 @@ msgstr "device" msgid "device ID" msgstr "device ID" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"disable\n" -"updates" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3469,15 +3490,6 @@ msgstr "dynamic" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"enable\n" -"updates" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3769,6 +3781,7 @@ msgstr "nudge" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "off" @@ -3778,6 +3791,12 @@ msgstr "off" msgid "offline" msgstr "offline" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "on" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -4033,6 +4052,11 @@ msgstr "" msgid "slow" msgstr "slow" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "smooth steering" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_es.po b/iqpilot/selfdrive/ui/translations/app_es.po index e8ce7fbcc..36e4620b0 100644 --- a/iqpilot/selfdrive/ui/translations/app_es.po +++ b/iqpilot/selfdrive/ui/translations/app_es.po @@ -453,6 +453,16 @@ msgstr "¿Vaciar la caché del modelo seleccionado y volver a descargarlo?" msgid "Close" msgstr "Cerrar" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"Cierra el lazo de dirección en vehículos MEB y MQB Evo. IQ.Pilot corrige " +"su comando de dirección según la curvatura que el coche mantiene " +"realmente, en lugar de enviar la curvatura planificada directamente." + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -585,6 +595,11 @@ msgstr "Crucero" msgid "Current Version" msgstr "Versión actual" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "Controlador de curvatura" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1601,6 +1616,15 @@ msgstr "anticipación menor" msgid "Low-Speed Turn Planning" msgstr "Planificación de giros a baja velocidad" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"Filtra la curvatura planificada con un paso bajo antes de que llegue a la " +"cremallera en vehículos MEB y MQB Evo, lo que amortigua la oscilación " +"lateral. Activado por defecto en estos coches." + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2603,6 +2627,11 @@ msgstr "" "Muestra el nombre de la vía actual sobre la vista de conducción.
Requiere" " tener instalados los mapas sin conexión de tu región." +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "Dirección suave" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3271,6 +3300,15 @@ msgstr "auto" msgid "auto dark" msgstr "auto oscuro" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"actualizaciones\n" +"automáticas" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3376,16 +3414,10 @@ msgstr "arranque suave (beta)" msgid "cruise" msgstr "crucero" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "actualmente desactivado" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "actualmente activado" +msgid "curvature controller" +msgstr "controlador de curvatura" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3426,16 +3458,6 @@ msgstr "dispositivo" msgid "device ID" msgstr "ID del dispositivo" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"desactivar\n" -"actualizaciones" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3515,15 +3537,6 @@ msgstr "dinámico" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"activar\n" -"actualizaciones" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3815,6 +3828,7 @@ msgstr "toque de volante" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "apagado" @@ -3824,6 +3838,12 @@ msgstr "apagado" msgid "offline" msgstr "sin conexión" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "encendido" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -4079,6 +4099,11 @@ msgstr "" msgid "slow" msgstr "lento" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "dirección suave" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_fr.po b/iqpilot/selfdrive/ui/translations/app_fr.po index b29917af4..6e03f9ac9 100644 --- a/iqpilot/selfdrive/ui/translations/app_fr.po +++ b/iqpilot/selfdrive/ui/translations/app_fr.po @@ -455,6 +455,16 @@ msgstr "Vider le cache du modèle sélectionné et le retélécharger ?" msgid "Close" msgstr "Fermer" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"Ferme la boucle de direction sur les véhicules MEB et MQB Evo. IQ.Pilot " +"corrige sa commande de direction en fonction de la courbure réellement " +"suivie par la voiture, au lieu d'envoyer directement la courbure planifiée." + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -587,6 +597,11 @@ msgstr "Régulateur" msgid "Current Version" msgstr "Version actuelle" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "Contrôleur de courbure" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1605,6 +1620,15 @@ msgstr "anticipation plus basse" msgid "Low-Speed Turn Planning" msgstr "Planification des virages à basse vitesse" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"Filtre la courbure planifiée en passe-bas avant qu'elle n'atteigne la " +"crémaillère sur les véhicules MEB et MQB Evo, ce qui amortit les " +"oscillations latérales. Activé par défaut sur ces voitures." + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2617,6 +2641,11 @@ msgstr "" "Affiche le nom de la route actuelle sur la vue de conduite.
Nécessite " "l'installation des cartes hors ligne de votre région." +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "Direction douce" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3288,6 +3317,15 @@ msgstr "auto" msgid "auto dark" msgstr "auto sombre" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"mises à jour\n" +"automatiques" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3393,16 +3431,10 @@ msgstr "démarrage en douceur (bêta)" msgid "cruise" msgstr "régulateur" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "actuellement désactivé" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "actuellement activé" +msgid "curvature controller" +msgstr "contrôleur de courbure" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3443,16 +3475,6 @@ msgstr "appareil" msgid "device ID" msgstr "ID appareil" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"désactiver les\n" -"mises à jour" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3532,15 +3554,6 @@ msgstr "dynamique" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"activer les\n" -"mises à jour" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3832,6 +3845,7 @@ msgstr "impulsion" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "arrêt" @@ -3841,6 +3855,12 @@ msgstr "arrêt" msgid "offline" msgstr "hors ligne" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "marche" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -4096,6 +4116,11 @@ msgstr "" msgid "slow" msgstr "lent" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "direction douce" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_ja.po b/iqpilot/selfdrive/ui/translations/app_ja.po index 4a6436fce..177154b72 100644 --- a/iqpilot/selfdrive/ui/translations/app_ja.po +++ b/iqpilot/selfdrive/ui/translations/app_ja.po @@ -437,6 +437,15 @@ msgstr "選択したモデルのキャッシュを消去して再ダウンロー msgid "Close" msgstr "閉じる" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"MEB および MQB Evo 車両でステアリング制御を閉ループにします。IQ.Pilot " +"は計画した曲率をそのまま送るのではなく、車両が実際に描いている曲率に合わせて操舵指令を補正します。" + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -562,6 +571,11 @@ msgstr "クルーズ" msgid "Current Version" msgstr "現在のバージョン" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "曲率コントローラー" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1513,6 +1527,14 @@ msgstr "先読みを短く" msgid "Low-Speed Turn Planning" msgstr "低速時の右左折プランニング" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"MEB および MQB Evo " +"車両で、計画した曲率をステアリングラックに送る前にローパスフィルタで処理し、横方向のふらつきを抑えます。これらの車では既定で有効です。" + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2469,6 +2491,11 @@ msgid "" "data for your region to be installed." msgstr "現在の道路名を走行画面上に表示します。
お使いの地域のオフライン地図データがインストールされている必要があります。" +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "スムーズステアリング" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3096,6 +3123,15 @@ msgstr "自動" msgid "auto dark" msgstr "自動(暗)" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"自動\n" +"アップデート" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3201,16 +3237,10 @@ msgstr "停止からのクリープ(ベータ)" msgid "cruise" msgstr "クルーズ" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "現在オフ" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "現在オン" +msgid "curvature controller" +msgstr "曲率コントローラー" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3251,16 +3281,6 @@ msgstr "デバイス" msgid "device ID" msgstr "デバイスID" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"アップデートを\n" -"無効化" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3340,15 +3360,6 @@ msgstr "ダイナミック" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"アップデートを\n" -"有効化" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3640,6 +3651,7 @@ msgstr "ハンドル操作" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "オフ" @@ -3649,6 +3661,12 @@ msgstr "オフ" msgid "offline" msgstr "オフライン" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "オン" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -3904,6 +3922,11 @@ msgstr "" msgid "slow" msgstr "遅い" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "スムーズステアリング" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_ko.po b/iqpilot/selfdrive/ui/translations/app_ko.po index 2c12e3a07..b6464a3ae 100644 --- a/iqpilot/selfdrive/ui/translations/app_ko.po +++ b/iqpilot/selfdrive/ui/translations/app_ko.po @@ -439,6 +439,15 @@ msgstr "선택한 모델의 캐시를 비우고 다시 다운로드할까요?" msgid "Close" msgstr "닫기" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"MEB 및 MQB Evo 차량에서 조향 제어를 폐루프로 동작시킵니다. IQ.Pilot이 계획한 곡률을 그대로 보내지 않고 차량이 " +"실제로 유지하는 곡률에 맞춰 조향 명령을 보정합니다." + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -566,6 +575,11 @@ msgstr "크루즈" msgid "Current Version" msgstr "현재 버전" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "곡률 컨트롤러" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1528,6 +1542,14 @@ msgstr "예측 거리 줄이기" msgid "Low-Speed Turn Planning" msgstr "저속 회전 경로 계획" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"MEB 및 MQB Evo 차량에서 계획한 곡률을 스티어링 랙에 보내기 전에 저역 통과 필터로 처리해 좌우 흔들림을 줄입니다. 해당 " +"차량에서는 기본으로 켜집니다." + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2490,6 +2512,11 @@ msgid "" "data for your region to be installed." msgstr "현재 도로 이름을 주행 화면 위에 표시합니다.
해당 지역의 오프라인 지도 데이터가 설치되어 있어야 합니다." +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "부드러운 조향" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3118,6 +3145,15 @@ msgstr "자동" msgid "auto dark" msgstr "자동 어둡게" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"자동\n" +"업데이트" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3223,16 +3259,10 @@ msgstr "정지 상태에서 출발 (베타)" msgid "cruise" msgstr "크루즈" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "현재 꺼짐" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "현재 켜짐" +msgid "curvature controller" +msgstr "곡률 컨트롤러" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3273,16 +3303,6 @@ msgstr "기기" msgid "device ID" msgstr "기기 ID" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"업데이트\n" -"끄기" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3362,15 +3382,6 @@ msgstr "다이내믹" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"업데이트\n" -"켜기" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3662,6 +3673,7 @@ msgstr "핸들 조작" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "끄기" @@ -3671,6 +3683,12 @@ msgstr "끄기" msgid "offline" msgstr "오프라인" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "켜기" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -3926,6 +3944,11 @@ msgstr "" msgid "slow" msgstr "느림" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "부드러운 조향" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_pl.po b/iqpilot/selfdrive/ui/translations/app_pl.po index f6c3485dd..1fc89acbe 100644 --- a/iqpilot/selfdrive/ui/translations/app_pl.po +++ b/iqpilot/selfdrive/ui/translations/app_pl.po @@ -455,6 +455,16 @@ msgstr "Wyczyścić pamięć wybranego modelu i pobrać go ponownie?" msgid "Close" msgstr "Zamknij" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"Zamyka pętlę sterowania kierownicą w pojazdach MEB i MQB Evo. IQ.Pilot " +"koryguje polecenie skrętu względem krzywizny, którą samochód faktycznie " +"utrzymuje, zamiast wysyłać zaplanowaną krzywiznę wprost." + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -587,6 +597,11 @@ msgstr "Tempomat" msgid "Current Version" msgstr "Bieżąca wersja" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "Regulator krzywizny" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1597,6 +1612,15 @@ msgstr "wyprzedzenie w dół" msgid "Low-Speed Turn Planning" msgstr "Planowanie skrętu przy niskiej prędkości" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"Filtruje dolnoprzepustowo zaplanowaną krzywiznę, zanim trafi do " +"przekładni, w pojazdach MEB i MQB Evo, co tłumi boczne kołysanie. " +"Domyślnie włączone w tych autach." + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2599,6 +2623,11 @@ msgstr "" "Pokazuje nazwę bieżącej drogi na widoku jazdy.
Wymaga zainstalowanych map" " offline dla Twojego regionu." +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "Płynne kierowanie" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3263,6 +3292,15 @@ msgstr "auto" msgid "auto dark" msgstr "auto ciemny" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"automatyczne\n" +"aktualizacje" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3368,16 +3406,10 @@ msgstr "ruszanie z postoju (beta)" msgid "cruise" msgstr "tempomat" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "obecnie wyłączone" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "obecnie włączone" +msgid "curvature controller" +msgstr "regulator krzywizny" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3418,16 +3450,6 @@ msgstr "urządzenie" msgid "device ID" msgstr "ID urządzenia" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"wyłącz\n" -"aktualizacje" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3507,15 +3529,6 @@ msgstr "dynamiczny" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"włącz\n" -"aktualizacje" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3807,6 +3820,7 @@ msgstr "poruszenie" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "wył." @@ -3816,6 +3830,12 @@ msgstr "wył." msgid "offline" msgstr "offline" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "wł." + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -4071,6 +4091,11 @@ msgstr "" msgid "slow" msgstr "wolno" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "płynne kierowanie" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_pt-BR.po b/iqpilot/selfdrive/ui/translations/app_pt-BR.po index 1dd2c4109..13d11be8b 100644 --- a/iqpilot/selfdrive/ui/translations/app_pt-BR.po +++ b/iqpilot/selfdrive/ui/translations/app_pt-BR.po @@ -455,6 +455,16 @@ msgstr "Limpar o cache do modelo selecionado e baixá-lo novamente?" msgid "Close" msgstr "Fechar" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"Fecha a malha de direção em veículos MEB e MQB Evo. O IQ.Pilot corrige o " +"comando de direção com base na curvatura que o carro realmente mantém, em " +"vez de enviar a curvatura planejada diretamente." + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -586,6 +596,11 @@ msgstr "Piloto automático" msgid "Current Version" msgstr "Versão Atual" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "Controlador de curvatura" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1598,6 +1613,15 @@ msgstr "antecipação menor" msgid "Low-Speed Turn Planning" msgstr "Planejamento de curva em baixa velocidade" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"Filtra a curvatura planejada com um passa-baixa antes de chegar à " +"cremalheira em veículos MEB e MQB Evo, amortecendo a oscilação lateral. " +"Ligado por padrão nesses carros." + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2598,6 +2622,11 @@ msgstr "" "Mostra o nome da via atual sobre a visão de condução.
Requer mapas " "offline da sua região instalados." +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "Direção suave" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3265,6 +3294,15 @@ msgstr "auto" msgid "auto dark" msgstr "auto escuro" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"atualizações\n" +"automáticas" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3370,16 +3408,10 @@ msgstr "arrancada suave (beta)" msgid "cruise" msgstr "piloto automático" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "atualmente desligado" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "atualmente ligado" +msgid "curvature controller" +msgstr "controlador de curvatura" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3420,16 +3452,6 @@ msgstr "dispositivo" msgid "device ID" msgstr "ID do dispositivo" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"desativar\n" -"atualizações" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3509,15 +3531,6 @@ msgstr "dinâmico" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"ativar\n" -"atualizações" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3809,6 +3822,7 @@ msgstr "toque no volante" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "desl." @@ -3818,6 +3832,12 @@ msgstr "desl." msgid "offline" msgstr "offline" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "lig." + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -4073,6 +4093,11 @@ msgstr "" msgid "slow" msgstr "lento" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "direção suave" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_th.po b/iqpilot/selfdrive/ui/translations/app_th.po index ceaace42f..bbc3cdef9 100644 --- a/iqpilot/selfdrive/ui/translations/app_th.po +++ b/iqpilot/selfdrive/ui/translations/app_th.po @@ -450,6 +450,16 @@ msgstr "ล้างแคชของโมเดลที่เลือกแ msgid "Close" msgstr "ปิด" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"ปิดลูปควบคุมพวงมาลัยในรถ MEB และ MQB Evo โดย IQ.Pilot " +"จะแก้ไขคำสั่งบังคับเลี้ยวตามความโค้งที่รถทำได้จริง " +"แทนการส่งความโค้งที่วางแผนไว้ออกไปตรง ๆ" + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -580,6 +590,11 @@ msgstr "ครูซคอนโทรล" msgid "Current Version" msgstr "เวอร์ชันปัจจุบัน" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "ตัวควบคุมความโค้ง" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1570,6 +1585,15 @@ msgstr "มองล่วงหน้าน้อยลง" msgid "Low-Speed Turn Planning" msgstr "การวางแผนเลี้ยวที่ความเร็วต่ำ" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"กรองความโค้งที่วางแผนไว้ด้วยตัวกรองความถี่ต่ำก่อนส่งไปยังแร็คพวงมาลัยในรถ " +"MEB และ MQB Evo เพื่อลดอาการส่ายด้านข้าง " +"เปิดใช้งานโดยค่าเริ่มต้นสำหรับรถเหล่านี้" + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2557,6 +2581,11 @@ msgid "" msgstr "" "แสดงชื่อถนนปัจจุบันทับภาพขับขี่
ต้องติดตั้งข้อมูลแผนที่ออฟไลน์สำหรับภูมิภาคของคุณ" +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "การบังคับเลี้ยวที่นุ่มนวล" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3205,6 +3234,15 @@ msgstr "อัตโนมัติ" msgid "auto dark" msgstr "อัตโนมัติมืด" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"อัปเดต\n" +"อัตโนมัติ" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3310,16 +3348,10 @@ msgstr "ค่อย ๆ เคลื่อนจากจุดหยุด ( msgid "cruise" msgstr "ครูซคอนโทรล" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "ขณะนี้ปิดอยู่" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "ขณะนี้เปิดอยู่" +msgid "curvature controller" +msgstr "ตัวควบคุมความโค้ง" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3360,16 +3392,6 @@ msgstr "อุปกรณ์" msgid "device ID" msgstr "รหัสอุปกรณ์" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"ปิด\n" -"การอัปเดต" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3449,15 +3471,6 @@ msgstr "ไดนามิก" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"เปิด\n" -"การอัปเดต" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3749,6 +3762,7 @@ msgstr "ขยับพวงมาลัย" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "ปิด" @@ -3758,6 +3772,12 @@ msgstr "ปิด" msgid "offline" msgstr "ออฟไลน์" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "เปิด" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -4013,6 +4033,11 @@ msgstr "" msgid "slow" msgstr "ช้า" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "การบังคับเลี้ยวที่นุ่มนวล" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_tr.po b/iqpilot/selfdrive/ui/translations/app_tr.po index a4f0613fe..9d85c9b19 100644 --- a/iqpilot/selfdrive/ui/translations/app_tr.po +++ b/iqpilot/selfdrive/ui/translations/app_tr.po @@ -452,6 +452,16 @@ msgstr "Seçili modelin önbelleği temizlenip yeniden indirilsin mi?" msgid "Close" msgstr "Kapat" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"MEB ve MQB Evo araçlarda direksiyon kontrolünü kapalı çevrim yapar. " +"IQ.Pilot planlanan eğriliği doğrudan göndermek yerine, aracın gerçekte " +"tuttuğu eğriliğe göre direksiyon komutunu düzeltir." + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -582,6 +592,11 @@ msgstr "Hız sabitleyici" msgid "Current Version" msgstr "Geçerli Sürüm" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "Eğrilik Denetleyicisi" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1583,6 +1598,15 @@ msgstr "daha düşük öngörü" msgid "Low-Speed Turn Planning" msgstr "Düşük hızda dönüş planlaması" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"MEB ve MQB Evo araçlarda planlanan eğriliği direksiyon kutusuna ulaşmadan " +"önce alçak geçiren filtreden geçirir ve yanal salınımı söndürür. Bu " +"araçlarda varsayılan olarak açıktır." + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2579,6 +2603,11 @@ msgstr "" "Geçerli yolun adını sürüş görünümünün üzerinde gösterir.
Bölgeniz için " "çevrimdışı harita verisinin kurulu olmasını gerektirir." +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "Yumuşak Direksiyon" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3240,6 +3269,15 @@ msgstr "otomatik" msgid "auto dark" msgstr "otomatik koyu" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"otomatik\n" +"güncellemeler" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3345,16 +3383,10 @@ msgstr "duraktan yavaş kalkış (beta)" msgid "cruise" msgstr "hız sabitleyici" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "şu anda kapalı" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "şu anda açık" +msgid "curvature controller" +msgstr "eğrilik denetleyicisi" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3395,16 +3427,6 @@ msgstr "cihaz" msgid "device ID" msgstr "cihaz kimliği" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"güncellemeleri\n" -"kapat" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3484,15 +3506,6 @@ msgstr "dinamik" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"güncellemeleri\n" -"aç" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3784,6 +3797,7 @@ msgstr "direksiyon dokunuşu" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "kapalı" @@ -3793,6 +3807,12 @@ msgstr "kapalı" msgid "offline" msgstr "çevrimdışı" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "açık" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -4048,6 +4068,11 @@ msgstr "" msgid "slow" msgstr "yavaş" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "yumuşak direksiyon" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_uk.po b/iqpilot/selfdrive/ui/translations/app_uk.po index 5cad72eba..f271032d2 100644 --- a/iqpilot/selfdrive/ui/translations/app_uk.po +++ b/iqpilot/selfdrive/ui/translations/app_uk.po @@ -454,6 +454,16 @@ msgstr "Очистити кеш обраної моделі й завантаж msgid "Close" msgstr "Закрити" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "" +"Замикає контур керма на автомобілях MEB і MQB Evo. IQ.Pilot коригує " +"команду керування за кривизною, яку автомобіль реально тримає, замість " +"того щоб надсилати заплановану кривизну напряму." + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -585,6 +595,11 @@ msgstr "Круїз" msgid "Current Version" msgstr "Поточна версія" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "Регулятор кривизни" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1590,6 +1605,15 @@ msgstr "менше випередження" msgid "Low-Speed Turn Planning" msgstr "Планування поворотів на низькій швидкості" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "" +"Пропускає заплановану кривизну через фільтр низьких частот, перш ніж вона " +"дійде до рейки, на автомобілях MEB і MQB Evo, що гасить бічне коливання. " +"Для цих машин увімкнено типово." + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2590,6 +2614,11 @@ msgstr "" "Показує назву поточної дороги над видом дороги.
Потребує встановлених " "офлайн-карт для вашого регіону." +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "Плавне кермування" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3249,6 +3278,15 @@ msgstr "авто" msgid "auto dark" msgstr "авто темний" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"автоматичні\n" +"оновлення" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3354,16 +3392,10 @@ msgstr "рушання з місця (бета)" msgid "cruise" msgstr "круїз" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "зараз вимкнено" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "зараз увімкнено" +msgid "curvature controller" +msgstr "регулятор кривизни" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3404,16 +3436,6 @@ msgstr "пристрій" msgid "device ID" msgstr "ID пристрою" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"вимкнути\n" -"оновлення" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3493,15 +3515,6 @@ msgstr "динамічний" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"увімкнути\n" -"оновлення" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3793,6 +3806,7 @@ msgstr "поштовх керма" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "вимк." @@ -3802,6 +3816,12 @@ msgstr "вимк." msgid "offline" msgstr "офлайн" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "увімк." + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -4057,6 +4077,11 @@ msgstr "" msgid "slow" msgstr "повільно" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "плавне кермування" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_zh-CHS.po b/iqpilot/selfdrive/ui/translations/app_zh-CHS.po index 3d2e87c04..c1c611865 100644 --- a/iqpilot/selfdrive/ui/translations/app_zh-CHS.po +++ b/iqpilot/selfdrive/ui/translations/app_zh-CHS.po @@ -436,6 +436,13 @@ msgstr "清除所选模型的缓存并重新下载?" msgid "Close" msgstr "关闭" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "在 MEB 和 MQB Evo 车型上闭环控制转向。IQ.Pilot 会根据车辆实际保持的曲率修正转向指令,而不是直接下发规划的曲率。" + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -558,6 +565,11 @@ msgstr "巡航" msgid "Current Version" msgstr "当前版本" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "曲率控制器" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1506,6 +1518,12 @@ msgstr "提前量减小" msgid "Low-Speed Turn Planning" msgstr "低速转弯规划" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "在 MEB 和 MQB Evo 车型上,规划的曲率送到转向机之前先经过低通滤波,抑制横向摆动。这些车型默认开启。" + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2459,6 +2477,11 @@ msgid "" "data for your region to be installed." msgstr "在驾驶画面上显示当前道路名称。
需要安装你所在地区的离线地图数据。" +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "平滑转向" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3079,6 +3102,15 @@ msgstr "自动" msgid "auto dark" msgstr "自动变暗" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"自动\n" +"更新" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3184,16 +3216,10 @@ msgstr "静止起步蠕行(Beta)" msgid "cruise" msgstr "巡航" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "当前已关闭" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "当前已开启" +msgid "curvature controller" +msgstr "曲率控制器" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3234,16 +3260,6 @@ msgstr "设备" msgid "device ID" msgstr "设备 ID" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"关闭\n" -"更新" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3323,15 +3339,6 @@ msgstr "动态" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"开启\n" -"更新" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3623,6 +3630,7 @@ msgstr "轻推方向盘" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "关闭" @@ -3632,6 +3640,12 @@ msgstr "关闭" msgid "offline" msgstr "离线" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "开启" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -3887,6 +3901,11 @@ msgstr "" msgid "slow" msgstr "慢" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "平滑转向" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/translations/app_zh-CHT.po b/iqpilot/selfdrive/ui/translations/app_zh-CHT.po index 874b5006f..a786aea0c 100644 --- a/iqpilot/selfdrive/ui/translations/app_zh-CHT.po +++ b/iqpilot/selfdrive/ui/translations/app_zh-CHT.po @@ -436,6 +436,13 @@ msgstr "清除所選模型的快取並重新下載?" msgid "Close" msgstr "關閉" +#: iqpilot/ui/layouts/settings/iq_panels.py:2245 +msgid "" +"Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its " +"steering command against the curvature the car is actually holding, " +"instead of sending the planned curvature straight through." +msgstr "在 MEB 與 MQB Evo 車型上閉環控制轉向。IQ.Pilot 會依據車輛實際維持的曲率修正轉向指令,而非直接送出規劃的曲率。" + #: openpilot/selfdrive/ui/layouts/routes.py:174 #, python-brace-format msgid "Cloud" @@ -558,6 +565,11 @@ msgstr "巡航" msgid "Current Version" msgstr "目前版本" +#: iqpilot/ui/layouts/settings/iq_panels.py:2288 +#, python-brace-format +msgid "Curvature Controller" +msgstr "曲率控制器" + #: iqpilot/ui/layouts/settings/iq_panels.py:412 #: iqpilot/ui/layouts/settings/iq_panels.py:449 #, python-brace-format @@ -1506,6 +1518,12 @@ msgstr "提前量減少" msgid "Low-Speed Turn Planning" msgstr "低速轉彎規劃" +#: iqpilot/ui/layouts/settings/iq_panels.py:2249 +msgid "" +"Low-pass the planned curvature before it reaches the rack on MEB and MQB " +"Evo vehicles, which damps lateral wobble. On by default for these cars." +msgstr "在 MEB 與 MQB Evo 車型上,規劃的曲率送到轉向機之前先經過低通濾波,抑制橫向擺動。這些車型預設開啟。" + #: iqpilot/ui/layouts/settings/iq_panels.py:2643 #, python-brace-format msgid "MANUAL" @@ -2459,6 +2477,11 @@ msgid "" "data for your region to be installed." msgstr "在行車畫面上顯示目前的道路名稱。
需要安裝你所在區域的離線地圖資料。" +#: iqpilot/ui/layouts/settings/iq_panels.py:2300 +#, python-brace-format +msgid "Smooth Steering" +msgstr "平滑轉向" + #: openpilot/selfdrive/ui/widgets/offroad_alerts.py:106 #, python-brace-format msgid "Snooze Update" @@ -3081,6 +3104,15 @@ msgstr "自動" msgid "auto dark" msgstr "自動變暗" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#, python-brace-format +msgid "" +"automatic\n" +"updates" +msgstr "" +"自動\n" +"更新" + #: openpilot/selfdrive/ui/mici/layouts/onboarding.py:405 #, python-brace-format msgid "back" @@ -3186,16 +3218,10 @@ msgstr "靜止起步潛行(Beta)" msgid "cruise" msgstr "巡航" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:83 #, python-brace-format -msgid "currently off" -msgstr "目前已關閉" - -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:339 -#, python-brace-format -msgid "currently on" -msgstr "目前已開啟" +msgid "curvature controller" +msgstr "曲率控制器" #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:94 #, python-brace-format @@ -3236,16 +3262,6 @@ msgstr "裝置" msgid "device ID" msgstr "裝置 ID" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"disable\n" -"updates" -msgstr "" -"關閉\n" -"更新" - #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:56 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:190 #: openpilot/selfdrive/ui/mici/layouts/settings/network/network_layout.py:199 @@ -3325,15 +3341,6 @@ msgstr "動態" msgid "eSIM" msgstr "eSIM" -#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 -#, python-brace-format -msgid "" -"enable\n" -"updates" -msgstr "" -"開啟\n" -"更新" - #: openpilot/selfdrive/ui/mici/layouts/settings/dashcam.py:15 #, python-brace-format msgid "enable dashcam" @@ -3625,6 +3632,7 @@ msgstr "輕推方向盤" #: openpilot/selfdrive/ui/mici/layouts/settings/cruise.py:87 #: openpilot/selfdrive/ui/mici/layouts/settings/steering.py:75 #: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:76 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 #, python-brace-format msgid "off" msgstr "關閉" @@ -3634,6 +3642,12 @@ msgstr "關閉" msgid "offline" msgstr "離線" +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:324 +#: openpilot/selfdrive/ui/mici/layouts/settings/software.py:338 +#, python-brace-format +msgid "on" +msgstr "開啟" + #: openpilot/selfdrive/ui/mici/layouts/settings/device.py:146 #, python-brace-format msgid "online" @@ -3889,6 +3903,11 @@ msgstr "" msgid "slow" msgstr "慢" +#: openpilot/selfdrive/ui/mici/layouts/settings/vehicle.py:84 +#, python-brace-format +msgid "smooth steering" +msgstr "平滑轉向" + #: openpilot/selfdrive/ui/mici/layouts/settings/settings.py:107 #, python-brace-format msgid "software" diff --git a/iqpilot/selfdrive/ui/ui_state.py b/iqpilot/selfdrive/ui/ui_state.py index e8ea98c86..07af7795b 100644 --- a/iqpilot/selfdrive/ui/ui_state.py +++ b/iqpilot/selfdrive/ui/ui_state.py @@ -21,6 +21,19 @@ GuidanceState = custom.AlwaysOnLateral.AlwaysOnLateralState ONROAD_BRIGHTNESS_TIMER_PAUSED = -1 +def log_param_from_bytes(params: Params, key: str, schema): + # a capnp param written by anything other than the daemon that owns it takes the whole UI + # down at import time, and the UI cannot repair it -- read it defensively and carry on + dat = params.get(key) + if not dat: + return None + try: + return messaging.log_from_bytes(dat, schema) + except Exception: + cloudlog.exception(f"ui: ignoring malformed {key}") + return None + + class OnroadTimerStatus(Enum): NONE = 0 PAUSE = 1 @@ -158,9 +171,9 @@ class IQUIState: } def update_params(self) -> None: - CP_IQ_bytes = self.params.get("IQCarParamsPersistentV2") - if CP_IQ_bytes is not None: - self.CP_IQ = messaging.log_from_bytes(CP_IQ_bytes, custom.IQCarParams) + CP_IQ = log_param_from_bytes(self.params, "IQCarParamsPersistentV2", custom.IQCarParams) + if CP_IQ is not None: + self.CP_IQ = CP_IQ for attr, (key, kind) in self._PARAM_MIRROR.items(): if kind == "bool": @@ -412,9 +425,9 @@ class UIState(IQUIState): self._started_prev = self.started def update_params(self) -> None: - CP_bytes = self.params.get("CarParamsPersistent") - if CP_bytes is not None: - self.CP = messaging.log_from_bytes(CP_bytes, car.CarParams) + CP = log_param_from_bytes(self.params, "CarParamsPersistent", car.CarParams) + if CP is not None: + self.CP = CP if self.CP.alphaLongitudinalAvailable: self.has_longitudinal_control = self.params.get_bool("AlphaLongitudinalEnabled") else: diff --git a/iqpilot/system/updated/tests/test_branch_migrations.py b/iqpilot/system/updated/tests/test_branch_migrations.py index f8470b008..e04ad0974 100644 --- a/iqpilot/system/updated/tests/test_branch_migrations.py +++ b/iqpilot/system/updated/tests/test_branch_migrations.py @@ -7,6 +7,7 @@ from iqpilot.system.updated.updated import Updater, display_commit_date def test_display_commit_date(): assert display_commit_date("'1786378834 2026-08-10 11:20:34 -0500'") == "2026-08-10 11:20:34" assert display_commit_date("1786378834 2026-08-10 11:20:34 -0500") == "2026-08-10 11:20:34" + assert display_commit_date("'1786378834 2026-08-10 11:20:34 -0500'\n") == "2026-08-10 11:20:34" assert display_commit_date("Jul 02") == "Jul 02" diff --git a/iqpilot/system/updated/updated.py b/iqpilot/system/updated/updated.py index 9076ebb9d..f6c24acc4 100755 --- a/iqpilot/system/updated/updated.py +++ b/iqpilot/system/updated/updated.py @@ -76,6 +76,7 @@ def has_git_repo(path: str) -> bool: def display_commit_date(value: str) -> str: + value = value.strip() match = re.fullmatch(r"'?\d+ (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) [+-]\d{4}'?", value) return match.group(1) if match else value.strip("'") @@ -479,11 +480,28 @@ def prepare_environment() -> bool: return False +def publish_running_version(params: Params) -> None: + try: + updater = Updater() + release_notes = parse_release_notes(BASEDIR) + params.put("UpdaterState", "idle") + params.put("UpdaterTargetBranch", updater.target_branch) + params.put("UpdaterCurrentDescription", updater.running_description) + params.put("UpdaterCurrentReleaseNotes", release_notes) + params.put("UpdaterNewDescription", updater.running_description) + params.put("UpdaterNewReleaseNotes", release_notes) + params.put_bool("UpdaterFetchAvailable", False) + params.put_bool("UpdateAvailable", False) + except Exception: + cloudlog.exception("updater: failed to publish running version") + + def main() -> None: params = Params() if params.get_bool("DisableUpdates"): cloudlog.warning("updates are disabled by the DisableUpdates param") + publish_running_version(params) exit(0) with open(LOCK_FILE, 'w') as ov_lock_fd: diff --git a/iqpilot/ui/layouts/settings/iq_panels.py b/iqpilot/ui/layouts/settings/iq_panels.py index 7963e86b3..512e7b06e 100644 --- a/iqpilot/ui/layouts/settings/iq_panels.py +++ b/iqpilot/ui/layouts/settings/iq_panels.py @@ -2242,6 +2242,14 @@ DESCRIPTIONS = { 'iqMqbSteeringLockout': tr_noop( 'Enable MQB steering lockout handling on Volkswagen MQB vehicles with low speed LKAS faults.' ), + 'EnableCurvatureController': tr_noop( + 'Close the steering loop on MEB and MQB Evo vehicles. IQ.Pilot corrects its steering command against ' + 'the curvature the car is actually holding, instead of sending the planned curvature straight through.' + ), + 'EnableSmoothSteer': tr_noop( + 'Low-pass the planned curvature before it reaches the rack on MEB and MQB Evo vehicles, which damps ' + 'lateral wobble. On by default for these cars.' + ), } class VolkswagenSettings(BrandPanel): @@ -2280,7 +2288,24 @@ class VolkswagenSettings(BrandPanel): enabled=lambda: not ui_state.engaged, ) - self.items = [self.pq_hca_toggle, self.lateral_when_long_unavailable, self.mqb_acc_resume, self.mqb_steering_lockout] + self.curvature_controller = toggle_item( + lambda: tr("Curvature Controller"), + description=lambda: tr(DESCRIPTIONS["EnableCurvatureController"]), + initial_state=ui_state.params.get_bool("EnableCurvatureController"), + callback=self._on_curvature_controller, + enabled=lambda: not ui_state.engaged, + ) + + self.smooth_steer = toggle_item( + lambda: tr("Smooth Steering"), + description=lambda: tr(DESCRIPTIONS["EnableSmoothSteer"]), + initial_state=ui_state.params.get_bool("EnableSmoothSteer"), + callback=self._on_smooth_steer, + enabled=lambda: not ui_state.engaged, + ) + + self.items = [self.pq_hca_toggle, self.lateral_when_long_unavailable, self.mqb_acc_resume, self.mqb_steering_lockout, + self.curvature_controller, self.smooth_steer] def _flags(self) -> VolkswagenFlags: bundle = ui_state.params.get("CarPlatformBundle") @@ -2305,6 +2330,9 @@ class VolkswagenSettings(BrandPanel): def _supports_lateral_when_faulted(self) -> bool: return not bool(self._flags() & VolkswagenFlags.MLB) + def _is_curvature_car(self) -> bool: + return bool(self._flags() & (VolkswagenFlags.MEB | VolkswagenFlags.MQB_EVO)) + def _on_pq_hca_toggle(self, state: bool): ui_state.params.put_bool("pqhca5or7Toggle", state) @@ -2317,12 +2345,21 @@ class VolkswagenSettings(BrandPanel): def _on_mqb_steering_lockout(self, state: bool): ui_state.params.put_bool("iqMqbSteeringLockout", state) + def _on_curvature_controller(self, state: bool): + ui_state.params.put_bool("EnableCurvatureController", state) + + def _on_smooth_steer(self, state: bool): + ui_state.params.put_bool("EnableSmoothSteer", state) + def update_settings(self): self.pq_hca_toggle.set_visible(self._uses_hca_status_toggle()) self.lateral_when_long_unavailable.set_visible(self._supports_lateral_when_faulted()) is_mqb = self._is_mqb() self.mqb_acc_resume.set_visible(is_mqb) self.mqb_steering_lockout.set_visible(is_mqb) + is_curvature_car = self._is_curvature_car() + self.curvature_controller.set_visible(is_curvature_car) + self.smooth_steer.set_visible(is_curvature_car) _REGISTRY: dict[str, type[BrandPanel]] = { "hyundai": HyundaiSettings,