diff --git a/.github/update_date b/.github/update_date new file mode 100644 index 0000000..239268a --- /dev/null +++ b/.github/update_date @@ -0,0 +1 @@ +2025-11-01 diff --git a/.github/workflows/schedule_update.yaml b/.github/workflows/schedule_update.yaml index 18bec7e..c6f7996 100644 --- a/.github/workflows/schedule_update.yaml +++ b/.github/workflows/schedule_update.yaml @@ -9,6 +9,7 @@ on: env: BRANCH: FrogPilot-Staging + GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} jobs: schedule-update: @@ -22,6 +23,7 @@ jobs: - name: Checkout ${{ env.BRANCH }} uses: actions/checkout@v3 with: + persist-credentials: false ref: ${{ env.BRANCH }} fetch-depth: 3 @@ -42,16 +44,30 @@ jobs: echo "COMMITTER_DATE=$COMMITTER_DATE" >> $GITHUB_ENV echo "TARGET_COMMIT=$TARGET_COMMIT" >> $GITHUB_ENV - - name: Create Fixup Commit for ${{ env.TARGET_COMMIT }} - run: git commit --fixup="${{ env.TARGET_COMMIT }}" + - name: Create Fixup Commit if Changes Exist + id: fixup_commit + run: | + if git diff --cached --quiet; then + echo "No changes to commit." + echo "has_changes=false" >> "$GITHUB_OUTPUT" + else + echo "Changes found, creating fixup commit." + git commit --fixup="${{ env.TARGET_COMMIT }}" + echo "has_changes=true" >> "$GITHUB_OUTPUT" + fi - name: Autosquash Fixup into Target Commit + if: steps.fixup_commit.outputs.has_changes == 'true' run: | GIT_SEQUENCE_EDITOR=: git rebase --autosquash -i HEAD~3 - name: Restore Timestamps on Final Two Commits + if: steps.fixup_commit.outputs.has_changes == 'true' run: | git rebase --exec "GIT_COMMITTER_DATE='${{ env.COMMITTER_DATE }}' git commit --amend --no-edit --date='${{ env.AUTHOR_DATE }}'" HEAD~2 - name: Push Updated ${{ env.BRANCH }} Branch - run: git push origin "${{ env.BRANCH }}" --force-with-lease + if: steps.fixup_commit.outputs.has_changes == 'true' + run: | + git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }} + git push origin "${{ env.BRANCH }}" --force-with-lease diff --git a/.github/workflows/update_pr_branch.yaml b/.github/workflows/update_pr_branch.yaml index 0f5db31..649ac5b 100644 --- a/.github/workflows/update_pr_branch.yaml +++ b/.github/workflows/update_pr_branch.yaml @@ -3,12 +3,12 @@ name: Update MAKE-PRS-HERE on: push: branches: - - FrogPilot-Staging + - FrogPilot-Testing env: GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} - SOURCE_BRANCH: FrogPilot-Staging + SOURCE_BRANCH: FrogPilot-Testing TARGET_BRANCH: MAKE-PRS-HERE jobs: diff --git a/cereal/car.capnp b/cereal/car.capnp index d142cc8..02971fd 100644 --- a/cereal/car.capnp +++ b/cereal/car.capnp @@ -530,14 +530,14 @@ struct CarParams { struct LateralTorqueTuning { useSteeringAngle @0 :Bool; - kp @1 :Float32; - ki @2 :Float32; - kd @8 : Float32; friction @3 :Float32; - kf @4 :Float32; steeringAngleDeadzoneDeg @5 :Float32; latAccelFactor @6 :Float32; latAccelOffset @7 :Float32; + kpDEPRECATED @1 :Float32; + kiDEPRECATED @2 :Float32; + kfDEPRECATED @4 :Float32; + kdDEPRECATED @8 : Float32; } struct LongitudinalPIDTuning { @@ -545,7 +545,7 @@ struct CarParams { kpV @1 :List(Float32); kiBP @2 :List(Float32); kiV @3 :List(Float32); - kf @6 :Float32; + kfDEPRECATED @6 :Float32; deadzoneBP @4 :List(Float32); deadzoneV @5 :List(Float32); } diff --git a/cereal/custom.capnp b/cereal/custom.capnp index e856d76..202f879 100644 --- a/cereal/custom.capnp +++ b/cereal/custom.capnp @@ -216,6 +216,8 @@ struct FrogPilotPlan @0xa1680744031fdb2d { trackingLead @32 :Bool; unconfirmedSlcSpeedLimit @33 :Float32; vCruise @34 :Float32; + weatherDaytime @35 :Bool; + weatherId @36 :Int16; } struct FrogPilotRadarState @0xcb9fd56c7057593a { diff --git a/cereal/log.capnp b/cereal/log.capnp index 54e877f..8820869 100644 --- a/cereal/log.capnp +++ b/cereal/log.capnp @@ -795,6 +795,8 @@ struct ControlsState @0x97ff69c53601abf1 { saturated @7 :Bool; actualLateralAccel @9 :Float32; desiredLateralAccel @10 :Float32; + desiredLateralJerk @11 :Float32; + version @12 :Int32; } struct LateralLQRState { diff --git a/common/params.cc b/common/params.cc index a65d522..2d41241 100644 --- a/common/params.cc +++ b/common/params.cc @@ -268,6 +268,7 @@ std::unordered_map keys = { {"CESpeed", PERSISTENT}, {"CESpeedLead", PERSISTENT}, {"CEStatus", CLEAR_ON_OFFROAD_TRANSITION}, + {"CEStopLights", PERSISTENT}, {"CEStoppedLead", PERSISTENT}, {"ClusterOffset", PERSISTENT}, {"ColorToDownload", CLEAR_ON_MANAGER_START}, @@ -356,10 +357,22 @@ std::unordered_map keys = { {"HideSpeedLimit", PERSISTENT}, {"HigherBitrate", PERSISTENT}, {"HolidayThemes", PERSISTENT}, + {"HondaAltTune", PERSISTENT}, + {"HondaLowSpeedPedal", PERSISTENT}, + {"HondaMaxBrake", PERSISTENT}, {"HumanAcceleration", PERSISTENT}, {"HumanFollowing", PERSISTENT}, + {"HumanLaneChanges", PERSISTENT}, {"IconToDownload", CLEAR_ON_MANAGER_START}, {"IncreasedStoppedDistance", PERSISTENT}, + {"IncreaseFollowingLowVisibility", PERSISTENT}, + {"IncreaseFollowingRain", PERSISTENT}, + {"IncreaseFollowingRainStorm", PERSISTENT}, + {"IncreaseFollowingSnow", PERSISTENT}, + {"IncreasedStoppedDistanceLowVisibility", PERSISTENT}, + {"IncreasedStoppedDistanceRain", PERSISTENT}, + {"IncreasedStoppedDistanceRainStorm", PERSISTENT}, + {"IncreasedStoppedDistanceSnow", PERSISTENT}, {"IncreaseThermalLimits", PERSISTENT}, {"IssueReported", CLEAR_ON_MANAGER_START}, {"KonikDongleId", PERSISTENT}, @@ -447,6 +460,14 @@ std::unordered_map keys = { {"RainbowPath", PERSISTENT}, {"RandomEvents", PERSISTENT}, {"RandomThemes", PERSISTENT}, + {"ReduceAccelerationLowVisibility", PERSISTENT}, + {"ReduceAccelerationRain", PERSISTENT}, + {"ReduceAccelerationRainStorm", PERSISTENT}, + {"ReduceAccelerationSnow", PERSISTENT}, + {"ReduceLateralAccelerationLowVisibility", PERSISTENT}, + {"ReduceLateralAccelerationRain", PERSISTENT}, + {"ReduceLateralAccelerationRainStorm", PERSISTENT}, + {"ReduceLateralAccelerationSnow", PERSISTENT}, {"RefuseVolume", PERSISTENT}, {"RelaxedFollow", PERSISTENT}, {"RelaxedJerkAcceleration", PERSISTENT}, @@ -536,6 +557,7 @@ std::unordered_map keys = { {"StoppingDecelRate", PERSISTENT}, {"StoppingDecelRateStock", PERSISTENT}, {"StoppedTimer", PERSISTENT}, + {"SubaruSNG", PERSISTENT}, {"TacoTune", PERSISTENT}, {"TacoTuneHacks", PERSISTENT}, {"TestAlert", CLEAR_ON_MANAGER_START}, @@ -543,7 +565,6 @@ std::unordered_map keys = { {"ThemeDownloadProgress", CLEAR_ON_MANAGER_START}, {"ThemesDownloaded", PERSISTENT}, {"TinygradUpdateAvailable", PERSISTENT}, - {"TogglesUpdated", PERSISTENT}, {"ToyotaDoors", PERSISTENT}, {"TrafficFollow", PERSISTENT}, {"TrafficJerkAcceleration", PERSISTENT}, @@ -558,6 +579,7 @@ std::unordered_map keys = { {"UnlimitedLength", PERSISTENT}, {"UnlockDoors", PERSISTENT}, {"Updated", PERSISTENT}, + {"UpdatedToggles", PERSISTENT}, {"UpdateSpeedLimits", CLEAR_ON_MANAGER_START}, {"UpdateSpeedLimitsStatus", CLEAR_ON_MANAGER_START}, {"UpdateTinygrad", CLEAR_ON_MANAGER_START}, @@ -574,6 +596,8 @@ std::unordered_map keys = { {"VoltSNG", PERSISTENT}, {"WarningImmediateVolume", PERSISTENT}, {"WarningSoftVolume", PERSISTENT}, + {"WeatherPresets", PERSISTENT}, + {"WeatherToken", PERSISTENT | DONT_LOG}, {"WheelIcon", PERSISTENT}, {"WheelSpeed", PERSISTENT}, {"WheelToDownload", CLEAR_ON_MANAGER_START}, diff --git a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/aggressive.gif b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/aggressive.gif deleted file mode 100644 index 05cd8d0..0000000 Binary files a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/aggressive.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/aggressive.png b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/aggressive.png new file mode 100644 index 0000000..8b0ed82 Binary files /dev/null and b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/aggressive.png differ diff --git a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/relaxed.gif b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/relaxed.gif deleted file mode 100644 index 7882afb..0000000 Binary files a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/relaxed.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/relaxed.png b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/relaxed.png new file mode 100644 index 0000000..b76bb93 Binary files /dev/null and b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/relaxed.png differ diff --git a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/standard.gif b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/standard.gif deleted file mode 100644 index c97c85c..0000000 Binary files a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/standard.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/standard.png b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/standard.png new file mode 100644 index 0000000..a44f3fc Binary files /dev/null and b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/standard.png differ diff --git a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/traffic.gif b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/traffic.gif deleted file mode 100644 index 3e3f898..0000000 Binary files a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/traffic.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/christmas_week/distance_icons/traffic.png b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/traffic.png new file mode 100644 index 0000000..3d66605 Binary files /dev/null and b/frogpilot/assets/holiday_themes/christmas_week/distance_icons/traffic.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/aggressive.gif b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/aggressive.gif deleted file mode 100644 index 05cd8d0..0000000 Binary files a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/aggressive.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/aggressive.png b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/aggressive.png new file mode 100644 index 0000000..e1bcfaa Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/aggressive.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/relaxed.gif b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/relaxed.gif deleted file mode 100644 index 7882afb..0000000 Binary files a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/relaxed.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/relaxed.png b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/relaxed.png new file mode 100644 index 0000000..fb4e3f6 Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/relaxed.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/standard.gif b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/standard.gif deleted file mode 100644 index c97c85c..0000000 Binary files a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/standard.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/standard.png b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/standard.png new file mode 100644 index 0000000..6c23e02 Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/standard.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/traffic.gif b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/traffic.gif deleted file mode 100644 index 3e3f898..0000000 Binary files a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/traffic.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/distance_icons/traffic.png b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/traffic.png new file mode 100644 index 0000000..57dfe77 Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/distance_icons/traffic.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/icons/button_flag.gif b/frogpilot/assets/holiday_themes/halloween_week/icons/button_flag.gif index 8ba4c77..84ad7b7 100644 Binary files a/frogpilot/assets/holiday_themes/halloween_week/icons/button_flag.gif and b/frogpilot/assets/holiday_themes/halloween_week/icons/button_flag.gif differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/icons/button_home.gif b/frogpilot/assets/holiday_themes/halloween_week/icons/button_home.gif index 8ba4c77..84ad7b7 100644 Binary files a/frogpilot/assets/holiday_themes/halloween_week/icons/button_home.gif and b/frogpilot/assets/holiday_themes/halloween_week/icons/button_home.gif differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/signals/traditional_25 b/frogpilot/assets/holiday_themes/halloween_week/signals/traditional_100 similarity index 100% rename from frogpilot/assets/holiday_themes/halloween_week/signals/traditional_25 rename to frogpilot/assets/holiday_themes/halloween_week/signals/traditional_100 diff --git a/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal.gif b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal.gif deleted file mode 100644 index 1561be8..0000000 Binary files a/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_1.png b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_1.png new file mode 100644 index 0000000..2a0b1ce Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_1.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_2.png b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_2.png new file mode 100644 index 0000000..1983327 Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_2.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_3.png b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_3.png new file mode 100644 index 0000000..1985b2f Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_3.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_4.png b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_4.png new file mode 100644 index 0000000..6ecf15d Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_4.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_5.png b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_5.png new file mode 100644 index 0000000..e9a2546 Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_5.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_6.png b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_6.png new file mode 100644 index 0000000..1983327 Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_6.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_blindspot.png b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_blindspot.png new file mode 100644 index 0000000..181925e Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/signals/turn_signal_blindspot.png differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/steering_wheel/wheel.gif b/frogpilot/assets/holiday_themes/halloween_week/steering_wheel/wheel.gif deleted file mode 100644 index f1d730d..0000000 Binary files a/frogpilot/assets/holiday_themes/halloween_week/steering_wheel/wheel.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/halloween_week/steering_wheel/wheel.png b/frogpilot/assets/holiday_themes/halloween_week/steering_wheel/wheel.png new file mode 100644 index 0000000..8234e33 Binary files /dev/null and b/frogpilot/assets/holiday_themes/halloween_week/steering_wheel/wheel.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/aggressive.gif b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/aggressive.gif deleted file mode 100644 index 05cd8d0..0000000 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/aggressive.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/aggressive.png b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/aggressive.png new file mode 100644 index 0000000..23f723c Binary files /dev/null and b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/aggressive.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/relaxed.gif b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/relaxed.gif deleted file mode 100644 index 7882afb..0000000 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/relaxed.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/relaxed.png b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/relaxed.png new file mode 100644 index 0000000..c8fe613 Binary files /dev/null and b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/relaxed.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/standard.gif b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/standard.gif deleted file mode 100644 index c97c85c..0000000 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/standard.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/standard.png b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/standard.png new file mode 100644 index 0000000..8093a63 Binary files /dev/null and b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/standard.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/traffic.gif b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/traffic.gif deleted file mode 100644 index 3e3f898..0000000 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/traffic.gif and /dev/null differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/traffic.png b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/traffic.png new file mode 100644 index 0000000..9dc9fa1 Binary files /dev/null and b/frogpilot/assets/holiday_themes/thanksgiving_week/distance_icons/traffic.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/icons/button_flag.gif b/frogpilot/assets/holiday_themes/thanksgiving_week/icons/button_flag.gif index 2ff77fb..2d414ea 100644 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/icons/button_flag.gif and b/frogpilot/assets/holiday_themes/thanksgiving_week/icons/button_flag.gif differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/icons/button_home.gif b/frogpilot/assets/holiday_themes/thanksgiving_week/icons/button_home.gif index 2ff77fb..2d414ea 100644 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/icons/button_home.gif and b/frogpilot/assets/holiday_themes/thanksgiving_week/icons/button_home.gif differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_1.png b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_1.png index 8c2f7a5..e2c7f02 100644 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_1.png and b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_1.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_2.png b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_2.png index 3c7d2d9..a5dcae6 100644 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_2.png and b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_2.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_3.png b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_3.png index b495eea..e0c2a79 100644 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_3.png and b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_3.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_4.png b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_4.png index 024a0b0..98a2096 100644 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_4.png and b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_4.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_5.png b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_5.png index 91eb05f..2b0f6d0 100644 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_5.png and b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_5.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_6.png b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_6.png index 3c7d2d9..f708700 100644 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_6.png and b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_6.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_blindspot.png b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_blindspot.png index b721266..0762273 100644 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_blindspot.png and b/frogpilot/assets/holiday_themes/thanksgiving_week/signals/turn_signal_blindspot.png differ diff --git a/frogpilot/assets/holiday_themes/thanksgiving_week/steering_wheel/wheel.png b/frogpilot/assets/holiday_themes/thanksgiving_week/steering_wheel/wheel.png index 32c30aa..220d480 100644 Binary files a/frogpilot/assets/holiday_themes/thanksgiving_week/steering_wheel/wheel.png and b/frogpilot/assets/holiday_themes/thanksgiving_week/steering_wheel/wheel.png differ diff --git a/frogpilot/assets/model_manager.py b/frogpilot/assets/model_manager.py index c0500c7..7decec8 100644 --- a/frogpilot/assets/model_manager.py +++ b/frogpilot/assets/model_manager.py @@ -12,7 +12,10 @@ from urllib.parse import quote_plus from openpilot.common.basedir import BASEDIR from openpilot.frogpilot.assets.download_functions import GITLAB_URL, download_file, get_remote_file_size, get_repository_url, handle_error, handle_request_error, verify_download from openpilot.frogpilot.common.frogpilot_utilities import delete_file, extract_tar, load_json_file, update_json_file -from openpilot.frogpilot.common.frogpilot_variables import DEFAULT_MODEL, MODELS_PATH, RESOURCES_REPO, TINYGRAD_FILES, params, params_default, params_memory, update_frogpilot_toggles +from openpilot.frogpilot.common.frogpilot_variables import ( + DEFAULT_MODEL, DEFAULT_MODEL_NAME, DEFAULT_MODEL_VERSION, MODELS_PATH, RESOURCES_REPO, TINYGRAD_FILES, + params, params_default, params_memory, update_frogpilot_toggles +) VERSION = "v16" VERSION_PATH = MODELS_PATH / "model_version" @@ -528,3 +531,13 @@ class ModelManager: VERSION_PATH.write_text(VERSION) print(f"Updated {VERSION_PATH} to {VERSION}") + + if len(self.available_models) != len(self.available_model_names) or len(self.available_models) != len(self.model_versions): + print("Model lists are out of sync. Resetting parameters...") + self.available_models = DEFAULT_MODEL + self.available_model_names = DEFAULT_MODEL_NAME + self.model_versions = DEFAULT_MODEL_VERSION + + params.put("AvailableModels", self.available_models) + params.put("AvailableModelNames", self.available_model_names) + params.put("ModelVersions", self.model_versions) diff --git a/frogpilot/assets/nnff_models/CHEVROLET_BOLT_EUV.json b/frogpilot/assets/nnff_models/CHEVROLET_BOLT_EUV.json new file mode 100644 index 0000000..f228dcf --- /dev/null +++ b/frogpilot/assets/nnff_models/CHEVROLET_BOLT_EUV.json @@ -0,0 +1 @@ +{"input_std":[[9.281861],[1.8477924],[0.7977224],[0.047467366],[1.7969038],[1.8168812],[1.8351218],[1.785757],[1.7335743],[1.6658221],[1.5893887],[0.047346078],[0.0473731],[0.047383286],[0.047291175],[0.047300573],[0.04712479],[0.046799928]],"model_test_loss":0.027355343103408813,"input_size":18,"current_date_and_time":"2023-08-05_05-11-44","input_mean":[[21.655252],[-0.07694559],[-0.006081294],[-0.007598456],[-0.07309746],[-0.075890236],[-0.07804942],[-0.076106496],[-0.07184982],[-0.06528668],[-0.060404416],[-0.0077262702],[-0.0077046235],[-0.0076850485],[-0.007687444],[-0.007708868],[-0.0077959923],[-0.008017422]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.35776415],[-0.126288],[0.007988413],[0.03850029],[-0.056796823],[0.0072075897],[0.17376427]],"dense_1_W":[[0.010538558,6.7293744,-0.007391298,-1.035045,-0.47446147,1.0940393,0.08225446,-0.5795131,0.573115,1.82923,-0.16999252,0.8818023,0.03560901,-0.9470653,-1.042151,1.1532398,1.9009485,-1.2265956],[0.009010456,-1.3618345,0.039026346,0.22943486,-0.6669799,-0.768271,-0.16828564,-0.13406865,0.19760236,-0.18953702,-0.019137766,0.1468623,0.26367718,0.4732375,0.73679143,0.62450147,0.30198866,-0.93340015],[-0.044318866,2.2138615,9.620889,-0.66480356,-0.06849887,-0.038568456,-0.30580127,-0.088089585,0.31187677,0.5968372,-1.1462088,0.13234706,0.29166338,-0.69978577,-0.01790655,-0.097928315,-0.56950736,0.7560642],[1.3758256,0.8700429,-0.24295154,0.20832618,-0.7735097,1.0379355,-0.60753095,-0.5457418,-1.0892137,-0.6708325,0.24982774,0.09251328,0.08596103,-0.58034134,-0.3046114,-0.19754426,0.006461508,0.5989185],[0.06314328,-2.492993,-0.28200585,0.49902886,0.8513198,-0.5704965,1.0960953,-0.08426956,-0.76074624,0.10669376,0.02775254,-0.42194095,-0.34657434,-0.10863868,0.17019278,0.0963825,-0.10169116,0.21243806],[0.007984091,-1.9276509,-0.0013926353,0.04057924,1.4438432,1.3440262,-2.506722,1.700801,0.72410774,0.13471895,-0.18753268,0.7303607,0.018133093,-0.71643597,0.07050904,-0.30161944,0.085108586,0.061202843],[0.9413167,-0.9954305,-0.19510143,-0.4711845,-0.12398665,-0.45175523,1.0616771,0.28550953,-0.55543137,-0.21576759,-0.2364377,-0.012782618,-0.050565187,0.257694,-0.20975965,0.00022543047,-0.08760746,0.4983852]],"activation":"σ"},{"dense_2_W":[[-0.71804935,0.017023304,-0.099854074,-0.3262651,-0.402829,-0.12073083,0.13537839],[-0.44002575,-0.1071093,-0.58886194,-0.17319413,-0.21134079,0.23135148,0.0006880979],[-0.55711204,-0.8693639,-0.6443761,-0.7382846,0.18980889,-0.6082511,-0.63103676],[0.11338112,-0.5327033,0.2856197,0.32239884,-0.72682667,0.5302305,-0.45094746],[-0.35197002,-0.14440043,-0.025249843,-0.48697743,0.3340018,-0.25992322,0.0050561456],[0.34757507,0.15670523,-0.14263277,0.50704384,-0.020171141,0.6408679,-0.3074123],[0.40258837,-0.59363264,0.35948923,-0.060853776,-0.0072541097,0.89743376,-0.49789146],[-0.63476,0.29580453,0.1689314,-0.5061521,0.24901053,-0.23218995,0.57968193],[-0.66173035,0.50861925,-0.5845035,-0.6602214,0.8341883,-0.31437424,0.8046359],[0.038493533,0.15464582,-0.04848341,-0.57820857,-0.25891733,-0.47527292,0.21441916],[-0.15464531,-0.07454202,-0.8215851,-0.12614948,-0.5924209,0.00017916794,0.24154592],[0.6091424,-0.112086505,0.1144111,-0.31035227,-0.9237534,0.041003596,-0.3542808],[0.2989792,-0.23780549,0.116059326,-0.6056522,0.5499526,-0.9001413,0.5200723]],"activation":"σ","dense_2_b":[[-0.2638964],[-0.24607328],[-0.15493082],[-0.0071187904],[-0.23515384],[-0.09098133],[-0.034066215],[0.03609036],[-0.03842933],[-0.042302527],[-0.2439947],[-0.16342077],[-0.01030317]]},{"dense_3_W":[[0.45771673,-0.2084603,0.3570187,0.35835707,0.13684571,-0.582958,0.29889587,0.43543494,0.11841301,-0.26185623,-0.4988437,0.5752996,-0.28057483],[-0.19594137,0.050280698,-0.29057446,-0.2829161,-0.16987291,-0.21278952,-0.59946907,0.21295123,0.7040468,0.53549695,-0.52553934,-0.19560973,0.6233473],[-0.19091003,0.08669418,-0.5792192,0.57799137,-0.36263424,0.6037143,0.27898273,-0.30951327,-0.3572644,0.46720102,-0.5403428,0.32415462,-0.60570025]],"activation":"identity","dense_3_b":[[-0.0047377176],[0.023170695],[-0.021546118]]},{"dense_4_W":[[-0.12453941,-1.006034,0.96776205]],"dense_4_b":[[-0.02351544]],"activation":"identity"}]} \ No newline at end of file diff --git a/frogpilot/assets/nnff_models/KIA_NIRO_PHEV_2022.json b/frogpilot/assets/nnff_models/KIA_NIRO_PHEV_2022.json new file mode 100644 index 0000000..204155f --- /dev/null +++ b/frogpilot/assets/nnff_models/KIA_NIRO_PHEV_2022.json @@ -0,0 +1 @@ +{"input_std":[[8.716972],[1.5770903],[0.76125735],[0.035141002],[1.6173459],[1.608055],[1.5956668],[1.495505],[1.4262352],[1.3462695],[1.2594373],[0.035050083],[0.035089202],[0.035124455],[0.035208944],[0.035322115],[0.035380527],[0.035195734]],"model_test_loss":0.02083713933825493,"input_size":18,"current_date_and_time":"2025-07-15_19-46-38","input_mean":[[16.164469],[-0.030030865],[0.4530188],[-0.011929912],[-0.029048208],[-0.029084828],[-0.028234662],[-0.030135768],[-0.026924115],[-0.022959951],[-0.021531954],[-0.011769504],[-0.011809296],[-0.011859953],[-0.012107499],[-0.012191469],[-0.012183576],[-0.012161244]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.05593524],[-2.802646],[0.18381701],[2.7735913],[0.70043844],[-0.67402124],[-0.0306403]],"dense_1_W":[[-0.0060694856,0.708295,-0.0040300265,-0.14072545,0.86508894,-0.20933008,-0.47414628,0.13602145,-0.37351108,-0.1507088,0.8062229,0.32620648,-0.4413763,0.27845934,0.046796944,-0.20166004,0.2805364,-0.17857681],[-1.5183858,-1.1884525,0.012948404,-0.4015399,-0.4482837,1.2997682,0.74758935,-0.18140315,-0.08297701,0.43953654,-1.01308,-0.03576563,0.48874712,-0.35160765,-0.13189487,0.2400938,-0.02507816,0.16568868],[0.012290816,-0.3639789,-0.030819947,0.23707484,0.74310154,0.1940028,0.030501615,0.39026827,0.058221884,0.30168098,0.056437366,-0.20590998,-0.5798354,-0.48759502,0.19185027,-0.1474303,0.01184457,0.2231587],[1.5026484,-1.0851525,0.012162996,0.16663143,0.17487548,1.102379,0.4405227,-0.67651707,0.44908693,-0.2039782,-0.6490339,-0.35403496,0.20746203,-0.3432079,0.028647806,0.107211135,0.23621367,-0.08824623],[0.07099266,-0.93228585,1.2776774,0.0044325506,0.15857935,1.1165909,0.9740256,-1.5084538,-0.9056588,0.12456019,0.5993922,0.3822549,-0.13951926,-0.10822766,0.0038337011,0.18770072,-0.049219564,-0.076232985],[-0.0752,-0.20068114,-1.2384826,-0.049861677,0.4789055,1.0113648,0.5513206,-1.3342785,-0.92097133,-0.06880563,0.89944464,0.117162146,-0.5786451,0.1731132,-0.07269918,-0.08290825,0.61927795,-0.32732028],[0.00064757804,2.5136843,0.013637969,0.09395495,-0.7916261,-0.5194506,-0.6840161,0.43426317,-0.14782813,0.19477805,-0.35974234,0.1649517,0.25925198,-0.43630955,-0.5161664,0.34094948,0.0005879998,-0.01794689]],"activation":"σ"},{"dense_2_W":[[0.0914673,-0.116974674,0.6729949,-0.77771014,-0.41403642,0.14140436,0.73223853],[-0.42032346,0.49695835,-0.5017433,0.87220526,0.1466709,-0.094482444,-1.1789782],[0.680824,-0.33863154,0.41371307,-0.5763291,0.3732767,-0.6742655,0.05377676],[-1.0674618,0.8340688,-0.36008632,0.5650019,0.43301603,0.3166691,-0.33432913],[-0.29696158,-0.7246317,0.16882418,-0.09805153,-0.2640285,0.2763439,0.6544825],[-0.39634275,-0.18197323,0.012897031,0.7196241,0.73943686,0.6189228,-0.44182113],[0.61815614,-0.42130506,0.20303723,-0.53927803,-0.33029187,-0.14950582,0.60663986],[-1.241183,1.4418663,-0.05617688,0.21847261,0.67225105,0.55988765,-1.1410111],[-0.61954373,0.55230546,-0.048563246,0.4581752,-0.59391123,0.20338446,-0.41244057],[-0.56894773,0.7917731,0.059939034,1.0460548,0.0929983,0.5222918,-0.4436079],[0.28442153,0.50281626,0.12484341,0.087528534,0.24470627,-0.27797765,-0.6426289],[0.49003553,-0.2646059,-0.015263944,-0.0018261729,0.23279527,0.0076607405,0.69959176],[0.5684231,-0.27704594,0.45853093,-0.15373382,-0.4746461,-0.5218501,0.7240048]],"activation":"σ","dense_2_b":[[-0.03126267],[-0.10072103],[0.014238525],[-0.08748218],[-0.007306198],[-0.06704365],[-0.015472214],[-0.26747772],[-0.2887335],[-0.20642278],[-0.0904173],[-0.04132339],[-0.055377904]]},{"dense_3_W":[[0.48765612,-0.19100322,0.22134759,-0.21214958,0.017000003,-0.6330459,0.48456302,-0.56035495,-0.4338575,-0.15609962,0.17514223,0.12882961,0.2161585],[-0.2575735,0.010117811,-0.4424225,0.62049,-0.55049926,0.19114582,0.08136277,0.0047532627,-0.36334708,0.23096415,0.23023362,-0.477106,0.0447247],[-0.30809823,-0.56456196,0.18880828,-0.15554532,0.32209295,-0.39576378,0.6519796,-0.52746034,-0.43441087,-0.043550245,0.08788765,-0.019096207,0.4919662]],"activation":"identity","dense_3_b":[[0.026150323],[-0.020686748],[0.031266637]]},{"dense_4_W":[[0.8366031,-0.86834574,0.4038856]],"dense_4_b":[[0.025044668]],"activation":"identity"}]} \ No newline at end of file diff --git a/frogpilot/assets/nnff_models/TOYOTA_RAV4_PRIME.json b/frogpilot/assets/nnff_models/TOYOTA_RAV4_PRIME.json index 0f5863b..c219d98 100644 --- a/frogpilot/assets/nnff_models/TOYOTA_RAV4_PRIME.json +++ b/frogpilot/assets/nnff_models/TOYOTA_RAV4_PRIME.json @@ -1 +1 @@ -{"input_std":[[9.69185],[1.540828],[1.1422535],[0.030263359],[1.6225281],[1.5997777],[1.5730089],[1.424277],[1.3139973],[1.1868707],[1.0676206],[0.030144755],[0.030192483],[0.030228745],[0.03032813],[0.030303925],[0.03031116],[0.030152585]],"model_test_loss":0.016827212646603584,"input_size":18,"current_date_and_time":"2025-04-19_23-39-22","input_mean":[[18.069342],[0.022936927],[-0.035108753],[-0.0031993124],[0.025608419],[0.0257225],[0.025207438],[0.018243022],[0.0072243717],[-0.003662435],[-0.011087718],[-0.0031280508],[-0.00311736],[-0.003131182],[-0.0035267863],[-0.004009139],[-0.0044690953],[-0.004855515]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.23484495],[-3.458155],[-0.65061724],[-0.26108137],[3.8761656],[-0.41541365],[0.45187888]],"dense_1_W":[[0.13635573,1.1536281,0.06798237,-0.046843782,-0.7127543,-0.34835252,-0.47236907,1.0148009,0.20753199,0.7614391,-0.2116509,-0.045529384,-0.20713837,0.0848377,0.30062005,0.092873566,-0.0018172141,-0.17572787],[-2.305817,-0.5387374,-0.45938638,0.036208823,-0.68773305,-0.26441213,-0.03711056,0.6739384,0.16898149,0.41130275,-0.22770037,0.059460163,0.27309912,-0.30170524,-0.100190274,-0.057042886,-0.05511625,0.14404908],[0.63851106,-0.9484218,0.003824309,-0.14493565,-0.7270558,-0.53677094,1.2788634,-0.3673263,-0.13816923,0.1536996,-0.069223404,-0.018855695,-0.37567106,0.52541614,0.15179054,0.270581,-0.040576197,-0.019753123],[0.4546859,1.1357512,-0.019132193,-0.38276812,0.8006601,-0.15111838,-0.71221024,0.23249602,0.03264209,-0.17714578,0.1318619,0.3071488,0.18388422,-0.13612886,-0.14823768,-0.2395975,-0.0354379,0.12196627],[2.605286,0.015709635,-0.47207975,-0.021277286,-0.37507743,-0.6815685,-0.25641406,0.39210537,0.21238214,0.28833768,-0.13859881,0.23703852,0.10589715,-0.3116963,-0.09627983,0.015015259,-0.085346624,0.14887743],[-0.0121305175,-0.22616854,12.655966,-0.35262594,-1.4045227,-1.9047667,-2.7032876,3.181054,2.0532372,0.6247262,-0.115705006,0.5258064,-0.07909483,0.0964521,-0.10150481,0.09466132,0.0021597208,-0.16544223],[0.23776147,-1.368538,-0.08586094,0.021609895,0.6048695,0.13279381,0.2958448,-0.58526164,-0.1610705,-0.42544538,-0.23418613,-0.1616309,0.25446972,-0.15877886,-0.0019331241,-0.10039961,0.13613056,0.0012668837]],"activation":"σ"},{"dense_2_W":[[-0.5056371,0.81436396,-0.13917822,-0.80037946,-0.59604025,-0.78999925,-0.27873737],[-0.4497414,-1.368353,1.3196373,-0.49935067,3.606633,-2.2615685,2.3584154],[-0.3412033,0.6810419,0.7249957,-1.0309223,0.82100374,-0.77988064,0.18884675],[-1.7150979,3.5381098,0.28818595,-1.2821207,-1.7621884,-1.8116575,1.2756097],[-0.11904634,-0.040943474,-0.83569926,0.25027093,-0.68735474,-0.039093345,0.31753448],[0.44574547,-0.31597528,-0.31122974,0.5979627,-0.31958082,-0.2559935,-0.3460548],[0.26562846,0.13387749,-0.69484717,0.5503631,-0.6730771,0.15695189,-0.59696543],[-0.07987114,0.4068772,0.73369247,-0.9445576,0.6558189,-0.19511124,-0.1866442],[-0.34541175,0.575807,0.13408744,-0.8944516,0.82263863,0.15363207,-0.2057351],[0.66298026,-0.7701199,-0.43378943,0.8820758,0.25864363,0.56878936,0.017015105],[0.4665641,-0.28459665,-0.6549732,0.49505192,-0.8118166,0.046624012,0.20086582],[0.72007984,-0.114670254,0.08311235,0.5432469,0.23292236,-0.13743235,-0.4399662],[0.14168906,0.18236077,0.5422965,-0.1936209,0.08167626,-0.34699216,0.42852318]],"activation":"σ","dense_2_b":[[-0.48524407],[-0.064743735],[-0.02042389],[-0.4295334],[-0.20415938],[0.09099535],[-0.01917629],[-0.030794926],[-0.05813007],[0.08901565],[-0.24796419],[0.112134784],[-0.10460872]]},{"dense_3_W":[[-0.16837993,-0.5737468,0.17649585,-0.49820793,0.524844,0.03699279,0.624474,0.245737,-0.32824486,-0.37557223,0.74005604,0.007622024,0.034378406],[0.18686184,0.20867407,0.27604485,0.8802843,-0.53500175,-0.41362065,-0.5105349,0.40075368,0.5311374,-0.4655133,-0.5392229,-0.6545931,0.42653474],[-0.17580743,0.79863507,0.15938231,0.04163453,0.37848914,-0.17208116,-0.41934988,0.29429907,-0.18246712,-0.33918083,0.23200992,-0.08154047,0.22350831]],"activation":"identity","dense_3_b":[[0.100435525],[-0.05763998],[-0.07539215]]},{"dense_4_W":[[0.063197866,-0.89677685,-0.6206098]],"dense_4_b":[[0.059508733]],"activation":"identity"}]} \ No newline at end of file +{"input_std":[[9.668097],[1.5244726],[1.2700657],[0.03216253],[1.6078212],[1.5848233],[1.5577372],[1.3927742],[1.2935301],[1.1931615],[1.1020583],[0.032136116],[0.03217024],[0.032196537],[0.03225218],[0.032214258],[0.032031752],[0.03179372]],"model_test_loss":0.018995385617017746,"input_size":18,"current_date_and_time":"2025-05-15_14-47-45","input_mean":[[18.09652],[-0.017798662],[0.027145168],[-0.0054331655],[-0.025215305],[-0.022640774],[-0.019500963],[-0.010056124],[-0.0057649272],[0.001960505],[0.0020118994],[-0.005499858],[-0.005477372],[-0.005444631],[-0.0053683305],[-0.005257134],[-0.005035867],[-0.0050971555]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.016405884],[1.4187009],[-0.30671495],[-1.4047697],[-0.20383339],[-0.3632745],[-0.028944347]],"dense_1_W":[[0.13070685,-0.6662394,-1.0739188,-0.41523784,0.019285621,-0.5666617,0.02941118,0.2413377,0.11430891,-0.15557496,-0.36541316,0.44118378,0.038414165,0.117383294,-0.026998837,-0.3802126,-0.23443018,0.43427357],[0.5493235,0.7341044,0.30259728,-0.09170222,-0.066015296,0.41798133,-0.062179696,-0.1925674,-0.15322368,0.017662844,0.21162434,-0.12112619,-0.027021965,0.05653779,0.14749303,0.28017008,-0.15880422,-0.07834965],[1.3052936,-0.038109165,1.2192534,-0.18676366,0.21888737,0.45998427,0.94506985,-0.87686205,0.044812016,-0.07512292,0.69492793,-0.59623814,0.3278255,0.39913544,0.15354112,0.04995451,-0.031020898,-0.10582342],[-0.4683151,1.0002598,0.29120648,-0.05860625,0.010191997,0.17896307,-0.3321235,0.19332078,-0.44497126,0.09236495,0.17685813,0.022076255,-0.23972619,0.11622197,0.11574386,0.1640551,0.028836682,-0.14775941],[1.2240227,0.5504716,-1.161672,0.10151114,-0.6311718,-0.4365897,-0.63896364,0.4033335,0.012773022,0.025944846,-0.62420815,0.05751297,0.043608528,-0.13193272,-0.33345297,0.18925929,0.0925279,-0.03600548],[-0.0033800902,-0.41361037,-8.50345,0.27523437,2.0881453,2.3587928,2.1091182,-2.467406,-1.9167688,-0.8961217,-0.22510983,0.037862107,-0.23643681,0.03247474,0.067485854,0.04660773,-0.2583531,0.077512406],[0.0035197088,-0.43985325,0.07051937,0.38219255,-0.67769414,-0.29911998,1.0818627,-0.6217103,-0.5443828,0.22882973,0.013560748,-0.29820752,0.11540977,-0.40309906,-0.00034299958,0.69976795,0.13301164,-0.32934943]],"activation":"σ"},{"dense_2_W":[[-0.014842439,-0.3306524,0.254514,-0.6639507,-0.534733,0.07840164,0.2324318],[-0.15334646,-0.290343,-1.047474,0.41780674,0.04612693,-0.73001504,-0.3465528],[-0.6260714,-0.5115335,-0.71161246,0.4046027,-1.2324069,-1.2851475,-0.16620061],[-0.05566019,0.48536706,-0.42460826,0.83332616,0.47045597,-0.061004266,-1.1440438],[0.42156544,-0.6722497,-0.10824958,-0.32994938,0.31952205,-0.46266714,-0.07230821],[-0.38416666,-0.7271572,-0.39645803,-0.4259647,-0.24740903,-0.17667961,-0.10970643],[0.19652602,0.026280575,-0.1651507,-0.38475782,-0.5457258,-0.1882665,0.82107437],[-0.08976335,0.35238677,0.25231764,0.004611504,-0.5936927,-0.29342756,-0.22477138],[0.25490662,-0.4851788,-0.07538396,-0.36808714,-0.05157315,-0.2439695,0.9720866],[0.48479185,-0.68759876,0.42557424,-0.56957704,-0.32759178,-0.3047872,0.7597776],[0.4211342,-1.4932247,-0.66635305,-0.10591562,-0.9298172,1.04872,0.32208702],[-0.2918295,0.63893354,0.044817235,0.87641054,0.38387123,-0.48429132,-0.8803729],[-0.60936576,-0.29061803,-0.94329685,0.6586833,0.15280105,-0.8124564,-0.538523]],"activation":"σ","dense_2_b":[[-0.009386154],[-0.25074136],[0.02986496],[-0.028872054],[-0.06481484],[-0.2976481],[-0.072934344],[-0.117011935],[0.028236326],[-0.009000545],[-0.42297846],[0.030614687],[-0.105583444]]},{"dense_3_W":[[-0.035136532,-0.27008098,-0.5048698,-0.5295355,0.29823285,0.5058221,-0.09186966,0.26433602,0.50751793,0.49806535,0.8154631,-0.5854975,-0.525581],[0.08374179,0.16962804,0.2263017,0.5973136,0.2815238,-0.0505521,0.26001385,0.36577544,-0.68805265,-0.8057493,-0.42594707,0.633128,0.08724391],[0.5107981,0.064214274,-0.061156582,-0.33331737,0.07700428,-0.40398338,0.3673148,-0.42669702,0.38095382,0.33056983,-0.3025643,-0.58125204,-0.3484819]],"activation":"identity","dense_3_b":[[0.01880667],[-0.04986152],[0.030190725]]},{"dense_4_W":[[-1.0120764,0.477425,-1.0690569]],"dense_4_b":[[-0.027314244]],"activation":"identity"}]} \ No newline at end of file diff --git a/frogpilot/assets/other_images/experimental_mode_icon.gif b/frogpilot/assets/other_images/experimental_mode_icon.gif index 047888a..f7ace74 100644 Binary files a/frogpilot/assets/other_images/experimental_mode_icon.gif and b/frogpilot/assets/other_images/experimental_mode_icon.gif differ diff --git a/frogpilot/assets/other_images/weather_clear_day.gif b/frogpilot/assets/other_images/weather_clear_day.gif new file mode 100644 index 0000000..b7b0435 Binary files /dev/null and b/frogpilot/assets/other_images/weather_clear_day.gif differ diff --git a/frogpilot/assets/other_images/weather_clear_night.gif b/frogpilot/assets/other_images/weather_clear_night.gif new file mode 100644 index 0000000..81b610a Binary files /dev/null and b/frogpilot/assets/other_images/weather_clear_night.gif differ diff --git a/frogpilot/assets/other_images/weather_snow.gif b/frogpilot/assets/other_images/weather_snow.gif new file mode 100644 index 0000000..ce17b0c Binary files /dev/null and b/frogpilot/assets/other_images/weather_snow.gif differ diff --git a/frogpilot/assets/other_images/weather_thunder.gif b/frogpilot/assets/other_images/weather_thunder.gif new file mode 100644 index 0000000..965474f Binary files /dev/null and b/frogpilot/assets/other_images/weather_thunder.gif differ diff --git a/frogpilot/common/frogpilot_utilities.py b/frogpilot/common/frogpilot_utilities.py index 3670ff2..0e1548f 100644 --- a/frogpilot/common/frogpilot_utilities.py +++ b/frogpilot/common/frogpilot_utilities.py @@ -216,6 +216,8 @@ def is_url_pingable(url): if response.status_code in (405, 501): response = requests.get(url, headers=headers, timeout=10, allow_redirects=True, stream=True) return response.ok + except (requests.exceptions.ConnectionError, requests.exceptions.SSLError): + return False except requests.exceptions.RequestException as error: print(f"{error.__class__.__name__} while pinging {url}: {error}") return False @@ -337,12 +339,12 @@ def update_openpilot(): if params.get("UpdaterState", encoding="utf-8") != "idle": return - while params.get_bool("IsOnroad") or params_memory.get_bool("UpdateSpeedLimits") or running_threads.get("lock_doors", threading.Thread()).is_alive(): - time.sleep(60) - if not update_available(): return + while params.get_bool("IsOnroad") or params_memory.get_bool("UpdateSpeedLimits") or running_threads.get("lock_doors", threading.Thread()).is_alive(): + time.sleep(60) + while True: if not update_available(): break diff --git a/frogpilot/common/frogpilot_variables.py b/frogpilot/common/frogpilot_variables.py index 6329b5d..9b5004a 100644 --- a/frogpilot/common/frogpilot_variables.py +++ b/frogpilot/common/frogpilot_variables.py @@ -3,6 +3,7 @@ import json import numpy as np import os import random +import tomllib from functools import cache from pathlib import Path @@ -15,11 +16,13 @@ from openpilot.common.params import Params from openpilot.selfdrive.car import gen_empty_fingerprint from openpilot.selfdrive.car.car_helpers import interfaces from openpilot.selfdrive.car.gm.values import GMFlags -from openpilot.selfdrive.car.interfaces import CarInterfaceBase +from openpilot.selfdrive.car.interfaces import TORQUE_SUBSTITUTE_PATH, CarInterfaceBase from openpilot.selfdrive.car.mock.interface import CarInterface from openpilot.selfdrive.car.mock.values import CAR as MOCK +from openpilot.selfdrive.car.subaru.values import SubaruFlags from openpilot.selfdrive.car.toyota.values import ToyotaFlags, ToyotaFrogPilotFlags from openpilot.selfdrive.controls.lib.desire_helper import LANE_CHANGE_SPEED_MIN +from openpilot.selfdrive.controls.lib.latcontrol_torque import KP from openpilot.selfdrive.modeld.constants import ModelConstants from openpilot.system.hardware import HARDWARE from openpilot.system.hardware.power_monitoring import VBATT_PAUSE_CHARGING @@ -102,13 +105,28 @@ TINYGRAD_FILES = [ @cache def get_nnff_model_files(): - model_dir = Path(NNFF_MODELS_PATH) - return [file.stem for file in model_dir.iterdir() if file.is_file()] + return [file.stem for file in NNFF_MODELS_PATH.iterdir() if file.is_file()] + +@cache +def get_nnff_substitutes(): + substitutes = {} + with open(TORQUE_SUBSTITUTE_PATH, "rb") as f: + substitutes_data = tomllib.load(f) + substitutes = {key: value for key, value in substitutes_data.items()} + return substitutes def nnff_supported(car_fingerprint): - for file in get_nnff_model_files(): - if file.startswith(car_fingerprint): - return True + model_files = get_nnff_model_files() + substitutes = get_nnff_substitutes() + + fingerprints_to_check = [car_fingerprint] + if car_fingerprint in substitutes: + fingerprints_to_check.append(substitutes[car_fingerprint]) + + for fingerprint in fingerprints_to_check: + for file in model_files: + if file.startswith(fingerprint): + return True return False @@ -160,7 +178,7 @@ frogpilot_default_params: list[tuple[str, str | bytes, int, str]] = [ ("CECurves", "0", 1, "0"), ("CECurvesLead", "0", 1, "0"), ("CELead", "0", 1, "0"), - ("CEModelStopTime", str(PLANNER_TIME - 2), 2, "0"), + ("CEModelStopTime", str(PLANNER_TIME - 2), 3, "0"), ("CENavigation", "1", 2, "0"), ("CENavigationIntersections", "0", 2, "0"), ("CENavigationLead", "1", 2, "0"), @@ -170,6 +188,7 @@ frogpilot_default_params: list[tuple[str, str | bytes, int, str]] = [ ("CESlowerLead", "0", 1, "0"), ("CESpeed", "0", 1, "0"), ("CESpeedLead", "0", 1, "0"), + ("CEStopLights", "1", 1, "0"), ("CEStoppedLead", "0", 1, "0"), ("ClusterOffset", "1.015", 2, "1.015"), ("Compass", "0", 1, "0"), @@ -241,9 +260,21 @@ frogpilot_default_params: list[tuple[str, str | bytes, int, str]] = [ ("HideSpeedLimit", "0", 2, "0"), ("HigherBitrate", "0", 2, "0"), ("HolidayThemes", "1", 0, "0"), + ("HondaAltTune", "0", 2, "0"), + ("HondaLowSpeedPedal", "0", 2, "0"), + ("HondaMaxBrake", "0", 2, "0"), ("HumanAcceleration", "1", 2, "0"), ("HumanFollowing", "1", 2, "0"), + ("HumanLaneChanges", "1", 2, "0"), ("IncreasedStoppedDistance", "0", 1, "0"), + ("IncreaseFollowingLowVisibility", "0", 2, "0"), + ("IncreaseFollowingRain", "0", 2, "0"), + ("IncreaseFollowingRainStorm", "0", 2, "0"), + ("IncreaseFollowingSnow", "0", 2, "0"), + ("IncreasedStoppedDistanceLowVisibility", "0", 2, "0"), + ("IncreasedStoppedDistanceRain", "0", 2, "0"), + ("IncreasedStoppedDistanceRainStorm", "0", 2, "0"), + ("IncreasedStoppedDistanceSnow", "0", 2, "0"), ("IncreaseThermalLimits", "0", 2, "0"), ("IsLdwEnabled", "0", 0, "0"), ("IsMetric", "0", 0, "0"), @@ -320,6 +351,14 @@ frogpilot_default_params: list[tuple[str, str | bytes, int, str]] = [ ("RandomEvents", "0", 1, "0"), ("RandomThemes", "0", 1, "0"), ("RecordFront", "0", 0, "0"), + ("ReduceAccelerationLowVisibility", "0", 2, "0"), + ("ReduceAccelerationRain", "0", 2, "0"), + ("ReduceAccelerationRainStorm", "0", 2, "0"), + ("ReduceAccelerationSnow", "0", 2, "0"), + ("ReduceLateralAccelerationLowVisibility", "0", 2, "0"), + ("ReduceLateralAccelerationRain", "0", 2, "0"), + ("ReduceLateralAccelerationRainStorm", "0", 2, "0"), + ("ReduceLateralAccelerationSnow", "0", 2, "0"), ("RefuseVolume", "101", 2, "101"), ("RelaxedFollow", "1.75", 2, "1.75"), ("RelaxedJerkAcceleration", "100", 3, "100"), @@ -404,6 +443,7 @@ frogpilot_default_params: list[tuple[str, str | bytes, int, str]] = [ ("StoppingDecelRate", "", 3, ""), ("StoppingDecelRateStock", "", 3, ""), ("StoppedTimer", "0", 1, "0"), + ("SubaruSNG", "1", 2, "0"), ("TacoTune", "0", 2, "0"), ("TacoTuneHacks", "0", 2, "0"), ("TetheringEnabled", "0", 0, "0"), @@ -422,6 +462,7 @@ frogpilot_default_params: list[tuple[str, str | bytes, int, str]] = [ ("TurnDesires", "0", 2, "0"), ("UnlimitedLength", "1", 2, "0"), ("UnlockDoors", "1", 0, "0"), + ("UpdatedToggles", "1", 0, "0"), ("UpdaterAvailableBranches", "", 0, ""), ("UseKonikServer", "0", 2, "0"), ("UseSI", "1", 3, "1"), @@ -434,6 +475,8 @@ frogpilot_default_params: list[tuple[str, str | bytes, int, str]] = [ ("VoltSNG", "0", 2, "0"), ("WarningImmediateVolume", "101", 2, "101"), ("WarningSoftVolume", "101", 2, "101"), + ("WeatherPresets", "0", 2, "0"), + ("WeatherToken", "", 2, ""), ("WheelIcon", "frog", 0, "stock"), ("WheelSpeed", "0", 2, "0") ] @@ -556,6 +599,7 @@ class FrogPilotVariables: toggle.has_sdsu = toggle.car_make == "toyota" and bool(CP.flags & ToyotaFlags.SMART_DSU.value) has_sng = CP.autoResumeSng toggle.has_zss = toggle.car_make == "toyota" and bool(FPCP.fpFlags & ToyotaFrogPilotFlags.ZSS.value) + honda_nidec = CP.safetyConfigs[0].safetyModel == SafetyModel.hondaNidec is_angle_car = CP.steerControlType == car.CarParams.SteerControlType.angle latAccelFactor = CP.lateralTuning.torque.latAccelFactor longitudinalActuatorDelay = CP.longitudinalActuatorDelay @@ -564,7 +608,7 @@ class FrogPilotVariables: startAccel = CP.startAccel stopAccel = CP.stopAccel steerActuatorDelay = CP.steerActuatorDelay - steerKp = CP.lateralTuning.torque.kp + steerKp = CP.lateralTuning.pid.kp if CP.lateralTuning.which() == "pid" else KP steerRatio = CP.steerRatio toggle.stoppingDecelRate = CP.stoppingDecelRate taco_hacks_allowed = CP.safetyConfigs[0].safetyModel == SafetyModel.hyundaiCanfd @@ -605,7 +649,7 @@ class FrogPilotVariables: toggle.steerRatio = np.clip(params.get_float("SteerRatio"), steerRatio * 0.5, steerRatio * 1.5) if advanced_lateral_tuning and tuning_level >= level["SteerRatio"] else steerRatio toggle.use_custom_steerRatio = bool(round(toggle.steerRatio, 2) != round(steerRatio, 2)) and not toggle.force_auto_tune or toggle.force_auto_tune_off - advanced_longitudinal_tuning = params.get_bool("AdvancedLongitudinalTune") if tuning_level >= level["AdvancedLongitudinalTune"] else default.get_bool("AdvancedLongitudinalTune") + advanced_longitudinal_tuning = toggle.openpilot_longitudinal and (params.get_bool("AdvancedLongitudinalTune") if tuning_level >= level["AdvancedLongitudinalTune"] else default.get_bool("AdvancedLongitudinalTune")) toggle.longitudinalActuatorDelay = np.clip(params.get_float("LongitudinalActuatorDelay"), 0, 1) if advanced_longitudinal_tuning and tuning_level >= level["LongitudinalActuatorDelay"] else longitudinalActuatorDelay toggle.max_desired_acceleration = np.clip(params.get_float("MaxDesiredAcceleration"), 0.1, 4.0) if advanced_longitudinal_tuning and tuning_level >= level["MaxDesiredAcceleration"] else default.get_float("MaxDesiredAcceleration") toggle.startAccel = np.clip(params.get_float("StartAccel"), 0, 4) if advanced_longitudinal_tuning and tuning_level >= level["StartAccel"] else startAccel @@ -647,7 +691,10 @@ class FrogPilotVariables: toggle.conditional_navigation_intersections = toggle.conditional_navigation and (params.get_bool("CENavigationIntersections") if tuning_level >= level["CENavigationIntersections"] else default.get_bool("CENavigationIntersections")) toggle.conditional_navigation_lead = toggle.conditional_navigation and (params.get_bool("CENavigationLead") if tuning_level >= level["CENavigationLead"] else default.get_bool("CENavigationLead")) toggle.conditional_navigation_turns = toggle.conditional_navigation and (params.get_bool("CENavigationTurns") if tuning_level >= level["CENavigationTurns"] else default.get_bool("CENavigationTurns")) - toggle.conditional_model_stop_time = params.get_int("CEModelStopTime") if toggle.conditional_experimental_mode and tuning_level >= level["CEModelStopTime"] else default.get_int("CEModelStopTime") + if tuning_level >= level["CEModelStopTime"]: + toggle.conditional_model_stop_time = params.get_int("CEModelStopTime") if toggle.conditional_experimental_mode else default.get_int("CEModelStopTime") + else: + toggle.conditional_model_stop_time = default.get_int("CEModelStopTime") if toggle.conditional_experimental_mode and params.get_bool("CEStopLights") else 0 toggle.conditional_signal = params.get_int("CESignalSpeed") * speed_conversion if toggle.conditional_experimental_mode and tuning_level >= level["CESignalSpeed"] else default.get_int("CESignalSpeed") * CV.MPH_TO_MS toggle.conditional_signal_lane_detection = toggle.conditional_signal != 0 and (params.get_bool("CESignalLaneDetection") if tuning_level >= level["CESignalLaneDetection"] else default.get_bool("CESignalLaneDetection")) toggle.cem_status = toggle.conditional_experimental_mode and (params.get_bool("ShowCEMStatus") if tuning_level >= level["ShowCEMStatus"] else default.get_bool("ShowCEMStatus")) or toggle.debug_mode @@ -785,6 +832,10 @@ class FrogPilotVariables: toggle.holiday_themes = params.get_bool("HolidayThemes") if tuning_level >= level["HolidayThemes"] else default.get_bool("HolidayThemes") toggle.current_holiday_theme = holiday_theme if toggle.holiday_themes else "stock" + toggle.honda_alt_Tune = toggle.openpilot_longitudinal and toggle.car_make == "honda" and honda_nidec and (params.get_bool("HondaAltTune") if tuning_level >= level["HondaAltTune"] else default.get_bool("HondaAltTune")) + toggle.honda_low_speed_pedal = toggle.openpilot_longitudinal and toggle.car_make == "honda" and toggle.has_pedal and (params.get_bool("HondaLowSpeedPedal") if tuning_level >= level["HondaLowSpeedPedal"] else default.get_bool("HondaLowSpeedPedal")) + toggle.honda_nidec_max_brake = toggle.openpilot_longitudinal and toggle.car_make == "honda" and honda_nidec and (params.get_bool("HondaMaxBrake") if tuning_level >= level["HondaMaxBrake"] else default.get_bool("HondaMaxBrake")) + toggle.lane_changes = params.get_bool("LaneChanges") if tuning_level >= level["LaneChanges"] else default.get_bool("LaneChanges") toggle.lane_change_delay = params.get_float("LaneChangeTime") if toggle.lane_changes and tuning_level >= level["LaneChangeTime"] else default.get_float("LaneChangeTime") toggle.lane_detection_width = params.get_float("LaneDetectionWidth") * distance_conversion if toggle.lane_changes and tuning_level >= level["LaneDetectionWidth"] else default.get_float("LaneDetectionWidth") * CV.FOOT_TO_METER @@ -817,6 +868,7 @@ class FrogPilotVariables: toggle.deceleration_profile = params.get_int("DecelerationProfile") if longitudinal_tuning and tuning_level >= level["DecelerationProfile"] else default.get_int("DecelerationProfile") toggle.human_acceleration = longitudinal_tuning and (params.get_bool("HumanAcceleration") if tuning_level >= level["HumanAcceleration"] else default.get_bool("HumanAcceleration")) toggle.human_following = longitudinal_tuning and (params.get_bool("HumanFollowing") if tuning_level >= level["HumanFollowing"] else default.get_bool("HumanFollowing")) + toggle.human_lane_changes = longitudinal_tuning and has_radar and (params.get_bool("HumanLaneChanges") if tuning_level >= level["HumanLaneChanges"] else default.get_bool("HumanLaneChanges")) toggle.lead_detection_probability = np.clip(params.get_int("LeadDetectionThreshold") / 100, 0.25, 0.50) if longitudinal_tuning and tuning_level >= level["LeadDetectionThreshold"] else default.get_int("LeadDetectionThreshold") / 100 toggle.taco_tune = longitudinal_tuning and (params.get_bool("TacoTune") if tuning_level >= level["TacoTune"] else default.get_bool("TacoTune")) @@ -882,7 +934,7 @@ class FrogPilotVariables: toggle.pause_lateral_below_speed = params.get_int("PauseLateralSpeed") * speed_conversion if quality_of_life_lateral and tuning_level >= level["PauseLateralSpeed"] else default.get_int("PauseLateralSpeed") * CV.MPH_TO_MS toggle.pause_lateral_below_signal = toggle.pause_lateral_below_speed != 0 and (params.get_bool("PauseLateralOnSignal") if tuning_level >= level["PauseLateralOnSignal"] else default.get_bool("PauseLateralOnSignal")) - quality_of_life_longitudinal = params.get_bool("QOLLongitudinal") if tuning_level >= level["QOLLongitudinal"] else default.get_bool("QOLLongitudinal") + quality_of_life_longitudinal = toggle.openpilot_longitudinal and (params.get_bool("QOLLongitudinal") if tuning_level >= level["QOLLongitudinal"] else default.get_bool("QOLLongitudinal")) toggle.cruise_increase = params.get_int("CustomCruise") if quality_of_life_longitudinal and not pcm_cruise and tuning_level >= level["CustomCruise"] else default.get_int("CustomCruise") toggle.cruise_increase_long = params.get_int("CustomCruiseLong") if quality_of_life_longitudinal and not pcm_cruise and tuning_level >= level["CustomCruiseLong"] else default.get_int("CustomCruiseLong") toggle.force_stops = quality_of_life_longitudinal and (params.get_bool("ForceStops") if tuning_level >= level["ForceStops"] else default.get_bool("ForceStops")) @@ -892,6 +944,23 @@ class FrogPilotVariables: toggle.map_deceleration = map_gears and (params.get_bool("MapDeceleration") if tuning_level >= level["MapDeceleration"] else default.get_bool("MapDeceleration")) toggle.reverse_cruise_increase = quality_of_life_longitudinal and toggle.car_make == "toyota" and pcm_cruise and (params.get_bool("ReverseCruise") if tuning_level >= level["ReverseCruise"] else default.get_bool("ReverseCruise")) toggle.set_speed_offset = params.get_int("SetSpeedOffset") * (1 if toggle.is_metric else CV.MPH_TO_KPH) if quality_of_life_longitudinal and not pcm_cruise and tuning_level >= level["SetSpeedOffset"] else default.get_int("SetSpeedOffset") * CV.MPH_TO_KPH + toggle.weather_presets = quality_of_life_longitudinal and (params.get_bool("WeatherPresets") if tuning_level >= level["WeatherPresets"] else default.get_bool("WeatherPresets")) + toggle.increase_following_distance_low_visibility = params.get_float("IncreaseFollowingLowVisibility") if toggle.weather_presets and tuning_level >= level["IncreaseFollowingLowVisibility"] else default.get_float("IncreaseFollowingLowVisibility") + toggle.increase_following_distance_rain = params.get_float("IncreaseFollowingRain") if toggle.weather_presets and tuning_level >= level["IncreaseFollowingRain"] else default.get_float("IncreaseFollowingRain") + toggle.increase_following_distance_rain_storm = params.get_float("IncreaseFollowingRainStorm") if toggle.weather_presets and tuning_level >= level["IncreaseFollowingRainStorm"] else default.get_float("IncreaseFollowingRainStorm") + toggle.increase_following_distance_snow = params.get_float("IncreaseFollowingSnow") if toggle.weather_presets and tuning_level >= level["IncreaseFollowingSnow"] else default.get_float("IncreaseFollowingSnow") + toggle.increase_stopped_distance_low_visibility = params.get_int("IncreasedStoppedDistanceLowVisibility") * distance_conversion if toggle.weather_presets and tuning_level >= level["IncreasedStoppedDistanceLowVisibility"] else default.get_int("IncreasedStoppedDistanceLowVisibility") * CV.FOOT_TO_METER + toggle.increase_stopped_distance_rain = params.get_int("IncreasedStoppedDistanceRain") * distance_conversion if toggle.weather_presets and tuning_level >= level["IncreasedStoppedDistanceRain"] else default.get_int("IncreasedStoppedDistanceRain") * CV.FOOT_TO_METER + toggle.increase_stopped_distance_rain_storm = params.get_int("IncreasedStoppedDistanceRainStorm") * distance_conversion if toggle.weather_presets and tuning_level >= level["IncreasedStoppedDistanceRainStorm"] else default.get_int("IncreasedStoppedDistanceRainStorm") * CV.FOOT_TO_METER + toggle.increase_stopped_distance_snow = params.get_int("IncreasedStoppedDistanceSnow") * distance_conversion if toggle.weather_presets and tuning_level >= level["IncreasedStoppedDistanceSnow"] else default.get_int("IncreasedStoppedDistanceSnow") * CV.FOOT_TO_METER + toggle.reduce_acceleration_low_visibility = (params.get_int("ReduceAccelerationLowVisibility") if toggle.weather_presets and tuning_level >= level["ReduceAccelerationLowVisibility"] else default.get_int("ReduceAccelerationLowVisibility")) / 100 + toggle.reduce_acceleration_rain = (params.get_int("ReduceAccelerationRain") if toggle.weather_presets and tuning_level >= level["ReduceAccelerationRain"] else default.get_int("ReduceAccelerationRain")) / 100 + toggle.reduce_acceleration_rain_storm = (params.get_int("ReduceAccelerationRainStorm") if toggle.weather_presets and tuning_level >= level["ReduceAccelerationRainStorm"] else default.get_int("ReduceAccelerationRainStorm")) / 100 + toggle.reduce_acceleration_snow = (params.get_int("ReduceAccelerationSnow") if toggle.weather_presets and tuning_level >= level["ReduceAccelerationSnow"] else default.get_int("ReduceAccelerationSnow")) / 100 + toggle.reduce_lateral_acceleration_low_visibility = (params.get_int("ReduceLateralAccelerationLowVisibility") if toggle.weather_presets and tuning_level >= level["ReduceLateralAccelerationLowVisibility"] else default.get_int("ReduceLateralAccelerationLowVisibility")) / 100 + toggle.reduce_lateral_acceleration_rain = (params.get_int("ReduceLateralAccelerationRain") if toggle.weather_presets and tuning_level >= level["ReduceLateralAccelerationRain"] else default.get_int("ReduceLateralAccelerationRain")) / 100 + toggle.reduce_lateral_acceleration_rain_storm = (params.get_int("ReduceLateralAccelerationRainStorm") if toggle.weather_presets and tuning_level >= level["ReduceLateralAccelerationRainStorm"] else default.get_int("ReduceLateralAccelerationRainStorm")) / 100 + toggle.reduce_lateral_acceleration_snow = (params.get_int("ReduceLateralAccelerationSnow") if toggle.weather_presets and tuning_level >= level["ReduceLateralAccelerationSnow"] else default.get_int("ReduceLateralAccelerationSnow")) / 100 quality_of_life_visuals = params.get_bool("QOLVisuals") if tuning_level >= level["QOLVisuals"] else default.get_bool("QOLVisuals") toggle.camera_view = params.get_int("CameraView") if quality_of_life_visuals and tuning_level >= level["CameraView"] else default.get_int("CameraView") @@ -949,6 +1018,8 @@ class FrogPilotVariables: toggle.startup_alert_top = params.get("StartupMessageTop", encoding="utf-8") if tuning_level >= level["StartupMessageTop"] else default.get("StartupMessageTop", encoding="utf-8") toggle.startup_alert_bottom = params.get("StartupMessageBottom", encoding="utf-8") if tuning_level >= level["StartupMessageBottom"] else default.get("StartupMessageBottom", encoding="utf-8") + toggle.subaru_sng = toggle.car_make == "subaru" and not (CP.flags & SubaruFlags.GLOBAL_GEN2 or CP.flags & SubaruFlags.HYBRID) and (params.get_bool("SubaruSNG") if tuning_level >= level["SubaruSNG"] else default.get_bool("SubaruSNG")) + toggle.taco_tune_hacks = taco_hacks_allowed and (params.get_bool("TacoTuneHacks") if tuning_level >= level["TacoTuneHacks"] else default.get_bool("TacoTuneHacks")) toggle.tethering_config = params.get_int("TetheringEnabled") diff --git a/frogpilot/controls/frogpilot_card.py b/frogpilot/controls/frogpilot_card.py index d932848..a5a437a 100644 --- a/frogpilot/controls/frogpilot_card.py +++ b/frogpilot/controls/frogpilot_card.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 from cereal import car, custom from openpilot.selfdrive.controls.lib.drive_helpers import CRUISE_LONG_PRESS -from openpilot.selfdrive.controls.lib.events import EventName +from openpilot.selfdrive.controls.lib.events import ET from openpilot.frogpilot.common.frogpilot_variables import NON_DRIVING_GEARS, params, params_memory @@ -98,8 +98,8 @@ class FrogPilotCard: self.always_on_lateral_enabled &= carState.gearShifter not in NON_DRIVING_GEARS self.always_on_lateral_enabled &= sm["frogpilotPlan"].lateralCheck self.always_on_lateral_enabled &= sm["liveCalibration"].calPerc >= 1 + self.always_on_lateral_enabled &= sm["controlsState"].alertType != ET.IMMEDIATE_DISABLE or frogpilot_toggles.frogs_go_moo self.always_on_lateral_enabled &= not (carState.brakePressed and carState.vEgo < self.car.frogpilot_toggles.always_on_lateral_pause_speed) or carState.standstill - self.always_on_lateral_enabled &= not any(event.immediateDisable for events in (sm["onroadEvents"], sm["frogpilotOnroadEvents"]) for event in events if event.name != EventName.speedTooLow) or self.car.frogpilot_toggles.frogs_go_moo if sm.updated["frogpilotPlan"] or any(be.type in (ButtonType.accelCruise, ButtonType.resumeCruise) for be in carState.buttonEvents): self.accel_pressed = any(be.type in (ButtonType.accelCruise, ButtonType.resumeCruise) for be in carState.buttonEvents) diff --git a/frogpilot/controls/frogpilot_planner.py b/frogpilot/controls/frogpilot_planner.py index 841b669..29266a0 100644 --- a/frogpilot/controls/frogpilot_planner.py +++ b/frogpilot/controls/frogpilot_planner.py @@ -18,6 +18,7 @@ from openpilot.frogpilot.controls.lib.frogpilot_acceleration import FrogPilotAcc from openpilot.frogpilot.controls.lib.frogpilot_events import FrogPilotEvents from openpilot.frogpilot.controls.lib.frogpilot_following import FrogPilotFollowing from openpilot.frogpilot.controls.lib.frogpilot_vcruise import FrogPilotVCruise +from openpilot.frogpilot.controls.lib.weather_checker import WeatherChecker class FrogPilotPlanner: def __init__(self, error_log, ThemeManager): @@ -26,6 +27,7 @@ class FrogPilotPlanner: self.frogpilot_events = FrogPilotEvents(self, error_log, ThemeManager) self.frogpilot_following = FrogPilotFollowing(self) self.frogpilot_vcruise = FrogPilotVCruise(self) + self.frogpilot_weather = WeatherChecker() with car.CarParams.from_bytes(params.get("CarParams", block=True)) as msg: self.CP = msg @@ -113,6 +115,11 @@ class FrogPilotPlanner: self.v_cruise = self.frogpilot_vcruise.update(gps_position, now, time_validated, v_cruise, v_ego, sm, frogpilot_toggles) + if gps_position and time_validated and frogpilot_toggles.weather_presets: + self.frogpilot_weather.update_weather(gps_position, now, frogpilot_toggles) + else: + self.frogpilot_weather.weather_id = 0 + def update_lead_status(self): following_lead = self.lead_one.status following_lead &= self.lead_one.dRel < self.model_length + STOP_DISTANCE @@ -146,6 +153,8 @@ class FrogPilotPlanner: frogpilotPlan.frogpilotEvents = self.frogpilot_events.events.to_msg() frogpilotPlan.increasedStoppedDistance = frogpilot_toggles.increase_stopped_distance if not sm["frogpilotCarState"].trafficModeEnabled else 0 + if self.frogpilot_weather.weather_id != 0: + frogpilotPlan.increasedStoppedDistance += self.frogpilot_weather.increase_stopped_distance frogpilotPlan.laneWidthLeft = self.lane_width_left frogpilotPlan.laneWidthRight = self.lane_width_right @@ -177,4 +186,7 @@ class FrogPilotPlanner: frogpilotPlan.vCruise = self.v_cruise + frogpilotPlan.weatherDaytime = self.frogpilot_weather.is_daytime + frogpilotPlan.weatherId = self.frogpilot_weather.weather_id + pm.send("frogpilotPlan", frogpilot_plan_send) diff --git a/frogpilot/controls/lib/curve_speed_controller.py b/frogpilot/controls/lib/curve_speed_controller.py index 2feb141..ea87152 100644 --- a/frogpilot/controls/lib/curve_speed_controller.py +++ b/frogpilot/controls/lib/curve_speed_controller.py @@ -90,6 +90,8 @@ class CurveSpeedController: def update_target(self, v_ego): lateral_acceleration = self.lateral_acceleration + if self.frogpilot_planner.frogpilot_weather.weather_id != 0: + lateral_acceleration -= self.lateral_acceleration * self.frogpilot_planner.frogpilot_weather.reduce_lateral_acceleration if self.target_set: csc_speed = (lateral_acceleration / abs(self.frogpilot_planner.road_curvature))**0.5 diff --git a/frogpilot/controls/lib/frogpilot_acceleration.py b/frogpilot/controls/lib/frogpilot_acceleration.py index 6621a52..d544e5a 100644 --- a/frogpilot/controls/lib/frogpilot_acceleration.py +++ b/frogpilot/controls/lib/frogpilot_acceleration.py @@ -64,6 +64,9 @@ class FrogPilotAcceleration: self.max_accel = min(get_max_accel_low_speeds(self.max_accel, self.frogpilot_planner.v_cruise), self.max_accel) self.max_accel = min(get_max_accel_ramp_off(self.max_accel, self.frogpilot_planner.v_cruise, v_ego), self.max_accel) + if self.frogpilot_planner.frogpilot_weather.weather_id != 0: + self.max_accel -= self.max_accel * self.frogpilot_planner.frogpilot_weather.reduce_acceleration + if self.frogpilot_planner.tracking_lead: self.min_accel = ACCEL_MIN elif sm["frogpilotCarState"].forceCoast: diff --git a/frogpilot/controls/lib/frogpilot_following.py b/frogpilot/controls/lib/frogpilot_following.py index 6884290..12a4cc5 100644 --- a/frogpilot/controls/lib/frogpilot_following.py +++ b/frogpilot/controls/lib/frogpilot_following.py @@ -3,7 +3,7 @@ import numpy as np from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import COMFORT_BRAKE, STOP_DISTANCE, desired_follow_distance, get_jerk_factor, get_T_FOLLOW -from openpilot.frogpilot.common.frogpilot_variables import CITY_SPEED_LIMIT +from openpilot.frogpilot.common.frogpilot_variables import CITY_SPEED_LIMIT, MAX_T_FOLLOW TRAFFIC_MODE_BP = [0., CITY_SPEED_LIMIT] @@ -63,10 +63,14 @@ class FrogPilotFollowing: self.danger_jerk = self.base_danger_jerk self.speed_jerk = self.base_speed_jerk - self.following_lead = self.frogpilot_planner.tracking_lead and self.frogpilot_planner.lead_one.dRel < (self.t_follow + 1) * v_ego + self.following_lead = self.frogpilot_planner.tracking_lead and self.frogpilot_planner.lead_one.dRel < (self.t_follow * 2) * v_ego + + if self.frogpilot_planner.frogpilot_weather.weather_id != 0: + self.t_follow = min(self.t_follow + self.frogpilot_planner.frogpilot_weather.increase_following_distance, MAX_T_FOLLOW) if sm["controlsState"].enabled and self.frogpilot_planner.tracking_lead: - self.update_follow_values(self.frogpilot_planner.lead_one.dRel, v_ego, self.frogpilot_planner.lead_one.vLead, frogpilot_toggles) + if not sm["frogpilotCarState"].trafficModeEnabled: + self.update_follow_values(self.frogpilot_planner.lead_one.dRel, v_ego, self.frogpilot_planner.lead_one.vLead, frogpilot_toggles) self.desired_follow_distance = int(desired_follow_distance(v_ego, self.frogpilot_planner.lead_one.vLead, self.t_follow)) else: self.desired_follow_distance = 0 diff --git a/frogpilot/controls/lib/frogpilot_tracking.py b/frogpilot/controls/lib/frogpilot_tracking.py index 7a6eb13..617c1f5 100644 --- a/frogpilot/controls/lib/frogpilot_tracking.py +++ b/frogpilot/controls/lib/frogpilot_tracking.py @@ -1,14 +1,16 @@ #!/usr/bin/env python3 import json +from cereal import log from openpilot.common.conversions import Conversions as CV from openpilot.common.realtime import DT_MDL -from openpilot.selfdrive.controls.controlsd import EventName, FrogPilotEventName, State +from openpilot.selfdrive.controls.controlsd import ACTIVE_STATES, EventName, FrogPilotEventName, State from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX from openpilot.selfdrive.ui.soundd import FrogPilotAudibleAlert from openpilot.frogpilot.common.frogpilot_utilities import clean_model_name from openpilot.frogpilot.common.frogpilot_variables import params +from openpilot.frogpilot.controls.lib.weather_checker import WEATHER_CATEGORIES RANDOM_EVENTS = { FrogPilotEventName.accel30: "accel30", @@ -28,6 +30,7 @@ RANDOM_EVENTS = { class FrogPilotTracking: def __init__(self, frogpilot_planner, frogpilot_toggles): self.frogpilot_events = frogpilot_planner.frogpilot_events + self.frogpilot_weather = frogpilot_planner.frogpilot_weather self.frogpilot_stats = json.loads(params.get("FrogPilotStats") or "{}") self.frogpilot_stats.setdefault("AOLTime", self.frogpilot_stats.get("TotalAOLTime", 0)) @@ -37,6 +40,14 @@ class FrogPilotTracking: self.frogpilot_stats = {key: value for key, value in self.frogpilot_stats.items() if not key.startswith("Total")} + if "ResetStats" not in self.frogpilot_stats: + self.frogpilot_stats["Disengages"] = 0 + self.frogpilot_stats["Engages"] = 0 + self.frogpilot_stats["FrogChirps"] = 0 + self.frogpilot_stats["FrogSqueaks"] = 0 + self.frogpilot_stats["Overrides"] = 0 + self.frogpilot_stats["ResetStats"] = True + params.put("FrogPilotStats", json.dumps(self.frogpilot_stats)) self.drive_added = False @@ -48,8 +59,10 @@ class FrogPilotTracking: self.previous_events = set() self.previous_random_events = set() + self.personality_map = {v: k.capitalize() for k, v in log.LongitudinalPersonality.schema.enumerants.items()} + + self.previous_state = State.disabled self.sound = FrogPilotAudibleAlert.none - self.state = State.disabled self.model_name = clean_model_name(dict(zip(frogpilot_toggles.available_models.split(","), frogpilot_toggles.available_model_names.split(",")))[frogpilot_toggles.model]) @@ -83,6 +96,11 @@ class FrogPilotTracking: self.frogpilot_stats["LateralTime"] = self.frogpilot_stats.get("LateralTime", 0) + DT_MDL if sm["carControl"].longActive: self.frogpilot_stats["LongitudinalTime"] = self.frogpilot_stats.get("LongitudinalTime", 0) + DT_MDL + + personality_name = self.personality_map.get(sm["controlsState"].personality, "Unknown") + total_personality_times = self.frogpilot_stats.get("PersonalityTimes", {}) + total_personality_times[personality_name] = total_personality_times.get(personality_name, 0) + DT_MDL + self.frogpilot_stats["PersonalityTimes"] = total_personality_times elif sm["frogpilotCarState"].alwaysOnLateralEnabled: self.frogpilot_stats["AOLTime"] = self.frogpilot_stats.get("AOLTime", 0) + DT_MDL @@ -101,21 +119,21 @@ class FrogPilotTracking: self.distance_since_override += v_ego * DT_MDL self.frogpilot_stats["LongestDistanceWithoutOverride"] = max(self.distance_since_override, self.frogpilot_stats.get("LongestDistanceWithoutOverride", 0)) - if sm["controlsState"].state != self.state: - if sm["controlsState"].state == State.disabled: - self.frogpilot_stats["Disengages"] = self.frogpilot_stats.get("Disengages", 0) + 1 - - if frogpilot_toggles.sound_pack == "frog": - self.frogpilot_stats["FrogSqueaks"] = self.frogpilot_stats.get("FrogSqueaks", 0) + 1 - elif sm["controlsState"].state == State.enabled: + if sm["controlsState"].state != self.previous_state: + if sm["controlsState"].state in ACTIVE_STATES and self.previous_state not in ACTIVE_STATES: self.frogpilot_stats["Engages"] = self.frogpilot_stats.get("Engages", 0) + 1 - if frogpilot_toggles.sound_pack == "frog": self.frogpilot_stats["FrogChirps"] = self.frogpilot_stats.get("FrogChirps", 0) + 1 - elif sm["controlsState"].state == State.overriding: + + elif sm["controlsState"].state == State.disabled and self.previous_state in ACTIVE_STATES: + self.frogpilot_stats["Disengages"] = self.frogpilot_stats.get("Disengages", 0) + 1 + if frogpilot_toggles.sound_pack == "frog": + self.frogpilot_stats["FrogSqueaks"] = self.frogpilot_stats.get("FrogSqueaks", 0) + 1 + + if sm["controlsState"].state == State.overriding and self.previous_state != State.overriding: self.frogpilot_stats["Overrides"] = self.frogpilot_stats.get("Overrides", 0) + 1 - self.state = sm["controlsState"].state + self.previous_state = sm["controlsState"].state current_events = {event for event in self.frogpilot_events.event_names} if len(current_events) > 0: @@ -140,6 +158,30 @@ class FrogPilotTracking: self.previous_random_events = current_random_events + if self.frogpilot_weather.sunrise != 0 and self.frogpilot_weather.sunset != 0: + if self.frogpilot_weather.is_daytime: + self.frogpilot_stats["DayTime"] = self.frogpilot_stats.get("DayTime", 0) + DT_MDL + else: + self.frogpilot_stats["NightTime"] = self.frogpilot_stats.get("NightTime", 0) + DT_MDL + + weather_api_calls = self.frogpilot_stats.get("WeatherAPICalls", {}) + weather_api_calls["2.5"] = weather_api_calls.get("2.5", 0) + self.frogpilot_weather.api_25_calls + weather_api_calls["3.0"] = weather_api_calls.get("3.0", 0) + self.frogpilot_weather.api_3_calls + self.frogpilot_stats["WeatherAPICalls"] = weather_api_calls + + self.frogpilot_weather.api_25_calls = 0 + self.frogpilot_weather.api_3_calls = 0 + + suffix = "unknown" + for category in WEATHER_CATEGORIES.values(): + if any(start <= self.frogpilot_weather.weather_id <= end for start, end in category["ranges"]): + suffix = category["suffix"] + break + + weather_times = self.frogpilot_stats.get("WeatherTimes", {}) + weather_times[suffix] = weather_times.get(suffix, 0) + DT_MDL + self.frogpilot_stats["WeatherTimes"] = weather_times + if self.tracked_time > 60 and sm["carState"].standstill and self.enabled: if time_validated: current_month = now.month diff --git a/frogpilot/controls/lib/frogpilot_vcruise.py b/frogpilot/controls/lib/frogpilot_vcruise.py index c2c1b6e..707c410 100644 --- a/frogpilot/controls/lib/frogpilot_vcruise.py +++ b/frogpilot/controls/lib/frogpilot_vcruise.py @@ -58,16 +58,6 @@ class FrogPilotVCruise: self.csc_target = v_cruise - # Mike's extended lead linear braking - if self.frogpilot_planner.lead_one.vLead < v_ego > CRUISING_SPEED and sm["controlsState"].enabled and self.frogpilot_planner.tracking_lead and frogpilot_toggles.human_following: - if not self.frogpilot_planner.frogpilot_following.following_lead: - decel_rate = (v_ego - self.frogpilot_planner.lead_one.vLead)**2 / self.frogpilot_planner.lead_one.dRel - self.braking_target = max(v_ego - (decel_rate * DT_MDL), self.frogpilot_planner.lead_one.vLead + CRUISING_SPEED) - else: - self.braking_target = v_cruise - else: - self.braking_target = v_cruise - # Pfeiferj's Speed Limit Controller self.slc.frogpilot_toggles = frogpilot_toggles @@ -97,10 +87,10 @@ class FrogPilotVCruise: self.tracked_model_length = self.frogpilot_planner.model_length - targets = [self.braking_target, self.csc_target, v_cruise] + targets = [self.csc_target, v_cruise] if frogpilot_toggles.speed_limit_controller: targets.append(max(self.slc.overridden_speed, self.slc_target + self.slc_offset) - v_ego_diff) - v_cruise = min([target if target > CRUISING_SPEED else v_cruise for target in targets]) + v_cruise = min([target if target >= CRUISING_SPEED else v_cruise for target in targets]) return v_cruise diff --git a/frogpilot/controls/lib/neural_network_feedforward.py b/frogpilot/controls/lib/neural_network_feedforward.py index f4a9dff..2c36ac4 100644 --- a/frogpilot/controls/lib/neural_network_feedforward.py +++ b/frogpilot/controls/lib/neural_network_feedforward.py @@ -18,7 +18,7 @@ from openpilot.selfdrive.controls.lib.pid import PIDController from openpilot.selfdrive.controls.lib.vehicle_model import ACCELERATION_DUE_TO_GRAVITY from openpilot.selfdrive.modeld.constants import ModelConstants -from openpilot.frogpilot.common.frogpilot_variables import NNFF_MODELS_PATH, get_nnff_model_files +from openpilot.frogpilot.common.frogpilot_variables import NNFF_MODELS_PATH, get_nnff_model_files, get_nnff_substitutes # At higher speeds (25+mph) we can assume: # Lateral acceleration achieved by a specific car correlates to @@ -32,7 +32,7 @@ from openpilot.frogpilot.common.frogpilot_variables import NNFF_MODELS_PATH, get # move it at all, this is compensated for too. # dict used to rename activation functions whose names aren't valid python identifiers -ACTIVATION_FUNCTION_NAMES = {'σ': 'sigmoid'} +ACTIVATION_FUNCTION_NAMES = {"σ": "sigmoid"} LOW_SPEED_X = [0, 10, 20, 30] LOW_SPEED_Y = [12, 3, 1, 0] @@ -52,8 +52,8 @@ class FluxModel: self.layers = [] for layer_params in params["layers"]: - bias_array = np.array(layer_params[next(key for key in layer_params.keys() if key.endswith('_b'))], dtype=np.float32).T - weight_array = np.array(layer_params[next(key for key in layer_params.keys() if key.endswith('_W'))], dtype=np.float32).T + bias_array = np.array(layer_params[next(key for key in layer_params.keys() if key.endswith("_b"))], dtype=np.float32).T + weight_array = np.array(layer_params[next(key for key in layer_params.keys() if key.endswith("_W"))], dtype=np.float32).T activation = layer_params["activation"] for name, replacement in ACTIVATION_FUNCTION_NAMES.items(): @@ -126,15 +126,27 @@ def get_nn_model_path(car, eps_firmware) -> str | None: best = max(candidates, key=lambda model: similarity(model, query)) return os.path.join(NNFF_MODELS_PATH, f"{best}.json"), similarity(best, query) - def find_valid_model(*queries): - for query in queries: + def find_valid_model(*queries_with_candidates): + for query, candidate in queries_with_candidates: path, score = best_model_path(query) - if path and car in path and score >= 0.9: + if path and candidate in path and score >= 0.9: return path return None - query1 = f"{car} {eps_firmware}" if len(eps_firmware) > 3 else car - return find_valid_model(query1, car) + substitutes = get_nnff_substitutes() + sub_candidate = substitutes.get(car, car) + + candidates_to_check = [car] + if car != sub_candidate: + candidates_to_check.append(sub_candidate) + + queries = [] + for candidate in candidates_to_check: + query_with_fw = f"{candidate} {eps_firmware}" if len(eps_firmware) > 3 else candidate + queries.append((query_with_fw, candidate)) + queries.append((candidate, candidate)) + + return find_valid_model(*queries) def get_predicted_lateral_jerk(lat_accels, t_diffs): # compute finite difference between subsequent model_data.acceleration.y values @@ -162,8 +174,8 @@ class LatControlNNFF(LatControl): self.nnff_loaded = self.lat_torque_nn_model is not None self.torque_params = CP.lateralTuning.torque - self.pid = PIDController(self.torque_params.kp, self.torque_params.ki, - k_f=self.torque_params.kf, pos_limit=self.steer_max, neg_limit=-self.steer_max) + self.pid = PIDController(1.0, 0.3, k_d=0.0, + pos_limit=self.steer_max, neg_limit=-self.steer_max) self.torque_from_lateral_accel = CI.torque_from_lateral_accel() self.use_steering_angle = self.torque_params.useSteeringAngle self.steering_angle_deadzone_deg = self.torque_params.steeringAngleDeadzoneDeg @@ -336,7 +348,6 @@ class LatControlNNFF(LatControl): ff = self.torque_from_lateral_accel(gravity_adjusted_lateral_accel, self.torque_params) freeze_integrator = steer_limited_by_safety or CS.steeringPressed or CS.vEgo < 5 - self.pid._k_p = frogpilot_toggles.steerKp output_torque = self.pid.update(pid_log.error, feedforward=ff, speed=CS.vEgo, diff --git a/frogpilot/controls/lib/weather_checker.py b/frogpilot/controls/lib/weather_checker.py new file mode 100644 index 0000000..1d5bf5e --- /dev/null +++ b/frogpilot/controls/lib/weather_checker.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python3 +import os +import requests +import time + +from concurrent.futures import ThreadPoolExecutor + +from openpilot.common.conversions import Conversions as CV +from openpilot.common.params import Params + +from openpilot.frogpilot.common.frogpilot_utilities import calculate_distance_to_point, is_url_pingable + +CACHE_DISTANCE = 25 +MAX_RETRIES = 3 +RETRY_DELAY = 60 + +# Reference: https://openweathermap.org/weather-conditions +WEATHER_CATEGORIES = { + "RAIN": { + "ranges": [(300, 321), (500, 504)], + "suffix": "rain", + }, + "RAIN_STORM": { + "ranges": [(200, 232), (511, 511), (520, 531)], + "suffix": "rain_storm", + }, + "SNOW": { + "ranges": [(600, 622)], + "suffix": "snow", + }, + "LOW_VISIBILITY": { + "ranges": [(701, 762)], + "suffix": "low_visibility", + }, + "CLEAR": { + "ranges": [(800, 800)], + "suffix": "clear", + }, +} + +class WeatherChecker: + def __init__(self): + self.is_daytime = False + + self.api_25_calls = 0 + self.api_3_calls = 0 + self.increase_following_distance = 0 + self.increase_stopped_distance = 0 + self.reduce_acceleration = 0 + self.reduce_lateral_acceleration = 0 + self.sunrise = 0 + self.sunset = 0 + self.weather_id = 0 + + self.hourly_forecast = None + self.last_gps_position = None + self.last_updated = None + + user_api_key = Params().get("WeatherToken", encoding="utf-8") + self.api_key = user_api_key or os.environ.get("WEATHER_TOKEN", "") + + if user_api_key: + self.check_interval = 60 + else: + self.check_interval = 15 * 60 + + self.session = requests.Session() + self.session.headers.update({"Accept-Language": "en"}) + self.session.headers.update({"User-Agent": "frogpilot-weather-checker/1.0 (https://github.com/FrogAi/FrogPilot)"}) + + self.executor = ThreadPoolExecutor(max_workers=1) + + def update_offsets(self, frogpilot_toggles): + suffix = WEATHER_CATEGORIES["CLEAR"]["suffix"] + for category in WEATHER_CATEGORIES.values(): + if any(start <= self.weather_id <= end for start, end in category["ranges"]): + suffix = category["suffix"] + break + + if suffix != WEATHER_CATEGORIES["CLEAR"]["suffix"]: + self.increase_following_distance = getattr(frogpilot_toggles, f"increase_following_distance_{suffix}") + self.increase_stopped_distance = getattr(frogpilot_toggles, f"increase_stopped_distance_{suffix}") + self.reduce_acceleration = getattr(frogpilot_toggles, f"reduce_acceleration_{suffix}") + self.reduce_lateral_acceleration = getattr(frogpilot_toggles, f"reduce_lateral_acceleration_{suffix}") + else: + self.increase_following_distance = 0 + self.increase_stopped_distance = 0 + self.reduce_acceleration = 0 + self.reduce_lateral_acceleration = 0 + + def update_weather(self, gps_position, now, frogpilot_toggles): + if not self.api_key: + self.weather_id = 0 + return + + if self.last_gps_position and self.last_updated: + distance = calculate_distance_to_point( + self.last_gps_position["latitude"] * CV.DEG_TO_RAD, + self.last_gps_position["longitude"] * CV.DEG_TO_RAD, + gps_position.get("latitude") * CV.DEG_TO_RAD, + gps_position.get("longitude") * CV.DEG_TO_RAD + ) + if distance / 1000 > CACHE_DISTANCE: + self.hourly_forecast = None + self.last_updated = None + + if self.sunrise and self.sunset: + self.is_daytime = self.sunrise <= int(now.timestamp()) < self.sunset + + if self.last_updated and (now - self.last_updated).total_seconds() < self.check_interval: + if self.hourly_forecast: + current_forecast = min(self.hourly_forecast, key=lambda f: abs(f["dt"] - now.timestamp())) + self.weather_id = current_forecast.get("weather", [{}])[0].get("id", 0) + self.update_offsets(frogpilot_toggles) + return + + self.last_updated = now + + def complete_request(future): + data = future.result() + if data: + self.hourly_forecast = data.get("hourly") + self.last_gps_position = gps_position + + if "current" in data: + source_data = data.get("current", {}) + current_data = source_data + else: + source_data = data + current_data = source_data.get("sys", source_data) + + self.sunrise = current_data.get("sunrise", 0) + self.sunset = current_data.get("sunset", 0) + self.weather_id = source_data.get("weather", [{}])[0].get("id", 0) + + self.update_offsets(frogpilot_toggles) + + def make_request(): + if not is_url_pingable("https://api.openweathermap.org"): + return None + + params = { + "lat": gps_position["latitude"], + "lon": gps_position["longitude"], + "appid": self.api_key, + "units": "metric", + "exclude": "alerts,minutely,daily", + } + + for attempt in range(1, MAX_RETRIES + 1): + try: + self.api_3_calls += 1 + response = self.session.get("https://api.openweathermap.org/data/3.0/onecall", params=params, timeout=10) + if response.status_code == 429: + fallback_params = params.copy() + fallback_params.pop("exclude", None) + self.api_25_calls += 1 + fallback_response = self.session.get("https://api.openweathermap.org/data/2.5/weather", params=fallback_params, timeout=10) + fallback_response.raise_for_status() + return fallback_response.json() + + response.raise_for_status() + return response.json() + except Exception: + if attempt < MAX_RETRIES: + time.sleep(RETRY_DELAY) + continue + return None + + future = self.executor.submit(make_request) + future.add_done_callback(complete_request) diff --git a/frogpilot/system/environment_variables b/frogpilot/system/environment_variables index b01eb24..c1cfbaa 100755 Binary files a/frogpilot/system/environment_variables and b/frogpilot/system/environment_variables differ diff --git a/frogpilot/system/frogpilot_stats.py b/frogpilot/system/frogpilot_stats.py index f39bf82..cac38b9 100644 --- a/frogpilot/system/frogpilot_stats.py +++ b/frogpilot/system/frogpilot_stats.py @@ -2,20 +2,18 @@ import json import os import random import requests -import sys - -sys.path.append(os.path.join(os.path.dirname(__file__), "..", "third_party")) from collections import Counter from datetime import datetime, timezone from influxdb_client import InfluxDBClient, Point from influxdb_client.client.write_api import SYNCHRONOUS +from cereal import car from openpilot.common.conversions import Conversions as CV from openpilot.system.hardware import HARDWARE from openpilot.system.version import get_build_metadata -from openpilot.frogpilot.common.frogpilot_utilities import clean_model_name, run_cmd +from openpilot.frogpilot.common.frogpilot_utilities import clean_model_name from openpilot.frogpilot.common.frogpilot_variables import get_frogpilot_toggles, params BASE_URL = "https://nominatim.openstreetmap.org" @@ -93,7 +91,7 @@ def get_city_center(latitude, longitude): print(f"Falling back to (0, 0) for {latitude}, {longitude}") return float(0.0), float(0.0), "N/A", "N/A", "N/A" - except Exception as exception: + except Exception: print(f"Falling back to (0, 0) for {latitude}, {longitude}") return float(0.0), float(0.0), "N/A", "N/A", "N/A" @@ -107,18 +105,13 @@ def update_branch_commits(now): points.append(Point("branch_commits").field("commit", sha).tag("branch", branch).time(now)) except Exception as e: print(f"Failed to fetch commit for {branch}: {e}") - return points - def send_stats(): try: build_metadata = get_build_metadata() frogpilot_toggles = get_frogpilot_toggles() - if frogpilot_toggles.frogs_go_moo: - return - if frogpilot_toggles.car_make == "mock": return @@ -127,71 +120,72 @@ def send_stats(): token = os.environ.get("STATS_TOKEN", "") url = os.environ.get("STATS_URL", "") + car_params = "{}" + msg_bytes = params.get("CarParamsPersistent") + if msg_bytes: + with car.CarParams.from_bytes(msg_bytes) as CP: + cp_dict = CP.to_dict() + cp_dict.pop("carFw", None) + car_params = json.dumps(cp_dict) + + dongle_id = params.get("FrogPilotDongleId", encoding="utf-8") frogpilot_stats = json.loads(params.get("FrogPilotStats") or "{}") location = json.loads(params.get("LastGPSPosition") or "{}") - if not (location.get("latitude") and location.get("longitude")): - return - original_latitude = location.get("latitude") - original_longitude = location.get("longitude") + original_latitude = location.get("latitude", 0.0) + original_longitude = location.get("longitude", 0.0) latitude, longitude, city, state, country = get_city_center(original_latitude, original_longitude) - theme_sources = [ - frogpilot_toggles.icon_pack.replace("-animated", ""), - frogpilot_toggles.color_scheme, - frogpilot_toggles.distance_icons.replace("-animated", ""), - frogpilot_toggles.signal_icons.replace("-animated", ""), - frogpilot_toggles.sound_pack - ] - - theme_counter = Counter(theme_sources) - most_common = theme_counter.most_common() - max_count = most_common[0][1] - selected_theme = random.choice([item for item, count in most_common if count == max_count]).replace("-user_created", "").replace("_", " ") - now = datetime.now(timezone.utc) + theme_attributes = sorted(["color_scheme", "distance_icons", "icon_pack", "signal_icons", "sound_pack"]) + theme_counts = Counter(getattr(frogpilot_toggles, attribute).replace("-animated", "") for attribute in theme_attributes) + winners = [theme for theme, count in theme_counts.items() if count == max(theme_counts.values(), default=0)] + if len(winners) > 1 and "stock" in winners: + winners.remove("stock") + selected_theme = random.choice(winners).replace("-user_created", "").replace("_", " ") if winners else "stock" + user_point = ( Point("user_stats") - .field("blocked_user", frogpilot_toggles.block_user) - .field("car_make", "GM" if frogpilot_toggles.car_make == "gm" else frogpilot_toggles.car_make.title()) - .field("car_model", frogpilot_toggles.car_model) + .field("calibrated_lateral_acceleration", params.get_float("CalibratedLateralAcceleration")) + .field("calibration_progress", params.get_float("CalibrationProgress")) + .field("car_params", car_params) .field("city", city) .field("commit", build_metadata.openpilot.git_commit) .field("country", country) - .field("current_months_kilometers", int(frogpilot_stats.get("CurrentMonthsKilometers", 0))) .field("device", HARDWARE.get_device_type()) - .field("driving_model", clean_model_name(frogpilot_toggles.model_name)) .field("event", 1) - .field("frogpilot_drives", int(frogpilot_stats.get("FrogPilotDrives", 0))) - .field("frogpilot_hours", float(frogpilot_stats.get("FrogPilotSeconds", 0)) / (60 * 60)) - .field("frogpilot_miles", float(frogpilot_stats.get("FrogPilotMeters", 0)) * CV.METER_TO_MILE) - .field("goat_scream", frogpilot_toggles.goat_scream_alert) - .field("has_cc_long", frogpilot_toggles.has_cc_long) - .field("has_openpilot_longitudinal", frogpilot_toggles.openpilot_longitudinal) - .field("has_pedal", frogpilot_toggles.has_pedal) - .field("has_sdsu", frogpilot_toggles.has_sdsu) - .field("has_zss", frogpilot_toggles.has_zss) .field("latitude", latitude) .field("longitude", longitude) - .field("rainbow_path", frogpilot_toggles.rainbow_path) - .field("random_events", frogpilot_toggles.random_events) .field("state", state) + .field("stats", json.dumps(frogpilot_stats)) .field("theme", selected_theme.title()) - .field("total_aol_seconds", float(frogpilot_stats.get("AOLTime", 0))) - .field("total_lateral_seconds", float(frogpilot_stats.get("LateralTime", 0))) - .field("total_longitudinal_seconds", float(frogpilot_stats.get("LongitudinalTime", 0))) - .field("total_stopped_seconds", float(frogpilot_stats.get("StandstillTime", 0))) - .field("total_tracked_seconds", float(frogpilot_stats.get("TrackedTime", 0))) + .field("toggles", json.dumps(frogpilot_toggles.__dict__)) .field("tuning_level", params.get_int("TuningLevel") + 1 if params.get_bool("TuningLevelConfirmed") else 0) .field("using_default_model", params.get("Model", encoding="utf-8").endswith("_default")) - .field("using_stock_acc", not (frogpilot_toggles.has_cc_long or frogpilot_toggles.openpilot_longitudinal)) .tag("branch", build_metadata.channel) - .tag("dongle_id", params.get("FrogPilotDongleId", encoding="utf-8")) + .tag("dongle_id", dongle_id) .time(now) ) - all_points = [user_point] + update_branch_commits(now) + model_scores = json.loads(params.get("ModelDrivesAndScores") or "{}") + model_points = [] + for model_name, data in sorted(model_scores.items()): + drives = data.get("Drives", 0) + score = data.get("Score", 0) + + if drives > 0: + point = ( + Point("model_scores") + .field("drives", int(drives)) + .field("score", int(score)) + .tag("dongle_id", dongle_id) + .tag("model_name", clean_model_name(model_name)) + .time(now) + ) + model_points.append(point) + + all_points = model_points + [user_point] + update_branch_commits(now) client = InfluxDBClient(org=org_ID, token=token, url=url) client.write_api(write_options=SYNCHRONOUS).write(bucket=bucket, org=org_ID, record=all_points) diff --git a/frogpilot/system/speed_limit_filler.py b/frogpilot/system/speed_limit_filler.py index fbd6e2b..54785de 100644 --- a/frogpilot/system/speed_limit_filler.py +++ b/frogpilot/system/speed_limit_filler.py @@ -9,6 +9,7 @@ from datetime import datetime, timedelta, timezone from cereal import log, messaging +from openpilot.common.conversions import Conversions as CV from openpilot.frogpilot.common.frogpilot_utilities import calculate_distance_to_point, calculate_lane_width, is_url_pingable from openpilot.frogpilot.common.frogpilot_variables import params, params_memory @@ -79,7 +80,7 @@ class MapSpeedLogger: @staticmethod def meters_to_deg_lon(meters, latitude): - return meters / (METERS_PER_DEG_LAT * math.cos(math.radians(latitude))) + return meters / (METERS_PER_DEG_LAT * math.cos(latitude * CV.DEG_TO_RAD)) def get_speed_limit_source(self): sources = [ @@ -165,7 +166,7 @@ class MapSpeedLogger: return [] def filter_segments_for_entry(self, entry): - bearing_rad = math.radians(entry["bearing"]) + bearing_rad = entry["bearing"] * CV.DEG_TO_RAD start_lat, start_lon = entry["start_coordinates"]["latitude"], entry["start_coordinates"]["longitude"] end_lat, end_lon = entry["end_coordinates"]["latitude"], entry["end_coordinates"]["longitude"] mid_lat = (start_lat + end_lat) / 2 @@ -229,10 +230,10 @@ class MapSpeedLogger: return distance = calculate_distance_to_point( - math.radians(self.previous_coordinates["latitude"]), - math.radians(self.previous_coordinates["longitude"]), - math.radians(current_latitude), - math.radians(current_longitude) + self.previous_coordinates["latitude"] * CV.DEG_TO_RAD, + self.previous_coordinates["longitude"] * CV.DEG_TO_RAD, + current_latitude * CV.DEG_TO_RAD, + current_longitude * CV.DEG_TO_RAD ) if distance < 1: return @@ -318,7 +319,6 @@ class MapSpeedLogger: self.update_params(dataset, filtered_dataset) params_memory.put("UpdateSpeedLimitsStatus", "Completed!") - params_memory.remove("UpdateSpeedLimits") def update_cached_segments(self, latitude, longitude, vetting=False): if not self.is_in_cached_box(latitude, longitude): @@ -398,6 +398,8 @@ def main(): previously_started = False elif params_memory.get_bool("UpdateSpeedLimits"): logger.process_speed_limits() + + params_memory.remove("UpdateSpeedLimits") else: time.sleep(5) diff --git a/frogpilot/system/the_pond/assets/components/navigation/navigation_destination.js b/frogpilot/system/the_pond/assets/components/navigation/navigation_destination.js index a6f7ee6..bddbdc4 100644 --- a/frogpilot/system/the_pond/assets/components/navigation/navigation_destination.js +++ b/frogpilot/system/the_pond/assets/components/navigation/navigation_destination.js @@ -236,7 +236,7 @@ export function NavDestination() { state.suggestions = "[]"; } catch (err) { console.error("Failed to calculate route:", err); - showSnackbar("Failed to calculate route…"); + showSnackbar("Failed to calculate route..."); } finally { state.loadingRoute = false; } @@ -433,7 +433,7 @@ export function NavDestination() { showSnackbar(`"${fav.name}" renamed to "${newName}"!`, "success"); } catch { - showSnackbar("Failed to edit favorite name…"); + showSnackbar("Failed to edit favorite name..."); } finally { state.showRenameFavoriteModal = false; } @@ -771,7 +771,7 @@ function NavigationDestination({ showSnackbar(message || "Added to favorites!"); await loadFavorites(); } catch { - showSnackbar("Failed to add to favorites…"); + showSnackbar("Failed to add to favorites..."); } } async function toggleFavorite() { @@ -782,7 +782,7 @@ function NavigationDestination({ if (fav) { removeFavorite(fav); } else { - showSnackbar("Couldn't find favorite entry…"); + showSnackbar("Couldn't find favorite entry..."); } } else { await favoriteDestination(); diff --git a/frogpilot/ui/frogpilot_ui.h b/frogpilot/ui/frogpilot_ui.h index 47ff903..0dd5ced 100644 --- a/frogpilot/ui/frogpilot_ui.h +++ b/frogpilot/ui/frogpilot_ui.h @@ -74,7 +74,6 @@ public: WifiManager *wifi; signals: - void reviewModel(); void themeUpdated(); }; diff --git a/frogpilot/ui/qt/offroad/data_settings.cc b/frogpilot/ui/qt/offroad/data_settings.cc index ba19eea..c0b92c9 100644 --- a/frogpilot/ui/qt/offroad/data_settings.cc +++ b/frogpilot/ui/qt/offroad/data_settings.cc @@ -20,6 +20,10 @@ FrogPilotDataPanel::FrogPilotDataPanel(FrogPilotSettingsWindow *parent) : FrogPi ScrollView *dataMainPanel = new ScrollView(dataMainList, this); dataLayout->addWidget(dataMainPanel); + FrogPilotListWidget *statsLabelsList = new FrogPilotListWidget(this); + ScrollView *statsLabelsPanel = new ScrollView(statsLabelsList, this); + dataLayout->addWidget(statsLabelsPanel); + ButtonControl *deleteDrivingDataButton = new ButtonControl(tr("Delete Driving Data"), tr("DELETE"), tr("Delete all stored driving footage and data to free up space and clear private information.")); QObject::connect(deleteDrivingDataButton, &ButtonControl::clicked, [=]() { QDir hdDataDir("/data/media/0/realdata_HD/"); @@ -594,4 +598,245 @@ FrogPilotDataPanel::FrogPilotDataPanel(FrogPilotSettingsWindow *parent) : FrogPi toggleBackupButton->showDescription(); } dataMainList->addItem(toggleBackupButton); + + FrogPilotButtonsControl *viewStatsButton = new FrogPilotButtonsControl(tr("FrogPilot Stats"), tr("View your collected FrogPilot stats."), "", {tr("RESET"), tr("VIEW")}); + QObject::connect(viewStatsButton, &FrogPilotButtonsControl::buttonClicked, [dataLayout, statsLabelsPanel, this](int id) { + if (id == 0) { + if (ConfirmationDialog::confirm(tr("Are you sure you want to reset all of your FrogPilot stats?"), tr("Reset"), this)) { + params.remove("FrogPilotStats"); + params_cache.remove("FrogPilotStats"); + } + } else if (id == 1) { + emit openSubPanel(); + dataLayout->setCurrentWidget(statsLabelsPanel); + } + }); + if (forceOpenDescriptions) { + viewStatsButton->showDescription(); + } + dataMainList->addItem(viewStatsButton); + + QObject::connect(parent, &FrogPilotSettingsWindow::closeSubPanel, [dataLayout, dataMainPanel] { + dataLayout->setCurrentWidget(dataMainPanel); + }); + QObject::connect(parent, &FrogPilotSettingsWindow::updateMetric, [this](bool metric){isMetric = metric;}); + QObject::connect(uiState(), &UIState::offroadTransition, [statsLabelsList, this](bool offroad) { + if (offroad) { + updateStatsLabels(statsLabelsList); + } + }); + + updateStatsLabels(statsLabelsList); +} + +void FrogPilotDataPanel::updateStatsLabels(FrogPilotListWidget *labelsList) { + labelsList->clear(); + + QJsonObject stats = QJsonDocument::fromJson(QString::fromStdString(params.get("FrogPilotStats")).toUtf8()).object(); + + static QSet ignored_keys = { + "Month" + }; + + static QMap> key_map = { + {"AEBEvents", {tr("Total Emergency Brake Alerts"), "count"}}, + {"AOLTime", {tr("Time Using \"Always On Lateral\""), "time"}}, + {"CruiseSpeedTimes", {tr("Favorite Set Speed"), "speed"}}, + {"Disengages", {tr("Total Disengagements"), "count"}}, + {"Engages", {tr("Total Engagements"), "count"}}, + {"ExperimentalModeTime", {tr("Time Using \"Experimental Mode\""), "time"}}, + {"FrogChirps", {tr("Total Frog Chirps"), "count"}}, + {"FrogHops", {tr("Total Frog Hops"), "count"}}, + {"FrogPilotDrives", {tr("Total Drives"), "count"}}, + {"FrogPilotMeters", {tr("Total Distance Driven"), "distance"}}, + {"FrogPilotSeconds", {tr("Total Driving Time"), "time"}}, + {"FrogSqueaks", {tr("Total Frog Squeaks"), "count"}}, + {"GoatScreams", {tr("Total Goat Screams"), "count"}}, + {"HighestAcceleration", {tr("Highest Acceleration Rate"), "accel"}}, + {"LateralTime", {tr("Time Using Lateral Control"), "time"}}, + {"LongestDistanceWithoutOverride", {tr("Longest Distance Without an Override"), "distance"}}, + {"LongitudinalTime", {tr("Time Using Longitudinal Control"), "time"}}, + {"ModelTimes", {tr("Driving Models:"), "other"}}, + {"Month", {tr("Month"), "other"}}, + {"Overrides", {tr("Total Overrides"), "count"}}, + {"OverrideTime", {tr("Time Overriding openpilot"), "time"}}, + {"RandomEvents", {tr("Random Events:"), "other"}}, + {"StandstillTime", {tr("Time Stopped"), "time"}}, + {"StopLightTime", {tr("Time Spent at Stoplights"), "time"}}, + {"TrackedTime", {tr("Total Time Tracked"), "time"}} + }; + + static QSet parent_keys = { + "ModelTimes", + "RandomEvents" + }; + + static QSet percentage_keys = { + "AOLTime", + "ExperimentalModeTime", + "LateralTime", + "LongitudinalTime", + "OverrideTime", + "StandstillTime", + "StopLightTime" + }; + + static QMap random_events_map = { + {"accel30", tr("UwUs")}, + {"accel35", tr("Loch Ness Encounters")}, + {"accel40", tr("Visits to 1955")}, + {"dejaVuCurve", tr("Deja Vu Moments")}, + {"firefoxSteerSaturated", tr("Internet Explorer Weeeeeeees")}, + {"hal9000", tr("HAL 9000 Denials")}, + {"openpilotCrashedRandomEvent", tr("openpilot Crashes")}, + {"thisIsFineSteerSaturated", tr("This Is Fine Moments")}, + {"toBeContinued", tr("To Be Continued Moments")}, + {"vCruise69", tr("Noices")}, + {"yourFrogTriedToKillMe", tr("Attempted Frog Murders")}, + {"youveGotMail", tr("Total Mail Received")} + }; + + QStringList keys = key_map.keys(); + std::sort(keys.begin(), keys.end(), [&](const QString &a, const QString &b) { + return key_map.value(a).first.toLower() < key_map.value(b).first.toLower(); + }); + + double tracked_time = stats.contains("TrackedTime") ? stats.value("TrackedTime").toDouble() : 0.0; + + std::function format_number = [&](double number) { + return QLocale().toString(number); + }; + + std::function format_distance = [&](double meters) { + double value; + QString unit; + if (isMetric) { + value = meters / 1000.0; + unit = (value == 1.0) ? tr(" kilometer") : tr(" kilometers"); + } else { + value = meters * METER_TO_MILE; + unit = (value == 1.0) ? tr(" mile") : tr(" miles"); + } + return format_number(qRound(value)) + unit; + }; + + std::function format_time = [&](int seconds) { + static int seconds_in_day = 60 * 60 * 24; + static int seconds_in_hour = 60 * 60; + + int days = seconds / seconds_in_day; + int hours = (seconds % seconds_in_day) / seconds_in_hour; + int minutes = (seconds % seconds_in_hour) / 60; + + QString result; + if (days > 0) result += format_number(days) + (days == 1 ? tr(" day ") : tr(" days ")); + if (hours > 0 || days > 0) result += format_number(hours) + (hours == 1 ? tr(" hour ") : tr(" hours ")); + result += format_number(minutes) + (minutes == 1 ? tr(" minute") : tr(" minutes")); + return result.trimmed(); + }; + + for (const QString &key : keys) { + if (ignored_keys.contains(key)) continue; + + QJsonValue value = stats.contains(key) ? stats.value(key) : QJsonValue(0); + QString label_text = key_map.value(key).first; + QString type = key_map.value(key).second; + + if (key == "CruiseSpeedTimes" && value.isObject()) { + QJsonObject speeds = value.toObject(); + + double max_time = -1.0; + QString best_speed; + for (QJsonObject::const_iterator it = speeds.begin(); it != speeds.end(); ++it) { + double time = it.value().toDouble(); + if (time > max_time) { + best_speed = it.key(); + max_time = time; + } + } + + QString display_speed; + if (isMetric) { + display_speed = QString::number(qRound(best_speed.toDouble() * MS_TO_KPH)) + " " + tr("km/h"); + } else { + display_speed = QString::number(qRound(best_speed.toDouble() * MS_TO_MPH)) + " " + tr("mph"); + } + + labelsList->addItem(new LabelControl(label_text, display_speed + " (" + format_time(max_time) + ")", "", this)); + } else if (parent_keys.contains(key) && value.isObject()) { + labelsList->addItem(new LabelControl(label_text, "", "", this)); + + QJsonObject subobj = value.toObject(); + QStringList subkeys; + + if (key == "RandomEvents") { + subkeys = random_events_map.keys(); + } else { + subkeys = subobj.keys(); + } + + std::sort(subkeys.begin(), subkeys.end(), [&](const QString &a, const QString &b) { + QString display_a, display_b; + if (key == "ModelTimes") { + display_a = processModelName(a); + display_b = processModelName(b); + } else if (key == "RandomEvents") { + display_a = random_events_map.value(a, a); + display_b = random_events_map.value(b, b); + } else { + display_a = a; + display_b = b; + } + return display_a.toLower() < display_b.toLower(); + }); + + for (const QString &subkey : subkeys) { + QString display_subkey; + if (key == "ModelTimes") { + display_subkey = processModelName(subkey); + } else if (key == "RandomEvents") { + display_subkey = random_events_map.value(subkey, subkey); + } else { + display_subkey = subkey; + } + + QString subvalue; + if (key == "ModelTimes") { + subvalue = format_time(subobj.value(subkey).toDouble()); + } else { + subvalue = subobj.value(subkey).toVariant().toString().isEmpty() ? "0" : format_number(subobj.value(subkey).toInt()); + } + + labelsList->addItem(new LabelControl(" " + display_subkey, subvalue, "", this)); + } + } else { + QString display_value; + if (type == "accel") { + display_value = QString::number(value.toDouble(), 'f', 2) + " " + tr("m/s²"); + } else if (type == "count") { + QString trimmed_label = label_text; + if (trimmed_label.startsWith(tr("Total "))) { + trimmed_label = trimmed_label.mid(6); + } + display_value = format_number(value.toInt()) + " " + trimmed_label; + } else if (type == "distance") { + display_value = format_distance(value.toDouble()); + } else if (type == "time") { + display_value = format_time(value.toDouble()); + } else { + display_value = value.toVariant().toString().isEmpty() ? "0" : value.toVariant().toString(); + } + + labelsList->addItem(new LabelControl(label_text, display_value, "", this)); + + if (percentage_keys.contains(key)) { + int percent = 0; + if (tracked_time > 0.0) { + percent = (value.toDouble() * 100.0) / tracked_time; + } + + labelsList->addItem(new LabelControl(tr("% of ") + label_text, format_number(percent) + "%", "", this)); + } + } + } } diff --git a/frogpilot/ui/qt/offroad/data_settings.h b/frogpilot/ui/qt/offroad/data_settings.h index e481a88..f539d1a 100644 --- a/frogpilot/ui/qt/offroad/data_settings.h +++ b/frogpilot/ui/qt/offroad/data_settings.h @@ -8,8 +8,16 @@ class FrogPilotDataPanel : public FrogPilotListWidget { public: explicit FrogPilotDataPanel(FrogPilotSettingsWindow *parent); +signals: + void openSubPanel(); + private: + void updateStatsLabels(FrogPilotListWidget *labelsList); + + bool isMetric; + FrogPilotSettingsWindow *parent; Params params; + Params params_cache{"/cache/params"}; }; diff --git a/frogpilot/ui/qt/offroad/frogpilot_settings.cc b/frogpilot/ui/qt/offroad/frogpilot_settings.cc index 345c1bd..2cad861 100644 --- a/frogpilot/ui/qt/offroad/frogpilot_settings.cc +++ b/frogpilot/ui/qt/offroad/frogpilot_settings.cc @@ -15,17 +15,47 @@ bool nnffLogFileExists(const QString &carFingerprint) { static QStringList files; + static QMap substitutes; + if (files.isEmpty()) { QFileInfoList fileInfoList = QDir(QStringLiteral("../../frogpilot/assets/nnff_models")).entryInfoList(QDir::Files | QDir::NoDotAndDotDot); for (const QFileInfo &fileInfo : fileInfoList) { files.append(fileInfo.completeBaseName()); } + + QFile sub_file(QStringLiteral("../../selfdrive/car/torque_data/substitute.toml")); + if (sub_file.open(QIODevice::ReadOnly)) { + QTextStream in(&sub_file); + while (!in.atEnd()) { + QString line = in.readLine().trimmed(); + if (line.startsWith("#") || line.startsWith("legend") || !line.contains("=")) { + continue; + } + + QStringList parts = line.split("="); + if (parts.size() == 2) { + QString key = parts[0].trimmed().remove('"'); + QString value = parts[1].trimmed().remove('"'); + if (!key.isEmpty() && !value.isEmpty()) { + substitutes[key] = value; + } + } + } + } } - for (const QString &file : files) { - if (file.startsWith(carFingerprint)) { - std::cout << "NNFF supports fingerprint: " << file.toStdString() << std::endl; - return true; + QStringList fingerprintsToCheck; + fingerprintsToCheck.append(carFingerprint); + if (substitutes.contains(carFingerprint)) { + fingerprintsToCheck.append(substitutes.value(carFingerprint)); + } + + for (const QString &fingerprint : fingerprintsToCheck) { + for (const QString &file : files) { + if (file.startsWith(fingerprint)) { + std::cout << "NNFF model found for fingerprint: " << fingerprint.toStdString() << std::endl; + return true; + } } } @@ -33,6 +63,7 @@ bool nnffLogFileExists(const QString &carFingerprint) { } void FrogPilotSettingsWindow::createPanelButtons(FrogPilotListWidget *list) { + FrogPilotDataPanel *frogpilotDataPanel = new FrogPilotDataPanel(this); FrogPilotDevicePanel *frogpilotDevicePanel = new FrogPilotDevicePanel(this); FrogPilotLateralPanel *frogpilotLateralPanel = new FrogPilotLateralPanel(this); FrogPilotLongitudinalPanel *frogpilotLongitudinalPanel = new FrogPilotLongitudinalPanel(this); @@ -49,7 +80,7 @@ void FrogPilotSettingsWindow::createPanelButtons(FrogPilotListWidget *list) { {{tr("MANAGE"), frogpilotSoundsPanel}}, {{tr("DRIVING MODEL"), frogpilotModelPanel}, {tr("GAS / BRAKE"), frogpilotLongitudinalPanel}, {tr("STEERING"), frogpilotLateralPanel}}, {{tr("MAP DATA"), frogpilotMapsPanel}, {tr("NAVIGATION"), frogpilotNavigationPanel}}, - {{tr("DATA"), new FrogPilotDataPanel(this)}, {tr("DEVICE CONTROLS"), frogpilotDevicePanel}, {tr("UTILITIES"), new FrogPilotUtilitiesPanel(this)}}, + {{tr("DATA"), frogpilotDataPanel}, {tr("DEVICE CONTROLS"), frogpilotDevicePanel}, {tr("UTILITIES"), new FrogPilotUtilitiesPanel(this)}}, {{tr("APPEARANCE"), frogpilotVisualsPanel}, {tr("THEME"), frogpilotThemesPanel}}, {{tr("VEHICLE SETTINGS"), frogpilotVehiclesPanel}, {tr("WHEEL CONTROLS"), frogpilotWheelPanel}} }; @@ -107,10 +138,12 @@ void FrogPilotSettingsWindow::createPanelButtons(FrogPilotListWidget *list) { list->addItem(panelButton); } + QObject::connect(frogpilotDataPanel, &FrogPilotDataPanel::openSubPanel, this, &FrogPilotSettingsWindow::openSubPanel); QObject::connect(frogpilotDevicePanel, &FrogPilotDevicePanel::openSubPanel, this, &FrogPilotSettingsWindow::openSubPanel); QObject::connect(frogpilotLateralPanel, &FrogPilotLateralPanel::openSubPanel, this, &FrogPilotSettingsWindow::openSubPanel); QObject::connect(frogpilotLongitudinalPanel, &FrogPilotLongitudinalPanel::openSubPanel, this, &FrogPilotSettingsWindow::openSubPanel); QObject::connect(frogpilotLongitudinalPanel, &FrogPilotLongitudinalPanel::openSubSubPanel, this, &FrogPilotSettingsWindow::openSubSubPanel); + QObject::connect(frogpilotLongitudinalPanel, &FrogPilotLongitudinalPanel::openSubSubSubPanel, this, &FrogPilotSettingsWindow::openSubSubSubPanel); QObject::connect(frogpilotMapsPanel, &FrogPilotMapsPanel::openSubPanel, this, &FrogPilotSettingsWindow::openSubPanel); QObject::connect(frogpilotModelPanel, &FrogPilotModelPanel::openSubPanel, this, &FrogPilotSettingsWindow::openSubPanel); QObject::connect(frogpilotNavigationPanel, &FrogPilotNavigationPanel::closeSubPanel, this, &FrogPilotSettingsWindow::closeSubPanel); @@ -176,6 +209,7 @@ FrogPilotSettingsWindow::FrogPilotSettingsWindow(SettingsWindow *parent) : QFram QObject::connect(parent, &SettingsWindow::closePanel, this, &FrogPilotSettingsWindow::closePanel); QObject::connect(parent, &SettingsWindow::closeSubPanel, this, &FrogPilotSettingsWindow::closeSubPanel); QObject::connect(parent, &SettingsWindow::closeSubSubPanel, this, &FrogPilotSettingsWindow::closeSubSubPanel); + QObject::connect(parent, &SettingsWindow::closeSubSubSubPanel, this, &FrogPilotSettingsWindow::closeSubSubSubPanel); QObject::connect(parent, &SettingsWindow::updateMetric, this, &FrogPilotSettingsWindow::updateMetric); QObject::connect(parent, &SettingsWindow::updateTuningLevel, this, &FrogPilotSettingsWindow::updateTuningLevel); QObject::connect(uiState(), &UIState::offroadTransition, this, &FrogPilotSettingsWindow::updateVariables); @@ -270,13 +304,15 @@ void FrogPilotSettingsWindow::updateVariables() { hasPedal = CP.getEnableGasInterceptor(); hasRadar = !CP.getRadarUnavailable(); hasSDSU = frogpilot_toggles.value("has_sdsu").toBool(); - hasSNG = hasOpenpilotLongitudinal && CP.getAutoResumeSng(); + hasSNG = CP.getAutoResumeSng(); hasZSS = frogpilot_toggles.value("has_zss").toBool(); isAngleCar = CP.getSteerControlType() == cereal::CarParams::SteerControlType::ANGLE; isBolt = carFingerprint == "CHEVROLET_BOLT_CC" || carFingerprint == "CHEVROLET_BOLT_EUV"; isGM = carMake == "gm"; isHKG = carMake == "hyundai"; isHKGCanFd = isHKG && safetyModel == cereal::CarParams::SafetyModel::HYUNDAI_CANFD; + isHonda = carMake == "honda"; + isHondaNidec = isHonda && safetyModel == cereal::CarParams::SafetyModel::HONDA_NIDEC; isSubaru = carMake == "subaru"; isTorqueCar = CP.getLateralTuning().which() == cereal::CarParams::LateralTuning::TORQUE; isToyota = carMake == "toyota"; @@ -286,7 +322,7 @@ void FrogPilotSettingsWindow::updateVariables() { longitudinalActuatorDelay = CP.getLongitudinalActuatorDelay(); startAccel = CP.getStartAccel(); steerActuatorDelay = CP.getSteerActuatorDelay(); - steerKp = CP.getLateralTuning().getTorque().getKp(); + steerKp = 1.0; steerRatio = CP.getSteerRatio(); stopAccel = CP.getStopAccel(); stoppingDecelRate = CP.getStoppingDecelRate(); diff --git a/frogpilot/ui/qt/offroad/frogpilot_settings.h b/frogpilot/ui/qt/offroad/frogpilot_settings.h index bd48e67..af4d4d5 100644 --- a/frogpilot/ui/qt/offroad/frogpilot_settings.h +++ b/frogpilot/ui/qt/offroad/frogpilot_settings.h @@ -1,8 +1,14 @@ #pragma once +#include +#include +#include + #include "selfdrive/ui/qt/offroad/settings.h" #include "selfdrive/ui/qt/widgets/scrollview.h" +class QNetworkAccessManager; + class FrogPilotSettingsWindow : public QFrame { Q_OBJECT @@ -32,6 +38,8 @@ public: bool isGM = true; bool isHKG = true; bool isHKGCanFd = true; + bool isHonda = true; + bool isHondaNidec = true; bool isSubaru = false; bool isTorqueCar = false; bool isToyota = true; @@ -59,9 +67,11 @@ public: signals: void closeSubPanel(); void closeSubSubPanel(); + void closeSubSubSubPanel(); void openPanel(); void openSubPanel(); void openSubSubPanel(); + void openSubSubSubPanel(); void updateMetric(bool metric, bool bootRun=false); private: diff --git a/frogpilot/ui/qt/offroad/lateral_settings.cc b/frogpilot/ui/qt/offroad/lateral_settings.cc index eaad5d7..84b7be6 100644 --- a/frogpilot/ui/qt/offroad/lateral_settings.cc +++ b/frogpilot/ui/qt/offroad/lateral_settings.cc @@ -365,7 +365,7 @@ void FrogPilotLateralPanel::updateToggles() { else if (key == "ForceAutoTune") { setVisible &= !parent->hasAutoTune; setVisible &= !parent->isAngleCar; - setVisible &= parent->isTorqueCar || forcingTorqueController; + setVisible &= parent->isTorqueCar || forcingTorqueController || usingNNFF; } else if (key == "ForceAutoTuneOff") { @@ -402,20 +402,20 @@ void FrogPilotLateralPanel::updateToggles() { else if (key == "SteerFriction") { setVisible &= parent->friction != 0; setVisible &= parent->hasAutoTune ? forcingAutoTuneOff : !forcingAutoTune; - setVisible &= parent->isTorqueCar || forcingTorqueController; + setVisible &= parent->isTorqueCar || forcingTorqueController || usingNNFF; setVisible &= !usingNNFF; } else if (key == "SteerKP") { setVisible &= parent->steerKp != 0; - setVisible &= parent->hasAutoTune ? forcingAutoTuneOff : !forcingAutoTune; - setVisible &= parent->isTorqueCar || forcingTorqueController; + setVisible &= parent->isTorqueCar || forcingTorqueController || usingNNFF; + setVisible &= !parent->isAngleCar; } else if (key == "SteerLatAccel") { setVisible &= parent->latAccelFactor != 0; setVisible &= parent->hasAutoTune ? forcingAutoTuneOff : !forcingAutoTune; - setVisible &= parent->isTorqueCar || forcingTorqueController; + setVisible &= parent->isTorqueCar || forcingTorqueController || usingNNFF; setVisible &= !usingNNFF; } diff --git a/frogpilot/ui/qt/offroad/longitudinal_settings.cc b/frogpilot/ui/qt/offroad/longitudinal_settings.cc index c08b28c..20daee0 100644 --- a/frogpilot/ui/qt/offroad/longitudinal_settings.cc +++ b/frogpilot/ui/qt/offroad/longitudinal_settings.cc @@ -1,6 +1,8 @@ #include "frogpilot/ui/qt/offroad/longitudinal_settings.h" FrogPilotLongitudinalPanel::FrogPilotLongitudinalPanel(FrogPilotSettingsWindow *parent) : FrogPilotListWidget(parent), parent(parent) { + networkManager = new QNetworkAccessManager(this); + QJsonObject shownDescriptions = QJsonDocument::fromJson(QString::fromStdString(params.get("ShownToggleDescriptions")).toUtf8()).object(); QString className = this->metaObject()->className(); @@ -33,6 +35,11 @@ FrogPilotLongitudinalPanel::FrogPilotLongitudinalPanel(FrogPilotSettingsWindow * FrogPilotListWidget *speedLimitControllerVisualList = new FrogPilotListWidget(this); FrogPilotListWidget *standardPersonalityList = new FrogPilotListWidget(this); FrogPilotListWidget *trafficPersonalityList = new FrogPilotListWidget(this); + FrogPilotListWidget *weatherList = new FrogPilotListWidget(this); + FrogPilotListWidget *weatherLowVisibilityList = new FrogPilotListWidget(this); + FrogPilotListWidget *weatherRainList = new FrogPilotListWidget(this); + FrogPilotListWidget *weatherRainStormList = new FrogPilotListWidget(this); + FrogPilotListWidget *weatherSnowList = new FrogPilotListWidget(this); ScrollView *advancedLongitudinalTunePanel = new ScrollView(advancedLongitudinalTuneList, this); ScrollView *aggressivePersonalityPanel = new ScrollView(aggressivePersonalityList, this); @@ -48,6 +55,11 @@ FrogPilotLongitudinalPanel::FrogPilotLongitudinalPanel(FrogPilotSettingsWindow * ScrollView *speedLimitControllerVisualPanel = new ScrollView(speedLimitControllerVisualList, this); ScrollView *standardPersonalityPanel = new ScrollView(standardPersonalityList, this); ScrollView *trafficPersonalityPanel = new ScrollView(trafficPersonalityList, this); + ScrollView *weatherLowVisibilityPanel = new ScrollView(weatherLowVisibilityList, this); + ScrollView *weatherPanel = new ScrollView(weatherList, this); + ScrollView *weatherRainPanel = new ScrollView(weatherRainList, this); + ScrollView *weatherRainStormPanel = new ScrollView(weatherRainStormList, this); + ScrollView *weatherSnowPanel = new ScrollView(weatherSnowList, this); longitudinalLayout->addWidget(advancedLongitudinalTunePanel); longitudinalLayout->addWidget(aggressivePersonalityPanel); @@ -63,6 +75,11 @@ FrogPilotLongitudinalPanel::FrogPilotLongitudinalPanel(FrogPilotSettingsWindow * longitudinalLayout->addWidget(speedLimitControllerVisualPanel); longitudinalLayout->addWidget(standardPersonalityPanel); longitudinalLayout->addWidget(trafficPersonalityPanel); + longitudinalLayout->addWidget(weatherLowVisibilityPanel); + longitudinalLayout->addWidget(weatherPanel); + longitudinalLayout->addWidget(weatherRainPanel); + longitudinalLayout->addWidget(weatherRainStormPanel); + longitudinalLayout->addWidget(weatherSnowPanel); const std::vector> longitudinalToggles { {"AdvancedLongitudinalTune", tr("Advanced Longitudinal Tuning"), tr("Advanced acceleration and braking control changes to fine-tune how openpilot drives."), "../../frogpilot/assets/toggle_icons/icon_advanced_longitudinal_tune.png"}, @@ -77,9 +94,10 @@ FrogPilotLongitudinalPanel::FrogPilotLongitudinalPanel(FrogPilotSettingsWindow * {"ConditionalExperimental", tr("Conditional Experimental Mode"), tr("Automatically switch to \"Experimental Mode\" when set conditions are met. Allows the model to handle challenging situations with smarter decision making."), "../../frogpilot/assets/toggle_icons/icon_conditional.png"}, {"CESpeed", tr("Below"), tr("Switch to \"Experimental Mode\" when driving below this speed without a lead to help openpilot handle low-speed situations more smoothly."), ""}, {"CECurves", tr("Curve Detected Ahead"), tr("Switch to \"Experimental Mode\" when a curve is detected to allow the model to set an appropriate speed for the curve."), ""}, + {"CEStopLights", tr("\"Detected\" Stop Lights/Signs"), tr("Switch to \"Experimental Mode\" whenever the driving model \"detects\" a red light or stop sign.

Disclaimer: openpilot does not explicitly detect traffic lights or stop signs. In \"Experimental Mode\", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!"), ""}, {"CELead", tr("Lead Detected Ahead"), tr("Switch to \"Experimental Mode\" when a slower or stopped vehicle is detected. Can make braking smoother and more reliable on some vehicles."), ""}, {"CENavigation", tr("Navigation-Based"), tr("Switch to \"Experimental Mode\" when approaching intersections or turns on the active route while using \"Navigate on openpilot\" (NOO) to allow the model to set an appropriate speed for upcoming maneuvers."), ""}, - {"CEModelStopTime", tr("Predicted Stop In"), tr("Switch to \"Experimental Mode\" when openpilot predicts a stop within the set time. This is usually triggered when the model \"sees\" a red light or stop sign ahead.

Disclaimer: openpilot does not explicitly detect traffic lights or stop signs. In \"Experimental Mode\", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason."), ""}, + {"CEModelStopTime", tr("Predicted Stop In"), tr("Switch to \"Experimental Mode\" when openpilot predicts a stop within the set time. This is usually triggered when the model \"sees\" a red light or stop sign ahead.

Disclaimer: openpilot does not explicitly detect traffic lights or stop signs. In \"Experimental Mode\", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!"), ""}, {"CESignalSpeed", tr("Turn Signal Below"), tr("Switch to \"Experimental Mode\" when using a turn signal below the set speed to allow the model to choose an appropriate speed for smoother left and right turns."), ""}, {"ShowCEMStatus", tr("Status Widget"), tr("Show which condition triggered \"Experimental Mode\" on the driving screen."), ""}, @@ -132,17 +150,45 @@ FrogPilotLongitudinalPanel::FrogPilotLongitudinalPanel(FrogPilotSettingsWindow * {"DecelerationProfile", tr("Deceleration Profile"), tr("How firmly openpilot slows down. \"Eco\" favors coasting, \"Sport\" applies stronger braking."), ""}, {"HumanAcceleration", tr("Human-Like Acceleration"), tr("Acceleration that mimics human behavior by easing the throttle at low speeds and adding extra power when taking off from a stop."), ""}, {"HumanFollowing", tr("Human-Like Following"), tr("Following behavior that mimics human drivers by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking."), ""}, + {"HumanLaneChanges", tr("Human-Like Lane Changes"), tr("Lane-change behavior that mimics human drivers by anticipating and tracking adjacent vehicles during lane changes."), ""}, {"LeadDetectionThreshold", tr("Lead Detection Sensitivity"), tr("How sensitive openpilot is to detecting vehicles. Higher sensitivity allows quicker detection at longer distances but may react to non-vehicle objects; lower sensitivity is more conservative and reduces false detections."), ""}, {"TacoTune", tr("\"Taco Bell Run\" Turn Speed Hack"), tr("The turn-speed hack from comma's 2022 \"Taco Bell Run\". Designed to slow down for left and right turns."), ""}, {"QOLLongitudinal", tr("Quality of Life"), tr("Miscellaneous acceleration and braking control changes to fine-tune how openpilot drives."), "../../frogpilot/assets/toggle_icons/icon_quality_of_life.png"}, {"CustomCruise", tr("Cruise Interval"), tr("How much the set speed increases or decreases for each + or – cruise control button press."), ""}, {"CustomCruiseLong", tr("Cruise Interval (Hold)"), tr("How much the set speed increases or decreases while holding the + or – cruise control buttons."), ""}, - {"ForceStops", tr("Force Stop at \"Detected\" Stop Lights/Signs"), tr("Force openpilot to stop whenever the driving model \"detects\" a red light or stop sign.

Disclaimer: openpilot does not explicitly detect traffic lights or stop signs. In \"Experimental Mode\", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason."), ""}, + {"ForceStops", tr("Force Stop at \"Detected\" Stop Lights/Signs"), tr("Force openpilot to stop whenever the driving model \"detects\" a red light or stop sign.

Disclaimer: openpilot does not explicitly detect traffic lights or stop signs. In \"Experimental Mode\", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!"), ""}, {"IncreasedStoppedDistance", tr("Increase Stopped Distance by:"), tr("Add extra space when stopped behind vehicles. Increase for more room; decrease for shorter gaps."), ""}, {"MapGears", tr("Map Accel/Decel to Gears"), tr("Map the Acceleration or Deceleration profiles to the vehicle's \"Eco\" and \"Sport\" gear modes."), ""}, {"SetSpeedOffset", tr("Offset Set Speed by:"), tr("Increase the set speed by the chosen offset. For example, set +5 if you usually drive 5 over the limit."), ""}, {"ReverseCruise", tr("Reverse Cruise Increase"), tr("Reverse the cruise control button behavior so a short press increases the set speed by 5 instead of 1."), ""}, + {"WeatherPresets", tr("Weather Condition Offsets"), tr("Automatically adjust driving behavior based on real-time weather. Helps maintain comfort and safety in low visibility, rain, or snow."), ""}, + + {"LowVisibilityOffsets", tr("Low Visibility"), tr("Driving adjustments for fog, haze, or other low-visibility conditions."), ""}, + {"IncreaseFollowingLowVisibility", tr("Increase Following Distance by:"), tr("Add extra space behind lead vehicles in low visibility. Increase for more space; decrease for tighter gaps."), ""}, + {"IncreasedStoppedDistanceLowVisibility", tr("Increase Stopped Distance by:"), tr("Add extra buffer when stopped behind vehicles in low visibility. Increase for more room; decrease for shorter gaps."), ""}, + {"ReduceAccelerationLowVisibility", tr("Reduce Acceleration by:"), tr("Lower the maximum acceleration in low visibility. Increase for softer takeoffs; decrease for quicker but less stable takeoffs."), ""}, + {"ReduceLateralAccelerationLowVisibility", tr("Reduce Speed in Curves by:"), tr("Lower the desired speed while driving through curves in low visibility. Increase for safer, gentler turns; decrease for more aggressive driving in curves."), ""}, + + {"RainOffsets", tr("Rain"), tr("Driving adjustments for rainy conditions."), ""}, + {"IncreaseFollowingRain", tr("Increase Following Distance by:"), tr("Add extra space behind lead vehicles in rain. Increase for more space; decrease for tighter gaps."), ""}, + {"IncreasedStoppedDistanceRain", tr("Increase Stopped Distance by:"), tr("Add extra buffer when stopped behind vehicles in rain. Increase for more room; decrease for shorter gaps."), ""}, + {"ReduceAccelerationRain", tr("Reduce Acceleration by:"), tr("Lower the maximum acceleration in rain. Increase for softer takeoffs; decrease for quicker but less stable takeoffs."), ""}, + {"ReduceLateralAccelerationRain", tr("Reduce Speed in Curves by:"), tr("Lower the desired speed while driving through curves in rain. Increase for safer, gentler turns; decrease for more aggressive driving in curves."), ""}, + + {"RainStormOffsets", tr("Rainstorms"), tr("Driving adjustments for rainstorms."), ""}, + {"IncreaseFollowingRainStorm", tr("Increase Following Distance by:"), tr("Add extra space behind lead vehicles in a rainstorm. Increase for more space; decrease for tighter gaps."), ""}, + {"IncreasedStoppedDistanceRainStorm", tr("Increase Stopped Distance by:"), tr("Add extra buffer when stopped behind vehicles in a rainstorm. Increase for more room; decrease for shorter gaps."), ""}, + {"ReduceAccelerationRainStorm", tr("Reduce Acceleration by:"), tr("Lower the maximum acceleration in a rainstorm. Increase for softer takeoffs; decrease for quicker but less stable takeoffs."), ""}, + {"ReduceLateralAccelerationRainStorm", tr("Reduce Speed in Curves by:"), tr("Lower the desired speed while driving through curves in a rainstorm. Increase for safer, gentler turns; decrease for more aggressive driving in curves."), ""}, + + {"SnowOffsets", tr("Snow"), tr("Driving adjustments for snowy conditions."), ""}, + {"IncreaseFollowingSnow", tr("Increase Following Distance by:"), tr("Add extra space behind lead vehicles in snow. Increase for more space; decrease for tighter gaps."), ""}, + {"IncreasedStoppedDistanceSnow", tr("Increase Stopped Distance by:"), tr("Add extra buffer when stopped behind vehicles in snow. Increase for more room; decrease for shorter gaps."), ""}, + {"ReduceAccelerationSnow", tr("Reduce Acceleration by:"), tr("Lower the maximum acceleration in snow. Increase for softer takeoffs; decrease for quicker but less stable takeoffs."), ""}, + {"ReduceLateralAccelerationSnow", tr("Reduce Speed in Curves by:"), tr("Lower the desired speed while driving through curves in snow. Increase for safer, gentler turns; decrease for more aggressive driving in curves."), ""}, + + {"SetWeatherKey", tr("Set Your Own Key"), tr("Set your own \"OpenWeatherMap\" key to increase the weather update rate.

Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes."), ""}, {"SpeedLimitController", tr("Speed Limit Controller"), tr("Limit openpilot's maximum driving speed to the current speed limit obtained from downloaded maps, Mapbox, Navigate on openpilot, or the dashboard for supported vehicles (Ford, Genesis, Hyundai, Kia, Lexus, Toyota)."), "../../frogpilot/assets/toggle_icons/icon_speed_limit.png"}, {"SLCFallback", tr("Fallback Speed"), tr("The speed used by \"Speed Limit Controller\" when no speed limit is found.

- Set Speed: Use the cruise set speed
- Experimental Mode: Estimate the limit using the driving model
- Previous Limit: Keep using the last confirmed limit"), ""}, @@ -361,6 +407,116 @@ FrogPilotLongitudinalPanel::FrogPilotLongitudinalPanel(FrogPilotSettingsWindow * longitudinalToggle = new FrogPilotButtonToggleControl(param, title, desc, icon, mapGearsToggles, mapGearsToggleNames); } else if (param == "SetSpeedOffset") { longitudinalToggle = new FrogPilotParamValueControl(param, title, desc, icon, 0, 99, tr(" mph")); + } else if (param == "WeatherPresets") { + FrogPilotManageControl *weatherToggle = new FrogPilotManageControl(param, title, desc, icon); + QObject::connect(weatherToggle, &FrogPilotManageControl::manageButtonClicked, [longitudinalLayout, weatherPanel, this]() { + openSubSubPanel(); + + longitudinalLayout->setCurrentWidget(weatherPanel); + + qolOpen = true; + }); + longitudinalToggle = weatherToggle; + } else if (param == "SetWeatherKey") { + weatherKeyControl = new FrogPilotButtonsControl(title, desc, icon, {tr("ADD"), tr("TEST")}); + QObject::connect(weatherKeyControl, &FrogPilotButtonsControl::buttonClicked, [this](int id) { + if (id == 0) { + if (!params.get("WeatherToken").empty()) { + if (FrogPilotConfirmationDialog::yesorno(tr("Are you sure you want to remove your key?"), this)) { + params.remove("WeatherToken"); + params_cache.remove("WeatherToken"); + + weatherKeyControl->setText(0, tr("ADD")); + weatherKeyControl->setVisibleButton(1, false); + } + } else { + QString key = InputDialog::getText(tr("Enter your \"OpenWeatherMap\" key"), this).trimmed(); + if (key.length() == 32) { + params.put("WeatherToken", key.toStdString()); + + weatherKeyControl->setText(0, tr("REMOVE")); + weatherKeyControl->setVisibleButton(1, true); + } else if (!key.isEmpty()) { + ConfirmationDialog::alert(tr("Invalid key!"), this); + } + } + } else { + weatherKeyControl->setValue(tr("Testing...")); + + QString key = QString::fromStdString(params.get("WeatherToken")); + QString url = QString("https://api.openweathermap.org/data/2.5/weather?lat=42.4293&lon=-83.9850&appid=%1").arg(key); + + QNetworkRequest request(url); + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, [=]() { + weatherKeyControl->setValue(""); + + QString message; + if (reply->error() == QNetworkReply::NoError) { + message = tr("Key is valid!"); + } else if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 401) { + message = tr("Invalid key!"); + } else { + message = tr("An error occurred: %1").arg(reply->errorString()); + } + ConfirmationDialog::alert(message, this); + reply->deleteLater(); + }); + } + }); + longitudinalToggle = weatherKeyControl; + } else if (param == "LowVisibilityOffsets") { + ButtonControl *manageLowVisibilitOffsetsButton = new ButtonControl(title, tr("MANAGE"), desc); + QObject::connect(manageLowVisibilitOffsetsButton, &ButtonControl::clicked, [longitudinalLayout, weatherLowVisibilityPanel, this]() { + openSubSubSubPanel(); + + longitudinalLayout->setCurrentWidget(weatherLowVisibilityPanel); + + weatherOpen = true; + }); + longitudinalToggle = manageLowVisibilitOffsetsButton; + } else if (param == "RainOffsets") { + ButtonControl *manageRainOffsetsButton = new ButtonControl(title, tr("MANAGE"), desc); + QObject::connect(manageRainOffsetsButton, &ButtonControl::clicked, [longitudinalLayout, weatherRainPanel, this]() { + openSubSubSubPanel(); + + longitudinalLayout->setCurrentWidget(weatherRainPanel); + + weatherOpen = true; + }); + longitudinalToggle = manageRainOffsetsButton; + } else if (param == "RainStormOffsets") { + ButtonControl *manageRainStormOffsetsButton = new ButtonControl(title, tr("MANAGE"), desc); + QObject::connect(manageRainStormOffsetsButton, &ButtonControl::clicked, [longitudinalLayout, weatherRainStormPanel, this]() { + openSubSubSubPanel(); + + longitudinalLayout->setCurrentWidget(weatherRainStormPanel); + + weatherOpen = true; + }); + longitudinalToggle = manageRainStormOffsetsButton; + } else if (param == "SnowOffsets") { + ButtonControl *manageSnowOffsetsButton = new ButtonControl(title, tr("MANAGE"), desc); + QObject::connect(manageSnowOffsetsButton, &ButtonControl::clicked, [longitudinalLayout, weatherSnowPanel, this]() { + openSubSubSubPanel(); + + longitudinalLayout->setCurrentWidget(weatherSnowPanel); + + weatherOpen = true; + }); + longitudinalToggle = manageSnowOffsetsButton; + } else if (param == "IncreaseFollowingLowVisibility" || param == "IncreaseFollowingRain" || param == "IncreaseFollowingRainStorm" || param == "IncreaseFollowingSnow") { + std::map followTimeLabels; + for (float i = 0; i <= 3; i += 0.01) { + followTimeLabels[i] = std::lround(i / 0.01) == 1 / 0.01 ? QString::number(i, 'f', 2) + tr(" second") : QString::number(i, 'f', 2) + tr(" seconds"); + } + longitudinalToggle = new FrogPilotParamValueControl(param, title, desc, icon, 0, 3, QString(), followTimeLabels, 0.01, true); + } else if (param == "IncreasedStoppedDistanceLowVisibility" || param == "IncreasedStoppedDistanceRain" || param == "IncreasedStoppedDistanceRainStorm" || param == "IncreasedStoppedDistanceSnow") { + longitudinalToggle = new FrogPilotParamValueControl(param, title, desc, icon, 0, 10, tr(" feet")); + } else if (param == "ReduceAccelerationLowVisibility" || param == "ReduceAccelerationRain" || param == "ReduceAccelerationRainStorm" || param == "ReduceAccelerationSnow") { + longitudinalToggle = new FrogPilotParamValueControl(param, title, desc, icon, 0, 99, "%", std::map(), 1); + } else if (param == "ReduceLateralAccelerationLowVisibility" || param == "ReduceLateralAccelerationRain" || param == "ReduceLateralAccelerationRainStorm" || param == "ReduceLateralAccelerationSnow") { + longitudinalToggle = new FrogPilotParamValueControl(param, title, desc, icon, 0, 99, "%", std::map(), 1); } else if (param == "SpeedLimitController") { FrogPilotManageControl *speedLimitControllerToggle = new FrogPilotManageControl(param, title, desc, icon); @@ -505,6 +661,16 @@ FrogPilotLongitudinalPanel::FrogPilotLongitudinalPanel(FrogPilotSettingsWindow * standardPersonalityList->addItem(longitudinalToggle); } else if (trafficPersonalityKeys.contains(param)) { trafficPersonalityList->addItem(longitudinalToggle); + } else if (weatherKeys.contains(param)) { + weatherList->addItem(longitudinalToggle); + } else if (weatherLowVisibilityKeys.contains(param)) { + weatherLowVisibilityList->addItem(longitudinalToggle); + } else if (weatherRainKeys.contains(param)) { + weatherRainList->addItem(longitudinalToggle); + } else if (weatherRainStormKeys.contains(param)) { + weatherRainStormList->addItem(longitudinalToggle); + } else if (weatherSnowKeys.contains(param)) { + weatherSnowList->addItem(longitudinalToggle); } else { longitudinalList->addItem(longitudinalToggle); @@ -637,23 +803,38 @@ FrogPilotLongitudinalPanel::FrogPilotLongitudinalPanel(FrogPilotSettingsWindow * openDescriptions(forceOpenDescriptions, toggles); longitudinalLayout->setCurrentWidget(longitudinalPanel); }); - QObject::connect(parent, &FrogPilotSettingsWindow::closeSubSubPanel, [longitudinalLayout, customDrivingPersonalityPanel, speedLimitControllerPanel, this]() { + QObject::connect(parent, &FrogPilotSettingsWindow::closeSubSubPanel, [longitudinalLayout, customDrivingPersonalityPanel, qolPanel, speedLimitControllerPanel, this]() { openDescriptions(forceOpenDescriptions, toggles); if (customPersonalityOpen) { longitudinalLayout->setCurrentWidget(customDrivingPersonalityPanel); customPersonalityOpen = false; + } else if (qolOpen) { + longitudinalLayout->setCurrentWidget(qolPanel); + + qolOpen = false; } else if (slcOpen) { longitudinalLayout->setCurrentWidget(speedLimitControllerPanel); slcOpen = false; } }); + QObject::connect(parent, &FrogPilotSettingsWindow::closeSubSubSubPanel, [longitudinalLayout, weatherPanel, this]() { + openDescriptions(forceOpenDescriptions, toggles); + + if (weatherOpen) { + longitudinalLayout->setCurrentWidget(weatherPanel); + + weatherOpen = false; + } + }); QObject::connect(parent, &FrogPilotSettingsWindow::updateMetric, this, &FrogPilotLongitudinalPanel::updateMetric); } void FrogPilotLongitudinalPanel::showEvent(QShowEvent *event) { + FrogPilotUIState &fs = *frogpilotUIState(); + frogpilotToggleLevels = parent->frogpilotToggleLevels; calibratedLateralAccelerationLabel->setText(QString::number(params.getFloat("CalibratedLateralAcceleration"), 'f', 2) + tr(" m/s²")); @@ -666,6 +847,10 @@ void FrogPilotLongitudinalPanel::showEvent(QShowEvent *event) { vEgoStartingToggle->setTitle(QString(tr("Start Speed (Default: %1)")).arg(QString::number(parent->vEgoStarting, 'f', 2))); vEgoStoppingToggle->setTitle(QString(tr("Stop Speed (Default: %1)")).arg(QString::number(parent->vEgoStopping, 'f', 2))); + bool keyExists = !params.get("WeatherToken").empty(); + weatherKeyControl->setText(0, keyExists ? tr("REMOVE") : tr("ADD")); + weatherKeyControl->setVisibleButton(1, keyExists && fs.frogpilot_scene.online); + updateToggles(); } @@ -676,6 +861,10 @@ void FrogPilotLongitudinalPanel::updateMetric(bool metric, bool bootRun) { double speedConversion = metric ? MILE_TO_KM : KM_TO_MILE; params.putIntNonBlocking("IncreasedStoppedDistance", params.getInt("IncreasedStoppedDistance") * distanceConversion); + params.putIntNonBlocking("IncreasedStoppedDistanceLowVisibility", params.getInt("IncreasedStoppedDistanceLowVisibility") * distanceConversion); + params.putIntNonBlocking("IncreasedStoppedDistanceRain", params.getInt("IncreasedStoppedDistanceRain") * distanceConversion); + params.putIntNonBlocking("IncreasedStoppedDistanceRainStorm", params.getInt("IncreasedStoppedDistanceRainStorm") * distanceConversion); + params.putIntNonBlocking("IncreasedStoppedDistanceSnow", params.getInt("IncreasedStoppedDistanceSnow") * distanceConversion); params.putIntNonBlocking("CESignalSpeed", params.getInt("CESignalSpeed") * speedConversion); params.putIntNonBlocking("CESpeed", params.getInt("CESpeed") * speedConversion); @@ -731,6 +920,10 @@ void FrogPilotLongitudinalPanel::updateMetric(bool metric, bool bootRun) { FrogPilotParamValueControl *offset6Toggle = static_cast(toggles["Offset6"]); FrogPilotParamValueControl *offset7Toggle = static_cast(toggles["Offset7"]); FrogPilotParamValueControl *increasedStoppedDistanceToggle = static_cast(toggles["IncreasedStoppedDistance"]); + FrogPilotParamValueControl *increasedStoppedDistanceLowVisibilityToggle = static_cast(toggles["IncreasedStoppedDistanceLowVisibility"]); + FrogPilotParamValueControl *increasedStoppedDistanceRainToggle = static_cast(toggles["IncreasedStoppedDistanceRain"]); + FrogPilotParamValueControl *increasedStoppedDistanceRainStormToggle = static_cast(toggles["IncreasedStoppedDistanceRainStorm"]); + FrogPilotParamValueControl *increasedStoppedDistanceSnowToggle = static_cast(toggles["IncreasedStoppedDistanceSnow"]); FrogPilotParamValueControl *setSpeedOffsetToggle = static_cast(toggles["SetSpeedOffset"]); if (metric) { @@ -751,6 +944,10 @@ void FrogPilotLongitudinalPanel::updateMetric(bool metric, bool bootRun) { offset7Toggle->setDescription(tr("How much to offset posted speed-limits between 75 and 99 mph.")); increasedStoppedDistanceToggle->updateControl(0, 3, metricDistanceLabels); + increasedStoppedDistanceLowVisibilityToggle->updateControl(0, 3, metricDistanceLabels); + increasedStoppedDistanceRainToggle->updateControl(0, 3, metricDistanceLabels); + increasedStoppedDistanceRainStormToggle->updateControl(0, 3, metricDistanceLabels); + increasedStoppedDistanceSnowToggle->updateControl(0, 3, metricDistanceLabels); ceSignal->updateControl(0, 150, metricSpeedLabels); ceSpeedToggle->updateControl(0, 150, metricSpeedLabels); @@ -782,6 +979,10 @@ void FrogPilotLongitudinalPanel::updateMetric(bool metric, bool bootRun) { offset7Toggle->setDescription(tr("How much to offset posted speed-limits between 75 and 99 mph.")); increasedStoppedDistanceToggle->updateControl(0, 10, imperialDistanceLabels); + increasedStoppedDistanceLowVisibilityToggle->updateControl(0, 10, imperialDistanceLabels); + increasedStoppedDistanceRainToggle->updateControl(0, 10, imperialDistanceLabels); + increasedStoppedDistanceRainStormToggle->updateControl(0, 10, imperialDistanceLabels); + increasedStoppedDistanceSnowToggle->updateControl(0, 10, imperialDistanceLabels); ceSignal->updateControl(0, 99, imperialSpeedLabels); ceSpeedToggle->updateControl(0, 99, imperialSpeedLabels); @@ -812,7 +1013,11 @@ void FrogPilotLongitudinalPanel::updateToggles() { bool setVisible = parent->tuningLevel >= frogpilotToggleLevels[key].toDouble(); - if (key == "CustomCruise" || key == "CustomCruiseLong" || key == "SetSpeedLimit" || key == "SetSpeedOffset") { + if (key == "CEStopLights") { + setVisible &= !toggles["CEModelStopTime"]->isVisible(); + } + + else if (key == "CustomCruise" || key == "CustomCruiseLong" || key == "SetSpeedLimit" || key == "SetSpeedOffset") { setVisible &= !parent->hasPCMCruise; } @@ -820,6 +1025,10 @@ void FrogPilotLongitudinalPanel::updateToggles() { setVisible &= parent->isToyota; } + else if (key == "HumanLaneChanges") { + setVisible &= parent->hasRadar; + } + else if (key == "MapGears") { setVisible &= parent->isGM || parent->isHKGCanFd || parent->isToyota; setVisible &= !parent->isTSK; diff --git a/frogpilot/ui/qt/offroad/longitudinal_settings.h b/frogpilot/ui/qt/offroad/longitudinal_settings.h index 2d9343c..1201109 100644 --- a/frogpilot/ui/qt/offroad/longitudinal_settings.h +++ b/frogpilot/ui/qt/offroad/longitudinal_settings.h @@ -11,6 +11,7 @@ public: signals: void openSubPanel(); void openSubSubPanel(); + void openSubSubSubPanel(); protected: void showEvent(QShowEvent *event) override; @@ -21,17 +22,19 @@ private: bool customPersonalityOpen; bool forceOpenDescriptions; + bool qolOpen; bool slcOpen; + bool weatherOpen; std::map toggles; QSet advancedLongitudinalTuneKeys = {"LongitudinalActuatorDelay", "MaxDesiredAcceleration", "StartAccel", "StopAccel", "StoppingDecelRate", "VEgoStarting", "VEgoStopping"}; QSet aggressivePersonalityKeys = {"AggressiveFollow", "AggressiveJerkAcceleration", "AggressiveJerkDeceleration", "AggressiveJerkDanger", "AggressiveJerkSpeed", "AggressiveJerkSpeedDecrease", "ResetAggressivePersonality"}; - QSet conditionalExperimentalKeys = {"CESpeed", "CESpeedLead", "CECurves", "CELead", "CEModelStopTime", "CENavigation", "CESignalSpeed", "ShowCEMStatus"}; + QSet conditionalExperimentalKeys = {"CESpeed", "CESpeedLead", "CECurves", "CELead", "CEModelStopTime", "CENavigation", "CESignalSpeed", "CEStopLights", "ShowCEMStatus"}; QSet curveSpeedKeys = {"CalibratedLateralAcceleration", "CalibrationProgress", "ResetCurveData", "ShowCSCStatus"}; QSet customDrivingPersonalityKeys = {"AggressivePersonalityProfile", "RelaxedPersonalityProfile", "StandardPersonalityProfile", "TrafficPersonalityProfile"}; - QSet longitudinalTuneKeys = {"AccelerationProfile", "DecelerationProfile", "HumanAcceleration", "HumanFollowing", "LeadDetectionThreshold", "TacoTune"}; - QSet qolKeys = {"CustomCruise", "CustomCruiseLong", "ForceStops", "IncreasedStoppedDistance", "MapGears", "ReverseCruise", "SetSpeedOffset"}; + QSet longitudinalTuneKeys = {"AccelerationProfile", "DecelerationProfile", "HumanAcceleration", "HumanFollowing", "HumanLaneChanges", "LeadDetectionThreshold", "TacoTune"}; + QSet qolKeys = {"CustomCruise", "CustomCruiseLong", "ForceStops", "IncreasedStoppedDistance", "MapGears", "ReverseCruise", "SetSpeedOffset", "WeatherPresets"}; QSet relaxedPersonalityKeys = {"RelaxedFollow", "RelaxedJerkAcceleration", "RelaxedJerkDeceleration", "RelaxedJerkDanger", "RelaxedJerkSpeed", "RelaxedJerkSpeedDecrease", "ResetRelaxedPersonality"}; QSet speedLimitControllerKeys = {"SLCOffsets", "SLCFallback", "SLCOverride", "SLCPriority", "SLCQOL", "SLCVisuals"}; QSet speedLimitControllerOffsetsKeys = {"Offset1", "Offset2", "Offset3", "Offset4", "Offset5", "Offset6", "Offset7"}; @@ -39,9 +42,16 @@ private: QSet speedLimitControllerVisualKeys = {"ShowSLCOffset", "SpeedLimitSources"}; QSet standardPersonalityKeys = {"StandardFollow", "StandardJerkAcceleration", "StandardJerkDeceleration", "StandardJerkDanger", "StandardJerkSpeed", "StandardJerkSpeedDecrease", "ResetStandardPersonality"}; QSet trafficPersonalityKeys = {"TrafficFollow", "TrafficJerkAcceleration", "TrafficJerkDeceleration", "TrafficJerkDanger", "TrafficJerkSpeed", "TrafficJerkSpeedDecrease", "ResetTrafficPersonality"}; + QSet weatherKeys = {"LowVisibilityOffsets", "RainOffsets", "RainStormOffsets", "SetWeatherKey", "SnowOffsets"}; + QSet weatherLowVisibilityKeys = {"IncreaseFollowingLowVisibility", "IncreasedStoppedDistanceLowVisibility", "ReduceAccelerationLowVisibility", "ReduceLateralAccelerationLowVisibility"}; + QSet weatherRainKeys = {"IncreaseFollowingRain", "IncreasedStoppedDistanceRain", "ReduceAccelerationRain", "ReduceLateralAccelerationRain"}; + QSet weatherRainStormKeys = {"IncreaseFollowingRainStorm", "IncreasedStoppedDistanceRainStorm", "ReduceAccelerationRainStorm", "ReduceLateralAccelerationRainStorm"}; + QSet weatherSnowKeys = {"IncreaseFollowingSnow", "IncreasedStoppedDistanceSnow", "ReduceAccelerationSnow", "ReduceLateralAccelerationSnow"}; QSet parentKeys; + FrogPilotButtonsControl *weatherKeyControl; + FrogPilotParamValueControl *longitudinalActuatorDelayToggle; FrogPilotParamValueControl *startAccelToggle; FrogPilotParamValueControl *stopAccelToggle; @@ -60,4 +70,6 @@ private: Params params_cache{"/cache/params"}; Params params_default{"/dev/shm/params_default"}; Params params_memory{"/dev/shm/params"}; + + QNetworkAccessManager *networkManager; }; diff --git a/frogpilot/ui/qt/offroad/maps_settings.cc b/frogpilot/ui/qt/offroad/maps_settings.cc index 3ec9209..906b419 100644 --- a/frogpilot/ui/qt/offroad/maps_settings.cc +++ b/frogpilot/ui/qt/offroad/maps_settings.cc @@ -63,7 +63,7 @@ FrogPilotMapsPanel::FrogPilotMapsPanel(FrogPilotSettingsWindow *parent) : FrogPi QObject::connect(removeMapsButton, &ButtonControl::clicked, [this] { if (FrogPilotConfirmationDialog::yesorno(tr("Delete all downloaded maps?"), this)) { std::thread([this] { - mapsSize->setText("0 MB"); + mapsSize->setText(tr("0 MB")); mapsFolderPath.removeRecursively(); }).detach(); @@ -181,7 +181,7 @@ void FrogPilotMapsPanel::showEvent(QShowEvent *event) { std::string osmDownloadProgress = params.get("OSMDownloadProgress"); if (!osmDownloadProgress.empty()) { downloadMapsButton->setText(tr("CANCEL")); - downloadStatus->setText("Calculating..."); + downloadStatus->setText(tr("Calculating...")); downloadStatus->setVisible(true); @@ -192,7 +192,7 @@ void FrogPilotMapsPanel::showEvent(QShowEvent *event) { updateDownloadLabels(osmDownloadProgress); } else { downloadMapsButton->setEnabled(!cancellingDownload && hasMapsSelected && fs.frogpilot_scene.online && parked); - downloadMapsButton->setValue(fs.frogpilot_scene.online ? (parked ? "" : "Not parked") : tr("Offline...")); + downloadMapsButton->setValue(fs.frogpilot_scene.online ? (parked ? "" : tr("Not parked")) : tr("Offline...")); } } @@ -209,7 +209,7 @@ void FrogPilotMapsPanel::updateState(const UIState &s, const FrogPilotUIState &f updateDownloadLabels(osmDownloadProgress); } else { downloadMapsButton->setEnabled(!cancellingDownload && hasMapsSelected && fs.frogpilot_scene.online && parked); - downloadMapsButton->setValue(fs.frogpilot_scene.online ? (parked ? "" : "Not parked") : tr("Offline...")); + downloadMapsButton->setValue(fs.frogpilot_scene.online ? (parked ? "" : tr("Not parked")) : tr("Offline...")); } parent->keepScreenOn = !osmDownloadProgress.empty(); @@ -220,10 +220,10 @@ void FrogPilotMapsPanel::cancelDownload() { downloadMapsButton->setEnabled(false); - downloadETA->setText("Cancelling..."); - downloadMapsButton->setText(tr("CANCELLED")); - downloadStatus->setText("Cancelling..."); - downloadTimeElapsed->setText("Cancelling..."); + downloadETA->setText(tr("Calculating...")); + downloadMapsButton->setText(tr("CANCEL")); + downloadStatus->setText(tr("Calculating...")); + downloadTimeElapsed->setText(tr("Calculating...")); params.remove("OSMDownloadProgress"); params_memory.remove("OSMDownloadLocations"); @@ -250,10 +250,10 @@ void FrogPilotMapsPanel::cancelDownload() { } void FrogPilotMapsPanel::startDownload() { - downloadETA->setText("Calculating..."); + downloadETA->setText(tr("Calculating...")); downloadMapsButton->setText(tr("CANCEL")); - downloadStatus->setText("Calculating..."); - downloadTimeElapsed->setText("Calculating..."); + downloadStatus->setText(tr("Calculating...")); + downloadTimeElapsed->setText(tr("Calculating...")); downloadETA->setVisible(true); downloadStatus->setVisible(true); diff --git a/frogpilot/ui/qt/offroad/model_settings.cc b/frogpilot/ui/qt/offroad/model_settings.cc index 362346e..9b97d51 100644 --- a/frogpilot/ui/qt/offroad/model_settings.cc +++ b/frogpilot/ui/qt/offroad/model_settings.cc @@ -151,7 +151,7 @@ FrogPilotModelPanel::FrogPilotModelPanel(FrogPilotSettingsWindow *parent) : Frog downloadModelButton->setText(0, tr("CANCEL")); - downloadModelButton->setValue("Downloading..."); + downloadModelButton->setValue(tr("Downloading...")); downloadModelButton->setVisibleButton(1, false); @@ -169,7 +169,7 @@ FrogPilotModelPanel::FrogPilotModelPanel(FrogPilotSettingsWindow *parent) : Frog downloadModelButton->setText(1, tr("CANCEL")); - downloadModelButton->setValue("Downloading..."); + downloadModelButton->setValue(tr("Downloading...")); downloadModelButton->setVisibleButton(0, false); @@ -346,7 +346,7 @@ FrogPilotModelPanel::FrogPilotModelPanel(FrogPilotSettingsWindow *parent) : Frog params_memory.putBool("DownloadAllModels", true); params_memory.put("ModelDownloadProgress", "Downloading..."); - downloadModelButton->setValue("Downloading..."); + downloadModelButton->setValue(tr("Downloading...")); allModelsDownloading = true; } @@ -422,7 +422,7 @@ void FrogPilotModelPanel::showEvent(QShowEvent *event) { downloadModelButton->setEnabledButtons(0, !allModelsDownloaded && !allModelsDownloading && !cancellingDownload && !updatingTinygrad && fs.frogpilot_scene.online && parked); downloadModelButton->setEnabledButtons(1, !allModelsDownloaded && !modelDownloading && !cancellingDownload && !updatingTinygrad && fs.frogpilot_scene.online && parked); - downloadModelButton->setValue(fs.frogpilot_scene.online ? (parked ? "" : "Not parked") : tr("Offline...")); + downloadModelButton->setValue(fs.frogpilot_scene.online ? (parked ? "" : tr("Not parked")) : tr("Offline...")); updateTinygradButton->setEnabled(!modelDownloading && !cancellingDownload && fs.frogpilot_scene.online && parked && tinygradUpdate); updateTinygradButton->setValue(tinygradUpdate ? tr("Update available!") : tr("Up to date!")); @@ -443,8 +443,26 @@ void FrogPilotModelPanel::updateState(const UIState &s, const FrogPilotUIState & QString progress = QString::fromStdString(params_memory.get("ModelDownloadProgress")); bool downloadFailed = progress.contains(QRegularExpression("cancelled|exists|failed|missing|offline", QRegularExpression::CaseInsensitiveOption)); - if (progress != "Downloading...") { - downloadModelButton->setValue(progress); + { + QString translatedProgress; + if (progress == "Downloading...") { + translatedProgress = tr("Downloading..."); + } else if (progress == "Downloaded!") { + translatedProgress = tr("Downloaded!"); + } else if (progress == "All models downloaded!") { + translatedProgress = tr("All models downloaded!"); + } else if (progress.contains("cancelled", Qt::CaseInsensitive)) { + translatedProgress = tr("Download cancelled..."); + } else if (progress.contains("failed", Qt::CaseInsensitive)) { + translatedProgress = tr("Download failed..."); + } else if (progress.contains("offline", Qt::CaseInsensitive)) { + translatedProgress = tr("GitHub and GitLab are offline..."); + } else if (progress == "Repository unavailable") { + translatedProgress = tr("Repository unavailable"); + } else { + translatedProgress = progress; + } + downloadModelButton->setValue(translatedProgress); } if (progress == "All models downloaded!" || progress == "Downloaded!" && !allModelsDownloading || downloadFailed) { @@ -473,15 +491,33 @@ void FrogPilotModelPanel::updateState(const UIState &s, const FrogPilotUIState & }); } } else { - downloadModelButton->setValue(fs.frogpilot_scene.online ? (parked ? "" : "Not parked") : tr("Offline...")); + downloadModelButton->setValue(fs.frogpilot_scene.online ? (parked ? "" : tr("Not parked")) : tr("Offline...")); } if (updatingTinygrad) { QString progress = QString::fromStdString(params_memory.get("ModelDownloadProgress")); bool downloadFailed = progress.contains(QRegularExpression("cancelled|exists|failed|missing|offline", QRegularExpression::CaseInsensitiveOption)); - if (progress != "Downloading...") { - updateTinygradButton->setValue(progress); + { + QString translatedProgress; + if (progress == "Downloading...") { + translatedProgress = tr("Downloading..."); + } else if (progress == "Downloaded!") { + translatedProgress = tr("Downloaded!"); + } else if (progress == "All models downloaded!") { + translatedProgress = tr("All models downloaded!"); + } else if (progress.contains("cancelled", Qt::CaseInsensitive)) { + translatedProgress = tr("Download cancelled..."); + } else if (progress.contains("failed", Qt::CaseInsensitive)) { + translatedProgress = tr("Download failed..."); + } else if (progress.contains("offline", Qt::CaseInsensitive)) { + translatedProgress = tr("GitHub and GitLab are offline..."); + } else if (progress == "Repository unavailable") { + translatedProgress = tr("Repository unavailable"); + } else { + translatedProgress = progress; + } + updateTinygradButton->setValue(translatedProgress); } if (progress == "Updated!" && updatingTinygrad || downloadFailed) { @@ -493,7 +529,7 @@ void FrogPilotModelPanel::updateState(const UIState &s, const FrogPilotUIState & if (modelDownloading) { downloadModelButton->setText(1, tr("CANCEL")); - downloadModelButton->setValue("Downloading..."); + downloadModelButton->setValue(tr("Downloading...")); downloadModelButton->setVisibleButton(0, false); } else { diff --git a/frogpilot/ui/qt/offroad/navigation_settings.cc b/frogpilot/ui/qt/offroad/navigation_settings.cc index 9669553..55b8d60 100644 --- a/frogpilot/ui/qt/offroad/navigation_settings.cc +++ b/frogpilot/ui/qt/offroad/navigation_settings.cc @@ -1,6 +1,8 @@ #include "frogpilot/ui/qt/offroad/navigation_settings.h" FrogPilotNavigationPanel::FrogPilotNavigationPanel(FrogPilotSettingsWindow *parent) : FrogPilotListWidget(parent), parent(parent) { + networkManager = new QNetworkAccessManager(this); + QJsonObject shownDescriptions = QJsonDocument::fromJson(QString::fromStdString(params.get("ShownToggleDescriptions")).toUtf8()).object(); QString className = this->metaObject()->className(); @@ -25,6 +27,9 @@ FrogPilotNavigationPanel::FrogPilotNavigationPanel(FrogPilotSettingsWindow *pare QObject::connect(searchInput, &FrogPilotButtonsControl::buttonClicked, [this](int id) { amapKeyControl1->setVisible(id == 1); amapKeyControl2->setVisible(id == 1); + publicMapboxKeyControl->setVisible(id == 0); + secretMapboxKeyControl->setVisible(id == 0); + setupButton->setVisible(id == 0); params.putInt("SearchInput", id); @@ -36,8 +41,107 @@ FrogPilotNavigationPanel::FrogPilotNavigationPanel(FrogPilotSettingsWindow *pare createKeyControl(amapKeyControl1, tr("Amap Key #1"), "AMapKey1", "", 39, settingsList); createKeyControl(amapKeyControl2, tr("Amap Key #2"), "AMapKey2", "", 39, settingsList); - createKeyControl(publicMapboxKeyControl, tr("Public Mapbox Key"), "MapboxPublicKey", "pk.", 80, settingsList); - createKeyControl(secretMapboxKeyControl, tr("Secret Mapbox Key"), "MapboxSecretKey", "sk.", 80, settingsList); + publicMapboxKeyControl = new FrogPilotButtonsControl(tr("Public Mapbox Key"), tr("Manage your Public Mapbox Key."), "", {tr("ADD"), tr("TEST")}); + QObject::connect(publicMapboxKeyControl, &FrogPilotButtonsControl::buttonClicked, [this](int id) { + if (id == 0) { + if (mapboxPublicKeySet) { + if (FrogPilotConfirmationDialog::yesorno(tr("Remove your Public Mapbox Key?"), this)) { + params.remove("MapboxPublicKey"); + params_cache.remove("MapboxPublicKey"); + + updateButtons(); + } + } else { + QString key = InputDialog::getText(tr("Enter your Public Mapbox Key"), this).trimmed(); + if (!key.isEmpty()) { + if (!key.startsWith("pk.")) { + key = "pk." + key; + } + if (key.length() >= 80) { + params.put("MapboxPublicKey", key.toStdString()); + + updateButtons(); + } else { + ConfirmationDialog::alert(tr("Inputted key is invalid or too short!"), this); + } + } + } + } else { + publicMapboxKeyControl->setValue(tr("Testing...")); + + QString key = QString::fromStdString(params.get("MapboxPublicKey")); + QString url = QString("https://api.mapbox.com/geocoding/v5/mapbox.places/mapbox.json?access_token=%1").arg(key); + + QNetworkRequest request(url); + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, [=]() { + publicMapboxKeyControl->setValue(""); + + QString message; + if (reply->error() == QNetworkReply::NoError) { + message = tr("Key is valid!"); + } else if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 401) { + message = tr("Key is invalid!"); + } else { + message = tr("An error occurred: %1").arg(reply->errorString()); + } + ConfirmationDialog::alert(message, this); + reply->deleteLater(); + }); + } + }); + settingsList->addItem(publicMapboxKeyControl); + + secretMapboxKeyControl = new FrogPilotButtonsControl(tr("Secret Mapbox Key"), tr("Manage your Secret Mapbox Key."), "", {tr("ADD"), tr("TEST")}); + QObject::connect(secretMapboxKeyControl, &FrogPilotButtonsControl::buttonClicked, [this](int id) { + if (id == 0) { + if (mapboxSecretKeySet) { + if (FrogPilotConfirmationDialog::yesorno(tr("Remove your Secret Mapbox Key?"), this)) { + params.remove("MapboxSecretKey"); + params_cache.remove("MapboxSecretKey"); + + updateButtons(); + } + } else { + QString key = InputDialog::getText(tr("Enter your Secret Mapbox Key"), this).trimmed(); + if (!key.isEmpty()) { + if (!key.startsWith("sk.")) { + key = "sk." + key; + } + if (key.length() >= 80) { + params.put("MapboxSecretKey", key.toStdString()); + + updateButtons(); + } else { + ConfirmationDialog::alert(tr("Inputted key is invalid or too short!"), this); + } + } + } + } else { + secretMapboxKeyControl->setValue(tr("Testing...")); + + QString key = QString::fromStdString(params.get("MapboxSecretKey")); + QString url = QString("https://api.mapbox.com/directions/v5/mapbox/driving/-73.989,40.733;-74,40.733?access_token=%1").arg(key); + + QNetworkRequest request(url); + QNetworkReply *reply = networkManager->get(request); + connect(reply, &QNetworkReply::finished, [=]() { + secretMapboxKeyControl->setValue(""); + + QString message; + if (reply->error() == QNetworkReply::NoError) { + message = tr("Key is valid!"); + } else if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 401) { + message = tr("Key is invalid!"); + } else { + message = tr("An error occurred: %1").arg(reply->errorString()); + } + ConfirmationDialog::alert(message, this); + reply->deleteLater(); + }); + } + }); + settingsList->addItem(secretMapboxKeyControl); setupButton = new ButtonControl(tr("Mapbox Setup Instructions"), tr("VIEW"), tr("Instructions on how to set up Mapbox for \"Primeless Navigation\"."), this); QObject::connect(setupButton, &ButtonControl::clicked, [this]() { @@ -179,6 +283,9 @@ void FrogPilotNavigationPanel::showEvent(QShowEvent *event) { amapKeyControl1->setVisible(selectedSearchInput == 1); amapKeyControl2->setVisible(selectedSearchInput == 1); + publicMapboxKeyControl->setVisible(selectedSearchInput == 0); + secretMapboxKeyControl->setVisible(selectedSearchInput == 0); + setupButton->setVisible(selectedSearchInput == 0); updateSpeedLimitsToggle->setVisibleButton(0, updatingLimits); updateSpeedLimitsToggle->setVisibleButton(1, !updatingLimits); @@ -245,14 +352,18 @@ void FrogPilotNavigationPanel::createKeyControl(ButtonControl *&control, const Q } void FrogPilotNavigationPanel::updateButtons() { + FrogPilotUIState &fs = *frogpilotUIState(); + amapKeyControl1->setText(params.get("AMapKey1").empty() ? tr("ADD") : tr("REMOVE")); amapKeyControl2->setText(params.get("AMapKey2").empty() ? tr("ADD") : tr("REMOVE")); mapboxPublicKeySet = QString::fromStdString(params.get("MapboxPublicKey")).startsWith("pk"); mapboxSecretKeySet = QString::fromStdString(params.get("MapboxSecretKey")).startsWith("sk"); - publicMapboxKeyControl->setText(mapboxPublicKeySet ? tr("REMOVE") : tr("ADD")); - secretMapboxKeyControl->setText(mapboxSecretKeySet ? tr("REMOVE") : tr("ADD")); + publicMapboxKeyControl->setText(0, mapboxPublicKeySet ? tr("REMOVE") : tr("ADD")); + publicMapboxKeyControl->setVisibleButton(1, mapboxPublicKeySet && fs.frogpilot_scene.online); + secretMapboxKeyControl->setText(0, mapboxSecretKeySet ? tr("REMOVE") : tr("ADD")); + secretMapboxKeyControl->setVisibleButton(1, mapboxSecretKeySet && fs.frogpilot_scene.online); } void FrogPilotNavigationPanel::updateState(const UIState &s, const FrogPilotUIState &fs) { diff --git a/frogpilot/ui/qt/offroad/navigation_settings.h b/frogpilot/ui/qt/offroad/navigation_settings.h index 6d6f7bf..b27f312 100644 --- a/frogpilot/ui/qt/offroad/navigation_settings.h +++ b/frogpilot/ui/qt/offroad/navigation_settings.h @@ -31,8 +31,8 @@ private: ButtonControl *amapKeyControl1; ButtonControl *amapKeyControl2; - ButtonControl *publicMapboxKeyControl; - ButtonControl *secretMapboxKeyControl; + FrogPilotButtonsControl *publicMapboxKeyControl; + FrogPilotButtonsControl *secretMapboxKeyControl; ButtonControl *setupButton; FrogPilotButtonControl *updateSpeedLimitsToggle; @@ -49,5 +49,7 @@ private: QLabel *imageLabel; + QNetworkAccessManager *networkManager; + QStackedLayout *primelessLayout; }; diff --git a/frogpilot/ui/qt/offroad/theme_settings.cc b/frogpilot/ui/qt/offroad/theme_settings.cc index b133e5c..fdc5fdf 100644 --- a/frogpilot/ui/qt/offroad/theme_settings.cc +++ b/frogpilot/ui/qt/offroad/theme_settings.cc @@ -288,7 +288,7 @@ FrogPilotThemesPanel::FrogPilotThemesPanel(FrogPilotSettingsWindow *parent) : Fr downloadThemeAsset(colorSchemeToDownload, "ColorToDownload", "DownloadableColors", params, params_memory); - downloadStatusLabel->setText("Downloading..."); + downloadStatusLabel->setText(tr("Downloading...")); } } } else if (id == 2) { @@ -340,7 +340,7 @@ FrogPilotThemesPanel::FrogPilotThemesPanel(FrogPilotSettingsWindow *parent) : Fr downloadThemeAsset(distanceIconPackToDownload, "DistanceIconToDownload", "DownloadableDistanceIcons", params, params_memory); - downloadStatusLabel->setText("Downloading..."); + downloadStatusLabel->setText(tr("Downloading...")); } } } else if (id == 2) { @@ -392,7 +392,7 @@ FrogPilotThemesPanel::FrogPilotThemesPanel(FrogPilotSettingsWindow *parent) : Fr downloadThemeAsset(iconPackToDownload, "IconToDownload", "DownloadableIcons", params, params_memory); - downloadStatusLabel->setText("Downloading..."); + downloadStatusLabel->setText(tr("Downloading...")); } } } else if (id == 2) { @@ -444,7 +444,7 @@ FrogPilotThemesPanel::FrogPilotThemesPanel(FrogPilotSettingsWindow *parent) : Fr downloadThemeAsset(signalAnimationToDownload, "SignalToDownload", "DownloadableSignals", params, params_memory); - downloadStatusLabel->setText("Downloading..."); + downloadStatusLabel->setText(tr("Downloading...")); } } } else if (id == 2) { @@ -496,7 +496,7 @@ FrogPilotThemesPanel::FrogPilotThemesPanel(FrogPilotSettingsWindow *parent) : Fr downloadThemeAsset(soundPackToDownload, "SoundToDownload", "DownloadableSounds", params, params_memory); - downloadStatusLabel->setText("Downloading..."); + downloadStatusLabel->setText(tr("Downloading...")); } } } else if (id == 2) { @@ -548,7 +548,7 @@ FrogPilotThemesPanel::FrogPilotThemesPanel(FrogPilotSettingsWindow *parent) : Fr downloadThemeAsset(wheelToDownload, "WheelToDownload", "DownloadableWheels", params, params_memory); - downloadStatusLabel->setText("Downloading..."); + downloadStatusLabel->setText(tr("Downloading...")); } } } else if (id == 2) { @@ -566,7 +566,7 @@ FrogPilotThemesPanel::FrogPilotThemesPanel(FrogPilotSettingsWindow *parent) : Fr manageWheelIconsButton->setValue(getThemeName(param.toStdString(), params)); themeToggle = manageWheelIconsButton; } else if (param == "DownloadStatusLabel") { - downloadStatusLabel = new LabelControl(title, "Idle"); + downloadStatusLabel = new LabelControl(title, tr("Idle")); themeToggle = downloadStatusLabel; } else if (param == "StartupAlert") { FrogPilotButtonsControl *startupAlertButton = new FrogPilotButtonsControl(title, desc, icon, {tr("STOCK"), tr("FROGPILOT"), tr("CUSTOM"), tr("CLEAR")}, true); @@ -747,8 +747,16 @@ void FrogPilotThemesPanel::updateState(const UIState &s, const FrogPilotUIState QString progress = QString::fromStdString(params_memory.get("ThemeDownloadProgress")); bool downloadFailed = progress.contains(QRegularExpression("cancelled|exists|failed|offline", QRegularExpression::CaseInsensitiveOption)); - if (progress != "Downloading...") { - downloadStatusLabel->setText(progress); + if (progress != "Downloading...") { + static const QMap progressTranslations = { + {"Unpacking theme...", tr("Unpacking theme...")}, + {"Downloaded!", tr("Downloaded!")}, + {"Download cancelled...", tr("Download cancelled...")}, + {"Download failed...", tr("Download failed...")}, + {"Repository unavailable", tr("Repository unavailable")}, + {"GitHub and GitLab are offline...", tr("GitHub and GitLab are offline...")} + }; + downloadStatusLabel->setText(progressTranslations.value(progress, tr("Idle"))); } if (progress == "Downloaded!" || downloadFailed) { @@ -774,7 +782,7 @@ void FrogPilotThemesPanel::updateState(const UIState &s, const FrogPilotUIState params_memory.remove("CancelThemeDownload"); params_memory.remove("ThemeDownloadProgress"); - downloadStatusLabel->setText("Idle"); + downloadStatusLabel->setText(tr("Idle")); }); } } diff --git a/frogpilot/ui/qt/offroad/vehicle_settings.cc b/frogpilot/ui/qt/offroad/vehicle_settings.cc index 652c4b2..073982d 100644 --- a/frogpilot/ui/qt/offroad/vehicle_settings.cc +++ b/frogpilot/ui/qt/offroad/vehicle_settings.cc @@ -150,16 +150,22 @@ FrogPilotVehiclesPanel::FrogPilotVehiclesPanel(FrogPilotSettingsWindow *parent) FrogPilotListWidget *gmList = new FrogPilotListWidget(this); FrogPilotListWidget *hkgList = new FrogPilotListWidget(this); + FrogPilotListWidget *hondaList = new FrogPilotListWidget(this); + FrogPilotListWidget *subaruList = new FrogPilotListWidget(this); FrogPilotListWidget *toyotaList = new FrogPilotListWidget(this); FrogPilotListWidget *vehicleInfoList = new FrogPilotListWidget(this); ScrollView *gmPanel = new ScrollView(gmList, this); ScrollView *hkgPanel = new ScrollView(hkgList, this); + ScrollView *hondaPanel = new ScrollView(hondaList, this); + ScrollView *subaruPanel = new ScrollView(subaruList, this); ScrollView *toyotaPanel = new ScrollView(toyotaList, this); ScrollView *vehicleInfoPanel = new ScrollView(vehicleInfoList, this); vehiclesLayout->addWidget(gmPanel); vehiclesLayout->addWidget(hkgPanel); + vehiclesLayout->addWidget(hondaPanel); + vehiclesLayout->addWidget(subaruPanel); vehiclesLayout->addWidget(toyotaPanel); vehiclesLayout->addWidget(vehicleInfoPanel); @@ -173,6 +179,14 @@ FrogPilotVehiclesPanel::FrogPilotVehiclesPanel(FrogPilotSettingsWindow *parent) {"NewLongAPI", tr("comma's New Longitudinal API"), tr("comma's new gas and brake control system that improves acceleration and braking but may cause issues on some Genesis/Hyundai/Kia vehicles."), ""}, {"TacoTuneHacks", tr("\"Taco Bell Run\" Torque Hack"), tr("The steering torque hack from comma's 2022 \"Taco Bell Run\". Designed to increase steering torque at low speeds for left and right turns."), ""}, + {"HondaToggles", tr("Acura/Honda Settings"), tr("FrogPilot features for Acura and Honda vehicles."), ""}, + {"HondaAltTune", tr("Gentle Following"), tr("Reduces jerky acceleration and braking when following a lead vehicle. Ideal for stop-and-go traffic."), ""}, + {"HondaMaxBrake", tr("Increased Braking Force"), tr("Increases the maximum braking force for improved stopping performance."), ""}, + {"HondaLowSpeedPedal", tr("Responsive Pedal at Low Speeds"), tr("Improves acceleration from a standstill for a more responsive throttle feel in city driving."), ""}, + + {"SubaruToggles", tr("Subaru Settings"), tr("FrogPilot features for Subaru vehicles."), ""}, + {"SubaruSNG", tr("Stop and Go"), tr("Stop and go for supported Subaru vehicles."), ""}, + {"ToyotaToggles", tr("Toyota/Lexus Settings"), tr("FrogPilot features for Lexus and Toyota vehicles."), ""}, {"ToyotaDoors", tr("Automatically Lock/Unlock Doors"), tr("Automatically lock/unlock doors when shifting in and out of drive."), ""}, {"ClusterOffset", tr("Dashboard Speed Offset"), tr("The speed offset openpilot uses to match the speed on the dashboard display."), ""}, @@ -209,6 +223,22 @@ FrogPilotVehiclesPanel::FrogPilotVehiclesPanel(FrogPilotSettingsWindow *parent) }); vehicleToggle = hkgButton; + } else if (param == "HondaToggles") { + ButtonControl *hondaButton = new ButtonControl(title, tr("MANAGE"), desc); + QObject::connect(hondaButton, &ButtonControl::clicked, [vehiclesLayout, hondaPanel, this]() { + openDescriptions(forceOpenDescriptions, toggles); + vehiclesLayout->setCurrentWidget(hondaPanel); + }); + vehicleToggle = hondaButton; + + } else if (param == "SubaruToggles") { + ButtonControl *subaruButton = new ButtonControl(title, tr("MANAGE"), desc); + QObject::connect(subaruButton, &ButtonControl::clicked, [vehiclesLayout, subaruPanel, this]() { + openDescriptions(forceOpenDescriptions, toggles); + vehiclesLayout->setCurrentWidget(subaruPanel); + }); + vehicleToggle = subaruButton; + } else if (param == "ToyotaToggles") { ButtonControl *toyotaButton = new ButtonControl(title, tr("MANAGE"), desc); QObject::connect(toyotaButton, &ButtonControl::clicked, [vehiclesLayout, toyotaPanel, this]() { @@ -255,6 +285,10 @@ FrogPilotVehiclesPanel::FrogPilotVehiclesPanel(FrogPilotSettingsWindow *parent) gmList->addItem(vehicleToggle); } else if (hkgKeys.contains(param)) { hkgList->addItem(vehicleToggle); + } else if (hondaKeys.contains(param)) { + hondaList->addItem(vehicleToggle); + } else if (subaruKeys.contains(param)) { + subaruList->addItem(vehicleToggle); } else if (toyotaKeys.contains(param)) { toyotaList->addItem(vehicleToggle); } else if (vehicleInfoKeys.contains(param)) { @@ -279,11 +313,11 @@ FrogPilotVehiclesPanel::FrogPilotVehiclesPanel(FrogPilotSettingsWindow *parent) static_cast(toggles["LockDoorsTimer"])->setWarning("Warning: openpilot can't detect if keys are still inside the car, so ensure you have a spare key to prevent accidental lockouts!"); - QSet rebootKeys = {"NewLongAPI", "TacoTuneHacks"}; + QSet rebootKeys = {"HondaAltTune", "NewLongAPI", "TacoTuneHacks"}; for (const QString &key : rebootKeys) { QObject::connect(static_cast(toggles[key]), &ToggleControl::toggleFlipped, [key, this](bool state) { if (started) { - if (key == "TacoTuneHacks" && state) { + if (key == "HondaAltTune" || key == "TacoTuneHacks" && state) { if (FrogPilotConfirmationDialog::toggleReboot(this)) { Hardware::reboot(); } @@ -367,6 +401,10 @@ void FrogPilotVehiclesPanel::updateToggles() { setVisible &= parent->isGM; } else if (hkgKeys.contains(key)) { setVisible &= parent->isHKG; + } else if (hondaKeys.contains(key)) { + setVisible &= parent->isHonda; + } else if (subaruKeys.contains(key)) { + setVisible &= parent->isSubaru; } else if (toyotaKeys.contains(key)) { setVisible &= parent->isToyota; } else if (vehicleInfoKeys.contains(key)) { @@ -377,7 +415,19 @@ void FrogPilotVehiclesPanel::updateToggles() { setVisible &= parent->hasOpenpilotLongitudinal; } - if (key == "LockDoorsTimer") { + if (key == "HondaAltTune") { + setVisible &= parent->isHondaNidec; + } + + else if (key == "HondaLowSpeedPedal") { + setVisible &= parent->hasPedal; + } + + else if (key == "HondaMaxBrake") { + setVisible &= parent->isHondaNidec; + } + + else if (key == "LockDoorsTimer") { setVisible &= !parent->isC3; } @@ -385,6 +435,10 @@ void FrogPilotVehiclesPanel::updateToggles() { setVisible &= !parent->hasPedal && !parent->hasSNG; } + else if (key == "SubaruSNG") { + setVisible &= parent->hasSNG; + } + else if (key == "TacoTuneHacks") { setVisible &= parent->isHKGCanFd; } @@ -400,6 +454,10 @@ void FrogPilotVehiclesPanel::updateToggles() { toggles["GMToggles"]->setVisible(true); } else if (hkgKeys.contains(key)) { toggles["HKGToggles"]->setVisible(true); + } else if (hondaKeys.contains(key)) { + toggles["HondaToggles"]->setVisible(true); + } else if (subaruKeys.contains(key)) { + toggles["SubaruToggles"]->setVisible(true); } else if (toyotaKeys.contains(key)) { toggles["ToyotaToggles"]->setVisible(true); } else if (vehicleInfoKeys.contains(key)) { diff --git a/frogpilot/ui/qt/offroad/vehicle_settings.h b/frogpilot/ui/qt/offroad/vehicle_settings.h index 967f20c..2c3ac0e 100644 --- a/frogpilot/ui/qt/offroad/vehicle_settings.h +++ b/frogpilot/ui/qt/offroad/vehicle_settings.h @@ -25,7 +25,9 @@ private: QSet gmKeys = {"ExperimentalGMTune", "LongPitch", "VoltSNG"}; QSet hkgKeys = {"NewLongAPI", "TacoTuneHacks"}; - QSet longitudinalKeys = {"ExperimentalGMTune", "FrogsGoMoosTweak", "LongPitch", "NewLongAPI", "SNGHack", "VoltSNG"}; + QSet hondaKeys = {"HondaAltTune", "HondaLowSpeedPedal", "HondaMaxBrake"}; + QSet longitudinalKeys = {"ExperimentalGMTune", "FrogsGoMoosTweak", "HondaAltTune", "HondaMaxBrake", "HondaLowSpeedPedal", "LongPitch", "NewLongAPI", "SNGHack", "SubaruSNG", "VoltSNG"}; + QSet subaruKeys = {"SubaruSNG"}; QSet toyotaKeys = {"ClusterOffset", "FrogsGoMoosTweak", "LockDoorsTimer", "SNGHack", "ToyotaDoors"}; QSet vehicleInfoKeys = {"BlindSpotSupport", "HardwareDetected", "OpenpilotLongitudinal", "PedalSupport", "RadarSupport", "SDSUSupport", "SNGSupport"}; diff --git a/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.cc b/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.cc index 7a1c687..bca17be 100644 --- a/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.cc +++ b/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.cc @@ -24,6 +24,10 @@ FrogPilotAnnotatedCameraWidget::FrogPilotAnnotatedCameraWidget(QWidget *parent) loadGif("../../frogpilot/assets/other_images/turn_icon.gif", cemTurnIcon, QSize(btn_size / 2, btn_size / 2), this); loadGif("../../frogpilot/assets/other_images/chill_mode_icon.gif", chillModeIcon, QSize(btn_size / 2, btn_size / 2), this); loadGif("../../frogpilot/assets/other_images/experimental_mode_icon.gif", experimentalModeIcon, QSize(btn_size / 2, btn_size / 2), this); + loadGif("../../frogpilot/assets/other_images/weather_clear_day.gif", weatherClearDay, QSize(btn_size / 2, btn_size / 2), this); + loadGif("../../frogpilot/assets/other_images/weather_clear_night.gif", weatherClearNight, QSize(btn_size / 2, btn_size / 2), this); + loadGif("../../frogpilot/assets/other_images/weather_rain.gif", weatherRain, QSize(btn_size / 2, btn_size / 2), this); + loadGif("../../frogpilot/assets/other_images/weather_snow.gif", weatherSnow, QSize(btn_size / 2, btn_size / 2), this); QObject::connect(animationTimer, &QTimer::timeout, [this] { animationFrameIndex = (animationFrameIndex + 1) % totalFrames; @@ -252,6 +256,10 @@ void FrogPilotAnnotatedCameraWidget::paintFrogPilotWidgets(QPainter &p, UIState } else if (animationTimer->isActive()) { animationTimer->stop(); } + + if (!frogpilot_scene.map_open && !hideBottomIcons) { + paintWeather(p, frogpilotPlan, frogpilot_scene); + } } void FrogPilotAnnotatedCameraWidget::paintAdjacentPaths(QPainter &p, const cereal::CarState::Reader &carState, const FrogPilotUIScene &frogpilot_scene, const QJsonObject &frogpilot_toggles) { @@ -540,11 +548,11 @@ void FrogPilotAnnotatedCameraWidget::paintLeadMetrics(QPainter &p, bool adjacent text = QString("%1 %2 (%3) | %4 %5 | %6 %7") .arg(qRound(leadDistance * distanceConversion)) .arg(leadDistanceUnit) - .arg(QString("Desired: %1").arg(frogpilotPlan.getDesiredFollowDistance() * distanceConversion)) + .arg(QString(tr("Desired: %1")).arg(frogpilotPlan.getDesiredFollowDistance() * distanceConversion)) .arg(qRound(leadSpeed * speedConversionMetrics)) .arg(leadSpeedUnit) .arg(QString::number(leadDistance / std::max(speed / speedConversion, 1.0f), 'f', 2)) - .arg("s"); + .arg(tr("s")); } QFontMetrics metrics(p.font()); @@ -899,7 +907,7 @@ void FrogPilotAnnotatedCameraWidget::paintStandstillTimer(QPainter &p) { p.setFont(InterFont(176, QFont::Bold)); { - QString minuteStr = (minutes == 1) ? "1 minute" : QString("%1 minutes").arg(minutes); + QString minuteStr = (minutes == 1) ? tr("1 minute") : QString(tr("%1 minutes")).arg(minutes); QRect textRect = p.fontMetrics().boundingRect(minuteStr); textRect.moveCenter({rect().center().x(), 210 - textRect.height() / 2}); p.setPen(QPen(blendedColor)); @@ -908,7 +916,7 @@ void FrogPilotAnnotatedCameraWidget::paintStandstillTimer(QPainter &p) { p.setFont(InterFont(66)); { - QString secondStr = (seconds == 1) ? "1 second" : QString("%1 seconds").arg(seconds); + QString secondStr = (seconds == 1) ? tr("1 second") : QString(tr("%1 seconds")).arg(seconds); QRect textRect = p.fontMetrics().boundingRect(secondStr); textRect.moveCenter({rect().center().x(), 290 - textRect.height() / 2}); p.setPen(QPen(whiteColor())); @@ -972,3 +980,47 @@ void FrogPilotAnnotatedCameraWidget::paintTurnSignals(QPainter &p, const cereal: p.restore(); } + +void FrogPilotAnnotatedCameraWidget::paintWeather(QPainter &p, const cereal::FrogPilotPlan::Reader &frogpilotPlan, FrogPilotUIScene &frogpilot_scene) { + int weatherId = frogpilotPlan.getWeatherId(); + if (weatherId == 0) { + return; + } + + p.save(); + + QPoint weatherIconPosition; + if (compassPosition != QPoint(0, 0)) { + weatherIconPosition = compassPosition; + weatherIconPosition.rx() += (rightHandDM ? UI_BORDER_SIZE + widget_size + UI_BORDER_SIZE : -UI_BORDER_SIZE - widget_size - UI_BORDER_SIZE) / (frogpilot_scene.map_open ? 1.25 : 1); + } else { + weatherIconPosition.rx() = rightHandDM ? UI_BORDER_SIZE + widget_size / 2 : width() - UI_BORDER_SIZE - btn_size; + if (mapButtonVisible) { + if (rightHandDM) { + weatherIconPosition.rx() += btn_size - UI_BORDER_SIZE; + } else { + weatherIconPosition.rx() -= btn_size + UI_BORDER_SIZE; + } + } + weatherIconPosition.ry() = dmIconPosition.y() - widget_size / 2; + } + + QRect weatherRect(weatherIconPosition, QSize(widget_size, widget_size)); + + p.setBrush(blackColor(166)); + p.setPen(QPen(blackColor(), 10)); + p.drawRoundedRect(weatherRect, 24, 24); + + QSharedPointer icon = weatherClearDay; + if ((weatherId >= 200 && weatherId <= 232) || (weatherId >= 300 && weatherId <= 321) || (weatherId >= 500 && weatherId <= 531)) { + icon = weatherRain; + } else if (weatherId >= 600 && weatherId <= 622) { + icon = weatherSnow; + } else if (weatherId == 800) { + icon = frogpilotPlan.getWeatherDaytime() ? weatherClearDay : weatherClearNight; + } + + p.drawPixmap(weatherRect, icon->currentPixmap()); + + p.restore(); +} diff --git a/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.h b/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.h index 933bc50..37fbd8f 100644 --- a/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.h +++ b/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.h @@ -79,6 +79,7 @@ private: void paintStandstillTimer(QPainter &p); void paintStoppingPoint(QPainter &p, UIScene &scene, FrogPilotUIScene &frogpilot_scene, QJsonObject &frogpilot_toggles); void paintTurnSignals(QPainter &p, const cereal::CarState::Reader &carState); + void paintWeather(QPainter &p, const cereal::FrogPilotPlan::Reader &frogpilotPlan, FrogPilotUIScene &frogpilot_scene); void updateSignals(); int animationFrameIndex; @@ -123,6 +124,10 @@ private: QSharedPointer cemTurnIcon; QSharedPointer chillModeIcon; QSharedPointer experimentalModeIcon; + QSharedPointer weatherClearDay; + QSharedPointer weatherClearNight; + QSharedPointer weatherRain; + QSharedPointer weatherSnow; QString cscSpeedStr; diff --git a/frogpilot/ui/qt/onroad/frogpilot_onroad.cc b/frogpilot/ui/qt/onroad/frogpilot_onroad.cc index 462fe96..3292e85 100644 --- a/frogpilot/ui/qt/onroad/frogpilot_onroad.cc +++ b/frogpilot/ui/qt/onroad/frogpilot_onroad.cc @@ -92,7 +92,7 @@ void FrogPilotOnroadWindow::paintFPS(QPainter &p, const QRect &rect) { minFPS = std::min(minFPS, fps); maxFPS = std::max(maxFPS, fps); - QString fpsDisplayString = QString("FPS: %1 | Min: %2 | Max: %3 | Avg: %4") + QString fpsDisplayString = QString(tr("FPS: %1 | Min: %2 | Max: %3 | Avg: %4")) .arg(qRound(fps)) .arg(qRound(minFPS)) .arg(qRound(maxFPS)) diff --git a/frogpilot/ui/qt/widgets/drive_stats.cc b/frogpilot/ui/qt/widgets/drive_stats.cc index 891d887..bf7fe9a 100644 --- a/frogpilot/ui/qt/widgets/drive_stats.cc +++ b/frogpilot/ui/qt/widgets/drive_stats.cc @@ -15,8 +15,8 @@ DriveStats::DriveStats(QWidget *parent) : QFrame(parent) { QVBoxLayout *main_layout = new QVBoxLayout(this); main_layout->setContentsMargins(50, 25, 50, 20); - addStatsLayouts(tr(konik ? "ALL TIME (KONIK)" : "ALL TIME"), all); - addStatsLayouts(tr(konik ? "PAST WEEK (KONIK)" : "PAST WEEK"), week); + addStatsLayouts(konik ? tr("ALL TIME (KONIK)") : tr("ALL TIME"), all); + addStatsLayouts(konik ? tr("PAST WEEK (KONIK)") : tr("PAST WEEK"), week); addStatsLayouts(tr("FROGPILOT"), frogPilot, true); std::optional dongleId = getDongleId(); diff --git a/frogpilot/ui/qt/widgets/drive_summary.cc b/frogpilot/ui/qt/widgets/drive_summary.cc new file mode 100644 index 0000000..df6f5e5 --- /dev/null +++ b/frogpilot/ui/qt/widgets/drive_summary.cc @@ -0,0 +1,225 @@ +#include "selfdrive/ui/qt/widgets/scrollview.h" + +#include "frogpilot/ui/qt/widgets/drive_summary.h" + +FrogPilotDriveSummary::FrogPilotDriveSummary(QWidget *parent, bool randomEvents) : QFrame(parent), displayRandomEvents(randomEvents) { + QVBoxLayout *mainLayout = new QVBoxLayout(this); + mainLayout->setContentsMargins(20, 20, 20, 20); + mainLayout->setSpacing(15); + + titleLabel = new QLabel(randomEvents ? tr("Random Events Summary") : tr("Drive Summary"), this); + titleLabel->setAlignment(Qt::AlignCenter); + titleLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + titleLabel->setStyleSheet(R"( + QLabel { + background-color: #444444; + border-radius: 12px; + color: #FFFFFF; + font-size: 50px; + font-weight: bold; + padding: 12px 28px; + } + )"); + titleLabel->setMaximumHeight(titleLabel->sizeHint().height()); + + mainLayout->addWidget(titleLabel); + mainLayout->addSpacing(10); + + QWidget *containerWidget = new QWidget(this); + QVBoxLayout *listLayout = new QVBoxLayout(containerWidget); + listLayout->setAlignment(Qt::AlignTop); + listLayout->setSpacing(20); + + if (displayRandomEvents) { + randomEventsMap.insert("accel30", tr("UwUs")); + randomEventsMap.insert("accel35", tr("Loch Ness Encounters")); + randomEventsMap.insert("accel40", tr("Visits to 1955")); + randomEventsMap.insert("dejaVuCurve", tr("Deja Vu Moments")); + randomEventsMap.insert("firefoxSteerSaturated", tr("Internet Explorer Weeeeeeees")); + randomEventsMap.insert("hal9000", tr("HAL 9000 Denials")); + randomEventsMap.insert("openpilotCrashedRandomEvent", tr("openpilot Crashes")); + randomEventsMap.insert("thisIsFineSteerSaturated", tr("This Is Fine Moments")); + randomEventsMap.insert("toBeContinued", tr("To Be Continued Moments")); + randomEventsMap.insert("vCruise69", tr("Noices")); + randomEventsMap.insert("yourFrogTriedToKillMe", tr("Attempted Frog Murders")); + randomEventsMap.insert("youveGotMail", tr("Total Mail Received")); + } else { + listLayout->addWidget(createStatBox(tr("% of Drive With openpilot Engaged"), &engagementValue, this)); + listLayout->addWidget(createStatBox(tr("Drive Distance"), &frogPilotMetersValue, this)); + listLayout->addWidget(createStatBox(tr("Drive Time"), &trackedTimeValue, this)); + listLayout->addWidget(createStatBox(tr("% of Drive In \"Experimental Mode\""), &experimentalModeTimeValue, this)); + } + + if (displayRandomEvents) { + eventsListLayout = listLayout; + mainLayout->addWidget(new ScrollView(containerWidget, this), 1); + } else { + mainLayout->addWidget(containerWidget, 1); + } + + setLayout(mainLayout); + + setStyleSheet(R"( + QFrame { + background-color: #333333; + } + )"); + + QObject::connect(device(), &Device::interactiveTimeout, [this]() { + emit panelClosed(); + }); + QObject::connect(uiState(), &UIState::offroadTransition, [this](bool offroad) { + if (!offroad) { + previousStats = QJsonDocument::fromJson(QString::fromStdString(params.get("FrogPilotStats")).toUtf8()).object(); + } + }); +} + +void FrogPilotDriveSummary::mousePressEvent(QMouseEvent *e) { + emit panelClosed(); +} + +void FrogPilotDriveSummary::showEvent(QShowEvent *event) { + bool isMetric = params.getBool("IsMetric"); + + QJsonObject currentStats = QJsonDocument::fromJson(QString::fromStdString(params.get("FrogPilotStats")).toUtf8()).object(); + + if (displayRandomEvents) { + QJsonObject currentRandomEvents = currentStats.value("RandomEvents").toObject(); + QJsonObject previousRandomEvents = previousStats.value("RandomEvents").toObject(); + + QList> eventsList; + for (QMap::const_iterator it = randomEventsMap.constBegin(); it != randomEventsMap.constEnd(); ++it) { + int currentValue = currentRandomEvents.value(it.key()).toInt(); + int previousValue = previousRandomEvents.value(it.key()).toInt(); + int diffValue = currentValue - previousValue; + + if (diffValue > 0) { + eventsList.append(qMakePair(it.value(), diffValue)); + } + } + + std::sort(eventsList.begin(), eventsList.end(), [](const QPair &a, const QPair &b) { + if (a.second != b.second) { + return a.second > b.second; + } else { + return a.first.localeAwareCompare(b.first) < 0; + } + }); + + QLayoutItem *child; + while ((child = eventsListLayout->takeAt(0)) != nullptr) { + if (QWidget *widget = child->widget()) { + widget->deleteLater(); + } + delete child; + } + randomEventLabels.clear(); + + if (eventsList.isEmpty()) { + eventsListLayout->setAlignment(Qt::AlignCenter); + + QLabel *noEventsLabel = new QLabel(tr("No Random Events Played!"), this); + noEventsLabel->setAlignment(Qt::AlignCenter); + noEventsLabel->setStyleSheet(R"( + QLabel { + font-size: 50px; + font-weight: bold; + color: #FFFFFF; + } + )"); + eventsListLayout->addWidget(noEventsLabel); + } else { + eventsListLayout->setAlignment(Qt::AlignTop); + + for (QList>::const_iterator it = eventsList.constBegin(); it != eventsList.constEnd(); ++it) { + QLabel *valueLabel = nullptr; + eventsListLayout->addWidget(createStatBox(it->first, &valueLabel, this)); + randomEventLabels.insert(it->first, valueLabel); + valueLabel->setText(QLocale().toString(it->second)); + } + } + } else { + std::function diffDouble = [currentStats, this](const QString &key) -> double { + return currentStats.value(key).toDouble() - previousStats.value(key).toDouble(); + }; + + std::function formatDistance = [&](double meters) { + double value; + QString unit; + if (isMetric) { + value = meters / 1000.0; + unit = (qRound(value) == 1) ? tr(" kilometer") : tr(" kilometers"); + } else { + value = meters * METER_TO_MILE; + unit = (qRound(value) == 1) ? tr(" mile") : tr(" miles"); + } + return QLocale().toString(qRound(value)) + unit; + }; + + std::function formatTime = [&](int seconds) { + static int secondsInDay = 60 * 60 * 24; + static int secondsInHour = 60 * 60; + + int days = seconds / secondsInDay; + int hours = (seconds % secondsInDay) / secondsInHour; + int minutes = (seconds % secondsInHour) / 60; + + QString result; + if (days > 0) result += QLocale().toString(days) + (days == 1 ? tr(" day ") : tr(" days ")); + if (hours > 0 || days > 0) result += QLocale().toString(hours) + (hours == 1 ? tr(" hour ") : tr(" hours ")); + result += QLocale().toString(minutes) + (minutes == 1 ? tr(" minute") : tr(" minutes")); + return result.trimmed(); + }; + + int engagedTime = diffDouble("AOLTime") + diffDouble("LongitudinalTime"); + int experimentalTime = diffDouble("ExperimentalModeTime"); + int trackedTime = diffDouble("TrackedTime"); + + engagementValue->setText(QLocale().toString((trackedTime > 0) ? (engagedTime * 100 / trackedTime) : 0) + "%"); + experimentalModeTimeValue->setText(QLocale().toString((trackedTime > 0) ? (experimentalTime * 100 / trackedTime) : 0) + "%"); + frogPilotMetersValue->setText(formatDistance(diffDouble("FrogPilotMeters"))); + trackedTimeValue->setText(formatTime(trackedTime)); + } +} + +void FrogPilotDriveSummary::hideEvent(QHideEvent *event) { + emit panelClosed(); +} + +QWidget *FrogPilotDriveSummary::createStatBox(const QString &title, QLabel **valueLabel, QWidget *parent) { + QWidget *box = new QWidget(parent); + + QVBoxLayout *layout = new QVBoxLayout(box); + layout->setAlignment(Qt::AlignCenter); + layout->setContentsMargins(10, 10, 10, 10); + layout->setSpacing(8); + + QLabel *statTitleLabel = new QLabel(title, box); + statTitleLabel->setAlignment(Qt::AlignCenter); + statTitleLabel->setStyleSheet(R"( + QLabel { + color: #AAAAAA; + font-size: 40px; + font-weight: bold; + } + )"); + + QLabel *value = new QLabel("-", box); + value->setAlignment(Qt::AlignCenter); + value->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + value->setStyleSheet(R"( + QLabel { + color: #FFFFFF; + font-size: 75px; + font-weight: bold; + } + )"); + + *valueLabel = value; + + layout->addWidget(statTitleLabel); + layout->addWidget(value); + + return box; +} diff --git a/frogpilot/ui/qt/widgets/drive_summary.h b/frogpilot/ui/qt/widgets/drive_summary.h new file mode 100644 index 0000000..bea16c4 --- /dev/null +++ b/frogpilot/ui/qt/widgets/drive_summary.h @@ -0,0 +1,39 @@ +#pragma once + +#include "selfdrive/ui/ui.h" + +class FrogPilotDriveSummary : public QFrame { + Q_OBJECT + +public: + explicit FrogPilotDriveSummary(QWidget *parent = nullptr, bool random_events = false); + +signals: + void panelClosed(); + +protected: + void showEvent(QShowEvent *event) override; + void hideEvent(QHideEvent *event) override; + void mousePressEvent(QMouseEvent *e); + +private: + QWidget *createStatBox(const QString &title, QLabel **valueLabel, QWidget *parent); + + bool displayRandomEvents; + + Params params; + + QJsonObject previousStats; + + QLabel *experimentalModeTimeValue; + QLabel *frogPilotMetersValue; + QLabel *engagementValue; + QLabel *titleLabel; + QLabel *trackedTimeValue; + + QMap randomEventLabels; + + QMap randomEventsMap; + + QVBoxLayout *eventsListLayout; +}; diff --git a/frogpilot/ui/qt/widgets/navigation_functions.h b/frogpilot/ui/qt/widgets/navigation_functions.h index 5c51e5d..ccd28f5 100644 --- a/frogpilot/ui/qt/widgets/navigation_functions.h +++ b/frogpilot/ui/qt/widgets/navigation_functions.h @@ -130,7 +130,7 @@ inline QString calculateDirectorySize(const QDir &directory) { constexpr double GB = 1024.0 * MB; if (!directory.exists()) { - return QStringLiteral("0 MB"); + return QObject::tr("0 MB"); } double totalSize = 0; @@ -141,9 +141,9 @@ inline QString calculateDirectorySize(const QDir &directory) { } if (totalSize >= GB) { - return QString::number(totalSize / GB, 'f', 2) + QStringLiteral(" GB"); + return QString::number(totalSize / GB, 'f', 2) + QObject::tr(" GB"); } - return QString::number(totalSize / MB, 'f', 2) + QStringLiteral(" MB"); + return QString::number(totalSize / MB, 'f', 2) + QObject::tr(" MB"); } inline QString daySuffix(int day) { @@ -166,12 +166,12 @@ inline QString formatElapsedTime(float elapsedMilliseconds) { QString formattedTime; if (hours > 0) { - formattedTime += QString::number(hours) + (hours == 1 ? " hour " : " hours "); + formattedTime += QString::number(hours) + (hours == 1 ? QObject::tr(" hour ") : QObject::tr(" hours ")); } if (minutes > 0) { - formattedTime += QString::number(minutes) + (minutes == 1 ? " minute " : " minutes "); + formattedTime += QString::number(minutes) + (minutes == 1 ? QObject::tr(" minute ") : QObject::tr(" minutes ")); } - formattedTime += QString::number(seconds) + (seconds == 1 ? " second" : " seconds"); + formattedTime += QString::number(seconds) + (seconds == 1 ? QObject::tr(" second") : QObject::tr(" seconds")); return formattedTime.trimmed(); } diff --git a/launch_chffrplus.sh b/launch_chffrplus.sh index 9c7df40..9b8bbab 100755 --- a/launch_chffrplus.sh +++ b/launch_chffrplus.sh @@ -72,7 +72,7 @@ function launch { # handle pythonpath ln -sfn $(pwd) /data/pythonpath - export PYTHONPATH="$PWD" + export PYTHONPATH="$DIR/frogpilot/third_party:$PWD" # hardware specific init if [ -f /AGNOS ]; then diff --git a/panda/board/safety/safety_subaru.h b/panda/board/safety/safety_subaru.h index e7e970f..b38b1bd 100644 --- a/panda/board/safety/safety_subaru.h +++ b/panda/board/safety/safety_subaru.h @@ -36,6 +36,7 @@ const LongitudinalLimits SUBARU_LONG_LIMITS = { #define MSG_SUBARU_Throttle 0x40 #define MSG_SUBARU_Steering_Torque 0x119 #define MSG_SUBARU_Wheel_Speeds 0x13a +#define MSG_SUBARU_Brake_Pedal 0x139 #define MSG_SUBARU_ES_LKAS 0x122 #define MSG_SUBARU_ES_LKAS_ANGLE 0x124 @@ -62,6 +63,8 @@ const LongitudinalLimits SUBARU_LONG_LIMITS = { {MSG_SUBARU_ES_DashStatus, SUBARU_MAIN_BUS, 8}, \ {MSG_SUBARU_ES_LKAS_State, SUBARU_MAIN_BUS, 8}, \ {MSG_SUBARU_ES_Infotainment, SUBARU_MAIN_BUS, 8}, \ + {MSG_SUBARU_Throttle, SUBARU_CAM_BUS, 8}, \ + {MSG_SUBARU_Brake_Pedal, SUBARU_CAM_BUS, 8}, \ #define SUBARU_COMMON_LONG_TX_MSGS(alt_bus) \ {MSG_SUBARU_ES_Brake, alt_bus, 8}, \ @@ -110,9 +113,11 @@ RxCheck subaru_gen2_rx_checks[] = { const uint16_t SUBARU_PARAM_GEN2 = 1; const uint16_t SUBARU_PARAM_LONGITUDINAL = 2; +const uint16_t SUBARU_PARAM_SNG = 1024; bool subaru_gen2 = false; bool subaru_longitudinal = false; +bool subaru_sng = false; static uint32_t subaru_get_checksum(const CANPacket_t *to_push) { @@ -233,6 +238,10 @@ static bool subaru_tx_hook(const CANPacket_t *to_send) { violation |= !(is_tester_present || is_button_rdbi); } + if ((addr == MSG_SUBARU_Throttle) || (addr == MSG_SUBARU_Brake_Pedal)) { + violation |= !subaru_sng; + } + if (violation){ tx = false; } @@ -243,7 +252,10 @@ static int subaru_fwd_hook(int bus_num, int addr) { int bus_fwd = -1; if (bus_num == SUBARU_MAIN_BUS) { - bus_fwd = SUBARU_CAM_BUS; // to the eyesight camera + bool block_msg = subaru_sng && ((addr == MSG_SUBARU_Throttle) || (addr == MSG_SUBARU_Brake_Pedal)); + if (!block_msg) { + bus_fwd = SUBARU_CAM_BUS; // to the eyesight camera + } } if (bus_num == SUBARU_CAM_BUS) { @@ -268,6 +280,7 @@ static int subaru_fwd_hook(int bus_num, int addr) { static safety_config subaru_init(uint16_t param) { subaru_gen2 = GET_FLAG(param, SUBARU_PARAM_GEN2); + subaru_sng = GET_FLAG(param, SUBARU_PARAM_SNG); #ifdef ALLOW_DEBUG subaru_longitudinal = GET_FLAG(param, SUBARU_PARAM_LONGITUDINAL); diff --git a/panda/board/safety/safety_subaru_preglobal.h b/panda/board/safety/safety_subaru_preglobal.h index 7d44fb0..cc18201 100644 --- a/panda/board/safety/safety_subaru_preglobal.h +++ b/panda/board/safety/safety_subaru_preglobal.h @@ -26,7 +26,8 @@ const SteeringLimits SUBARU_PG_STEERING_LIMITS = { const CanMsg SUBARU_PG_TX_MSGS[] = { {MSG_SUBARU_PG_ES_Distance, SUBARU_PG_MAIN_BUS, 8}, - {MSG_SUBARU_PG_ES_LKAS, SUBARU_PG_MAIN_BUS, 8} + {MSG_SUBARU_PG_ES_LKAS, SUBARU_PG_MAIN_BUS, 8}, + {MSG_SUBARU_PG_Throttle, SUBARU_PG_CAM_BUS, 8}, }; // TODO: do checksum and counter checks after adding the signals to the outback dbc file @@ -39,6 +40,8 @@ RxCheck subaru_preglobal_rx_checks[] = { const int SUBARU_PG_PARAM_REVERSED_DRIVER_TORQUE = 1; bool subaru_pg_reversed_driver_torque = false; +const uint16_t SUBARU_L_PARAM_SNG = 1024; +bool subaru_l_sng = false; static void subaru_preglobal_rx_hook(const CANPacket_t *to_push) { @@ -94,6 +97,13 @@ static bool subaru_preglobal_tx_hook(const CANPacket_t *to_send) { } } + + if (addr == MSG_SUBARU_PG_Throttle) { + if (!subaru_l_sng) { + tx = 0; + } + } + return tx; } @@ -101,7 +111,10 @@ static int subaru_preglobal_fwd_hook(int bus_num, int addr) { int bus_fwd = -1; if (bus_num == SUBARU_PG_MAIN_BUS) { - bus_fwd = SUBARU_PG_CAM_BUS; // Camera CAN + bool block_msg = subaru_l_sng && (addr == MSG_SUBARU_PG_Throttle); + if (!block_msg) { + bus_fwd = SUBARU_PG_CAM_BUS; // Camera CAN + } } if (bus_num == SUBARU_PG_CAM_BUS) { @@ -116,6 +129,7 @@ static int subaru_preglobal_fwd_hook(int bus_num, int addr) { static safety_config subaru_preglobal_init(uint16_t param) { subaru_pg_reversed_driver_torque = GET_FLAG(param, SUBARU_PG_PARAM_REVERSED_DRIVER_TORQUE); + subaru_l_sng = GET_FLAG(param, SUBARU_L_PARAM_SNG); return BUILD_SAFETY_CFG(subaru_preglobal_rx_checks, SUBARU_PG_TX_MSGS); } diff --git a/panda/python/__init__.py b/panda/python/__init__.py index 9339bfc..1c33b51 100644 --- a/panda/python/__init__.py +++ b/panda/python/__init__.py @@ -227,6 +227,8 @@ class Panda: FLAG_SUBARU_PREGLOBAL_REVERSED_DRIVER_TORQUE = 1 + FLAG_SUBARU_SNG = 1024 + FLAG_NISSAN_ALT_EPS_BUS = 1 FLAG_GM_HW_CAM = 1 diff --git a/selfdrive/car/card.py b/selfdrive/car/card.py index bf43487..636f289 100644 --- a/selfdrive/car/card.py +++ b/selfdrive/car/card.py @@ -30,7 +30,7 @@ class Car: def __init__(self, CI=None): self.can_sock = messaging.sub_sock('can', timeout=20) - self.sm = messaging.SubMaster(['pandaStates', 'carControl', 'liveCalibration', 'onroadEvents', 'frogpilotOnroadEvents', 'frogpilotPlan']) + self.sm = messaging.SubMaster(['pandaStates', 'carControl', 'controlsState', 'liveCalibration', 'onroadEvents', 'frogpilotOnroadEvents', 'frogpilotPlan']) self.pm = messaging.PubMaster(['sendcan', 'carState', 'carParams', 'carOutput', 'frogpilotCarState']) self.can_rcv_cum_timeout_counter = 0 diff --git a/selfdrive/car/chrysler/fingerprints.py b/selfdrive/car/chrysler/fingerprints.py index da8ac55..ac205d3 100644 --- a/selfdrive/car/chrysler/fingerprints.py +++ b/selfdrive/car/chrysler/fingerprints.py @@ -215,6 +215,7 @@ FW_VERSIONS = { b'68434960AF', b'68529064AB', b'68594990AB', + b'68358439AE', ], (Ecu.srs, 0x744, None): [ b'68405567AB', diff --git a/selfdrive/car/fingerprints.py b/selfdrive/car/fingerprints.py index 1128a31..d808d32 100644 --- a/selfdrive/car/fingerprints.py +++ b/selfdrive/car/fingerprints.py @@ -141,6 +141,7 @@ MIGRATION = { "RAM 1500 5TH GEN": CHRYSLER.RAM_1500_5TH_GEN, "RAM HD 5TH GEN": CHRYSLER.RAM_HD_5TH_GEN, "FORD BRONCO SPORT 1ST GEN": FORD.FORD_BRONCO_SPORT_MK1, + "FORD EDGE 2022": FORD.FORD_EDGE_MK2, "FORD ESCAPE 4TH GEN": FORD.FORD_ESCAPE_MK4, "FORD EXPLORER 6TH GEN": FORD.FORD_EXPLORER_MK6, "FORD F-150 14TH GEN": FORD.FORD_F_150_MK14, diff --git a/selfdrive/car/ford/carcontroller.py b/selfdrive/car/ford/carcontroller.py index eddd804..78c0c8f 100644 --- a/selfdrive/car/ford/carcontroller.py +++ b/selfdrive/car/ford/carcontroller.py @@ -65,26 +65,25 @@ class CarController(CarControllerBase): if CC.latActive: # apply rate limits, curvature error limit, and clip to signal range current_curvature = -CS.out.yawRate / max(CS.out.vEgoRaw, 0.1) - # PFEIFER - FSH {{ - # Ignore limits while overriding, this prevents pull when releasing the wheel. This will cause messages to be - # blocked by panda safety, usually while the driver is overriding and limited to at most 1 message while the - # driver is not overriding. - if CS.out.steeringPressed: - self.apply_curvature_last = actuators.curvature - # }} PFEIFER - FSH apply_curvature = apply_ford_curvature_limits(actuators.curvature, self.apply_curvature_last, current_curvature, CS.out.vEgoRaw) else: apply_curvature = 0. + if CS.out.steeringPressed and abs(CS.out.steeringAngleDeg) > 60: + apply_curvature = 0 + ramp_type = 3 + else: + ramp_type = 0 + self.apply_curvature_last = apply_curvature if self.CP.flags & FordFlags.CANFD: # TODO: extended mode mode = 1 if CC.latActive else 0 counter = (self.frame // CarControllerParams.STEER_STEP) % 0x10 - can_sends.append(fordcan.create_lat_ctl2_msg(self.packer, self.CAN, mode, 0., 0., -apply_curvature, 0., counter)) + can_sends.append(fordcan.create_lat_ctl2_msg(self.packer, self.CAN, mode, ramp_type, 0., 0., -apply_curvature, 0., counter)) else: - can_sends.append(fordcan.create_lat_ctl_msg(self.packer, self.CAN, CC.latActive, 0., 0., -apply_curvature, 0.)) + can_sends.append(fordcan.create_lat_ctl_msg(self.packer, self.CAN, ramp_type, CC.latActive, 0., 0., -apply_curvature, 0.)) # send lka msg at 33Hz if (self.frame % CarControllerParams.LKA_STEP) == 0: diff --git a/selfdrive/car/ford/carstate.py b/selfdrive/car/ford/carstate.py index 70c91c6..c355b8b 100644 --- a/selfdrive/car/ford/carstate.py +++ b/selfdrive/car/ford/carstate.py @@ -28,7 +28,10 @@ class CarState(CarStateBase): super().__init__(CP, FPCP) can_define = CANDefine(DBC[CP.carFingerprint]["pt"]) if CP.transmissionType == TransmissionType.automatic: - self.shifter_values = can_define.dv["Gear_Shift_by_Wire_FD1"]["TrnRng_D_RqGsm"] + if CP.flags & FordFlags.ALT_STEER_ANGLE: + self.shifter_values = can_define.dv["TransGearData"]["GearLvrPos_D_Actl"] + else: + self.shifter_values = can_define.dv["Gear_Shift_by_Wire_FD1"]["TrnRng_D_RqGsm"] self.vehicle_sensors_valid = False @@ -41,7 +44,14 @@ class CarState(CarStateBase): # Occasionally on startup, the ABS module recalibrates the steering pinion offset, so we need to block engagement # The vehicle usually recovers out of this state within a minute of normal driving - self.vehicle_sensors_valid = cp.vl["SteeringPinion_Data"]["StePinCompAnEst_D_Qf"] == 3 + if self.CP.flags & FordFlags.ALT_STEER_ANGLE: + self.vehicle_sensors_valid = ( + int((cp.vl["ParkAid_Data"]["ExtSteeringAngleReq2"] + 1000) * 10) not in (32766, 32767) + and cp.vl["ParkAid_Data"]["EPASExtAngleStatReq"] == 0 + and cp.vl["ParkAid_Data"]["ApaSys_D_Stat"] in (0, 1) + ) + else: + self.vehicle_sensors_valid = cp.vl["SteeringPinion_Data"]["StePinCompAnEst_D_Qf"] == 3 # car speed ret.vEgoRaw = cp.vl["BrakeSysFeatures"]["Veh_V_ActlBrk"] * CV.KPH_TO_MS @@ -59,7 +69,14 @@ class CarState(CarStateBase): ret.parkingBrake = cp.vl["DesiredTorqBrk"]["PrkBrkStatus"] in (1, 2) # steering wheel - ret.steeringAngleDeg = cp.vl["SteeringPinion_Data"]["StePinComp_An_Est"] + if self.CP.flags & FordFlags.ALT_STEER_ANGLE: + steering_angle_init = cp.vl["SteeringPinion_Data_Alt"]["StePinRelInit_An_Sns"] + if self.vehicle_sensors_valid: + steering_angle_est = cp.vl["ParkAid_Data"]["ExtSteeringAngleReq2"] + self.steering_angle_offset_deg = steering_angle_est - steering_angle_init + ret.steeringAngleDeg = steering_angle_init + self.steering_angle_offset_deg + else: + ret.steeringAngleDeg = cp.vl["SteeringPinion_Data"]["StePinComp_An_Est"] ret.steeringTorque = cp.vl["EPAS_INFO"]["SteeringColumnTorque"] ret.steeringPressed = self.update_steering_pressed(abs(ret.steeringTorque) > CarControllerParams.STEER_DRIVER_ALLOWANCE, 5) ret.steerFaultTemporary = cp.vl["EPAS_INFO"]["EPAS_Failure"] == 1 @@ -83,7 +100,10 @@ class CarState(CarStateBase): # gear if self.CP.transmissionType == TransmissionType.automatic: - gear = self.shifter_values.get(cp.vl["Gear_Shift_by_Wire_FD1"]["TrnRng_D_RqGsm"]) + if self.CP.flags & FordFlags.ALT_STEER_ANGLE: + gear = self.shifter_values.get(cp.vl["TransGearData"]["GearLvrPos_D_Actl"]) + else: + gear = self.shifter_values.get(cp.vl["Gear_Shift_by_Wire_FD1"]["TrnRng_D_RqGsm"]) ret.gearShifter = self.parse_gear_shifter(gear) elif self.CP.transmissionType == TransmissionType.manual: ret.clutchPressed = cp.vl["Engine_Clutch_Data"]["CluPdlPos_Pc_Meas"] > 0 @@ -142,13 +162,23 @@ class CarState(CarStateBase): ("BrakeSnData_4", 50), ("EngBrakeData", 10), ("Cluster_Info1_FD1", 10), - ("SteeringPinion_Data", 100), ("EPAS_INFO", 50), ("Steering_Data_FD1", 10), ("BodyInfo_3_FD1", 2), ("RCMStatusMessage2_FD1", 10), ] + if CP.flags & FordFlags.ALT_STEER_ANGLE: + messages += [ + ("ParkAid_Data", 50), + ("SteeringPinion_Data_Alt", 100), + ("TransGearData", 10), + ] + else: + messages += [ + ("SteeringPinion_Data", 100), + ] + if CP.flags & FordFlags.CANFD: messages += [ ("Lane_Assist_Data3_FD1", 33), diff --git a/selfdrive/car/ford/fingerprints.py b/selfdrive/car/ford/fingerprints.py index 2201072..4ab7149 100644 --- a/selfdrive/car/ford/fingerprints.py +++ b/selfdrive/car/ford/fingerprints.py @@ -148,6 +148,21 @@ FW_VERSIONS = { (Ecu.fwdCamera, 0x706, None): [ b'NZ6T-14F397-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], + }, + CAR.FORD_EDGE_MK2: { + (Ecu.eps, 0x730, None): [ + b'K2GC-14D003-AJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'HG9C-2D053-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'HG9C-2D053-MG\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'LB5T-14D049-AB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'KT4T-14F397-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], }, CAR.FORD_RANGER_MK2: { (Ecu.eps, 0x730, None): [ diff --git a/selfdrive/car/ford/fordcan.py b/selfdrive/car/ford/fordcan.py index 2cfd61a..770371f 100644 --- a/selfdrive/car/ford/fordcan.py +++ b/selfdrive/car/ford/fordcan.py @@ -46,7 +46,7 @@ def create_lka_msg(packer, CAN: CanBus): return packer.make_can_msg("Lane_Assist_Data1", CAN.main, {}) -def create_lat_ctl_msg(packer, CAN: CanBus, lat_active: bool, path_offset: float, path_angle: float, curvature: float, +def create_lat_ctl_msg(packer, CAN: CanBus, ramp_type: int, lat_active: bool, path_offset: float, path_angle: float, curvature: float, curvature_rate: float): """ Creates a CAN message for the Ford TJA/LCA Command. @@ -74,7 +74,7 @@ def create_lat_ctl_msg(packer, CAN: CanBus, lat_active: bool, path_offset: float "HandsOffCnfm_B_Rq": 0, # Unknown: 0=Inactive, 1=Active [0|1] "LatCtl_D_Rq": 1 if lat_active else 0, # Mode: 0=None, 1=ContinuousPathFollowing, 2=InterventionLeft, # 3=InterventionRight, 4-7=NotUsed [0|7] - "LatCtlRampType_D_Rq": 0, # Ramp speed: 0=Slow, 1=Medium, 2=Fast, 3=Immediate [0|3] + "LatCtlRampType_D_Rq": ramp_type, # Ramp speed: 0=Slow, 1=Medium, 2=Fast, 3=Immediate [0|3] # Makes no difference with curvature control "LatCtlPrecision_D_Rq": 1, # Precision: 0=Comfortable, 1=Precise, 2/3=NotUsed [0|3] # The stock system always uses comfortable @@ -86,7 +86,7 @@ def create_lat_ctl_msg(packer, CAN: CanBus, lat_active: bool, path_offset: float return packer.make_can_msg("LateralMotionControl", CAN.main, values) -def create_lat_ctl2_msg(packer, CAN: CanBus, mode: int, path_offset: float, path_angle: float, curvature: float, +def create_lat_ctl2_msg(packer, CAN: CanBus, mode: int, ramp_type: int, path_offset: float, path_angle: float, curvature: float, curvature_rate: float, counter: int): """ Create a CAN message for the new Ford Lane Centering command. @@ -100,7 +100,7 @@ def create_lat_ctl2_msg(packer, CAN: CanBus, mode: int, path_offset: float, path values = { "LatCtl_D2_Rq": mode, # Mode: 0=None, 1=PathFollowingLimitedMode, 2=PathFollowingExtendedMode, # 3=SafeRampOut, 4-7=NotUsed [0|7] - "LatCtlRampType_D_Rq": 0, # 0=Slow, 1=Medium, 2=Fast, 3=Immediate [0|3] + "LatCtlRampType_D_Rq": ramp_type, # 0=Slow, 1=Medium, 2=Fast, 3=Immediate [0|3] "LatCtlPrecision_D_Rq": 1, # 0=Comfortable, 1=Precise, 2/3=NotUsed [0|3] "LatCtlPathOffst_L_Actl": path_offset, # [-5.12|5.11] meter "LatCtlPath_An_Actl": path_angle, # [-0.5|0.5235] radians diff --git a/selfdrive/car/ford/values.py b/selfdrive/car/ford/values.py index b1868bf..d893e11 100644 --- a/selfdrive/car/ford/values.py +++ b/selfdrive/car/ford/values.py @@ -44,6 +44,7 @@ class CarControllerParams: class FordFlags(IntFlag): # Static flags CANFD = 1 + ALT_STEER_ANGLE = 2 class RADAR: @@ -101,6 +102,14 @@ class CAR(Platforms): [FordCarDocs("Ford Bronco Sport 2021-23")], CarSpecs(mass=1625, wheelbase=2.67, steerRatio=17.7), ) + FORD_EDGE_MK2 = FordPlatformConfig( + [ + FordCarDocs("Ford Edge 2022"), + FordCarDocs("Ford Fusion Retrofited 2013-2019"), + ], + CarSpecs(mass=1691, steerRatio=15.3, wheelbase=2.824), + flags=FordFlags.ALT_STEER_ANGLE, + ) FORD_ESCAPE_MK4 = FordPlatformConfig( [ FordCarDocs("Ford Escape 2020-22", hybrid=True, plug_in_hybrid=True), diff --git a/selfdrive/car/gm/interface.py b/selfdrive/car/gm/interface.py index 83c13ce..43758ae 100644 --- a/selfdrive/car/gm/interface.py +++ b/selfdrive/car/gm/interface.py @@ -273,7 +273,7 @@ class CarInterface(CarInterfaceBase): # Note: Low speed, stop and go not tested. Should be fairly smooth on highway ret.longitudinalTuning.kiBP = [0.0, 5., 35.] ret.longitudinalTuning.kiV = [0.0, 0.35, 0.5] - ret.longitudinalTuning.kf = 0.15 + ret.longitudinalTuning.kfDEPRECATED = 0.15 ret.stoppingDecelRate = 0.8 else: # Pedal used for SNG, ACC for longitudinal control otherwise ret.safetyConfigs[0].safetyParam |= Panda.FLAG_GM_HW_CAM_LONG diff --git a/selfdrive/car/honda/carcontroller.py b/selfdrive/car/honda/carcontroller.py index 8a65c28..a391845 100644 --- a/selfdrive/car/honda/carcontroller.py +++ b/selfdrive/car/honda/carcontroller.py @@ -19,21 +19,25 @@ def compute_gb_honda_bosch(accel, speed): return 0.0, 0.0 -def compute_gb_honda_nidec(accel, speed): +def compute_gb_honda_nidec(accel, speed, frogpilot_toggles): creep_brake = 0.0 creep_speed = 2.3 creep_brake_value = 0.15 if speed < creep_speed: creep_brake = (creep_speed - speed) / creep_speed * creep_brake_value gb = float(accel) / 4.8 - creep_brake - return clip(gb, 0.0, 1.0), clip(-gb, 0.0, 1.0) + + if frogpilot_toggles.honda_nidec_max_brake: + return clip(gb, 0.0, 1.0), clip(float(accel) / -4.0, 0.0, 1.0) + else: + return clip(gb, 0.0, 1.0), clip(-gb, 0.0, 1.0) -def compute_gas_brake(accel, speed, fingerprint): +def compute_gas_brake(accel, speed, fingerprint, frogpilot_toggles): if fingerprint in HONDA_BOSCH: return compute_gb_honda_bosch(accel, speed) else: - return compute_gb_honda_nidec(accel, speed) + return compute_gb_honda_nidec(accel, speed, frogpilot_toggles) # TODO not clear this does anything useful @@ -135,7 +139,7 @@ class CarController(CarControllerBase): if CC.longActive: accel = actuators.accel - gas, brake = compute_gas_brake(actuators.accel, CS.out.vEgo, self.CP.carFingerprint) + gas, brake = compute_gas_brake(actuators.accel, CS.out.vEgo, self.CP.carFingerprint, frogpilot_toggles) else: accel = 0.0 gas, brake = 0.0, 0.0 @@ -224,7 +228,10 @@ class CarController(CarControllerBase): can_sends.extend(hondacan.create_acc_commands(self.packer, self.CAN, CC.enabled, CC.longActive, self.accel, self.gas, self.stopping_counter, self.CP.carFingerprint)) else: - apply_brake = clip(self.brake_last - wind_brake, 0.0, 1.0) + if frogpilot_toggles.honda_nidec_max_brake: + apply_brake = clip(self.brake_last - (wind_brake if self.brake_last <= 0.95 else 0.0), 0.0, 1.0) + else: + apply_brake = clip(self.brake_last - wind_brake, 0.0, 1.0) apply_brake = int(clip(apply_brake * self.params.NIDEC_BRAKE_MAX, 0, self.params.NIDEC_BRAKE_MAX - 1)) pump_on, self.last_pump_ts = brake_pump_hysteresis(apply_brake, self.apply_brake_last, self.last_pump_ts, ts) @@ -237,7 +244,7 @@ class CarController(CarControllerBase): if self.CP.enableGasInterceptor: # way too aggressive at low speed without this - gas_mult = interp(CS.out.vEgo, [0., 10.], [0.4, 1.0]) + gas_mult = 1.0 if frogpilot_toggles.honda_low_speed_pedal else interp(CS.out.vEgo, [0., 10.], [0.4, 1.0]) # send exactly zero if apply_gas is zero. Interceptor will send the max between read value and apply_gas. # This prevents unexpected pedal range rescaling # Sending non-zero gas when OP is not enabled will cause the PCM not to respond to throttle as expected diff --git a/selfdrive/car/honda/fingerprints.py b/selfdrive/car/honda/fingerprints.py index dadf8c9..10ea4a1 100644 --- a/selfdrive/car/honda/fingerprints.py +++ b/selfdrive/car/honda/fingerprints.py @@ -685,7 +685,11 @@ FW_VERSIONS = { b'54008-TJB-A520\x00\x00', b'54008-TJB-A530\x00\x00', ], + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-5YF-AQ20\x00\x00', + ], (Ecu.transmission, 0x18da1ef1, None): [ + b'28102-5YK-A400\x00\x00', b'28102-5YK-A610\x00\x00', b'28102-5YK-A620\x00\x00', b'28102-5YK-A630\x00\x00', @@ -700,18 +704,24 @@ FW_VERSIONS = { b'77959-TJB-A040\x00\x00', b'77959-TJB-A120\x00\x00', b'77959-TJB-A210\x00\x00', + b'77959-TJB-A310\x00\x00', ], (Ecu.electricBrakeBooster, 0x18da2bf1, None): [ b'46114-TJB-A040\x00\x00', b'46114-TJB-A050\x00\x00', b'46114-TJB-A060\x00\x00', b'46114-TJB-A120\x00\x00', + b'46114-TJB-A130\x00\x00', ], (Ecu.gateway, 0x18daeff1, None): [ b'38897-TJB-A040\x00\x00', b'38897-TJB-A110\x00\x00', b'38897-TJB-A120\x00\x00', b'38897-TJB-A220\x00\x00', + b'38897-TJB-A410\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TJB-CM20\x00\x00', ], (Ecu.eps, 0x18da30f1, None): [ b'39990-TJB-A030\x00\x00', diff --git a/selfdrive/car/honda/interface.py b/selfdrive/car/honda/interface.py index c075a75..c013286 100755 --- a/selfdrive/car/honda/interface.py +++ b/selfdrive/car/honda/interface.py @@ -26,7 +26,7 @@ class CarInterface(CarInterfaceBase): if CP.carFingerprint in HONDA_BOSCH: return CarControllerParams.BOSCH_ACCEL_MIN, CarControllerParams.BOSCH_ACCEL_MAX elif CP.enableGasInterceptor: - return CarControllerParams.NIDEC_ACCEL_MIN, CarControllerParams.NIDEC_ACCEL_MAX + return CarControllerParams.NIDEC_ACCEL_MIN, CarControllerParams.PEDAL_ACCEL_MAX else: # NIDECs don't allow acceleration near cruise_speed, # so limit limits of pid to prevent windup @@ -85,6 +85,9 @@ class CarInterface(CarInterfaceBase): ret.longitudinalActuatorDelay = 0.5 # s if candidate in HONDA_BOSCH_RADARLESS: ret.stopAccel = CarControllerParams.BOSCH_ACCEL_MIN # stock uses -4.0 m/s^2 once stopped but limited by safety model + elif frogpilot_toggles.honda_alt_Tune: + ret.longitudinalTuning.kiBP = [0., 5., 35.] + ret.longitudinalTuning.kiV = [0.6, 0.4, 0.25] else: # default longitudinal tuning for all hondas ret.longitudinalTuning.kiBP = [0., 5., 35.] diff --git a/selfdrive/car/honda/values.py b/selfdrive/car/honda/values.py index b5638ae..08a30b2 100644 --- a/selfdrive/car/honda/values.py +++ b/selfdrive/car/honda/values.py @@ -36,6 +36,8 @@ class CarControllerParams: BOSCH_GAS_LOOKUP_BP = [-0.2, 2.0] # 2m/s^2 BOSCH_GAS_LOOKUP_V = [0, 1600] + PEDAL_ACCEL_MAX = 3.0 # m/s^2, max acceleration pedal value except in Sport Max Accel mode + def __init__(self, CP): self.STEER_MAX = CP.lateralParams.torqueBP[-1] # mirror of list (assuming first item is zero) for interp of signed request values @@ -171,7 +173,7 @@ class CAR(Platforms): flags=HondaFlags.BOSCH_RADARLESS, ) ACURA_RDX_3G = HondaBoschPlatformConfig( - [HondaCarDocs("Acura RDX 2019-22", "All", min_steer_speed=3. * CV.MPH_TO_MS)], + [HondaCarDocs("Acura RDX 2019-24", "All", min_steer_speed=3. * CV.MPH_TO_MS)], CarSpecs(mass=4068 * CV.LB_TO_KG, wheelbase=2.75, steerRatio=11.95, centerToFrontRatio=0.41, tireStiffnessFactor=0.677), # as spec dbc_dict('acura_rdx_2020_can_generated', None), flags=HondaFlags.BOSCH_ALT_BRAKE, diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index b62504e..eeb2c9e 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -21,6 +21,7 @@ from openpilot.selfdrive.car.honda.values import CAR as HondaCAR, HONDA_BOSCH from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus from openpilot.selfdrive.car.hyundai.values import CAR as HyundaiCAR, CANFD_CAR, HyundaiFrogPilotFlags from openpilot.selfdrive.car.mock.values import CAR as MockCAR +from openpilot.selfdrive.car.subaru.values import CAR as SubaruCAR, SubaruFlags from openpilot.selfdrive.car.toyota.values import CAR as ToyotaCAR, TSS2_CAR, UNSUPPORTED_DSU_CAR, ToyotaFrogPilotFlags from openpilot.selfdrive.car.values import PLATFORMS from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX, get_friction @@ -210,6 +211,10 @@ class CarInterfaceBase(ABC): if 0x544 in fingerprint[0]: fp_ret.fpFlags |= HyundaiFrogPilotFlags.NAV_MSG.value + elif platform in SubaruCAR: + if not (CP.flags & SubaruFlags.GLOBAL_GEN2 or CP.flags & SubaruFlags.HYBRID) and frogpilot_toggles.subaru_sng: + fp_ret.safetyConfigs[0].safetyParam |= Panda.FLAG_SUBARU_SNG + elif platform in ToyotaCAR: if candidate == ToyotaCAR.TOYOTA_PRIUS: if 0x23 in fingerprint[0]: @@ -282,7 +287,7 @@ class CarInterfaceBase(ABC): ret.vEgoStopping = 0.5 ret.vEgoStarting = 0.5 ret.stoppingControl = True - ret.longitudinalTuning.kf = 1. + ret.longitudinalTuning.kfDEPRECATED = 1. ret.longitudinalTuning.kpBP = [0.] ret.longitudinalTuning.kpV = [0.] ret.longitudinalTuning.kiBP = [0.] @@ -298,10 +303,6 @@ class CarInterfaceBase(ABC): tune.init('torque') tune.torque.useSteeringAngle = use_steering_angle - tune.torque.kf = 1.0 - tune.torque.kp = 1.0 - tune.torque.ki = 0.3 - tune.torque.kd = 0.0 tune.torque.friction = params['FRICTION'] tune.torque.latAccelFactor = params['LAT_ACCEL_FACTOR'] tune.torque.latAccelOffset = 0.0 diff --git a/selfdrive/car/subaru/carcontroller.py b/selfdrive/car/subaru/carcontroller.py index b623936..6bfdfc5 100644 --- a/selfdrive/car/subaru/carcontroller.py +++ b/selfdrive/car/subaru/carcontroller.py @@ -10,6 +10,8 @@ from openpilot.selfdrive.car.subaru.values import DBC, GLOBAL_ES_ADDR, CanBus, C MAX_STEER_RATE = 25 # deg/s MAX_STEER_RATE_FRAMES = 7 # tx control frames needed before torque can be cut +_SNG_ACC_MIN_DIST = 3 +_SNG_ACC_MAX_DIST = 4.5 class CarController(CarControllerBase): def __init__(self, dbc_name, CP, VM): @@ -23,6 +25,16 @@ class CarController(CarControllerBase): self.p = CarControllerParams(CP) self.packer = CANPacker(DBC[CP.carFingerprint]['pt']) + # FrogPilot variables + self.manual_hold = False + self.prev_standstill = False + self.sng_acc_resume = False + + self.prev_close_distance = 0 + self.prev_cruise_state = 0 + self.sng_acc_resume_cnt = 0 + self.standstill_start = 0 + def update(self, CC, CS, now_nanos, frogpilot_toggles): actuators = CC.actuators hud_control = CC.hudControl @@ -57,6 +69,10 @@ class CarController(CarControllerBase): self.apply_steer_last = apply_steer + # *** stop and go *** + if frogpilot_toggles.subaru_sng: + throttle_cmd, speed_cmd = self.stop_and_go(CC, CS) + # *** longitudinal *** if CC.longActive: @@ -93,6 +109,8 @@ class CarController(CarControllerBase): can_sends.append(subarucan.create_preglobal_es_distance(self.packer, cruise_button, CS.es_distance_msg)) + if frogpilot_toggles.subaru_sng: + can_sends.append(subarucan.create_preglobal_throttle(self.packer, CS.throttle_msg["COUNTER"] + 1, CS.throttle_msg, throttle_cmd)) else: if self.frame % 10 == 0: can_sends.append(subarucan.create_es_dashstatus(self.packer, self.frame // 10, CS.es_dashstatus_msg, CC.enabled, @@ -105,6 +123,11 @@ class CarController(CarControllerBase): if self.CP.flags & SubaruFlags.SEND_INFOTAINMENT: can_sends.append(subarucan.create_es_infotainment(self.packer, self.frame // 10, CS.es_infotainment_msg, hud_control.visualAlert)) + if frogpilot_toggles.subaru_sng: + can_sends.append(subarucan.create_throttle(self.packer, CS.throttle_msg["COUNTER"] + 1, CS.throttle_msg, throttle_cmd)) + if self.frame % 2 == 0: + can_sends.append(subarucan.create_brake_pedal(self.packer, self.frame // 2, CS.brake_pedal_msg, speed_cmd, pcm_cancel_cmd)) + if self.CP.openpilotLongitudinalControl: if self.frame % 5 == 0: can_sends.append(subarucan.create_es_status(self.packer, self.frame // 5, CS.es_status_msg, @@ -142,3 +165,51 @@ class CarController(CarControllerBase): self.frame += 1 return new_actuators, can_sends + + # Stop and Go auto-resume thanks to martinl from subaru-community for the original implementation + def stop_and_go(self, CC, CS, speed_cmd=False, throttle_cmd=False): + if self.CP.flags & SubaruFlags.PREGLOBAL: + trigger_resume = CC.enabled + trigger_resume &= CS.car_follow == 1 + trigger_resume &= CS.close_distance > self.prev_close_distance + trigger_resume &= CS.out.standstill + trigger_resume &= _SNG_ACC_MIN_DIST < CS.close_distance < _SNG_ACC_MAX_DIST + + if trigger_resume: + self.sng_acc_resume = True + else: + if CS.car_follow == 0 and CS.cruise_state == 3 and CS.out.standstill and self.prev_cruise_state == 1: + self.manual_hold = True + + if not CS.out.standstill: + self.manual_hold = False + + trigger_resume = CC.enabled + trigger_resume &= CS.car_follow == 1 + trigger_resume &= CS.close_distance > self.prev_close_distance + trigger_resume &= CS.cruise_state == 3 + trigger_resume &= not self.manual_hold + trigger_resume &= _SNG_ACC_MIN_DIST < CS.close_distance < _SNG_ACC_MAX_DIST + + if trigger_resume: + self.sng_acc_resume = True + + if CC.enabled and CS.car_follow == 1 and CS.out.standstill and self.frame > self.standstill_start + 50: + speed_cmd = True + + if CS.out.standstill and not self.prev_standstill: + self.standstill_start = self.frame + + self.prev_standstill = CS.out.standstill + self.prev_cruise_state = CS.cruise_state + + if self.sng_acc_resume: + if self.sng_acc_resume_cnt < 5: + throttle_cmd = True + self.sng_acc_resume_cnt += 1 + else: + self.sng_acc_resume = False + self.sng_acc_resume_cnt = -1 + + self.prev_close_distance = CS.close_distance + return throttle_cmd, speed_cmd diff --git a/selfdrive/car/subaru/carstate.py b/selfdrive/car/subaru/carstate.py index bb0a891..25f7c6b 100644 --- a/selfdrive/car/subaru/carstate.py +++ b/selfdrive/car/subaru/carstate.py @@ -4,7 +4,7 @@ from opendbc.can.can_define import CANDefine from openpilot.common.conversions import Conversions as CV from openpilot.selfdrive.car.interfaces import CarStateBase from opendbc.can.parser import CANParser -from openpilot.selfdrive.car.subaru.values import DBC, PREGLOBAL_CARS, CanBus, SubaruFlags +from openpilot.selfdrive.car.subaru.values import DBC, CanBus, SubaruFlags from openpilot.selfdrive.car import CanSignalRateCalculator @@ -119,20 +119,29 @@ class CarState(CarStateBase): self.es_status_msg = copy.copy(cp_es_status.vl["ES_Status"]) self.cruise_control_msg = copy.copy(cp_cruise.vl["CruiseControl"]) + if frogpilot_toggles.subaru_sng: + self.brake_pedal_msg = copy.copy(cp.vl["Brake_Pedal"]) + self.cruise_state = cp_cam.vl["ES_DashStatus"]["Cruise_State"] + if not (self.CP.flags & SubaruFlags.HYBRID): self.es_distance_msg = copy.copy(cp_es_distance.vl["ES_Distance"]) + if frogpilot_toggles.subaru_sng: + self.car_follow = cp_es_distance.vl["ES_Distance"]["Car_Follow"] + self.close_distance = cp_es_distance.vl["ES_Distance"]["Close_Distance"] + self.throttle_msg = copy.copy(cp.vl["Throttle"]) + self.es_dashstatus_msg = copy.copy(cp_cam.vl["ES_DashStatus"]) if self.CP.flags & SubaruFlags.SEND_INFOTAINMENT: self.es_infotainment_msg = copy.copy(cp_cam.vl["ES_Infotainment"]) # FrogPilot CarState functions self.lkas_previously_enabled = self.lkas_enabled - if self.car_fingerprint not in PREGLOBAL_CARS: + if self.CP.flags & SubaruFlags.PREGLOBAL: + fp_ret.brakeLights = bool(cp_cam.vl["ES_Brake"]["Cruise_Brake_Lights"]) + else: fp_ret.brakeLights = bool(cp_cam.vl["ES_DashStatus"]["Brake_Lights"]) self.lkas_enabled = self.es_lkas_state_msg.get("LKAS_Dash_State") - else: - fp_ret.brakeLights = bool(cp_cam.vl["ES_Brake"]["Cruise_Brake_Lights"]) return ret, fp_ret diff --git a/selfdrive/car/subaru/interface.py b/selfdrive/car/subaru/interface.py index afade1e..ecc077f 100644 --- a/selfdrive/car/subaru/interface.py +++ b/selfdrive/car/subaru/interface.py @@ -18,7 +18,7 @@ class CarInterface(CarInterfaceBase): # - to find the Cruise_Activated bit from the car # - proper panda safety setup (use the correct cruise_activated bit, throttle from Throttle_Hybrid, etc) ret.dashcamOnly = bool(ret.flags & (SubaruFlags.PREGLOBAL | SubaruFlags.LKAS_ANGLE | SubaruFlags.HYBRID)) - ret.autoResumeSng = False + ret.autoResumeSng = not (ret.flags & SubaruFlags.GLOBAL_GEN2 or ret.flags & SubaruFlags.HYBRID) # Detect infotainment message sent from the camera if not (ret.flags & SubaruFlags.PREGLOBAL) and 0x323 in fingerprint[2]: diff --git a/selfdrive/car/subaru/subarucan.py b/selfdrive/car/subaru/subarucan.py index 4036d7c..a103736 100644 --- a/selfdrive/car/subaru/subarucan.py +++ b/selfdrive/car/subaru/subarucan.py @@ -321,3 +321,70 @@ def create_preglobal_es_distance(packer, cruise_button, es_distance_msg): values["Checksum"] = subaru_preglobal_checksum(packer, values, "ES_Distance") return packer.make_can_msg("ES_Distance", CanBus.main, values) + + +def create_brake_pedal(packer, frame, brake_pedal_msg, speed_cmd, brake_cmd): + values = {s: brake_pedal_msg[s] for s in sorted([ + "Brake_Lights", + "Brake_Pedal", + "Signal1", + "Signal2", + "Signal3", + "Signal4", + "Speed", + ])} + + values["COUNTER"] = frame % 0x10 + + if speed_cmd: + values["Speed"] = 3 + if brake_cmd: + values["Brake_Pedal"] = 5 + values["Brake_Lights"] = 1 + + return packer.make_can_msg("Brake_Pedal", CanBus.camera, values) + + +def create_throttle(packer, frame, throttle_msg, throttle_cmd): + values = {s: throttle_msg[s] for s in sorted([ + "CHECKSUM", + "Engine_RPM", + "Off_Accel", + "Signal1", + "Signal2", + "Signal3", + "Throttle_Combo", + "Throttle_Cruise", + "Throttle_Pedal", + ])} + + values["COUNTER"] = frame % 0x10 + + if throttle_cmd: + values["Throttle_Pedal"] = 5 + + return packer.make_can_msg("Throttle", 2, values) + + +def create_preglobal_throttle(packer, frame, throttle_msg, throttle_cmd): + values = {s: throttle_msg[s] for s in sorted([ + "Engine_RPM", + "Not_Full_Throttle", + "Off_Throttle", + "Off_Throttle_2", + "Signal1", + "Signal2", + "Signal3", + "Signal4", + "Throttle_Body", + "Throttle_Combo", + "Throttle_Cruise", + "Throttle_Pedal", + ])} + + values["COUNTER"] = frame % 0x10 + + if throttle_cmd: + values["Throttle_Pedal"] = 5 + + return packer.make_can_msg("Throttle", 2, values) diff --git a/selfdrive/car/subaru/values.py b/selfdrive/car/subaru/values.py index 4d906cb..5105240 100644 --- a/selfdrive/car/subaru/values.py +++ b/selfdrive/car/subaru/values.py @@ -210,8 +210,6 @@ class CAR(Platforms): ) -PREGLOBAL_CARS = {CAR.SUBARU_FORESTER_PREGLOBAL, CAR.SUBARU_LEGACY_PREGLOBAL, CAR.SUBARU_OUTBACK_PREGLOBAL, CAR.SUBARU_OUTBACK_PREGLOBAL_2018} - SUBARU_VERSION_REQUEST = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER]) + \ p16(uds.DATA_IDENTIFIER_TYPE.APPLICATION_DATA_IDENTIFICATION) SUBARU_VERSION_RESPONSE = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER + 0x40]) + \ diff --git a/selfdrive/car/torque_data/override.toml b/selfdrive/car/torque_data/override.toml index b37817b..34dbc16 100644 --- a/selfdrive/car/torque_data/override.toml +++ b/selfdrive/car/torque_data/override.toml @@ -22,6 +22,7 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] # Guess "FORD_BRONCO_SPORT_MK1" = [nan, 1.5, nan] +"FORD_EDGE_MK2" = [nan, 1.5, nan] "FORD_ESCAPE_MK4" = [nan, 1.5, nan] "FORD_EXPLORER_MK6" = [nan, 1.5, nan] "FORD_F_150_MK14" = [nan, 1.5, nan] diff --git a/selfdrive/car/toyota/carcontroller.py b/selfdrive/car/toyota/carcontroller.py index e30f870..d6520d0 100644 --- a/selfdrive/car/toyota/carcontroller.py +++ b/selfdrive/car/toyota/carcontroller.py @@ -53,7 +53,7 @@ def get_long_tune(CP, params): kiBP = [2., 5.] kiV = [0.5, 0.25] - return PIDController(0.0, (kiBP, kiV), k_f=1.0, + return PIDController(0.0, (kiBP, kiV), pos_limit=params.ACCEL_MAX, neg_limit=params.ACCEL_MIN, rate=1 / (DT_CTRL * 3)) diff --git a/selfdrive/car/toyota/carstate.py b/selfdrive/car/toyota/carstate.py index 63747e8..295188c 100644 --- a/selfdrive/car/toyota/carstate.py +++ b/selfdrive/car/toyota/carstate.py @@ -276,8 +276,9 @@ class CarState(CarStateBase): ("GEAR_PACKET_HYBRID", 60), ("SECOC_SYNCHRONIZATION", 10), ("GAS_PEDAL", 42), - ("PCM_CRUISE_4", 1), ] + if CP.carFingerprint not in RADAR_ACC_CAR: + messages.append(("PCM_CRUISE_4", 1)) else: messages.append(("VSC1S07", 20)) if CP.carFingerprint not in [CAR.TOYOTA_MIRAI]: diff --git a/selfdrive/car/toyota/fingerprints.py b/selfdrive/car/toyota/fingerprints.py index f39e5ec..025f775 100644 --- a/selfdrive/car/toyota/fingerprints.py +++ b/selfdrive/car/toyota/fingerprints.py @@ -1772,17 +1772,22 @@ FW_VERSIONS = { CAR.TOYOTA_YARIS: { (Ecu.engine, 0x700, None): [ b'\x0189663K015300\x00\x00\x00\x00', + b'\x0189663K023000\x00\x00\x00\x00', ], (Ecu.eps, 0x7a1, None): [ + b'\x018965BK002100\x00\x00\x00\x00', b'\x018965BK003200\x00\x00\x00\x00', ], (Ecu.abs, 0x7b0, None): [ + b'\x01F1526K005600\x00\x00\x00\x00', b'\x01F1526K007500\x00\x00\x00\x00', ], (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F0D04100\x00\x00\x00\x00', b'\x018821F0D05300\x00\x00\x00\x00', ], (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F0W04100\x00\x00\x00\x008646G0W04100\x00\x00\x00\x00', b'\x028646F5205200\x00\x00\x00\x008646G5202200\x00\x00\x00\x00', ], }, diff --git a/selfdrive/car/toyota/values.py b/selfdrive/car/toyota/values.py index a778ace..bd87e33 100644 --- a/selfdrive/car/toyota/values.py +++ b/selfdrive/car/toyota/values.py @@ -272,7 +272,7 @@ class CAR(Platforms): CarSpecs(mass=4372. * CV.LB_TO_KG, wheelbase=2.68, steerRatio=16.88, tireStiffnessFactor=0.5533), ) TOYOTA_YARIS = ToyotaSecOCPlatformConfig( - [ToyotaCarDocs("Toyota Yaris 2023 (Non-US only)", min_enable_speed=MIN_ACC_SPEED)], + [ToyotaCarDocs("Toyota Yaris (Non-US only) 2020, 2023", min_enable_speed=MIN_ACC_SPEED)], CarSpecs(mass=1170, wheelbase=2.55, steerRatio=14.80, tireStiffnessFactor=0.5533), flags=ToyotaFlags.RADAR_ACC, ) diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 7f58bf9..67d3489 100644 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -770,7 +770,7 @@ class Controls: if self.frogpilot_toggles.conditional_experimental_mode or self.frogpilot_toggles.slc_fallback_experimental_mode: self.experimental_mode = self.sm['frogpilotPlan'].experimentalMode - if hasattr(self.LaC, "pid"): + if hasattr(self.LaC, "pid") and self.CP.lateralTuning.which() != "pid": self.LaC.pid._k_p = self.frogpilot_toggles.steerKp # Update FrogPilot variables diff --git a/selfdrive/controls/lib/latcontrol_pid.py b/selfdrive/controls/lib/latcontrol_pid.py index 73ed3b1..1944a5a 100644 --- a/selfdrive/controls/lib/latcontrol_pid.py +++ b/selfdrive/controls/lib/latcontrol_pid.py @@ -10,7 +10,8 @@ class LatControlPID(LatControl): super().__init__(CP, CI, dt) self.pid = PIDController((CP.lateralTuning.pid.kpBP, CP.lateralTuning.pid.kpV), (CP.lateralTuning.pid.kiBP, CP.lateralTuning.pid.kiV), - k_f=CP.lateralTuning.pid.kf, pos_limit=self.steer_max, neg_limit=-self.steer_max) + pos_limit=self.steer_max, neg_limit=-self.steer_max) + self.ff_factor = CP.lateralTuning.pid.kf self.get_steer_feedforward = CI.get_steer_feedforward_function() def update(self, active, CS, VM, params, steer_limited_by_safety, desired_curvature, curvature_limited, lat_delay, llk, model_data, frogpilot_toggles): @@ -30,7 +31,7 @@ class LatControlPID(LatControl): else: # offset does not contribute to resistive torque - ff = self.get_steer_feedforward(angle_steers_des_no_offset, CS.vEgo) + ff = self.ff_factor * self.get_steer_feedforward(angle_steers_des_no_offset, CS.vEgo) freeze_integrator = steer_limited_by_safety or CS.steeringPressed or CS.vEgo < 5 output_torque = self.pid.update(error, diff --git a/selfdrive/controls/lib/latcontrol_torque.py b/selfdrive/controls/lib/latcontrol_torque.py index 1e72156..9a80e5f 100644 --- a/selfdrive/controls/lib/latcontrol_torque.py +++ b/selfdrive/controls/lib/latcontrol_torque.py @@ -4,8 +4,8 @@ from collections import deque from cereal import log from openpilot.common.filter_simple import FirstOrderFilter -from openpilot.selfdrive.controls.lib.drive_helpers import MIN_SPEED, get_friction from openpilot.selfdrive.car.interfaces import FRICTION_THRESHOLD +from openpilot.selfdrive.controls.lib.drive_helpers import MIN_SPEED, get_friction from openpilot.selfdrive.controls.lib.latcontrol import LatControl from openpilot.selfdrive.controls.lib.pid import PIDController from openpilot.selfdrive.controls.lib.vehicle_model import ACCELERATION_DUE_TO_GRAVITY @@ -16,16 +16,20 @@ from openpilot.selfdrive.controls.lib.vehicle_model import ACCELERATION_DUE_TO_G # wheel slip, or to speed. # This controller applies torque to achieve desired lateral -# accelerations. To compensate for the low speed effects we -# use a LOW_SPEED_FACTOR in the error. Additionally, there is -# friction in the steering wheel that needs to be overcome to -# move it at all, this is compensated for too. +# accelerations. To compensate for the low speed effects the +# proportional gain is increased at low speeds by the PID controller. +# Additionally, there is friction in the steering wheel that needs +# to be overcome to move it at all, this is compensated for too. -MAX_LAT_JERK_UP = 2.5 # m/s^3 - -LOW_SPEED_X = [0, 10, 20, 30] -LOW_SPEED_Y = [15, 13, 10, 5] +KP = 1.0 +KI = 0.3 +KD = 0.0 +INTERP_SPEEDS = [1, 1.5, 2.0, 3.0, 5, 7.5, 10, 15, 30] +KP_INTERP = [250, 120, 65, 30, 11.5, 5.5, 3.5, 2.0, KP] +LP_FILTER_CUTOFF_HZ = 1.2 +LAT_ACCEL_REQUEST_BUFFER_SECONDS = 1.0 +VERSION = 0 class LatControlTorque(LatControl): def __init__(self, CP, CI, dt): @@ -33,14 +37,13 @@ class LatControlTorque(LatControl): self.torque_params = CP.lateralTuning.torque self.torque_from_lateral_accel = CI.torque_from_lateral_accel() self.lateral_accel_from_torque = CI.lateral_accel_from_torque() - self.pid = PIDController(self.torque_params.kp, self.torque_params.ki, - k_f=self.torque_params.kf, rate=1/self.dt) + self.pid = PIDController([INTERP_SPEEDS, KP_INTERP], KI, KD, rate=1/self.dt) self.update_limits() self.steering_angle_deadzone_deg = self.torque_params.steeringAngleDeadzoneDeg - self.LATACCEL_REQUEST_BUFFER_NUM_FRAMES = int(1 / self.dt) - self.requested_lateral_accel_buffer = deque([0.] * self.LATACCEL_REQUEST_BUFFER_NUM_FRAMES , maxlen=self.LATACCEL_REQUEST_BUFFER_NUM_FRAMES) + self.lat_accel_request_buffer_len = int(LAT_ACCEL_REQUEST_BUFFER_SECONDS / self.dt) + self.lat_accel_request_buffer = deque([0.] * self.lat_accel_request_buffer_len , maxlen=self.lat_accel_request_buffer_len) self.previous_measurement = 0.0 - self.measurement_rate_filter = FirstOrderFilter(0.0, 1 / (2 * np.pi * (MAX_LAT_JERK_UP - 0.5)), self.dt) + self.measurement_rate_filter = FirstOrderFilter(0.0, 1 / (2 * np.pi * LP_FILTER_CUTOFF_HZ), self.dt) def update_live_torque_params(self, latAccelFactor, latAccelOffset, friction): self.torque_params.latAccelFactor = latAccelFactor @@ -54,6 +57,7 @@ class LatControlTorque(LatControl): def update(self, active, CS, VM, params, steer_limited_by_safety, desired_curvature, curvature_limited, lat_delay, llk, model_data, frogpilot_toggles): pid_log = log.ControlsState.LateralTorqueState.new_message() + pid_log.version = VERSION if not active: output_torque = 0.0 pid_log.active = False @@ -63,11 +67,11 @@ class LatControlTorque(LatControl): curvature_deadzone = abs(VM.calc_curvature(math.radians(self.steering_angle_deadzone_deg), CS.vEgo, 0.0)) lateral_accel_deadzone = curvature_deadzone * CS.vEgo ** 2 - delay_frames = int(np.clip(lat_delay / self.dt, 1, self.LATACCEL_REQUEST_BUFFER_NUM_FRAMES)) - expected_lateral_accel = self.requested_lateral_accel_buffer[-delay_frames] + delay_frames = int(np.clip(lat_delay / self.dt, 1, self.lat_accel_request_buffer_len)) + expected_lateral_accel = self.lat_accel_request_buffer[-delay_frames] # TODO factor out lateral jerk from error to later replace it with delay independent alternative future_desired_lateral_accel = desired_curvature * CS.vEgo ** 2 - self.requested_lateral_accel_buffer.append(future_desired_lateral_accel) + self.lat_accel_request_buffer.append(future_desired_lateral_accel) gravity_adjusted_future_lateral_accel = future_desired_lateral_accel - roll_compensation desired_lateral_jerk = (future_desired_lateral_accel - expected_lateral_accel) / lat_delay @@ -75,13 +79,11 @@ class LatControlTorque(LatControl): measurement_rate = self.measurement_rate_filter.update((measurement - self.previous_measurement) / self.dt) self.previous_measurement = measurement - low_speed_factor = (np.interp(CS.vEgo, LOW_SPEED_X, LOW_SPEED_Y) / max(CS.vEgo, MIN_SPEED)) ** 2 setpoint = lat_delay * desired_lateral_jerk + expected_lateral_accel error = setpoint - measurement - error_lsf = error + low_speed_factor / self.torque_params.kp * error # do error correction in lateral acceleration space, convert at end to handle non-linear torque responses correctly - pid_log.error = float(error_lsf) + pid_log.error = float(error) ff = gravity_adjusted_future_lateral_accel # latAccelOffset corrects roll compensation bias from device roll misalignment relative to car roll ff -= self.torque_params.latAccelOffset @@ -101,9 +103,10 @@ class LatControlTorque(LatControl): pid_log.i = float(self.pid.i) pid_log.d = float(self.pid.d) pid_log.f = float(self.pid.f) - pid_log.output = float(-output_torque) # TODO: log lat accel? + pid_log.output = float(-output_torque) # TODO: log lat accel? pid_log.actualLateralAccel = float(measurement) pid_log.desiredLateralAccel = float(setpoint) + pid_log.desiredLateralJerk = float(desired_lateral_jerk) pid_log.saturated = bool(self._check_saturation(self.steer_max - abs(output_torque) < 1e-3, CS, steer_limited_by_safety, curvature_limited)) # TODO left is positive in this convention diff --git a/selfdrive/controls/lib/longcontrol.py b/selfdrive/controls/lib/longcontrol.py index 63950d4..9b3c167 100644 --- a/selfdrive/controls/lib/longcontrol.py +++ b/selfdrive/controls/lib/longcontrol.py @@ -92,7 +92,7 @@ class LongControl: self.long_control_state = LongCtrlState.off self.pid = PIDController((CP.longitudinalTuning.kpBP, CP.longitudinalTuning.kpV), (CP.longitudinalTuning.kiBP, CP.longitudinalTuning.kiV), - k_f=CP.longitudinalTuning.kf, rate=1 / DT_CTRL) + k_f=CP.longitudinalTuning.kfDEPRECATED, rate=1 / DT_CTRL) self.v_pid = 0.0 self.last_output_accel = 0.0 diff --git a/selfdrive/controls/lib/pid.py b/selfdrive/controls/lib/pid.py index ff50847..7cf25ed 100644 --- a/selfdrive/controls/lib/pid.py +++ b/selfdrive/controls/lib/pid.py @@ -2,7 +2,7 @@ import numpy as np from numbers import Number class PIDController: - def __init__(self, k_p, k_i, k_f=0., k_d=0., pos_limit=1e308, neg_limit=-1e308, rate=100): + def __init__(self, k_p, k_i, k_f=1., k_d=0., pos_limit=1e308, neg_limit=-1e308, rate=100): self._k_p = k_p self._k_i = k_i self._k_d = k_d diff --git a/selfdrive/controls/radard.py b/selfdrive/controls/radard.py index 087cf2d..902f48b 100644 --- a/selfdrive/controls/radard.py +++ b/selfdrive/controls/radard.py @@ -14,6 +14,7 @@ from openpilot.common.realtime import DT_CTRL, DT_MDL, Ratekeeper, Priority, con from openpilot.common.swaglog import cloudlog from openpilot.common.simple_kalman import KF1D +from openpilot.selfdrive.controls.controlsd import LaneChangeDirection, LaneChangeState from openpilot.frogpilot.common.frogpilot_variables import THRESHOLD, get_frogpilot_toggles @@ -127,7 +128,7 @@ class Track: return self.leadRight def potential_far_lead(self, standstill: bool, model_data: capnp._DynamicStructReader): - if standstill or self.vLead < 1 or abs(self.yRel) > 1: + if standstill or self.vLead < 1: return False left_lane = interp(self.dRel, model_data.laneLines[1].x, model_data.laneLines[1].y) @@ -158,7 +159,20 @@ def laplacian_pdf(x: float, mu: float, b: float): return math.exp(-abs(x-mu)/b) -def match_vision_to_track(v_ego: float, lead: capnp._DynamicStructReader, tracks: dict[int, Track]): +def match_vision_to_track(v_ego: float, lead: capnp._DynamicStructReader, model_data: capnp._DynamicStructReader, tracks: dict[int, Track], frogpilot_toggles: SimpleNamespace): + if model_data.meta.laneChangeState == LaneChangeState.laneChangeStarting and frogpilot_toggles.human_lane_changes: + direction = model_data.meta.laneChangeDirection + + if direction == LaneChangeDirection.left: + left_tracks = [track for track in tracks.values() if track.leadLeft] + if left_tracks: + return min(left_tracks, key=lambda c: c.dRel) + + elif direction == LaneChangeDirection.right: + right_tracks = [track for track in tracks.values() if track.leadRight] + if right_tracks: + return min(right_tracks, key=lambda c: c.dRel) + offset_vision_dist = lead.x[0] - RADAR_TO_CAMERA def prob(c): @@ -205,7 +219,7 @@ def get_lead(v_ego: float, ready: bool, tracks: dict[int, Track], lead_msg: capn low_speed_override: bool = True) -> dict[str, Any]: # Determine leads, this is where the essential logic happens if len(tracks) > 0 and ready and lead_msg.prob > frogpilot_toggles.lead_detection_probability: - track = match_vision_to_track(v_ego, lead_msg, tracks) + track = match_vision_to_track(v_ego, lead_msg, model_data, tracks, frogpilot_toggles) else: track = None @@ -325,7 +339,7 @@ class RadarD: self.radar_state.leadOne = get_lead(self.v_ego, self.ready, self.tracks, leads_v3[0], model_v_ego, sm['modelV2'], sm['carState'].standstill, sm['frogpilotPlan'], self.frogpilot_toggles, low_speed_override=True) self.radar_state.leadTwo = get_lead(self.v_ego, self.ready, self.tracks, leads_v3[1], model_v_ego, sm['modelV2'], sm['carState'].standstill, sm['frogpilotPlan'], self.frogpilot_toggles, low_speed_override=False) - if self.frogpilot_toggles.adjacent_lead_tracking and self.ready: + if (self.frogpilot_toggles.adjacent_lead_tracking or self.frogpilot_toggles.human_lane_changes) and self.ready: self.frogpilot_radar_state.leadLeft = get_adjacent_lead(self.tracks, sm['carState'].standstill, sm['modelV2'], left=True) self.frogpilot_radar_state.leadRight = get_adjacent_lead(self.tracks, sm['carState'].standstill, sm['modelV2'], left=False) diff --git a/selfdrive/ui/SConscript b/selfdrive/ui/SConscript index c02dcf3..886c812 100644 --- a/selfdrive/ui/SConscript +++ b/selfdrive/ui/SConscript @@ -56,8 +56,9 @@ frogpilot_src = ["../../frogpilot/ui/frogpilot_ui.cc", "../../frogpilot/ui/qt/of "../../frogpilot/ui/qt/offroad/wheel_settings.cc", "../../frogpilot/ui/qt/onroad/frogpilot_annotated_camera.cc", "../../frogpilot/ui/qt/onroad/frogpilot_buttons.cc", "../../frogpilot/ui/qt/onroad/frogpilot_onroad.cc", "../../frogpilot/ui/qt/widgets/developer_sidebar.cc", "../../frogpilot/ui/qt/widgets/drive_stats.cc", - "../../frogpilot/ui/qt/widgets/model_reviewer.cc", "../../frogpilot/ui/qt/widgets/navigation_functions.cc", - "../../frogpilot/ui/screenrecorder/omx_encoder.cc", "../../frogpilot/ui/screenrecorder/screenrecorder.cc"] + "../../frogpilot/ui/qt/widgets/drive_summary.cc", "../../frogpilot/ui/qt/widgets/model_reviewer.cc", + "../../frogpilot/ui/qt/widgets/navigation_functions.cc", "../../frogpilot/ui/screenrecorder/omx_encoder.cc", + "../../frogpilot/ui/screenrecorder/screenrecorder.cc"] qt_src += frogpilot_src diff --git a/selfdrive/ui/qt/home.cc b/selfdrive/ui/qt/home.cc index 1fb496d..0a3fa9a 100644 --- a/selfdrive/ui/qt/home.cc +++ b/selfdrive/ui/qt/home.cc @@ -14,6 +14,7 @@ #endif #include "frogpilot/ui/qt/widgets/drive_stats.h" +#include "frogpilot/ui/qt/widgets/drive_summary.h" #include "frogpilot/ui/qt/widgets/model_reviewer.h" // HomeWindow: the container for the offroad and onroad UIs @@ -191,35 +192,69 @@ OffroadHome::OffroadHome(QWidget* parent) : QFrame(parent) { #endif left_widget->addWidget(new DriveStats); - FrogPilotModelReview *modelReview = new FrogPilotModelReview(this); - left_widget->addWidget(modelReview); + FrogPilotDriveSummary *drive_summary = new FrogPilotDriveSummary(this); + left_widget->addWidget(drive_summary); + + FrogPilotModelReview *model_review = new FrogPilotModelReview(this); + left_widget->addWidget(model_review); left_widget->setStyleSheet("border-radius: 10px;"); left_widget->setCurrentIndex(1); - connect(modelReview, &FrogPilotModelReview::driveRated, [=]() { + connect(drive_summary, &FrogPilotDriveSummary::panelClosed, [=]() { left_widget->setCurrentIndex(1); }); - connect(frogpilotUIState(), &FrogPilotUIState::reviewModel, [=]() { + connect(model_review, &FrogPilotModelReview::driveRated, [=]() { left_widget->setCurrentIndex(2); }); + connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { + static bool previouslyOnroad = false; + if (offroad && previouslyOnroad) { + if (frogpilotUIState()->frogpilot_scene.started_timer > 15 * 60 * UI_FREQ && frogpilotUIState()->frogpilot_toggles.value("model_randomizer").toBool()) { + left_widget->setCurrentIndex(3); + } else { + left_widget->setCurrentIndex(2); + } + } + previouslyOnroad = !offroad; + }); home_layout->addWidget(left_widget, 1); // right: ExperimentalModeButton, SetupWidget - QWidget* right_widget = new QWidget(this); - QVBoxLayout* right_column = new QVBoxLayout(right_widget); - right_column->setContentsMargins(0, 0, 0, 0); + QStackedWidget *right_widget = new QStackedWidget(this); right_widget->setFixedWidth(750); - right_column->setSpacing(30); + + QWidget *default_right = new QWidget(this); + QVBoxLayout *default_layout = new QVBoxLayout(default_right); + default_layout->setContentsMargins(0, 0, 0, 0); + default_layout->setSpacing(30); ExperimentalModeButton *experimental_mode = new ExperimentalModeButton(this); QObject::connect(experimental_mode, &ExperimentalModeButton::openSettings, this, &OffroadHome::openSettings); - right_column->addWidget(experimental_mode, 1); + default_layout->addWidget(experimental_mode, 1); SetupWidget *setup_widget = new SetupWidget; QObject::connect(setup_widget, &SetupWidget::openSettings, this, &OffroadHome::openSettings); - right_column->addWidget(setup_widget, 1); + default_layout->addWidget(setup_widget, 1); + + right_widget->addWidget(default_right); + + FrogPilotDriveSummary *random_events_summary = new FrogPilotDriveSummary(this, true); + right_widget->addWidget(random_events_summary); + + right_widget->setCurrentIndex(0); + + connect(random_events_summary, &FrogPilotDriveSummary::panelClosed, [=]() { + right_widget->setCurrentIndex(0); + }); + connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { + static bool previouslyOnroad = false; + if (offroad && previouslyOnroad && frogpilotUIState()->frogpilot_toggles.value("random_events").toBool()) { + right_widget->setCurrentIndex(1); + } + previouslyOnroad = !offroad; + }); home_layout->addWidget(right_widget, 1); } diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index c318f7b..2290d5b 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -369,6 +369,7 @@ void SettingsWindow::hideEvent(QHideEvent *event) { panelOpen = false; subPanelOpen = false; subSubPanelOpen = false; + subSubSubPanelOpen = false; updateFrogPilotToggles(); } @@ -409,7 +410,11 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { sidebar_layout->addSpacing(10); sidebar_layout->addWidget(close_btn, 0, Qt::AlignRight); QObject::connect(close_btn, &QPushButton::clicked, [this]() { - if (subSubPanelOpen) { + if (subSubSubPanelOpen) { + closeSubSubSubPanel(); + + subSubSubPanelOpen = false; + } else if (subSubPanelOpen) { closeSubSubPanel(); subSubPanelOpen = false; @@ -441,6 +446,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { QObject::connect(frogpilotSettingsWindow, &FrogPilotSettingsWindow::openPanel, [this]() {panelOpen=true;}); QObject::connect(frogpilotSettingsWindow, &FrogPilotSettingsWindow::openSubPanel, [this]() {subPanelOpen=true;}); QObject::connect(frogpilotSettingsWindow, &FrogPilotSettingsWindow::openSubSubPanel, [this]() {subSubPanelOpen=true;}); + QObject::connect(frogpilotSettingsWindow, &FrogPilotSettingsWindow::openSubSubSubPanel, [this]() {subSubSubPanelOpen=true;}); QList> panels = { {tr("Device"), device}, @@ -539,6 +545,10 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { closeSubSubPanel(); subSubPanelOpen = false; } + if (subSubSubPanelOpen) { + closeSubSubSubPanel(); + subSubSubPanelOpen = false; + } btn->setChecked(true); panel_widget->setCurrentWidget(w); }); diff --git a/selfdrive/ui/qt/offroad/settings.h b/selfdrive/ui/qt/offroad/settings.h index 51f9c6f..fb899c6 100644 --- a/selfdrive/ui/qt/offroad/settings.h +++ b/selfdrive/ui/qt/offroad/settings.h @@ -38,6 +38,7 @@ signals: void closePanel(); void closeSubPanel(); void closeSubSubPanel(); + void closeSubSubSubPanel(); void updateMetric(bool metric, bool bootRun=false); void updateTuningLevel(); @@ -51,6 +52,7 @@ private: bool panelOpen; bool subPanelOpen; bool subSubPanelOpen; + bool subSubSubPanelOpen; Params params; }; diff --git a/selfdrive/ui/qt/offroad/software_settings.cc b/selfdrive/ui/qt/offroad/software_settings.cc index 2442446..4859987 100644 --- a/selfdrive/ui/qt/offroad/software_settings.cc +++ b/selfdrive/ui/qt/offroad/software_settings.cc @@ -67,9 +67,9 @@ SoftwarePanel::SoftwarePanel(QWidget* parent) : ListWidget(parent) { branches.removeAt(i); } } + branches.removeAll("FrogPilot-Vetting"); + branches.removeAll("MAKE-PRS-HERE"); } - branches.removeAll("FrogPilot-Vetting"); - branches.removeAll("MAKE-PRS-HERE"); for (QString b : {current.c_str(), "devel-staging", "devel", "nightly", "master-ci", "master"}) { auto i = branches.indexOf(b); if (i >= 0) { @@ -172,7 +172,18 @@ void SoftwarePanel::updateLabels() { bool failed = std::atoi(params.get("UpdateFailedCount").c_str()) > 0; if (updater_state != "idle") { downloadBtn->setEnabled(false); - downloadBtn->setValue(updater_state); + QString stateText = updater_state; + if (updater_state == "downloading...") { + stateText = tr("downloading…"); + } else if (updater_state == "checking...") { + stateText = tr("checking…"); + } else if (updater_state == "waiting for vehicle to go offroad...") { + stateText = tr("waiting for vehicle to go offroad..."); + } else if (updater_state == "finalizing update...") { + stateText = tr("finalizing update..."); + } + + downloadBtn->setValue(stateText); frogpilot_scene.downloading_update = true; } else { frogpilot_scene.downloading_update = false; diff --git a/selfdrive/ui/qt/onroad/annotated_camera.cc b/selfdrive/ui/qt/onroad/annotated_camera.cc index 6c4e181..f65c523 100644 --- a/selfdrive/ui/qt/onroad/annotated_camera.cc +++ b/selfdrive/ui/qt/onroad/annotated_camera.cc @@ -578,7 +578,7 @@ void AnnotatedCameraWidget::paintEvent(QPaintEvent *event) { drawLead(painter, reinterpret_cast(lead_right), frogpilotPlan, fs->frogpilot_scene.lead_vertices[1], frogpilot_nvg->purpleColor(), fs, true); } if (lead_one.getStatus()) { - drawLead(painter, lead_one, frogpilotPlan, s->scene.lead_vertices[0], lead_one.getModelProb() >= frogpilot_toggles.value("lead_detection_probability").toInt() ? fs->frogpilot_scene.lead_marker_color : whiteColor(), fs); + drawLead(painter, lead_one, frogpilotPlan, s->scene.lead_vertices[0], lead_one.getModelProb() >= frogpilot_toggles.value("lead_detection_probability").toDouble() ? fs->frogpilot_scene.lead_marker_color : whiteColor(), fs); } else { frogpilot_nvg->leadTextRect = QRect(); } diff --git a/selfdrive/ui/translations/auto_translate.py b/selfdrive/ui/translations/auto_translate.py index 6da535a..bad1f42 100755 --- a/selfdrive/ui/translations/auto_translate.py +++ b/selfdrive/ui/translations/auto_translate.py @@ -29,11 +29,11 @@ Output rules: - Output: a fun, stylized rewrite that keeps technical structure intact. Hard requirements: -1) Preserve placeholders, variables, and markup exactly as written: {{name}}, {{0}}, {{icu}}, %1, %n, %(speed)d, $SPEED, , , etc. +1) Preserve placeholders, variables, and markup exactly as written: {{name}}, {{0}}, {{icu}}, %1, %n, %(speed)d, $SPEED, ..., ..., etc. 2) Keep all non-translatable tokens unchanged: product/brand names (e.g., openpilot, ACC), file paths, error codes, part numbers. 3) Do not add, remove, or reorder placeholders. If grammar absolutely requires reordering, keep all placeholders intact and still produce a correct sentence; prefer wordings that avoid reordering. 4) Do not convert units or numbers (e.g., mph↔km/h). Translate unit labels only if standard in the style and not part of a preserved token. -5) Maintain the same warning/priority level and imperative tone. Never soften or intensify safety messages ("Do not…", "Warning", "Critical"). +5) Maintain the same warning/priority level and imperative tone. Never soften or intensify safety messages ("Do not...", "Warning", "Critical"). 6) Preserve hotkeys/accelerators if present (e.g., &F, _O). If the exact letter is impossible, pick the nearest mnemonic but keep the marker. 7) Follow style punctuation and casing norms while respecting all technical tokens. 8) If ICU MessageFormat/plural/select syntax is present, keep the structure and variable names unchanged and rewrite only the human-readable text. @@ -53,11 +53,11 @@ OPENAI_PROMPT = """ You are a safety-critical UI translator for openpilot. Translate the following message (an English source string) into the locale '{language}'. Output ONLY the translated text, with no quotes or extra words. Hard requirements: -1) Preserve placeholders, variables, and markup exactly as written: {{name}}, {{0}}, {{icu}}, %1, %n, %(speed)d, $SPEED, , , etc. +1) Preserve placeholders, variables, and markup exactly as written: {{name}}, {{0}}, {{icu}}, %1, %n, %(speed)d, $SPEED, ..., ..., etc. 2) Keep all non-translatable tokens unchanged: product/brand names (e.g., openpilot, ACC), file paths, error codes, part numbers. 3) Do not add, remove, or reorder placeholders. If grammar absolutely requires reordering, keep all placeholders intact and still produce a correct sentence; prefer wordings that avoid reordering. 4) Do not convert units or numbers (e.g., mph↔km/h). Translate unit labels only if standard in the target locale and not part of a preserved token. -5) Maintain the same warning/priority level and imperative tone. Never soften or intensify safety messages ("Do not…", "Warning", "Critical"). +5) Maintain the same warning/priority level and imperative tone. Never soften or intensify safety messages ("Do not...", "Warning", "Critical"). 6) Preserve hotkeys/accelerators if present (e.g., &F, _O). If the exact letter is impossible, pick the nearest mnemonic but keep the marker. 7) Follow target-locale punctuation and casing norms while respecting all technical tokens. 8) If ICU MessageFormat/plural/select syntax is present, keep the structure and variable names unchanged and translate only the human-readable text. @@ -77,7 +77,7 @@ Output rules: Decision criteria (apply in order): 1) Hard correctness checks vs the Source: - - All placeholders/variables/markup from the Source must be preserved verbatim and remain valid: {{name}}, {{0}}, {{icu}}, %1, %n, %(speed)d, $SPEED, , , &, etc. + - All placeholders/variables/markup from the Source must be preserved verbatim and remain valid: {{name}}, {{0}}, {{icu}}, %1, %n, %(speed)d, $SPEED, ..., ..., &, etc. - Numbers and units must match; no unit conversion (mph↔km/h) and no number changes. - Non-translatable tokens present in Source must remain unchanged (e.g., openpilot, ACC, file paths, error codes, part numbers). - Hotkeys/accelerators such as &F or _O must be preserved with a sensible mnemonic letter in the target language; the marker must remain. diff --git a/selfdrive/ui/translations/languages.json b/selfdrive/ui/translations/languages.json index 66f250a..4998d7e 100644 --- a/selfdrive/ui/translations/languages.json +++ b/selfdrive/ui/translations/languages.json @@ -10,6 +10,7 @@ "Español": "main_es", "Shakespearean": "main_shakespearean", "Türkçe": "main_tr", + "Українська": "main_uk", "العربية": "main_ar", "ไทย": "main_th", "中文(繁體)": "main_zh-CHT", diff --git a/selfdrive/ui/translations/main_ar.ts b/selfdrive/ui/translations/main_ar.ts index aed05fc..1d54e20 100644 --- a/selfdrive/ui/translations/main_ar.ts +++ b/selfdrive/ui/translations/main_ar.ts @@ -423,6 +423,22 @@ Miles أميال + + ALL TIME (KONIK) + طوال الوقت (KONIK) + + + ALL TIME + طوال الوقت + + + PAST WEEK (KONIK) + الأسبوع الماضي (KONIK) + + + PAST WEEK + الأسبوع الماضي + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT الحد + + Desired: %1 + المرغوب: %1 + + + s + س + + + 1 minute + 1 دقيقة + + + %1 minutes + %1 دقائق + + + 1 second + 1 ثانية + + + %1 seconds + %1 ثوانٍ + FrogPilotConfirmationDialog @@ -694,6 +734,238 @@ Choose a backup to delete اختر نسخة احتياطية لحذفها + + FrogPilot Stats + إحصائيات FrogPilot + + + <b>View your collected FrogPilot stats.</b> + <b>عرض إحصاءات FrogPilot التي جُمعت.</b> + + + RESET + إعادة ضبط + + + VIEW + عرض + + + Are you sure you want to reset all of your FrogPilot stats? + هل أنت متأكد أنك تريد إعادة ضبط جميع إحصاءات FrogPilot الخاصة بك؟ + + + Reset + إعادة ضبط + + + Total Emergency Brake Alerts + إجمالي تنبيهات الفرملة الطارئة + + + Time Using "Always On Lateral" + الوقت باستخدام "Always On Lateral" + + + Favorite Set Speed + سرعة الضبط المفضلة + + + Total Disengagements + إجمالي حالات فك الارتباط + + + Total Engagements + إجمالي التفاعلات + + + Time Using "Experimental Mode" + الوقت باستخدام "الوضع التجريبي" + + + Total Frog Chirps + إجمالي نقيق الضفادع + + + Total Frog Hops + إجمالي قفزات الضفدع + + + Total Drives + إجمالي الرحلات + + + Total Distance Driven + إجمالي المسافة المقطوعة + + + Total Driving Time + إجمالي وقت القيادة + + + Total Frog Squeaks + إجمالي صرير الضفادع + + + Total Goat Screams + إجمالي صرخات الماعز + + + Highest Acceleration Rate + أعلى معدل تسارع + + + Time Using Lateral Control + الوقت باستخدام التحكم الجانبي + + + Longest Distance Without an Override + أطول مسافة دون تدخل + + + Time Using Longitudinal Control + الوقت باستخدام التحكم الطولي + + + Driving Models: + نماذج القيادة + + + Month + شهر + + + Total Overrides + إجمالي التجاوزات + + + Time Overriding openpilot + تجاوز الوقت لـ openpilot + + + Random Events: + أحداث عشوائية + + + Time Stopped + توقف الوقت + + + Time Spent at Stoplights + الوقت المُستغرق عند إشارات المرور + + + Total Time Tracked + إجمالي الوقت المُتعقَّب + + + UwUs + UwUs + + + Loch Ness Encounters + لقاءات لوخ نيس + + + Visits to 1955 + زيارات إلى 1955 + + + Deja Vu Moments + لحظات الديجافو + + + Internet Explorer Weeeeeeees + Internet Explorer وييييييييي + + + HAL 9000 Denials + رفض HAL 9000 + + + openpilot Crashes + أعطال openpilot + + + This Is Fine Moments + لحظات هذا جيد + + + To Be Continued Moments + لحظات تُستكمل لاحقًا + + + Noices + أصوات + + + Attempted Frog Murders + محاولات قتل الضفادع + + + Total Mail Received + إجمالي البريد المستلم + + + kilometer + كيلومتر + + + kilometers + كيلومترات + + + mile + ميل + + + miles + أميال + + + day + يوم + + + days + أيام + + + hour + ساعة + + + hours + ساعات + + + minute + دقيقة + + + minutes + دقائق + + + km/h + كم/ساعة + + + mph + ميل/ساعة + + + m/s² + م/ث² + + + Total + الإجمالي + + + % of + % من + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ ثوانٍ + + FrogPilotDriveSummary + + Random Events Summary + ملخص الأحداث العشوائية + + + Drive Summary + ملخص القيادة + + + UwUs + UwUs + + + Loch Ness Encounters + لقاءات بحيرة لوخ نيس + + + Visits to 1955 + الزيارات إلى 1955 + + + Deja Vu Moments + لحظات ديجا فو + + + Internet Explorer Weeeeeeees + إنترنت إكسبلورر وييييييييييس + + + HAL 9000 Denials + رفض HAL 9000 + + + openpilot Crashes + أعطال openpilot + + + This Is Fine Moments + لحظات «كل شيء على ما يرام» + + + To Be Continued Moments + اللحظات سيتم استكمالها لاحقًا + + + Noices + أصوات + + + Attempted Frog Murders + محاولات قتل ضفادع + + + Total Mail Received + إجمالي البريد المستلم + + + % of Drive With openpilot Engaged + نسبة القيادة مع تشغيل openpilot + + + Drive Distance + مسافة القيادة + + + Drive Time + وقت القيادة + + + % of Drive In "Experimental Mode" + ٪ من القيادة في "الوضع التجريبي" + + + No Random Events Played! + لم يتم تشغيل أي أحداث عشوائية! + + + kilometer + كيلومتر + + + kilometers + كيلومترات + + + mile + ميل + + + miles + أميال + + + day + يوم + + + days + أيام + + + hour + ساعة + + + hours + ساعات + + + minute + دقيقة + + + minutes + دقائق + + FrogPilotLateralPanel @@ -1291,10 +1682,6 @@ Predicted Stop In التوقف المتوقع خلال - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>بدّل إلى "الوضع التجريبي" عندما يتوقع openpilot توقفًا ضمن الوقت المحدد.</b> عادةً ما يتم تشغيل ذلك عندما "يرى" النموذج إشارة ضوء أحمر أو علامة توقف في الأمام.<br><br><i><b>إخلاء المسؤولية</b>: لا يكتشف openpilot إشارات المرور أو علامات التوقف صراحةً. في "الوضع التجريبي"، يتخذ openpilot قرارات قيادة شاملة من مدخلات الكاميرا، ما يعني أنه قد يتوقف حتى عندما لا يكون هناك سبب واضح.</i> - Turn Signal Below إشارة الانعطاف أدناه @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs إيقاف إجباري عند أضواء/علامات التوقف «المكتشفة» - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>فرض إيقاف openpilot كلما "يكتشف" نموذج القيادة إشارة ضوئية حمراء أو علامة توقف.</b><br><br><i><b>إخلاء المسؤولية</b>: لا يكتشف openpilot إشارات المرور أو علامات التوقف بشكل صريح. في "الوضع التجريبي"، يتخذ openpilot قرارات قيادة شاملة من مدخلات الكاميرا، ما يعني أنه قد يتوقف حتى عندما لا يوجد سبب واضح.</i> - Increase Stopped Distance by: زيادة مسافة التوقف بمقدار: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>اعكس سلوك زر التحكم في السرعة</b> بحيث تزيد الضغطة القصيرة السرعة المحددة بمقدار 5 بدلًا من 1. + + Increase Following Distance by: + زيادة مسافة المتابعة بمقدار: + + + Reduce Acceleration by: + تقليل التسارع بمقدار: + + + Reduce Speed in Curves by: + تقليل السرعة في المنعطفات بمقدار: + + + Snow + ثلج + + + <b>Driving adjustments for snowy conditions.</b> + <b>تعديلات القيادة لظروف الثلوج.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>أضف مسافة إضافية خلف المركبات الأمامية في الثلج.</b> زِد للحصول على مساحة أكبر؛ خفِّض لمسافات أقصر. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>أضف مسافة أمان إضافية عند التوقف خلف المركبات في الثلج.</b> زدها لمزيد من الحيز؛ وخفّضها لفراغات أقصر. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>خفّض الحد الأقصى للتسارع على الثلج.</b> زدْه لانطلاقات أكثر سلاسة؛ وخفّضه لانطلاقات أسرع ولكن أقل استقرارًا. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>اخفض السرعة المطلوبة أثناء القيادة عبر المنحنيات في الثلج.</b> زدها لالتفافات أكثر أمانًا ولطفًا؛ وقلّلها لقيادة أكثر عدوانية في المنحنيات. + Speed Limit Controller متحكم حد السرعة @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>سلوك متابعة يحاكي السائقين البشر</b> عبر تقليل الفجوات خلف المركبات الأسرع لانطلاق أسرع وضبط مسافة المتابعة المطلوبة ديناميكياً لكبح ألطف وأكثر كفاءة. + + Weather Condition Offsets + تعويضات حالة الطقس + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>اضبط سلوك القيادة تلقائيًا بناءً على حالة الطقس الفعلية في الوقت الحقيقي.</b> يساعد على الحفاظ على الراحة والسلامة في حالات ضعف الرؤية أو المطر أو الثلج. + + + Low Visibility + ضعف الرؤية + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>تعديلات القيادة للضباب أو الغبار أو غيرها من ظروف الرؤية المنخفضة.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>أضف مسافة إضافية خلف المركبات الأمامية في ضعف الرؤية.</b> زِد لزيادة المسافة؛ خفّض لتقليل الفجوات. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>أضِف مسافة أمان إضافية عند التوقف خلف مركبات في ظروف رؤية منخفضة.</b> زِد لحيّز أكبر؛ قَلّل لفجوات أقصر. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>خفّض الحد الأقصى للتسارع في ضعف الرؤية.</b> زدْه لانطلاقات أكثر نعومة؛ وخفّضه لانطلاقات أسرع لكنها أقل استقرارًا. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>خفّض السرعة المطلوبة أثناء القيادة عبر المنعطفات في ضعف الرؤية.</b> زدها لالتفافات أكثر أمانًا ولطفًا؛ وخفّضها لقيادة أكثر عدوانية في المنعطفات. + + + Rain + مطر + + + <b>Driving adjustments for rainy conditions.</b> + <b>تعديلات القيادة للظروف الممطرة.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>أضف مسافة إضافية خلف المركبات الأمامية عند المطر.</b> زِد للحصول على مساحة أكبر؛ قَلِّل لمسافات أقصر. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>أضِف مسافة أمان إضافية عند التوقف خلف المركبات أثناء المطر.</b> زِدها لمزيد من المساحة؛ خفّضها لفواصل أقصر. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>خفّض الحد الأقصى للتسارع في المطر.</b> زدْه لبدء انطلاقات أكثر نعومة؛ وخفّضه لانطلاقات أسرع ولكن أقل استقرارًا. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>خفّض السرعة المطلوبة أثناء القيادة عبر المنعطفات في المطر.</b> زدها لانعطافات أكثر أمانًا ولطفًا؛ وأنقصها لقيادة أكثر عدوانية في المنعطفات. + + + Rainstorms + عواصف مطرية + + + <b>Driving adjustments for rainstorms.</b> + <b>تعديلات القيادة للعواصف المطرية.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>أضف مسافة إضافية خلف المركبات الأمامية أثناء العاصفة الممطرة.</b> زد لزيادة المسافة؛ خفّض لتقليل الفجوات. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>أضف هامش أمان إضافيًا عند التوقف خلف المركبات أثناء عاصفة مطرية.</b> زِد لحيز أكبر؛ قَلِّل لفجوات أقصر. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>خفّض الحد الأقصى للتسارع أثناء العاصفة الممطرة.</b> زِدْه لنعومة أكبر عند الانطلاق؛ وخفِّضه لانطلاق أسرع ولكن أقل استقرارًا. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>اخفض السرعة المرغوبة أثناء القيادة عبر المنعطفات في عاصفة ممطرة.</b> زدها لنعطفات أكثر أمانًا ولطفًا؛ وخفّضها لقيادة أكثر عدوانية في المنعطفات. + + + Human-Like Lane Changes + تغييرات مسار شبيهة بالبشر + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>سلوك تغيير المسار يحاكي السائقين البشر</b> عبر التنبؤ ومتابعة المركبات المجاورة أثناء تغيير المسارات. + + + "Detected" Stop Lights/Signs + أُكتشفت إشارات/أضواء توقف + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>التبديل إلى "الوضع التجريبي" كلما "اكتشف" نموذج القيادة إشارة ضوء أحمر أو علامة توقف.</b><br><br><i><b>إخلاء مسؤولية</b>: لا يكتشف openpilot إشارات المرور أو علامات التوقف صراحةً. في "الوضع التجريبي"، يتخذ openpilot قرارات قيادة شاملة من مدخلات الكاميرا، ما يعني أنه قد يتوقف حتى عندما لا يوجد سبب واضح!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>انتقل إلى "الوضع التجريبي" عندما يتوقع openpilot توقفًا ضمن الزمن المحدد.</b> يحدث هذا عادةً عندما "يرى" النموذج إشارة ضوئية حمراء أو إشارة توقف أمامك.<br><br><i><b>إخلاء مسؤولية</b>: لا يكتشف openpilot إشارات المرور أو إشارات التوقف بشكل صريح. في "الوضع التجريبي"، يتخذ openpilot قرارات قيادة شاملة من مدخلات الكاميرا، ما يعني أنه قد يتوقف حتى عندما لا يوجد سبب واضح!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>إجبار openpilot على التوقف كلما "اكتشف" نموذج القيادة إشارة حمراء أو إشارة توقف.</b><br><br><i><b>إخلاء المسؤولية</b>: لا يكتشف openpilot إشارات المرور أو إشارات التوقف بشكل صريح. في "الوضع التجريبي"، يتخذ openpilot قرارات قيادة شاملة من مدخلات الكاميرا، ما يعني أنه قد يتوقف حتى عندما لا يوجد سبب واضح!</i> + + + Set Your Own Key + عيّن مفتاحك الخاص + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>عيّن مفتاح "OpenWeatherMap" الخاص بك لزيادة معدل تحديث الطقس.</b><br><br><i>توفر المفاتيح الشخصية 1,000 مكالمة مجانية يوميًا، مما يسمح بتحديثات كل دقيقة. المفتاح الافتراضي مشترك ويُحدّث كل 15 دقيقة فقط.</i> + + + ADD + إضافة + + + Enter your "OpenWeatherMap" key + أدخل مفتاح "OpenWeatherMap" الخاص بك + + + REMOVE + إزالة + + + Invalid key! + مفتاح غير صالح! + + + Are you sure you want to remove your key? + هل أنت متأكد أنك تريد إزالة مفتاحك؟ + + + TEST + اختبار + + + Testing... + جارٍ الاختبار... + + + Key is valid! + المفتاح صالح! + + + An error occurred: %1 + حدث خطأ: %1 + FrogPilotManageControl @@ -2159,7 +2726,7 @@ Resetting... - إعادة التعيين جارٍ… + إعادة التعيين جارٍ... Reset! @@ -2223,11 +2790,19 @@ Offline... - غير متصل… + غير متصل... - CANCELLED - أُلغي + 0 MB + 0 ميغابايت + + + Calculating... + جارٍ الحساب... + + + Not parked + غير مركون @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC اختر نموذجًا — 🗺️ = الملاحة | 📡 = الرادار | 👀 = VOACC + + Downloading... + جارٍ التنزيل... + + + Not parked + غير مُركن + + + Downloaded! + تم التنزيل! + + + All models downloaded! + تم تنزيل جميع النماذج! + + + Download cancelled... + تم إلغاء التنزيل... + + + Download failed... + فشل التنزيل... + + + GitHub and GitLab are offline... + GitHub وGitLab غير متاحين... + + + Repository unavailable + المستودع غير متاح + FrogPilotModelReview @@ -2516,7 +3123,7 @@ Offline... - غير متصل… + غير متصل... Mapbox @@ -2626,6 +3233,57 @@ It will reset in %1 hours and %2 minutes. Completed! اكتمل! + + <b>Manage your Public Mapbox Key.</b> + <b>إدارة مفتاح Mapbox العام.</b> + + + TEST + اختبار + + + Remove your Public Mapbox Key? + إزالة مفتاح Mapbox العام الخاص بك؟ + + + Enter your Public Mapbox Key + أدخل مفتاح Mapbox العام الخاص بك + + + Testing... + جارٍ الاختبار... + + + Key is valid! + المفتاح صالح! + + + Key is invalid! + المفتاح غير صالح! + + + An error occurred: %1 + حدث خطأ: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>إدارة مفتاح Mapbox السري.</b> + + + Remove your Secret Mapbox Key? + إزالة مفتاح Mapbox السري الخاص بك؟ + + + Enter your Secret Mapbox Key + أدخل مفتاح Mapbox السري الخاص بك + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + الإطارات في الثانية: %1 | الأدنى: %2 | الأقصى: %3 | المتوسط: %4 + FrogPilotSettingsWindow @@ -3153,6 +3811,38 @@ Developer - Highly customizable settings for seasoned enthusiasts CANCEL إلغاء + + Downloading... + جارٍ التنزيل... + + + Idle + خامل + + + Unpacking theme... + جارٍ فك حزمة السمة... + + + Downloaded! + تم التنزيل! + + + Download cancelled... + تم إلغاء التنزيل... + + + Download failed... + فشل التنزيل... + + + Repository unavailable + المستودع غير متاح + + + GitHub and GitLab are offline... + GitHub وGitLab غير متصلين بالإنترنت... + FrogPilotUtilitiesPanel @@ -3595,6 +4285,54 @@ Developer - Highly customizable settings for seasoned enthusiasts comma Pedal Support دعم comma Pedal + + Subaru Settings + إعدادات Subaru + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>ميزات FrogPilot لمركبات سوبارو.</b> + + + Stop and Go + توقف وانطلق + + + Stop and go for supported Subaru vehicles. + توقف وانطلاق للمركبات المدعومة من Subaru. + + + Acura/Honda Settings + إعدادات Acura/Honda + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>ميزات FrogPilot لمركبات Acura وHonda.</b> + + + Gentle Following + متابعة سلسة + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>يقلل التسارع والكبح المتقطعين عند متابعة مركبة أمامية.</b> مثالي لحركة المرور المتقطعة. + + + Increased Braking Force + قوة كبح متزايدة + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>يزيد قوة الكبح القصوى لتحسين أداء التوقف.</b> + + + Responsive Pedal at Low Speeds + دواسة استجابة عند السرعات المنخفضة + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>يحسن التسارع من التوقف التام لمنح دواسة الوقود استجابة أكثر في القيادة داخل المدينة.</b> + FrogPilotVisualsPanel @@ -4700,6 +5438,42 @@ Developer - Highly customizable settings for seasoned enthusiasts FrogPilot FrogPilot + + 0 MB + 0 ميجابايت + + + GB + جي بي + + + MB + ميغابايت + + + hour + ساعة + + + hours + ساعات + + + minute + دقيقة + + + minutes + دقائق + + + second + ثانية + + + seconds + ثوانٍ + Reset @@ -5131,6 +5905,22 @@ This may take up to a minute. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? هذا إعادة ضبط مصنع كاملة ولا يمكن التراجع عنها. هل أنت متأكد تمامًا أنك تريد المتابعة؟ + + downloading… + جارٍ التنزيل… + + + checking… + جارٍ الفحص… + + + waiting for vehicle to go offroad... + جارٍ انتظار المركبة للخروج عن الطريق... + + + finalizing update... + جارٍ إنهاء التحديث... + SshControl diff --git a/selfdrive/ui/translations/main_caveman.ts b/selfdrive/ui/translations/main_caveman.ts index bff5d26..39380a3 100644 --- a/selfdrive/ui/translations/main_caveman.ts +++ b/selfdrive/ui/translations/main_caveman.ts @@ -424,6 +424,22 @@ Miles Miles + + ALL TIME (KONIK) + ALL TIME (KONIK) + + + ALL TIME + ALL TIME + + + PAST WEEK (KONIK) + PAST WEEK (KONIK) + + + PAST WEEK + PAST WEEK + DriverViewWindow @@ -485,6 +501,30 @@ LIMIT LIMIT + + Desired: %1 + Desired: %1 + + + s + s + + + 1 minute + 1 minute + + + %1 minutes + %1 minute(s) + + + 1 second + 1 second + + + %1 seconds + %1 seconds + FrogPilotConfirmationDialog @@ -695,6 +735,238 @@ Choose a backup to delete Choose backup to delete + + FrogPilot Stats + FrogPilot Stat + + + <b>View your collected FrogPilot stats.</b> + <b>See FrogPilot stats you collect.</b> + + + RESET + RESET + + + VIEW + SEE + + + Are you sure you want to reset all of your FrogPilot stats? + You sure want reset all FrogPilot stats? + + + Reset + Reset + + + Total Emergency Brake Alerts + Total Emergency Brake Alerts + + + Time Using "Always On Lateral" + Time Use "Always On Lateral" + + + Favorite Set Speed + Favorite Set Speed + + + Total Disengagements + All Disengage Total + + + Total Engagements + All Engagements + + + Time Using "Experimental Mode" + Time Use "Experimental Mode" + + + Total Frog Chirps + Frog Chirp Total + + + Total Frog Hops + Frog Hop Total + + + Total Drives + All Drive Total + + + Total Distance Driven + Total Distance Drive + + + Total Driving Time + Total Drive Time + + + Total Frog Squeaks + All Frog Squeak Total + + + Total Goat Screams + Goat Scream Total + + + Highest Acceleration Rate + Fastest Go Push + + + Time Using Lateral Control + Time Use Side Control + + + Longest Distance Without an Override + Longest Distance With No Override + + + Time Using Longitudinal Control + Time Use Longitudinal Control + + + Driving Models: + Drive Model: + + + Month + Moon time + + + Total Overrides + All Override Total + + + Time Overriding openpilot + Time Override openpilot + + + Random Events: + Random Happenings: + + + Time Stopped + Time stop. + + + Time Spent at Stoplights + Time Spent at Red Rock Light + + + Total Time Tracked + Total Time Tracked + + + UwUs + UwUs + + + Loch Ness Encounters + Loch Ness Meet-ups + + + Visits to 1955 + Visits to 1955 + + + Deja Vu Moments + Deja Vu Moment again + + + Internet Explorer Weeeeeeees + Internet Explorer go WEEEEEEE + + + HAL 9000 Denials + HAL 9000 Say No + + + openpilot Crashes + openpilot go boom + + + This Is Fine Moments + This Fine Time + + + To Be Continued Moments + More Come Soon Moments + + + Noices + Noices + + + Attempted Frog Murders + Try kill frog + + + Total Mail Received + All Mail Get + + + kilometer + kilometer + + + kilometers + kilometers + + + mile + mile + + + miles + miles + + + day + day + + + days + days + + + hour + hour + + + hours + hours + + + minute + minute + + + minutes + minutes + + + km/h + km/h + + + mph + mph + + + m/s² + m/s² + + + Total + All total + + + % of + % of + FrogPilotDevicePanel @@ -875,6 +1147,125 @@ seconds + + FrogPilotDriveSummary + + Random Events Summary + Random Events Summary -> Random Event List + + + Drive Summary + Drive Summary + + + UwUs + UwUs + + + Loch Ness Encounters + Loch Ness Meet + + + Visits to 1955 + Visits to 1955 -> Me go 1955 many times + + + Deja Vu Moments + Deja Vu Time + + + Internet Explorer Weeeeeeees + Internet Explorer go WEEEEEEE + + + HAL 9000 Denials + HAL 9000 Say No + + + openpilot Crashes + + + + This Is Fine Moments + This Fine Time Moments + + + To Be Continued Moments + To Be Continue Moment + + + Noices + Noices + + + Attempted Frog Murders + Try kill frog + + + Total Mail Received + All Mail Get Total + + + % of Drive With openpilot Engaged + % of drive when openpilot on + + + Drive Distance + Drive Distance + + + Drive Time + Drive Time + + + % of Drive In "Experimental Mode" + % of Drive In "Experimental Mode" + + + No Random Events Played! + No random events play! + + + kilometer + kilometer + + + kilometers + kilometers + + + mile + mile + + + miles + miles + + + day + day + + + days + days + + + hour + hour + + + hours + hours + + + minute + minute + + + minutes + minutes + + FrogPilotLateralPanel @@ -1292,10 +1683,6 @@ Predicted Stop In Guess Stop Soon - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Go "Experimental Mode" when openpilot say stop soon in set time.</b> This happen when model "see" red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot not detect traffic lights or stop signs direct. In "Experimental Mode", openpilot make end-to-end drive choice from camera, so it maybe stop even when no clear reason.</i> - Turn Signal Below Turn blink below @@ -1617,10 +2004,6 @@ Force Stop at "Detected" Stop Lights/Signs Force Stop at "Detected" Stop Lights/Signs. Me stop when see "Detected" light/sign. - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Make openpilot stop when driving brain "see" red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot no detect traffic light or stop sign direct. In "Experimental Mode", openpilot make end-to-end drive choice from camera, so car maybe stop when no clear reason.</i> - Increase Stopped Distance by: Make stop distance more by: @@ -1653,6 +2036,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>Make cruise button act opposite</b> so short press make set speed go up by 5, not 1. + + Increase Following Distance by: + Make follow distance bigger by: + + + Reduce Acceleration by: + Make go-fast less by: + + + Reduce Speed in Curves by: + Make slow in curve by: + + + Snow + Snow + + + <b>Driving adjustments for snowy conditions.</b> + <b>Drive change for snow.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Add more space behind lead car in snow.</b> Increase for more space; decrease for tighter gap. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Car stop in snow, add more space.</b> More make big gap; less make small gap. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Snow make car slip. Lower max go-fast.</b> More make soft start; less make fast but shaky start. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Drive in snow. Lower want speed in curve.</b> Raise for safe soft turn; lower for wild hard curve. + Speed Limit Controller Speed Limit Boss @@ -2041,6 +2460,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>Make car follow like human</b>. Close gap behind fast car for quick takeoff. Change follow distance on the fly for soft, smart brake. + + Weather Condition Offsets + Weather Condition Offsets go away + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Car change drive by weather now.</b> Keep comfy, keep safe in fog, rain, or snow. + + + Low Visibility + Low See + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Drive change for fog, haze, other low-see time.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Add extra space behind lead car when see bad.</b> More make big gap; less make tight gap. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>Add extra buffer when stopped behind car in low see.</b> More make big gap; less make short gap. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Make max go-fast less when see bad.</b> More make soft start; less make fast start but shaky. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>When fog or dark, slow desire speed in curve.</b> More speed make soft safe turn; less speed make hard wild curve. + + + Rain + Rain + + + <b>Driving adjustments for rainy conditions.</b> + <b>Drive change for rain time.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Add more space behind lead car when rain.</b> More make big gap; less make tight gap. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>Add extra buffer when stop behind cars in rain.</b> More make big gap; less make small gap. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Lower max push in rain.</b> Raise for soft start. Lower for fast start, less stable. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Rain. Slow in curve.</b> More speed for soft safe turn. Less speed for wild curve. + + + Rainstorms + Big rain storms + + + <b>Driving adjustments for rainstorms.</b> + <b>Drive change for big rain.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>Add extra space behind lead car in rain storm.</b> More make big gap; less make small gap. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>Rain storm. Me stop behind car. Add extra space.</b> More make big gap. Less make small gap. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Big rain, make max go-fast low.</b> More make soft start; less make fast start but shaky. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>When rain storm, drive curve with lower want speed.</b> Raise for safe gentle turn. Lower for wild hard curve. + + + Human-Like Lane Changes + Human-Like Lane Change. Me change lane like human. + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>Lane-change act like human</b>. It guess and watch cars next to you when change lane. + + + "Detected" Stop Lights/Signs + "Detected" Stop Light/Sign + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Go "Experimental Mode" when drive brain "see" red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot no truly detect traffic lights or stop signs. In "Experimental Mode", openpilot make end-to-end drive choice from camera. It might stop even when no clear reason!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Go "Experimental Mode" when openpilot think stop come soon.</b> This happen when model "see" red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot no detect traffic lights or stop signs direct. In "Experimental Mode", openpilot make end-to-end drive choice from camera, so it maybe stop even when no clear reason!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Make openpilot stop when drive brain "see" red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot no explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot make end-to-end drive choice from camera, so it may stop even when no clear reason!</i> + + + Set Your Own Key + Set Own Key + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Set own "OpenWeatherMap" key. Weather update go faster.</b><br><br><i>Personal key give 1,000 free call each day. Can update every minute. Default key shared. That one update every 15 minute.</i> + + + ADD + ADD + + + Enter your "OpenWeatherMap" key + Put your "OpenWeatherMap" key now + + + REMOVE + REMOVE + + + Invalid key! + Key bad! + + + Are you sure you want to remove your key? + You sure want remove key? + + + TEST + TEST + + + Testing... + Me test... + + + Key is valid! + Key good! + + + An error occurred: %1 + Error happen: %1 + FrogPilotManageControl @@ -2228,8 +2795,16 @@ No connect... - CANCELLED - CANCELLED + 0 MB + 0 MB + + + Calculating... + Me count now... + + + Not parked + No park @@ -2442,6 +3017,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC Pick Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC + + Downloading... + Me download... + + + Not parked + No park + + + Downloaded! + Download done! + + + All models downloaded! + All models done download! + + + Download cancelled... + Download stop... + + + Download failed... + Download fail... + + + GitHub and GitLab are offline... + GitHub and GitLab go offline... + + + Repository unavailable + Repository no here + FrogPilotModelReview @@ -2628,6 +3235,57 @@ It reset in %1 hour and %2 minute. Completed! Done! + + <b>Manage your Public Mapbox Key.</b> + <b>Manage your Public Mapbox Key.</b> + + + TEST + TEST + + + Remove your Public Mapbox Key? + Remove your Public Mapbox Key? Me remove now? + + + Enter your Public Mapbox Key + Enter your Public Mapbox Key. Me need it. + + + Testing... + Me test... + + + Key is valid! + Key good! + + + Key is invalid! + Key bad! + + + An error occurred: %1 + Error happen: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Me manage secret Mapbox key.</b> + + + Remove your Secret Mapbox Key? + Remove your Secret Mapbox Key? + + + Enter your Secret Mapbox Key + Enter secret Mapbox key + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FrogPilotSettingsWindow @@ -3157,6 +3815,38 @@ Developer - Many custom setting for seasoned enthusiast CANCEL CANCEL + + Downloading... + Me download... + + + Idle + Idle + + + Unpacking theme... + Unpack theme... + + + Downloaded! + It download! + + + Download cancelled... + Download stop now... + + + Download failed... + Download fail... + + + Repository unavailable + Repository no here + + + GitHub and GitLab are offline... + GitHub and GitLab go offline... + FrogPilotUtilitiesPanel @@ -3599,6 +4289,54 @@ Developer - Many custom setting for seasoned enthusiast comma Pedal Support comma Pedal Help + + Subaru Settings + Subaru Setting + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>FrogPilot thing for Subaru car.</b> + + + Stop and Go + Stop. Then go. + + + Stop and go for supported Subaru vehicles. + Stop and go for Subaru car that supported. + + + Acura/Honda Settings + Acura/Honda Setting + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>FrogPilot thing for Acura and Honda car.</b> + + + Gentle Following + Soft Follow + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Make car less jerky when follow lead car.</b> Good for stop-and-go. + + + Increased Braking Force + Brake harder + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Make brake force max. Stop better.</b> + + + Responsive Pedal at Low Speeds + Pedal quick at low speed + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>Make car jump faster from stop. Throttle feel quick in city.</b> + FrogPilotVisualsPanel @@ -4690,6 +5428,42 @@ Developer - Many custom setting for seasoned enthusiast %n day(s) before + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + hour + + + hours + hours + + + minute + minute + + + minutes + minutes + + + second + second + + + seconds + seconds + Reset @@ -5121,6 +5895,22 @@ This take up to one minute. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? This wipe all. No undo. You sure-sure continue? + + downloading… + me download… + + + checking… + me check… + + + waiting for vehicle to go offroad... + wait for vehicle go offroad... + + + finalizing update... + finish update... + SshControl diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts index fb74cee..765bf74 100644 --- a/selfdrive/ui/translations/main_de.ts +++ b/selfdrive/ui/translations/main_de.ts @@ -423,6 +423,22 @@ Miles Meilen + + ALL TIME (KONIK) + ALLE ZEIT (KONIK) + + + ALL TIME + ALLE ZEITEN + + + PAST WEEK (KONIK) + LETZTE WOCHE (KONIK) + + + PAST WEEK + LETZTE WOCHE + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT LIMIT + + Desired: %1 + Gewünscht: %1 + + + s + s + + + 1 minute + 1 Minute + + + %1 minutes + %1 Minuten + + + 1 second + 1 Sekunde + + + %1 seconds + %1 Sekunden + FrogPilotConfirmationDialog @@ -636,7 +676,7 @@ Compressing... - Komprimieren… + Komprimieren... Backup created! @@ -668,7 +708,7 @@ Restoring... - Wird wiederhergestellt… + Wird wiederhergestellt... Extracting... @@ -694,6 +734,238 @@ Choose a backup to delete Wählen Sie eine Sicherungskopie zum Löschen aus + + FrogPilot Stats + FrogPilot-Statistiken + + + <b>View your collected FrogPilot stats.</b> + <b>Sehen Sie sich Ihre gesammelten FrogPilot-Statistiken an.</b> + + + RESET + ZURÜCKSETZEN + + + VIEW + ANSICHT + + + Are you sure you want to reset all of your FrogPilot stats? + Möchten Sie wirklich alle Ihre FrogPilot-Statistiken zurücksetzen? + + + Reset + Zurücksetzen + + + Total Emergency Brake Alerts + Gesamtzahl der Notbremswarnungen + + + Time Using "Always On Lateral" + Zeit mit „Immer Eingeschränkt Querführung“ + + + Favorite Set Speed + Bevorzugte Sollgeschwindigkeit + + + Total Disengagements + Gesamte Deaktivierungen + + + Total Engagements + Gesamte Engagements + + + Time Using "Experimental Mode" + Zeit in „Experimental Mode“ + + + Total Frog Chirps + Gesamte Froschquaks + + + Total Frog Hops + Gesamte Froschsprünge + + + Total Drives + Gesamte Fahrten + + + Total Distance Driven + Gesamte gefahrene Strecke + + + Total Driving Time + Gesamte Fahrzeit + + + Total Frog Squeaks + Gesamte Froschquietscher + + + Total Goat Screams + Gesamte Ziegenschreie + + + Highest Acceleration Rate + Höchste Beschleunigungsrate + + + Time Using Lateral Control + Zeit mit Querführung genutzt + + + Longest Distance Without an Override + Längste Strecke ohne Eingriff + + + Time Using Longitudinal Control + Zeit mit Längsregelung + + + Driving Models: + Fahrmodelle + + + Month + Monat + + + Total Overrides + Gesamtüberschreibungen + + + Time Overriding openpilot + Zeit überschreibt openpilot + + + Random Events: + Zufällige Ereignisse: + + + Time Stopped + Zeit angehalten + + + Time Spent at Stoplights + Verbrachte Zeit an Ampeln + + + Total Time Tracked + Gesamte erfasste Zeit + + + UwUs + UwUs + + + Loch Ness Encounters + Loch-Ness-Begegnungen + + + Visits to 1955 + Besuche bis 1955 + + + Deja Vu Moments + Déjà-vu-Momente + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + HAL-9000-Verweigerungen + + + openpilot Crashes + openpilot stürzt ab + + + This Is Fine Moments + Momente, in denen alles in Ordnung ist + + + To Be Continued Moments + Fortsetzung folgt Momente + + + Noices + Geräusche + + + Attempted Frog Murders + Versuchte Froschmorde + + + Total Mail Received + Gesamteingänge E-Mails + + + kilometer + Kilometer + + + kilometers + Kilometer + + + mile + Meile + + + miles + Meilen + + + day + Tag + + + days + Tage + + + hour + Stunde + + + hours + Stunden + + + minute + Minute + + + minutes + Minuten + + + km/h + km/h + + + mph + mph + + + m/s² + m/s² + + + Total + Gesamt + + + % of + % von + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ Sekunden + + FrogPilotDriveSummary + + Random Events Summary + Zusammenfassung zufälliger Ereignisse + + + Drive Summary + Fahrzusammenfassung + + + UwUs + UwUs + + + Loch Ness Encounters + Loch-Ness-Begegnungen + + + Visits to 1955 + Besuche im Jahr 1955 + + + Deja Vu Moments + Déjà-vu-Momente + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + HAL 9000 Ablehnungen + + + openpilot Crashes + openpilot-Abstürze + + + This Is Fine Moments + Das ist‑gut‑Momente + + + To Be Continued Moments + Fortsetzung folgt Momente + + + Noices + Geräusche + + + Attempted Frog Murders + Versuchte Froschmorde + + + Total Mail Received + Gesamteingangspost + + + % of Drive With openpilot Engaged + % der Fahrt mit aktiviertem openpilot + + + Drive Distance + Fahrstrecke + + + Drive Time + Fahrzeit + + + % of Drive In "Experimental Mode" + % der Fahrt im „Experimental Mode“ + + + No Random Events Played! + Keine zufälligen Ereignisse abgespielt! + + + kilometer + Kilometer + + + kilometers + Kilometer + + + mile + Meile + + + miles + Meilen + + + day + Tag + + + days + Tage + + + hour + Stunde + + + hours + Stunden + + + minute + Minute + + + minutes + Minuten + + FrogPilotLateralPanel @@ -1291,10 +1682,6 @@ Predicted Stop In Voraussichtlicher Halt in - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Wechsle in den „Experimental Mode“, wenn openpilot innerhalb der eingestellten Zeit ein Anhalten vorhersagt.</b> Dies wird normalerweise ausgelöst, wenn das Modell voraus eine rote Ampel oder ein Stoppschild „sieht“.<br><br><i><b>Haftungsausschluss</b>: openpilot erkennt Verkehrsampeln oder Stoppschilder nicht ausdrücklich. Im „Experimental Mode“ trifft openpilot End-to-End-Fahrentscheidungen aus Kameraeingaben, was bedeutet, dass es auch anhalten kann, wenn es dafür keinen klaren Grund gibt.</i> - Turn Signal Below Blinker unten @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs Erzwinge Stopp an „Erkannten“ Ampeln/Stoppschildern - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Erzwinge, dass openpilot anhält, wenn das Fahrmodell eine rote Ampel oder ein Stoppschild „erkennt“.</b><br><br><i><b>Haftungsausschluss</b>: openpilot erkennt Ampeln oder Stoppschilder nicht explizit. Im „Experimental Mode“ trifft openpilot Ende-zu-Ende-Fahrentscheidungen anhand der Kameraeingaben, was bedeutet, dass es auch ohne klaren Grund anhalten kann.</i> - Increase Stopped Distance by: Erhöhe den Haltabstand um: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>Kehrt das Verhalten der Tempomat-Taste um</b>, sodass ein kurzes Drücken die Sollgeschwindigkeit um 5 statt um 1 erhöht. + + Increase Following Distance by: + Folgeabstand erhöhen um: + + + Reduce Acceleration by: + Beschleunigung verringern um: + + + Reduce Speed in Curves by: + Geschwindigkeit in Kurven reduzieren um: + + + Snow + Schnee + + + <b>Driving adjustments for snowy conditions.</b> + <b>Fahranpassungen für Schneebedingungen.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Zusätzlichen Abstand hinter vorausfahrenden Fahrzeugen im Schnee hinzufügen.</b> Erhöhen für mehr Abstand; verringern für geringere Lücken." + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Fügen Sie bei Schnee zusätzlichen Abstand ein, wenn Sie hinter Fahrzeugen anhalten.</b> Erhöhen für mehr Abstand; verringern für kürzere Lücken. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Verringern Sie die maximale Beschleunigung im Schnee.</b> Erhöhen für weichere Anfahrten; verringern für schnellere, aber weniger stabile Anfahrten. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduzieren Sie die gewünschte Geschwindigkeit beim Fahren durch Kurven im Schnee.</b> Erhöhen für sicherere, sanftere Kurven; verringern für aggressiveres Fahren in Kurven. + Speed Limit Controller Geschwindigkeitsbegrenzungsregler @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>Dem Fahrverhalten menschlicher Fahrer nachempfunden</b>, indem Lücken hinter schnelleren Fahrzeugen geschlossen werden, um schneller anzufahren, und der gewünschte Folgeabstand dynamisch angepasst wird, um sanfteres und effizienteres Bremsen zu ermöglichen. + + Weather Condition Offsets + Wetterbedingungen-Offsets + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Fahrverhalten automatisch anhand der aktuellen Wetterlage anpassen.</b> Hilft, Komfort und Sicherheit bei geringer Sicht, Regen oder Schnee zu erhalten. + + + Low Visibility + Geringe Sichtbarkeit + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Fahranpassungen bei Nebel, Dunst oder anderen Bedingungen mit geringer Sicht.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Zusätzlichen Abstand zu vorausfahrenden Fahrzeugen bei schlechter Sicht hinzufügen.</b> Erhöhen für mehr Abstand; verringern für kleinere Lücken. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>Fügen Sie bei geringer Sichtweite einen zusätzlichen Abstand hinzu, wenn Sie hinter Fahrzeugen anhalten.</b> Erhöhen für mehr Platz; verringern für kürzere Abstände. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reduzieren Sie die maximale Beschleunigung bei geringer Sicht.</b> Erhöhen Sie sie für sanftere Starts; verringern Sie sie für schnellere, aber weniger stabile Starts. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Verringern Sie die gewünschte Geschwindigkeit beim Fahren durch Kurven bei geringer Sicht.</b> Erhöhen für sicherere, sanftere Kurven; verringern für aggressiveres Fahren in Kurven. + + + Rain + Regen + + + <b>Driving adjustments for rainy conditions.</b> + <b>Fahranpassungen für Regenbedingungen.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Zusätzlichen Abstand bei Regen zum vorausfahrenden Fahrzeug halten.</b> Erhöhen für mehr Abstand; verringern für geringere Lücken. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>Fügen Sie bei Regen einen zusätzlichen Abstand ein, wenn Sie hinter Fahrzeugen zum Stillstand kommen.</b> Erhöhen für mehr Raum; verringern für kürzere Abstände. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reduzieren Sie die maximale Beschleunigung bei Regen.</b> Erhöhen für sanftere Anfahrten; verringern für schnellere, aber weniger stabile Anfahrten. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduzieren Sie die gewünschte Geschwindigkeit beim Fahren durch Kurven im Regen.</b> Erhöhen für sicherere, sanftere Kurven; verringern für aggressiveres Fahren in Kurven. + + + Rainstorms + Sturmregen + + + <b>Driving adjustments for rainstorms.</b> + <b>Fahranpassungen bei Gewittern.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>In einem Unwetter mehr Abstand zu vorausfahrenden Fahrzeugen halten.</b> Erhöhen für mehr Abstand; verringern für kleinere Lücken. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>Fügen Sie bei einem Halt hinter Fahrzeugen in einem Unwetter zusätzlichen Abstand hinzu.</b> Erhöhen für mehr Platz; verringern für kürzere Abstände. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reduziere die maximale Beschleunigung bei starkem Regen.</b> Erhöhe sie für sanftere Anfahrten; verringere sie für schnellere, aber weniger stabile Anfahrten. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduzieren Sie die gewünschte Geschwindigkeit beim Fahren durch Kurven in einem Gewitterregen.</b> Erhöhen für sicherere, sanftere Kurven; verringern für aggressiveres Fahren in Kurven. + + + Human-Like Lane Changes + Menschliche Spurwechsel + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>Spurwechselverhalten, das menschliche Fahrer nachahmt</b>, indem es während Spurwechseln benachbarte Fahrzeuge antizipiert und verfolgt. + + + "Detected" Stop Lights/Signs + „Erkannte“ Ampeln/Stoppschilder + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Wechseln Sie in den „Experimental Mode“, sobald das Fahrmodell eine rote Ampel oder ein Stoppschild „erkennt“.</b><br><br><i><b>Haftungsausschluss</b>: openpilot erkennt Ampeln oder Stoppschilder nicht explizit. Im „Experimental Mode“ trifft openpilot Ende-zu-Ende-Fahrentscheidungen anhand der Kameradaten, was bedeutet, dass es auch anhalten kann, wenn es keinen klaren Grund gibt!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>In den „Experimental Mode“ wechseln, wenn openpilot innerhalb der eingestellten Zeit einen Stopp vorhersagt.</b> Dies wird normalerweise ausgelöst, wenn das Modell eine rote Ampel oder ein Stoppschild voraus „sieht“.<br><br><i><b>Haftungsausschluss</b>: openpilot erkennt Ampeln oder Stoppschilder nicht ausdrücklich. Im „Experimental Mode“ trifft openpilot End-to-End-Fahrentscheidungen anhand der Kameraeingaben, was bedeutet, dass es möglicherweise anhält, selbst wenn es keinen klaren Grund gibt!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Erzwinge, dass openpilot anhält, sobald das Fahrmodell eine rote Ampel oder ein Stoppschild „erkennt“.</b><br><br><i><b>Haftungsausschluss</b>: openpilot erkennt Verkehrsampeln oder Stoppschilder nicht ausdrücklich. Im „Experimentellen Modus“ trifft openpilot End-to-End-Fahrentscheidungen anhand der Kameraeingaben, was bedeutet, dass es auch anhalten kann, wenn es keinen klaren Grund gibt!</i> + + + Set Your Own Key + Eigenen Schlüssel festlegen + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Stellen Sie Ihren eigenen „OpenWeatherMap“-Schlüssel ein, um die Aktualisierungsrate des Wetters zu erhöhen.</b><br><br><i>Persönliche Schlüssel gewähren 1.000 kostenlose Aufrufe pro Tag und ermöglichen Aktualisierungen jede Minute. Der Standardschlüssel wird gemeinsam genutzt und aktualisiert nur alle 15 Minuten.</i> + + + ADD + HINZUFÜGEN + + + Enter your "OpenWeatherMap" key + Geben Sie Ihren „OpenWeatherMap“-Schlüssel ein + + + REMOVE + ENTFERNEN + + + Invalid key! + Ungültiger Schlüssel! + + + Are you sure you want to remove your key? + Sind Sie sicher, dass Sie Ihren Schlüssel entfernen möchten? + + + TEST + TEST + + + Testing... + Testen... + + + Key is valid! + Schlüssel ist gültig! + + + An error occurred: %1 + Ein Fehler ist aufgetreten: %1 + FrogPilotManageControl @@ -2223,11 +2790,19 @@ Offline... - Offline… + Offline... - CANCELLED - ABGEBROCHEN + 0 MB + 0 MB + + + Calculating... + Berechnung läuft... + + + Not parked + Nicht geparkt @@ -2342,7 +2917,7 @@ Updating... - Aktualisierung läuft… + Aktualisierung läuft... Select a driving model to download @@ -2414,7 +2989,7 @@ Cancelling... - Abbrechen… + Abbrechen... Updating Tinygrad will delete existing Tinygrad-based driving models and need to be re-downloaded. Proceed? @@ -2426,7 +3001,7 @@ Offline... - Offline… + Offline... Update available! @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC Modell auswählen — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC + + Downloading... + Wird heruntergeladen... + + + Not parked + Nicht geparkt + + + Downloaded! + Heruntergeladen! + + + All models downloaded! + Alle Modelle heruntergeladen! + + + Download cancelled... + Download abgebrochen… + + + Download failed... + Download fehlgeschlagen... + + + GitHub and GitLab are offline... + GitHub und GitLab sind offline... + + + Repository unavailable + Repository nicht verfügbar + FrogPilotModelReview @@ -2626,6 +3233,57 @@ Es wird in %1 Stunden und %2 Minuten zurückgesetzt. Completed! Abgeschlossen! + + <b>Manage your Public Mapbox Key.</b> + <b>Verwalte deinen öffentlichen Mapbox-Schlüssel.</b> + + + TEST + TEST + + + Remove your Public Mapbox Key? + Öffentlichen Mapbox-Schlüssel entfernen? + + + Enter your Public Mapbox Key + Gib deinen öffentlichen Mapbox-Schlüssel ein + + + Testing... + Teste... + + + Key is valid! + Schlüssel ist gültig! + + + Key is invalid! + Schlüssel ist ungültig! + + + An error occurred: %1 + Ein Fehler ist aufgetreten: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Verwalten Sie Ihren geheimen Mapbox-Schlüssel.</b> + + + Remove your Secret Mapbox Key? + Ihren geheimen Mapbox-Schlüssel entfernen? + + + Enter your Secret Mapbox Key + Geben Sie Ihren geheimen Mapbox-Schlüssel ein + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS: %1 | Min: %2 | Max: %3 | Durchschnitt: %4 + FrogPilotSettingsWindow @@ -3153,6 +3811,38 @@ Entwickler – Hochgradig anpassbare Einstellungen für versierte EnthusiastenCANCEL ABBRECHEN + + Downloading... + Wird heruntergeladen... + + + Idle + Leerlauf + + + Unpacking theme... + Theme wird entpackt... + + + Downloaded! + Heruntergeladen! + + + Download cancelled... + Download abgebrochen... + + + Download failed... + Download fehlgeschlagen... + + + Repository unavailable + Repository nicht verfügbar + + + GitHub and GitLab are offline... + GitHub und GitLab sind offline... + FrogPilotUtilitiesPanel @@ -3595,6 +4285,54 @@ Entwickler – Hochgradig anpassbare Einstellungen für versierte Enthusiastencomma Pedal Support Unterstützung für comma Pedal + + Subaru Settings + Subaru-Einstellungen + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>FrogPilot-Funktionen für Subaru-Fahrzeuge.</b> + + + Stop and Go + Stop-and-Go + + + Stop and go for supported Subaru vehicles. + Stop-and-Go für unterstützte Subaru-Fahrzeuge. + + + Acura/Honda Settings + Acura/Honda-Einstellungen + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>FrogPilot-Funktionen für Fahrzeuge von Acura und Honda.</b> + + + Gentle Following + Sanftes Folgen + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Reduziert ruckartige Beschleunigung und Bremsung beim Folgen eines vorausfahrenden Fahrzeugs.</b> Ideal für Stop-and-Go-Verkehr. + + + Increased Braking Force + Erhöhte Bremskraft + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Erhöht die maximale Bremskraft für eine verbesserte Bremsleistung.</b> + + + Responsive Pedal at Low Speeds + Reaktionsschnelles Pedal bei niedrigen Geschwindigkeiten + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>Verbessert die Beschleunigung aus dem Stand für ein reaktionsschnelleres Gaspedalgefühl im Stadtverkehr.</b> + FrogPilotVisualsPanel @@ -4684,6 +5422,42 @@ Entwickler – Hochgradig anpassbare Einstellungen für versierte EnthusiastenFrogPilot FrogPilot + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + Stunde + + + hours + Stunden + + + minute + Minute + + + minutes + Minuten + + + second + Sekunde + + + seconds + Sekunden + Reset @@ -5117,6 +5891,22 @@ Dies kann bis zu einer Minute dauern. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? Dies ist ein vollständiger Werksreset und kann nicht rückgängig gemacht werden. Sind Sie absolut sicher, dass Sie fortfahren möchten? + + downloading… + Wird heruntergeladen… + + + checking… + prüfe… + + + waiting for vehicle to go offroad... + Warte darauf, dass das Fahrzeug offroad geht... + + + finalizing update... + Aktualisierung wird abgeschlossen... + SshControl diff --git a/selfdrive/ui/translations/main_duck.ts b/selfdrive/ui/translations/main_duck.ts index a9f1326..a84cd78 100644 --- a/selfdrive/ui/translations/main_duck.ts +++ b/selfdrive/ui/translations/main_duck.ts @@ -423,6 +423,22 @@ Miles Quack-miles + + ALL TIME (KONIK) + Quack-quack! ALL TIME (KONIK) waddles forever, quack! + + + ALL TIME + Quack-quack, all the time! + + + PAST WEEK (KONIK) + QUACK! PAST WEEK (KONIK) waddle-waddle + + + PAST WEEK + Quack! PAST WEEK, waddle-waddle! + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT Quack LIMIT + + Desired: %1 + Quack-desired: %1 + + + s + S-quack! + + + 1 minute + Quack! 1 minute, waddle! + + + %1 minutes + Quack! %1 minutes, waddle-waddle! + + + 1 second + Quack! 1 second, waddle. + + + %1 seconds + Quack! %1 seconds, waddle-waddle! + FrogPilotConfirmationDialog @@ -694,6 +734,238 @@ Choose a backup to delete Quack! Pick a backup to delete, waddle! + + FrogPilot Stats + QuackPilot Stats, quack! + + + <b>View your collected FrogPilot stats.</b> + <b>Quack! Peek at your snazzy FrogPilot stats, waddle-waddle.</b> + + + RESET + QUACK-RESET + + + VIEW + Quack VIEW! Waddle-waddle! + + + Are you sure you want to reset all of your FrogPilot stats? + Quack! Are you sure you want to reset all your FrogPilot stats, waddle-waddle? + + + Reset + Quack! Reset! + + + Total Emergency Brake Alerts + Quack! Total Emergency Brake Alerts, waddle-waddle! + + + Time Using "Always On Lateral" + Quack-time Using "Always On Lateral", waddle-waddle! + + + Favorite Set Speed + Quack! Favorite Set Speed, waddle-waddle! + + + Total Disengagements + Quack! Total Waddle-Offs + + + Total Engagements + Quack-tastic Engagements + + + Time Using "Experimental Mode" + Quack-time using “Experimental Mode”, waddle-waddle! + + + Total Frog Chirps + Quack-tastic Frog Chirps Total! Waddle-waddle! + + + Total Frog Hops + Total Duck Quacks + + + Total Drives + Quack-tastic Drives + + + Total Distance Driven + Quack-total Distance Driven, waddle! + + + Total Driving Time + Quack! Total Waddle Time + + + Total Frog Squeaks + Total Duck Quacks + + + Total Goat Screams + Quack-quack Goat Screams, total! Waddle! + + + Highest Acceleration Rate + Top Quack-celeration Rate, waddle! + + + Time Using Lateral Control + Quack-time using lateral control, waddle-waddle! + + + Longest Distance Without an Override + Quackiest Distance Without a Waddle-override + + + Time Using Longitudinal Control + Quack-time using Longitudinal Control, waddle-waddle! + + + Driving Models: + Driving Models, quack! + + + Month + Quack-month + + + Total Overrides + Quack! Total Overrides, waddle-waddle! + + + Time Overriding openpilot + Quack! Time’s overriding openpilot—waddle-warn! + + + Random Events: + Quack-tastic Events: + + + Time Stopped + Quack! Time went splish-splash—stopped cold, waddle! + + + Time Spent at Stoplights + Quack Time at Stoplights + + + Total Time Tracked + Quack! Total Time Tracked, waddle-waddle! + + + UwUs + QuwackWs + + + Loch Ness Encounters + Quack Ness Encounters, waddle-waddle! + + + Visits to 1955 + Quack-quack! Visits to 1955, waddle on back in time! + + + Deja Vu Moments + Quack déjà vu moments, waddle-waddle! + + + Internet Explorer Weeeeeeees + Quackernet Explorer Weeeeeeees! + + + HAL 9000 Denials + Quack! HAL 9000 Denials, waddle-waddle! + + + openpilot Crashes + Quack! openpilot goes splat-splat! + + + This Is Fine Moments + Quack-tastic moments, all fine! Waddle on, this is fine—quack! + + + To Be Continued Moments + Quack! To Be Continued Moments, waddle-waddle! + + + Noices + Quack-noices! + + + Attempted Frog Murders + Quack! Attempted Frog Murders—waddle-waddle, what a fowl plot! + + + Total Mail Received + Quack! Total Mail Received, waddle-waddle! + + + kilometer + Quackilometer + + + kilometers + Quack-o-meters, waddle! + + + mile + Quack-mile + + + miles + quack miles + + + day + Quack-day + + + days + Quack-days 🦆 + + + hour + Quack-hour 🦆 + + + hours + Quack-hours 🦆 + + + minute + Quack-minute + + + minutes + Quack-minutes 🦆 + + + km/h + km/quack h + + + mph + mph quack! + + + m/s² + m/s² quack! + + + Total + Quack-total! Waddle up the sum, quack! + + + % of + Quack % of quack! + FrogPilotDevicePanel @@ -876,6 +1148,125 @@ quack seconds + + FrogPilotDriveSummary + + Random Events Summary + Quack! Random Events Roundup, waddle-waddle! + + + Drive Summary + Quack! Drive Summary, waddle-waddle! + + + UwUs + Quack-uwu! + + + Loch Ness Encounters + Quack Ness Encounters, waddle-waddle! + + + Visits to 1955 + Quacks to 1955 + + + Deja Vu Moments + Quack déjà vu moments, waddle-waddle! + + + Internet Explorer Weeeeeeees + Quackernet Explorer Weeeeeeees, waddle-waddle! + + + HAL 9000 Denials + Quack! HAL 9000 Denials, waddle-waddle! + + + openpilot Crashes + Quack! openpilot Sploosh-Crashies! + + + This Is Fine Moments + Quack! This Is Fine, waddle-worthy Moments! + + + To Be Continued Moments + Quack! To Be Continued moments, waddle-wait for it, quack! + + + Noices + Quack-noices! + + + Attempted Frog Murders + Quack! Attempted Frog Murders—waddle-whoa! + + + Total Mail Received + Quack! Total Mail Received, waddle-counted! + + + % of Drive With openpilot Engaged + Quack % of Drive with openpilot Engaged, waddle-waddle! + + + Drive Distance + Quack-Quack Drive Distance 🦆 + + + Drive Time + Quack-Quack Drive Time! Waddle on! + + + % of Drive In "Experimental Mode" + % of Drive in "Experimental Mode", quack! + + + No Random Events Played! + Quack! No Random Events Played, waddle-waddle! + + + kilometer + quil-quack-ometer + + + kilometers + Quackometers + + + mile + quack-mile + + + miles + quacks miles + + + day + Quack-day! + + + days + Quack-days 🦆 + + + hour + Quack-hour! + + + hours + quack hours 🦆 + + + minute + Quack-minute + + + minutes + quack-minutes + + FrogPilotLateralPanel @@ -1293,10 +1684,6 @@ Predicted Stop In Quack! Predicted Stop In, waddle-waddle. - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Quack! Switch to "Experimental Mode" when openpilot predicts a stop within the set time, waddle-waddle.</b> Usually triggered when the model "sees" a red light or stop sign ahead, quack.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input—so it may stop even with no clear reason, quack.</i> - Turn Signal Below Quack! Turn Signal Below—waddle-waddle! @@ -1617,10 +2004,6 @@ Force Stop at "Detected" Stop Lights/Signs Quack! Force Stop at “Detected” Stop Lights/Signs, waddle! - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Quack! Force openpilot to stop whenever the driving model “detects” a red light or stop sign, waddle-waddle.</b><br><br><i><b>Disclaimer</b>: Quack! openpilot does not explicitly detect traffic lights or stop signs. In “Experimental Mode”, it makes end-to-end driving choices from camera peeks—so it may stop even when there’s no clear reason, quack.</i> - Increase Stopped Distance by: Quack! Waddle up Stopped Distance by: @@ -1653,6 +2036,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>Quack! Flip the cruise control button behavior</b> so a short press bumps set speed by 5, not 1. + + Increase Following Distance by: + Quack! Increase Following Distance by: waddle! + + + Reduce Acceleration by: + Quack! Waddle down acceleration by: + + + Reduce Speed in Curves by: + Quack! Waddle down speed in curves by: + + + Snow + Quack Snow! + + + <b>Driving adjustments for snowy conditions.</b> + <b>Quack! Driving tweaks for snowy waddles.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Quack! Add extra space behind lead vehicles in snow.</b> Waddle it up for more space; paddle it down for tighter gaps. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Quack! Add extra buffer when stopped behind vehicles in snow.</b> Waddle it up for more room; waddle it down for shorter gaps. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Quack! Lower the max zoom-zoom in snow.</b> Waddle it up for softer takeoffs; waddle it down for quicker but wobblier takeoffs, quack. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Quack! Lower desired speed when waddling through snowy curves.</b> Increase for safer, gentler turns—quack; decrease for more feisty curve-quacks. + Speed Limit Controller Quack! Speed Limit Controller, waddle-waddle! @@ -2041,6 +2460,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>Quack! Mimic human drivers</b> by waddling up to close gaps behind faster cars for zippy takeoffs, and duckily tweak the following distance for smoother, more efficient braking. + + Weather Condition Offsets + Quack-quack! Weather Condition Offsets, waddle on! + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Quack! Auto-tune driving vibes to the weather, right now.</b> Waddle comfy and safe in foggy peeps, rain-splash, or snow-fluff, quack! + + + Low Visibility + Quack! Low Visibility, waddle careful! + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Quack! Driving tweaks for fog, haze, or other low-visibility waddles.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Quack! Add extra space behind lead vehicles in low visibility.</b> Waddle it up for more space; waddle it down for tighter gaps. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>Quack! Add extra buffer when stopped behind vehicles in low visibility.</b> Waddle it up for more room; waddle it down for shorter gaps. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Quack! Lower the max zoom-zoom in foggy views.</b> Waddle it up for softer takeoffs; quack it down for quicker but wobblier takeoffs. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Quack! Lower the desired speed when waddling through curvy roads in low visibility.</b> Waddle up for safer, gentler turns; waddle down for more aggressive curve quacking. + + + Rain + Quack rain! + + + <b>Driving adjustments for rainy conditions.</b> + <b>Quack! Driving tweaks for rainy waddles.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Quack! Add extra splashy space behind lead vehicles in rain.</b> Waddle it up for more room; waddle it down for tighter gaps, quack. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>Quack! Add extra buffer when stopped behind vehicles in rain.</b> Waddle it up for more room; waddle it down for shorter gaps, quack. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Quack! Lower the max zoom-zoom in rain.</b> Waddle it up for softer takeoffs; waddle it down for quicker but wobblier takeoffs. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Quack! Lower desired speed when waddling through rainy curves.</b> Increase for safer, gentler turns; decrease for quack-tastic, more aggressive curve waddles. + + + Rainstorms + Quackstorms! Waddle-wet weather, quack! + + + <b>Driving adjustments for rainstorms.</b> + <b>Quack! Driving tweaks for rainstorms, waddle-waddle.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>Quack! Add extra splashy space behind lead vehicles in a rainstorm.</b> Waddle it up for more space; waddle it down for snugger gaps, quack. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>Quack! When you’re parked behind cars in a rainstorm, add extra buffer, waddle-waddle.</b> Increase for more room; decrease for shorter gaps, quack. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Quack! Lower max zoom-zoom in a rainstorm.</b> Waddle it up for softer takeoffs; waddle it down for quicker but wobblier takeoffs, quack. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Quack! Lower the desired speed when waddling through curvy rain, quack!</b> Increase for safer, gentle turns; decrease for spicy, aggressive curve-quacks. + + + Human-Like Lane Changes + Quack-tastic Lane Changes, just like a duck-human waddle! + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>Quack-like lane changes, just like humans</b>, waddling by anticipating and tracking adjacent vehicles during lane changes. + + + "Detected" Stop Lights/Signs + Quack! "Detected" Stop Lights/Signs, waddle-waddle! + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Quack! Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign, waddle-waddle.</b><br><br><i><b>Disclaimer</b>: Quack! openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input—so it might stop even with no clear reason, quack!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Quack! Switch to "Experimental Mode" when openpilot predicts a stop within the set time, waddle-waddle.</b> Usually triggered when the model “sees” a red light or stop sign ahead, quack.<br><br><i><b>Disclaimer</b>: Quack! openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input—so it might stop even when there’s no clear reason, quack!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Quack! Force openpilot to stop whenever the driving model “detects” a red light or stop sign, waddle-waddle.</b><br><br><i><b>Disclaimer</b>: Quack! openpilot does not explicitly detect traffic lights or stop signs. In “Experimental Mode”, openpilot makes end-to-end driving choices from camera input—so it may stop even when there’s no clear reason, quack!</i> + + + Set Your Own Key + Quack! Set your own key, waddle-waddle! + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Quack! Set your own "OpenWeatherMap" key to goose the weather update rate, waddle-waddle.</b><br><br><i>Personal keys give 1,000 free calls per day—quack!—so you can update every minute. The default key is shared and only paddles in every 15 minutes.</i> + + + ADD + Quack! ADD! + + + Enter your "OpenWeatherMap" key + Quack! Waddle in your "OpenWeatherMap" key, quack! + + + REMOVE + Quack! REMOVE! + + + Invalid key! + Quack! Invalid key, squawk! + + + Are you sure you want to remove your key? + Quack! You sure you want to pluck out your key? Waddle yes or no? + + + TEST + Quack! TEST 🦆 + + + Testing... + Quack-testing... + + + Key is valid! + Quack! Key is valid, waddle-yes! + + + An error occurred: %1 + Quack! An error splashed in: %1 + FrogPilotManageControl @@ -2228,8 +2795,16 @@ Quackline... - CANCELLED - Quack! CANCELLED! + 0 MB + 0 MB, quack! + + + Calculating... + Quack-culating... + + + Not parked + Quack! Not parked, waddle-waddle! @@ -2442,6 +3017,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC Quack a Model — 🗺️ = Navigation, 📡 = Radar, 👀 = VOACC, waddle! + + Downloading... + Quack-loading... + + + Not parked + Quack! Not parked, waddle-warn! + + + Downloaded! + Quack! Downloaded, waddled in! + + + All models downloaded! + Quack! All models downloaded, waddle-waddle! + + + Download cancelled... + Quack! Download cancelled, waddle-waddle... + + + Download failed... + Quack! Download went splat... + + + GitHub and GitLab are offline... + Quack! GitHub and GitLab are splish-splash offline, waddle-wow... + + + Repository unavailable + Quack! Repository not swimmin’ here—unavailable. + FrogPilotModelReview @@ -2628,6 +3235,57 @@ Waddle back later—resets in %1 hours and %2 minutes. Completed! Quack! All done! + + <b>Manage your Public Mapbox Key.</b> + <b>Quack! Manage your Public Mapbox Key, waddle-waddle.</b> + + + TEST + Quack TEST! + + + Remove your Public Mapbox Key? + Quack! Remove your Public Mapbox Key, waddly-waddle? + + + Enter your Public Mapbox Key + Quack! Waddle in your Public Mapbox Key, quack! + + + Testing... + Quack-testing... Waddle... + + + Key is valid! + Quack! Key is valid, waddle-waddle! + + + Key is invalid! + Quack! This key is no good, waddle! + + + An error occurred: %1 + Quack! An error splashed in: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Quack! Waddle and manage your Secret Mapbox Key.</b> + + + Remove your Secret Mapbox Key? + Quack! Waddle away your Secret Mapbox Key? + + + Enter your Secret Mapbox Key + Quack! Enter your Secret Mapbox Key, waddle-waddle! + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + Quack! FPS: %1 | Min: %2 | Max: %3 | Avg: %4, waddle-waddle! + FrogPilotSettingsWindow @@ -3155,6 +3813,38 @@ Developer - Ultra-custom settings for seasoned duckthusiasts CANCEL QUACK-CANCEL + + Downloading... + Quack-loading... + + + Idle + Quack... idle waddle. + + + Unpacking theme... + Quack! Unpacking theme... waddlesplash! + + + Downloaded! + Quack! Downloaded, waddle-waddle! + + + Download cancelled... + Quack! Download cancelled, waddle... + + + Download failed... + Quack! Download went splat... + + + Repository unavailable + Quack! Repository not here, waddle-waddle! + + + GitHub and GitLab are offline... + Quack! GitHub and GitLab are offline... waddle-waddle. + FrogPilotUtilitiesPanel @@ -3597,6 +4287,54 @@ Developer - Ultra-custom settings for seasoned duckthusiasts comma Pedal Support Quack! comma Pedal Support, waddle on! + + Subaru Settings + Quack-quack Subaru Settings, waddle on! + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>Quack! FrogPilot goodies for Subaru rides, waddle-waddle.</b> + + + Stop and Go + Quack-stop ‘n’ go-go, waddle! + + + Stop and go for supported Subaru vehicles. + Quack! Stop ‘n go for supported Subaru vehicles, waddle-waddle! + + + Acura/Honda Settings + Quack! Acura/Honda Settings, waddle-waddle! + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>Quack! FrogPilot goodies for Acura and Honda rides, waddle-waddle.</b> + + + Gentle Following + Quack-tle Following, waddle-waddle! + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Quack! Smooths out jerky zooms and stops when tailing a lead duck—er, vehicle.</b> Perfect for stop-and-go waddles. + + + Increased Braking Force + Quack! Extra Braking Force, waddle-whoomp! + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Quack! Cranks up max braking oomph for better stop-stop, waddle!</b> + + + Responsive Pedal at Low Speeds + Quack-Quick Pedal at Low Speeds, waddle! + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>Quack! Zips off the line for peppier throttle feel in city waddling, quack.</b> + FrogPilotVisualsPanel @@ -4419,7 +5157,7 @@ Developer - Ultra-custom settings for seasoned duckthusiasts Waiting for GPS - Quack! Waiting for GPS, waddle-wait… + Quack! Waiting for GPS, waddle-wait... Waiting for route @@ -4686,6 +5424,42 @@ Developer - Ultra-custom settings for seasoned duckthusiasts Quack! %n day(s) ago, waddle-waddle. + + 0 MB + 0 MB, quack! + + + GB + GB Quack! + + + MB + Quack MB + + + hour + Quack-hour + + + hours + quack hours 🦆 + + + minute + Quack-minute + + + minutes + Quack-minutes! + + + second + Quack-quack, number two! Waddle to the second, quack! + + + seconds + Quack seconds 🦆 + Reset @@ -4842,7 +5616,7 @@ Waddle-wait, this may take up to a minute. Waiting for internet - Quack! Waiting for internet, waddle-wait… quack! + Quack! Waiting for internet, waddle-wait... quack! Choose Software to Install @@ -5117,6 +5891,22 @@ Waddle-wait, this may take up to a minute. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? Quack! This be a full factory reset and can’t be un-quacked. Waddle you absolutely sure you want to continue? + + downloading… + Quack-loading… + + + checking… + Quack… checking, waddle-waddle… + + + waiting for vehicle to go offroad... + Quack... waiting for the vehicle to waddle offroad... quack! + + + finalizing update... + Quack! Finalizing update... waddle-waddle! + SshControl @@ -5138,7 +5928,7 @@ Waddle-wait, this may take up to a minute. LOADING - QUACKING… LOADING! + QUACKING... LOADING! REMOVE diff --git a/selfdrive/ui/translations/main_es.ts b/selfdrive/ui/translations/main_es.ts index be87c1d..ac1fd8c 100644 --- a/selfdrive/ui/translations/main_es.ts +++ b/selfdrive/ui/translations/main_es.ts @@ -423,6 +423,22 @@ Miles Millas + + ALL TIME (KONIK) + TODO EL TIEMPO (KONIK) + + + ALL TIME + TODO EL TIEMPO + + + PAST WEEK (KONIK) + ÚLTIMA SEMANA (KONIK) + + + PAST WEEK + ÚLTIMA SEMANA + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT LÍMITE + + Desired: %1 + Deseado: %1 + + + s + s + + + 1 minute + 1 minuto + + + %1 minutes + %1 minutos + + + 1 second + 1 segundo + + + %1 seconds + %1 segundos + FrogPilotConfirmationDialog @@ -600,7 +640,7 @@ Renaming... - Cambiando el nombre… + Cambiando el nombre... Renamed! @@ -694,6 +734,238 @@ Choose a backup to delete Elige una copia de seguridad para eliminar + + FrogPilot Stats + Estadísticas de FrogPilot + + + <b>View your collected FrogPilot stats.</b> + <b>Ve tus estadísticas recopiladas de FrogPilot.</b> + + + RESET + RESTABLECER + + + VIEW + VER + + + Are you sure you want to reset all of your FrogPilot stats? + ¿Seguro que deseas restablecer todas tus estadísticas de FrogPilot? + + + Reset + Restablecer + + + Total Emergency Brake Alerts + Alertas totales de frenado de emergencia + + + Time Using "Always On Lateral" + Tiempo usando "Dirección siempre activa" + + + Favorite Set Speed + Velocidad de ajuste favorita + + + Total Disengagements + Desconexiones totales + + + Total Engagements + Interacciones totales + + + Time Using "Experimental Mode" + Tiempo usando "Modo experimental" + + + Total Frog Chirps + Total de croares de ranas + + + Total Frog Hops + Saltos totales de rana + + + Total Drives + Conducciones totales + + + Total Distance Driven + Distancia total recorrida + + + Total Driving Time + Tiempo total de conducción + + + Total Frog Squeaks + Rechinidos totales de rana + + + Total Goat Screams + Total de gritos de cabra + + + Highest Acceleration Rate + Tasa de aceleración más alta + + + Time Using Lateral Control + Tiempo usando control lateral + + + Longest Distance Without an Override + Mayor distancia sin intervención + + + Time Using Longitudinal Control + Tiempo usando control longitudinal + + + Driving Models: + Modelos de conducción + + + Month + Mes + + + Total Overrides + Anulaciones totales + + + Time Overriding openpilot + Tiempo sustituyendo a openpilot + + + Random Events: + Eventos aleatorios + + + Time Stopped + Tiempo detenido + + + Time Spent at Stoplights + Tiempo en semáforos + + + Total Time Tracked + Tiempo total registrado + + + UwUs + UwUs + + + Loch Ness Encounters + Encuentros en el Lago Ness + + + Visits to 1955 + Visitas en 1955 + + + Deja Vu Moments + Momentos de déjà vu + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + Denegaciones de HAL 9000 + + + openpilot Crashes + Fallos de openpilot + + + This Is Fine Moments + Momentos de “This Is Fine” + + + To Be Continued Moments + Momentos para continuar + + + Noices + Ruidos + + + Attempted Frog Murders + Intentos de asesinato de ranas + + + Total Mail Received + Correo total recibido + + + kilometer + kilómetro + + + kilometers + kilómetros + + + mile + milla + + + miles + millas + + + day + día + + + days + días + + + hour + hora + + + hours + horas + + + minute + minuto + + + minutes + minutos + + + km/h + km/h + + + mph + mph + + + m/s² + m/s² + + + Total + Total + + + % of + % de + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ segundos + + FrogPilotDriveSummary + + Random Events Summary + Resumen de eventos aleatorios + + + Drive Summary + Resumen de conducción + + + UwUs + UwUs + + + Loch Ness Encounters + Encuentros en el Lago Ness + + + Visits to 1955 + Visitas a 1955 + + + Deja Vu Moments + Momentos Déjà Vu + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + Denegaciones de HAL 9000 + + + openpilot Crashes + Fallas de openpilot + + + This Is Fine Moments + Momentos «Esto está bien» + + + To Be Continued Moments + Momentos para continuar + + + Noices + Ruidos + + + Attempted Frog Murders + Intentos de asesinato de ranas + + + Total Mail Received + Correo total recibido + + + % of Drive With openpilot Engaged + % de conducción con openpilot activado + + + Drive Distance + Distancia de conducción + + + Drive Time + Tiempo de conducción + + + % of Drive In "Experimental Mode" + % de conducción en "Modo Experimental" + + + No Random Events Played! + ¡No se reprodujeron eventos aleatorios! + + + kilometer + kilómetro + + + kilometers + kilómetros + + + mile + milla + + + miles + millas + + + day + día + + + days + días + + + hour + hora + + + hours + horas + + + minute + minuto + + + minutes + minutos + + FrogPilotLateralPanel @@ -1291,10 +1682,6 @@ Predicted Stop In Parada prevista en - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Cambia a "Modo experimental" cuando openpilot prediga una detención dentro del tiempo establecido.</b> Esto normalmente se activa cuando el modelo "ve" un semáforo en rojo o una señal de stop más adelante.<br><br><i><b>Descargo de responsabilidad</b>: openpilot no detecta explícitamente semáforos ni señales de stop. En "Modo experimental", openpilot toma decisiones de conducción de extremo a extremo a partir de la entrada de la cámara, lo que significa que puede detenerse incluso cuando no hay un motivo claro.</i> - Turn Signal Below Intermitente inferior @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs Forzar parada en semáforos/señales de “Detectado” - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Forzar a openpilot a detenerse siempre que el modelo de conducción "detecte" un semáforo en rojo o una señal de alto.</b><br><br><i><b>Descargo de responsabilidad</b>: openpilot no detecta explícitamente semáforos ni señales de alto. En el "Modo experimental", openpilot toma decisiones de conducción de extremo a extremo a partir de la entrada de la cámara, lo que significa que puede detenerse incluso cuando no hay un motivo claro.</i> - Increase Stopped Distance by: Aumentar la distancia de detenido en: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>Invertir el comportamiento del botón del control de crucero</b> para que una pulsación corta aumente la velocidad establecida en 5 en lugar de 1. + + Increase Following Distance by: + Aumentar la distancia de seguimiento en:" + + + Reduce Acceleration by: + Reducir aceleración en: + + + Reduce Speed in Curves by: + Reducir velocidad en curvas en: + + + Snow + Nieve + + + <b>Driving adjustments for snowy conditions.</b> + <b>Ajustes de conducción para condiciones de nieve.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Añade espacio extra detrás de los vehículos precedentes en nieve.</b> Aumenta para más espacio; reduce para intervalos más cortos. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Añade un margen extra al detenerte detrás de vehículos en nieve.</b> Auméntalo para más espacio; redúcelo para intervalos más cortos. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reduzca la aceleración máxima en nieve.</b> Auméntela para despegues más suaves; disminúyala para despegues más rápidos pero menos estables. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduzca la velocidad deseada al conducir por curvas con nieve.</b> Auméntela para giros más seguros y suaves; disminúyala para una conducción más agresiva en curvas. + Speed Limit Controller Control del límite de velocidad @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>Comportamiento de seguimiento que imita a los conductores humanos</b> cerrando huecos detrás de vehículos más rápidos para salidas más rápidas y ajustando dinámicamente la distancia de seguimiento deseada para un frenado más suave y eficiente. + + Weather Condition Offsets + Compensaciones por condiciones meteorológicas + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Ajusta automáticamente el comportamiento de conducción según el clima en tiempo real.</b> Ayuda a mantener la comodidad y la seguridad con poca visibilidad, lluvia o nieve. + + + Low Visibility + Visibilidad baja + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Ajustes de conducción para niebla, neblina u otras condiciones de baja visibilidad.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Agrega espacio extra detrás de los vehículos líderes con baja visibilidad.</b> Aumenta para más espacio; disminuye para huecos más ajustados. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>Añade un margen extra al detenerte detrás de vehículos con baja visibilidad.</b> Auméntalo para tener más espacio; redúcelo para acortar las distancias. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reduzca la aceleración máxima con baja visibilidad.</b> Auméntela para salidas más suaves; disminúyala para salidas más rápidas pero menos estables. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduzca la velocidad deseada al conducir por curvas con baja visibilidad.</b> Auméntela para giros más seguros y suaves; disminúyala para una conducción más agresiva en curvas. + + + Rain + Lluvia + + + <b>Driving adjustments for rainy conditions.</b> + <b>Ajustes de conducción para condiciones de lluvia.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Agrega espacio adicional detrás de los vehículos líderes bajo la lluvia.</b> Aumenta para más espacio; disminuye para brechas más estrechas. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>Añade un margen extra al detenerte detrás de vehículos bajo la lluvia.</b> Auméntalo para más espacio; redúcelo para intervalos más cortos. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reduce la aceleración máxima bajo lluvia.</b> Auméntala para salidas más suaves; disminúyela para salidas más rápidas pero menos estables. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduce la velocidad deseada al conducir por curvas bajo la lluvia.</b> Auméntala para giros más seguros y suaves; disminúyela para una conducción más agresiva en curvas. + + + Rainstorms + Tormentas de lluvia + + + <b>Driving adjustments for rainstorms.</b> + <b>Ajustes de conducción para tormentas de lluvia.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>Aumenta el espacio detrás de los vehículos líderes durante una tormenta.</b> Aumenta para más espacio; disminuye para brechas más cortas. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>Agrega un margen adicional al detenerte detrás de vehículos durante una tormenta.</b> Auméntalo para más espacio; redúcelo para intervalos más cortos. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Disminuye la aceleración máxima durante una tormenta.</b> Auméntala para despegues más suaves; disminúyela para despegues más rápidos pero menos estables. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduce la velocidad deseada al conducir por curvas durante una tormenta.</b> Auméntala para giros más seguros y suaves; disminúyela para una conducción más agresiva en curvas. + + + Human-Like Lane Changes + Cambios de carril similares a los humanos + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>Comportamiento de cambio de carril que imita a los conductores humanos</b> anticipando y siguiendo a los vehículos adyacentes durante los cambios de carril. + + + "Detected" Stop Lights/Signs + Semáforos/señales de alto "Detectados" + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Cambia al "Modo experimental" cuando el modelo de conducción "detecte" un semáforo en rojo o una señal de alto.</b><br><br><i><b>Descargo de responsabilidad</b>: openpilot no detecta explícitamente semáforos ni señales de alto. En "Modo experimental", openpilot toma decisiones de conducción de extremo a extremo a partir de la entrada de la cámara, ¡lo que significa que puede detenerse incluso cuando no hay un motivo claro!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Cambia al "Modo experimental" cuando openpilot prediga una detención dentro del tiempo establecido.</b> Esto normalmente se activa cuando el modelo "ve" un semáforo en rojo o una señal de alto por delante.<br><br><i><b>Descargo de responsabilidad</b>: openpilot no detecta explícitamente semáforos ni señales de alto. En "Modo experimental", openpilot toma decisiones de conducción de extremo a extremo a partir de la entrada de la cámara, ¡lo que significa que puede detenerse incluso cuando no haya un motivo claro!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Forzar a openpilot a detenerse siempre que el modelo de conducción "detecte" un semáforo en rojo o una señal de stop.</b><br><br><i><b>Descargo de responsabilidad</b>: openpilot no detecta explícitamente semáforos ni señales de stop. En "Modo experimental", openpilot toma decisiones de conducción de extremo a extremo a partir de la entrada de la cámara, ¡lo que significa que puede detenerse incluso cuando no hay un motivo claro!</i> + + + Set Your Own Key + Configura tu propia clave + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Establece tu propia clave de "OpenWeatherMap" para aumentar la frecuencia de actualización del clima.</b><br><br><i>Las claves personales otorgan 1,000 llamadas gratuitas por día, permitiendo actualizaciones cada minuto. La clave predeterminada es compartida y solo se actualiza cada 15 minutos.</i> + + + ADD + AÑADIR + + + Enter your "OpenWeatherMap" key + Introduce tu clave de "OpenWeatherMap" + + + REMOVE + ELIMINAR + + + Invalid key! + ¡Clave inválida! + + + Are you sure you want to remove your key? + ¿Está seguro de que desea eliminar su llave? + + + TEST + PRUEBA + + + Testing... + Probando... + + + Key is valid! + ¡La clave es válida! + + + An error occurred: %1 + Ocurrió un error: %1 + FrogPilotManageControl @@ -2226,8 +2793,16 @@ Sin conexión... - CANCELLED - CANCELADO + 0 MB + 0 MB + + + Calculating... + Calculando... + + + Not parked + No estacionado @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC Selecciona un modelo — 🗺️ = Navegación | 📡 = Radar | 👀 = VOACC + + Downloading... + Descargando... + + + Not parked + No estacionado + + + Downloaded! + ¡Descargado! + + + All models downloaded! + ¡Todos los modelos descargados! + + + Download cancelled... + Descarga cancelada... + + + Download failed... + Descarga fallida..." + + + GitHub and GitLab are offline... + GitHub y GitLab están fuera de servicio... + + + Repository unavailable + Repositorio no disponible + FrogPilotModelReview @@ -2625,6 +3232,57 @@ Se restablecerá en %1 horas y %2 minutos. Completed! ¡Completado! + + <b>Manage your Public Mapbox Key.</b> + <b>Administra tu clave pública de Mapbox.</b> + + + TEST + PRUEBA + + + Remove your Public Mapbox Key? + ¿Eliminar tu clave pública de Mapbox? + + + Enter your Public Mapbox Key + Introduce tu clave pública de Mapbox + + + Testing... + Probando... + + + Key is valid! + ¡La clave es válida! + + + Key is invalid! + ¡La clave no es válida! + + + An error occurred: %1 + Ocurrió un error: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Administra tu clave secreta de Mapbox.</b> + + + Remove your Secret Mapbox Key? + ¿Eliminar tu clave secreta de Mapbox? + + + Enter your Secret Mapbox Key + Introduce tu Secret Mapbox Key + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS: %1 | Mín: %2 | Máx: %3 | Prom: %4 + FrogPilotSettingsWindow @@ -3152,6 +3810,38 @@ Desarrollador: configuración altamente personalizable para entusiastas veterano CANCEL CANCELAR + + Downloading... + Descargando... + + + Idle + Inactivo + + + Unpacking theme... + Desempaquetando tema... + + + Downloaded! + ¡Descargado! + + + Download cancelled... + Descarga cancelada... + + + Download failed... + Descarga fallida... + + + Repository unavailable + Repositorio no disponible + + + GitHub and GitLab are offline... + GitHub y GitLab están fuera de servicio... + FrogPilotUtilitiesPanel @@ -3594,6 +4284,54 @@ Desarrollador: configuración altamente personalizable para entusiastas veterano comma Pedal Support Compatibilidad con comma Pedal + + Subaru Settings + Ajustes de Subaru + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>Funciones de FrogPilot para vehículos Subaru.</b> + + + Stop and Go + Parada y avance + + + Stop and go for supported Subaru vehicles. + Parada y arranque para vehículos Subaru compatibles. + + + Acura/Honda Settings + Configuración de Acura/Honda + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>Funciones de FrogPilot para vehículos Acura y Honda.</b> + + + Gentle Following + Seguimiento suave + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Reduce la aceleración y el frenado bruscos al seguir a un vehículo delantero.</b> Ideal para tráfico de paradas y arranques. + + + Increased Braking Force + Aumento de la fuerza de frenado + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Aumenta la fuerza de frenado máxima para mejorar el rendimiento de detención.</b> + + + Responsive Pedal at Low Speeds + Pedal sensible a baja velocidad + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>Mejora la aceleración desde parado para una respuesta del acelerador más ágil en conducción urbana.</b> + FrogPilotVisualsPanel @@ -4683,6 +5421,42 @@ Desarrollador: configuración altamente personalizable para entusiastas veterano FrogPilot FrogPilot + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + hora + + + hours + horas + + + minute + minuto + + + minutes + minutos + + + second + segundo + + + seconds + segundos + Reset @@ -5114,6 +5888,22 @@ Esto puede tardar hasta un minuto. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? Esta es una restauración de fábrica completa y no se puede deshacer. ¿Está absolutamente seguro de que desea continuar? + + downloading… + descargando… + + + checking… + comprobando… + + + waiting for vehicle to go offroad... + esperando a que el vehículo se salga de la carretera..." + + + finalizing update... + finalizando la actualización... + SshControl diff --git a/selfdrive/ui/translations/main_fr.ts b/selfdrive/ui/translations/main_fr.ts index d57a95a..6ba9e07 100644 --- a/selfdrive/ui/translations/main_fr.ts +++ b/selfdrive/ui/translations/main_fr.ts @@ -423,6 +423,22 @@ Miles Miles + + ALL TIME (KONIK) + TOUT TEMPS (KONIK) + + + ALL TIME + TOUT LE TEMPS + + + PAST WEEK (KONIK) + SEMAINE PASSÉE (KONIK) + + + PAST WEEK + SEMAINE PASSÉE + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT LIMITE + + Desired: %1 + Souhaité : %1 + + + s + s + + + 1 minute + 1 minute + + + %1 minutes + %1 minutes + + + 1 second + 1 seconde + + + %1 seconds + %1 secondes + FrogPilotConfirmationDialog @@ -632,11 +672,11 @@ Backing up... - Sauvegarde en cours… + Sauvegarde en cours... Compressing... - Compression en cours… + Compression en cours... Backup created! @@ -672,7 +712,7 @@ Extracting... - Extraction… + Extraction... Restored! @@ -680,7 +720,7 @@ Rebooting... - Redémarrage… + Redémarrage... Toggle Backups @@ -694,6 +734,238 @@ Choose a backup to delete Choisissez une sauvegarde à supprimer + + FrogPilot Stats + Statistiques FrogPilot + + + <b>View your collected FrogPilot stats.</b> + <b>Voir vos statistiques FrogPilot collectées.</b> + + + RESET + RÉINITIALISER + + + VIEW + AFFICHER + + + Are you sure you want to reset all of your FrogPilot stats? + Êtes-vous sûr de vouloir réinitialiser toutes vos statistiques FrogPilot ? + + + Reset + Réinitialiser + + + Total Emergency Brake Alerts + Total des alertes de freinage d’urgence + + + Time Using "Always On Lateral" + Durée d’utilisation de « Always On Lateral » + + + Favorite Set Speed + Vitesse préréglée favorite + + + Total Disengagements + Désengagements totaux + + + Total Engagements + Engagements totaux + + + Time Using "Experimental Mode" + Temps d’utilisation du « Mode expérimental » + + + Total Frog Chirps + Total de coassements de grenouilles + + + Total Frog Hops + Sauts de grenouille total + + + Total Drives + Trajets totaux + + + Total Distance Driven + Distance totale parcourue + + + Total Driving Time + Temps de conduite total + + + Total Frog Squeaks + Total de grincements de grenouille + + + Total Goat Screams + Nombre total de cris de chèvre + + + Highest Acceleration Rate + Taux d’accélération maximal + + + Time Using Lateral Control + Temps d’utilisation du contrôle latéral + + + Longest Distance Without an Override + Distance la plus longue sans intervention + + + Time Using Longitudinal Control + Temps d’utilisation du contrôle longitudinal + + + Driving Models: + Modèles de conduite : + + + Month + Mois + + + Total Overrides + Total des reprises manuelles + + + Time Overriding openpilot + Substitution de l’heure openpilot + + + Random Events: + Événements aléatoires : + + + Time Stopped + Temps arrêté + + + Time Spent at Stoplights + Temps passé aux feux rouges + + + Total Time Tracked + Temps total suivi + + + UwUs + UwUs + + + Loch Ness Encounters + Rencontres du Loch Ness + + + Visits to 1955 + Visites à 1955 + + + Deja Vu Moments + Moments de déjà-vu + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + Refus de HAL 9000 + + + openpilot Crashes + Pannes d’openpilot + + + This Is Fine Moments + Moments « This Is Fine » + + + To Be Continued Moments + À suivre, moments + + + Noices + Bruits + + + Attempted Frog Murders + Tentatives de meurtres de grenouilles + + + Total Mail Received + Total des courriels reçus + + + kilometer + kilomètre + + + kilometers + kilomètres + + + mile + mile + + + miles + miles + + + day + jour + + + days + jours + + + hour + heure + + + hours + heures + + + minute + minute + + + minutes + minutes + + + km/h + km/h + + + mph + mi/h + + + m/s² + m/s² + + + Total + Total + + + % of + % de + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ secondes + + FrogPilotDriveSummary + + Random Events Summary + Résumé des événements aléatoires + + + Drive Summary + Résumé de conduite + + + UwUs + UwUs + + + Loch Ness Encounters + Rencontres du Loch Ness + + + Visits to 1955 + Visites en 1955 + + + Deja Vu Moments + Moments de déjà-vu + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + Refus de HAL 9000 + + + openpilot Crashes + Pannes d’openpilot + + + This Is Fine Moments + Moments « This Is Fine » + + + To Be Continued Moments + À suivre Moments + + + Noices + Bruits + + + Attempted Frog Murders + Tentatives de meurtre de grenouilles + + + Total Mail Received + Total des courriels reçus + + + % of Drive With openpilot Engaged + % de trajets avec openpilot activé + + + Drive Distance + Distance de conduite + + + Drive Time + Temps de conduite + + + % of Drive In "Experimental Mode" + % de conduite en « mode expérimental » + + + No Random Events Played! + Aucun événement aléatoire joué ! + + + kilometer + kilomètre + + + kilometers + kilomètres + + + mile + mile + + + miles + miles + + + day + jour + + + days + jours + + + hour + heure + + + hours + heures + + + minute + minute + + + minutes + minutes + + FrogPilotLateralPanel @@ -1291,10 +1682,6 @@ Predicted Stop In Arrêt prédit dans - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Passer en « Mode Expérimental » lorsque openpilot prévoit un arrêt dans le délai défini.</b> Cela est généralement déclenché lorsque le modèle « voit » un feu rouge ou un panneau stop devant.<br><br><i><b>Avertissement</b> : openpilot ne détecte pas explicitement les feux de circulation ni les panneaux stop. En « Mode Expérimental », openpilot prend des décisions de conduite de bout en bout à partir de l’entrée caméra, ce qui signifie qu’il peut s’arrêter même sans raison évidente.</i> - Turn Signal Below Clignotant en dessous @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs Arrêt forcé aux feux/panneaux « Detected » - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Forcer openpilot à s’arrêter dès que le modèle de conduite « détecte » un feu rouge ou un panneau stop.</b><br><br><i><b>Avertissement</b> : openpilot ne détecte pas explicitement les feux de circulation ou les panneaux stop. En « Mode expérimental », openpilot prend des décisions de conduite de bout en bout à partir des caméras, ce qui signifie qu’il peut s’arrêter même sans raison évidente.</i> - Increase Stopped Distance by: Augmenter la distance à l’arrêt de : @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>Inverser le comportement du bouton du régulateur de vitesse</b> pour qu’un appui court augmente la vitesse réglée de 5 au lieu de 1. + + Increase Following Distance by: + Augmenter la distance de suivi de : + + + Reduce Acceleration by: + Réduire l’accélération de : + + + Reduce Speed in Curves by: + Réduire la vitesse dans les virages de : + + + Snow + Neige + + + <b>Driving adjustments for snowy conditions.</b> + <b>Ajustements de conduite pour conditions neigeuses.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Ajoutez plus d’espace derrière les véhicules précédents par neige.</b> Augmentez pour plus d’espace ; diminuez pour des écarts plus serrés. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Ajoutez une marge supplémentaire à l’arrêt derrière des véhicules sous la neige.</b> Augmentez pour plus d’espace ; diminuez pour des écarts plus courts. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Réduisez l’accélération maximale sur la neige.</b> Augmentez pour des départs plus doux ; diminuez pour des départs plus rapides mais moins stables. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Réduisez la vitesse souhaitée en conduisant dans les virages sur la neige.</b> Augmentez pour des virages plus sûrs et plus doux ; diminuez pour une conduite plus agressive dans les virages. + Speed Limit Controller Contrôleur de limitation de vitesse @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>Un comportement de suivi qui imite les conducteurs humains</b> en réduisant les écarts derrière les véhicules plus rapides pour des départs plus rapides et en ajustant dynamiquement la distance de suivi souhaitée pour un freinage plus doux et plus efficace. + + Weather Condition Offsets + Décalages des conditions météorologiques + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Ajustez automatiquement le comportement de conduite en fonction de la météo en temps réel.</b> Aide à maintenir le confort et la sécurité par faible visibilité, sous la pluie ou la neige. + + + Low Visibility + Visibilité réduite + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Ajustements de conduite pour le brouillard, la brume ou d’autres conditions de faible visibilité.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Ajoutez un espace supplémentaire derrière les véhicules de tête par faible visibilité.</b> Augmentez pour plus d’espace ; diminuez pour des écarts plus serrés. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>Ajoutez une marge supplémentaire à l’arrêt derrière des véhicules par faible visibilité.</b> Augmentez pour plus d’espace ; diminuez pour des intervalles plus courts. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Réduisez l’accélération maximale en faible visibilité.</b> Augmentez pour des démarrages plus doux ; diminuez pour des démarrages plus rapides mais moins stables. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Réduisez la vitesse souhaitée lors de la conduite dans les virages par faible visibilité.</b> Augmentez-la pour des virages plus sûrs et plus doux ; diminuez-la pour une conduite plus agressive dans les virages. + + + Rain + Pluie + + + <b>Driving adjustments for rainy conditions.</b> + <b>Ajustements de conduite pour conditions pluvieuses.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Ajoutez un espace supplémentaire derrière les véhicules précédents sous la pluie.</b> Augmentez pour plus d’espace ; diminuez pour des écarts plus serrés. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>Ajoutez une marge supplémentaire à l’arrêt derrière des véhicules sous la pluie.</b> Augmentez pour plus d’espace ; diminuez pour des écarts plus courts. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Réduisez l’accélération maximale sous la pluie.</b> Augmentez-la pour des départs plus doux ; diminuez-la pour des départs plus rapides mais moins stables. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Réduisez la vitesse souhaitée en conduisant dans des virages sous la pluie.</b> Augmentez-la pour des virages plus sûrs et plus doux ; diminuez-la pour une conduite plus agressive dans les virages. + + + Rainstorms + Orages de pluie + + + <b>Driving adjustments for rainstorms.</b> + <b>Ajustements de conduite pour les orages.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>Ajoutez plus d’espace derrière les véhicules de tête pendant un orage.</b> Augmentez pour plus d’espace ; diminuez pour des écarts plus serrés. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>Ajoutez une marge supplémentaire à l’arrêt derrière des véhicules pendant un orage.</b> Augmentez pour plus d’espace ; réduisez pour des écarts plus courts. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Réduisez l’accélération maximale pendant un orage.</b> Augmentez pour des départs plus doux ; diminuez pour des départs plus rapides mais moins stables. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Réduisez la vitesse souhaitée en conduisant dans des virages sous la pluie.</b> Augmentez-la pour des virages plus sûrs et plus doux ; diminuez-la pour une conduite plus agressive dans les virages. + + + Human-Like Lane Changes + Changements de voie de type humain + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>Comportement de changement de voie imitant les conducteurs humains</b> en anticipant et en suivant les véhicules adjacents pendant les changements de voie. + + + "Detected" Stop Lights/Signs + Feux/Stop "Detectés" + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Passer en « Mode expérimental » chaque fois que le modèle de conduite « détecte » un feu rouge ou un panneau stop.</b><br><br><i><b>Avertissement</b> : openpilot ne détecte pas explicitement les feux de circulation ni les panneaux stop. En « Mode expérimental », openpilot prend des décisions de conduite de bout en bout à partir de l’entrée caméra, ce qui signifie qu’il peut s’arrêter même lorsqu’il n’y a aucune raison évidente !</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Passer en « Mode expérimental » lorsque openpilot prévoit un arrêt dans le délai défini.</b> Cela est généralement déclenché lorsque le modèle « voit » un feu rouge ou un panneau stop devant.<br><br><i><b>Avertissement</b> : openpilot ne détecte pas explicitement les feux de circulation ou les panneaux stop. En « Mode expérimental », openpilot prend des décisions de conduite de bout en bout à partir des images de la caméra, ce qui signifie qu’il peut s’arrêter même lorsqu’il n’y a pas de raison évidente !</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Forcer openpilot à s’arrêter chaque fois que le modèle de conduite « détecte » un feu rouge ou un panneau stop.</b><br><br><i><b>Avertissement</b> : openpilot ne détecte pas explicitement les feux de circulation ni les panneaux stop. En « mode expérimental », openpilot prend des décisions de conduite de bout en bout à partir des caméras, ce qui signifie qu’il peut s’arrêter même sans raison évidente !</i> + + + Set Your Own Key + Définir votre propre clé + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Définissez votre propre clé "OpenWeatherMap" pour augmenter la fréquence des mises à jour météo.</b><br><br><i>Les clés personnelles offrent 1 000 appels gratuits par jour, permettant des mises à jour chaque minute. La clé par défaut est partagée et ne met à jour que toutes les 15 minutes.</i> + + + ADD + AJOUTER + + + Enter your "OpenWeatherMap" key + Entrez votre clé "OpenWeatherMap" + + + REMOVE + RETIRER + + + Invalid key! + Clé invalide ! + + + Are you sure you want to remove your key? + Êtes-vous sûr de vouloir supprimer votre clé ? + + + TEST + TEST + + + Testing... + Test en cours... + + + Key is valid! + La clé est valide ! + + + An error occurred: %1 + Une erreur s’est produite : %1 + FrogPilotManageControl @@ -2159,7 +2726,7 @@ Resetting... - Réinitialisation… + Réinitialisation... Reset! @@ -2167,7 +2734,7 @@ Rebooting... - Redémarrage… + Redémarrage... Storage Used @@ -2226,8 +2793,16 @@ Hors ligne... - CANCELLED - ANNULÉ + 0 MB + 0 Mo + + + Calculating... + Calcul en cours... + + + Not parked + Non stationné @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC Sélectionner un modèle — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC + + Downloading... + Téléchargement… + + + Not parked + Non stationné + + + Downloaded! + Téléchargé ! + + + All models downloaded! + Tous les modèles ont été téléchargés ! + + + Download cancelled... + Téléchargement annulé... + + + Download failed... + Échec du téléchargement... + + + GitHub and GitLab are offline... + GitHub et GitLab sont hors ligne... + + + Repository unavailable + Dépôt indisponible + FrogPilotModelReview @@ -2584,7 +3191,7 @@ Cancelled... - Annulé… + Annulé... You've hit today's request limit. @@ -2625,6 +3232,57 @@ Elle sera réinitialisée dans %1 heures et %2 minutes. Completed! Terminé ! + + <b>Manage your Public Mapbox Key.</b> + <b>Gérez votre clé Mapbox publique.</b> + + + TEST + TEST + + + Remove your Public Mapbox Key? + Supprimer votre clé Mapbox publique ? + + + Enter your Public Mapbox Key + Entrez votre clé Mapbox publique + + + Testing... + Test en cours... + + + Key is valid! + La clé est valide ! + + + Key is invalid! + La clé est invalide ! + + + An error occurred: %1 + Une erreur s’est produite : %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Gérez votre clé Mapbox secrète.</b> + + + Remove your Secret Mapbox Key? + Supprimer votre clé Mapbox secrète ? + + + Enter your Secret Mapbox Key + Saisissez votre clé secrète Mapbox + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS : %1 | Min : %2 | Max : %3 | Moy : %4 + FrogPilotSettingsWindow @@ -3152,6 +3810,38 @@ Développeur – Paramètres hautement personnalisables pour passionnés chevron CANCEL ANNULER + + Downloading... + Téléchargement... + + + Idle + Inactif + + + Unpacking theme... + Décompression du thème... + + + Downloaded! + Téléchargé ! + + + Download cancelled... + Téléchargement annulé… + + + Download failed... + Échec du téléchargement... + + + Repository unavailable + Dépôt indisponible + + + GitHub and GitLab are offline... + GitHub et GitLab sont hors ligne… + FrogPilotUtilitiesPanel @@ -3185,7 +3875,7 @@ Développeur – Paramètres hautement personnalisables pour passionnés chevron Flashing... - Flashage… + Flashage... Flashed! @@ -3193,7 +3883,7 @@ Développeur – Paramètres hautement personnalisables pour passionnés chevron Rebooting... - Redémarrage… + Redémarrage... Force Drive State @@ -3333,7 +4023,7 @@ Développeur – Paramètres hautement personnalisables pour passionnés chevron Resetting... - Réinitialisation… + Réinitialisation... Reset! @@ -3594,6 +4284,54 @@ Développeur – Paramètres hautement personnalisables pour passionnés chevron comma Pedal Support Prise en charge de comma Pedal + + Subaru Settings + Paramètres Subaru + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>Fonctionnalités FrogPilot pour véhicules Subaru.</b> + + + Stop and Go + Arrêt et redémarrage + + + Stop and go for supported Subaru vehicles. + Arrêt et redémarrage pour les véhicules Subaru compatibles. + + + Acura/Honda Settings + Paramètres Acura/Honda + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>Fonctionnalités FrogPilot pour les véhicules Acura et Honda.</b> + + + Gentle Following + Suivi en douceur + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Réduit les accélérations et freinages saccadés lors du suivi d’un véhicule précédent.</b> Idéal pour la circulation en stop-and-go. + + + Increased Braking Force + Force de freinage accrue + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Augmente la force de freinage maximale pour améliorer les performances d’arrêt.</b> + + + Responsive Pedal at Low Speeds + Pédale réactive à basse vitesse + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>Améliore l’accélération au départ arrêté pour une réponse d’accélérateur plus réactive en conduite urbaine.</b> + FrogPilotVisualsPanel @@ -4683,6 +5421,42 @@ Développeur – Paramètres hautement personnalisables pour passionnés chevron FrogPilot FrogPilot + + 0 MB + 0 Mo + + + GB + Go + + + MB + Mo + + + hour + heure + + + hours + heures + + + minute + minute + + + minutes + minutes + + + second + seconde + + + seconds + secondes + Reset @@ -5114,6 +5888,22 @@ Cela peut prendre jusqu'à une minute. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? Ceci est une réinitialisation complète d’usine et elle est irréversible. Êtes-vous absolument sûr de vouloir continuer ? + + downloading… + téléchargement en cours… + + + checking… + vérification… + + + waiting for vehicle to go offroad... + en attente que le véhicule aille hors route... + + + finalizing update... + finalisation de la mise à jour..." + SshControl diff --git a/selfdrive/ui/translations/main_frog.ts b/selfdrive/ui/translations/main_frog.ts index 00d883f..523a3c6 100644 --- a/selfdrive/ui/translations/main_frog.ts +++ b/selfdrive/ui/translations/main_frog.ts @@ -36,7 +36,7 @@ Until Reboot - Ribbit… until reboot, croak! + Ribbit... until reboot, croak! Enable Tethering @@ -370,7 +370,7 @@ down - Ribbit… down. Croak. + Ribbit... down. Croak. up @@ -382,7 +382,7 @@ right - Ribbit… right side, croak! + Ribbit... right side, croak! Are you sure you want to reboot? @@ -423,6 +423,22 @@ Miles Ribbit miles + + ALL TIME (KONIK) + Ribbit! ALL TIME (KONIK), croak! + + + ALL TIME + Ribbit! ALL TIME croak! + + + PAST WEEK (KONIK) + Ribbit PAST WEEK (KONIK) croak + + + PAST WEEK + Ribbit! PAST WEEK croak! + DriverViewWindow @@ -478,12 +494,36 @@ PENDING - Ribbit… PENDING, croak! + Ribbit... PENDING, croak! LIMIT RIBBIT LIMIT CROAK + + Desired: %1 + Ribbit! Desired: %1 + + + s + Sss... ribbit! + + + 1 minute + Ribbit! 1 minute, croak. + + + %1 minutes + Ribbit! %1 minutes, croak! + + + 1 second + Ribbit! 1 second croak. + + + %1 seconds + Ribbit! %1 seconds croak + FrogPilotConfirmationDialog @@ -532,7 +572,7 @@ Deleting... - Ribbit… croak! Deleting… hop-hop… + Ribbit... croak! Deleting... hop-hop... Deleted! @@ -632,11 +672,11 @@ Backing up... - Ribbit… croak! Backing up... + Ribbit... croak! Backing up... Compressing... - Ribbit… squishing it down, croak! + Ribbit... squishing it down, croak! Backup created! @@ -680,7 +720,7 @@ Rebooting... - Ribbit… rebooting, croak! + Ribbit... rebooting, croak! Toggle Backups @@ -694,6 +734,238 @@ Choose a backup to delete Ribbit! Choose a backup to delete, croak. + + FrogPilot Stats + RibbitPilot Stats + + + <b>View your collected FrogPilot stats.</b> + <b>Ribbit! Peek at your gathered FrogPilot stats, croak.</b> + + + RESET + RIBBIT RESET CROAK + + + VIEW + Ribbit VIEW! + + + Are you sure you want to reset all of your FrogPilot stats? + Ribbit! You sure you want to reset all your FrogPilot stats, croak? + + + Reset + Ribbit! Reset croak! + + + Total Emergency Brake Alerts + Ribbit! Total Emergency Brake Alerts, croak! + + + Time Using "Always On Lateral" + Ribbit Time Using "Always On Lateral", croak! + + + Favorite Set Speed + Ribbit! Favorite Set Speed croak! + + + Total Disengagements + Ribbit! Total Disengagements croak + + + Total Engagements + Ribbit! Total Hops and Croaks + + + Time Using "Experimental Mode" + Ribbit time using "Experimental Mode", croak! + + + Total Frog Chirps + Ribbit Count, total croaks + + + Total Frog Hops + Ribbit Total Frog Hops Croak + + + Total Drives + Ribbit! Total Hops + + + Total Distance Driven + Ribbit! Total Distance Hopped Driven + + + Total Driving Time + Ribbit Total Driving Time Croak + + + Total Frog Squeaks + Ribbit Tally of Frog Squeaks + + + Total Goat Screams + Ribbit Count o’ Goat Screams, croak! + + + Highest Acceleration Rate + Highest Acceleration Rate, ribbit! + + + Time Using Lateral Control + Ribbit! Time Using Lateral Control, croak! + + + Longest Distance Without an Override + Ribbit! Longest hop without a croaky override + + + Time Using Longitudinal Control + Ribbit Time Using Longitudinal Control, croak! + + + Driving Models: + Ribbit Rides: + + + Month + Ribbit Month croak + + + Total Overrides + Ribbit! Total Overrides, croak! + + + Time Overriding openpilot + Ribbit! Time croaks over, overriding openpilot. + + + Random Events: + Ribbit Random Events, croak! + + + Time Stopped + Ribbit! Time went croak—stopped! + + + Time Spent at Stoplights + Ribbit Time Spent at Stoplights, croak! + + + Total Time Tracked + Ribbit! Total Time Croaked + + + UwUs + Ribbit UwUs croak + + + Loch Ness Encounters + Ribbit! Loch Ness Encounters, croak! + + + Visits to 1955 + Ribbit! Hops to 1955 croaks + + + Deja Vu Moments + Ribbit! Deja Vu Moments, croak! + + + Internet Explorer Weeeeeeees + Ribbit! Internet Explorer Weeeeeeees croak! + + + HAL 9000 Denials + Ribbit HAL 9000 Denials, croak! + + + openpilot Crashes + Ribbit! openpilot Crashes—croak! + + + This Is Fine Moments + Ribbit, this be fine moments! Croak! + + + To Be Continued Moments + Ribbit! To Be Continued Moments, croak—more hops ahead! + + + Noices + Croaks + + + Attempted Frog Murders + Ribbit! Attempts at frog murders, croak! + + + Total Mail Received + Ribbit! Total Mail Received, croak. + + + kilometer + Ribbit-kilometer + + + kilometers + Ribbit-kilometers + + + mile + ribbit mile croak + + + miles + ribbit miles + + + day + Ribbit-day + + + days + Ribbit days croak + + + hour + Ribbit-hour + + + hours + Ribbit hours croak + + + minute + Ribbit-minute + + + minutes + Ribbit minutes croak + + + km/h + km/h ribbit + + + mph + mph + + + m/s² + m/s² + + + Total + Ribbit! Total croak + + + % of + Ribbit % of croak + FrogPilotDevicePanel @@ -871,7 +1143,126 @@ seconds - Ribbit… seconds. Croak. + Ribbit... seconds. Croak. + + + + FrogPilotDriveSummary + + Random Events Summary + Ribbit! Jumpy Happenings Summary + + + Drive Summary + Ribbit Recap + + + UwUs + Ribbit UwUs croak + + + Loch Ness Encounters + Ribbit! Loch Ness Encounters, croak! + + + Visits to 1955 + Ribbit! Hops to 1955 visits. Croak! + + + Deja Vu Moments + Ribbit! Deja Vu Moments, croak! + + + Internet Explorer Weeeeeeees + Internet Explorer Wee-reee-ribbits + + + HAL 9000 Denials + Ribbit! HAL 9000 Croaks of Denial + + + openpilot Crashes + Ribbit! openpilot Croaks and Crashes, croak! + + + This Is Fine Moments + Ribbit! This Is Fine moments, croak-croak. + + + To Be Continued Moments + Ribbit! Moments to be continued, croak! + + + Noices + Ribbit-nice noises! Croak! + + + Attempted Frog Murders + Ribbit! Attempts at frog slayings, croak! + + + Total Mail Received + Ribbit! Total Mail Received, croak. + + + % of Drive With openpilot Engaged + Ribbit % of Drive with openpilot Engaged, croak! + + + Drive Distance + Ribbit Road Hopping Distance + + + Drive Time + Ribbit Time + + + % of Drive In "Experimental Mode" + Ribbit! % of Drive in "Experimental Mode" croak + + + No Random Events Played! + Ribbit! No Random Events croaked! + + + kilometer + Ribbit-kilometer + + + kilometers + Ribbit-kilometers croak + + + mile + ribbit mile + + + miles + Ribbit miles croak + + + day + Ribbit day croak! + + + days + Ribbit days croak + + + hour + Ribbit hour croak + + + hours + ribbit hours croak + + + minute + ribbit minute croak + + + minutes + minutes, ribbit @@ -1291,10 +1682,6 @@ Predicted Stop In Ribbit! Predicted Stop In - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Ribbit! Switch to "Experimental Mode" when openpilot croaks a stop within the set time.</b> Croak! Usually hops in when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, so it may stop even when there’s no clear reason. Ribbit.</i> - Turn Signal Below Ribbit! Turn Signal Below, croak! @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs Ribbit! Force Stop at “Detected” Stop Lights/Signs, croak! - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Croak! Force openpilot to halt whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: Croak—openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving choices from camera eyes, ribbit, which means it may stop even when there’s no clear reason.</i> - Increase Stopped Distance by: Ribbit! Bump Stopped Distance by: croak! @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>Ribbit! Flip the cruise control button’s ways</b> so a quick tap croaks the set speed up by 5, not 1. + + Increase Following Distance by: + Ribbit! Increase Following Distance by: croak! + + + Reduce Acceleration by: + Ribbit! Trim acceleration by: Croak! + + + Reduce Speed in Curves by: + Ribbit! Reduce speed in curves by: croak! + + + Snow + Ribbit! Snow croaks and falls. + + + <b>Driving adjustments for snowy conditions.</b> + <b>Ribbit! Driving tweaks for snowy roads.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Ribbit! Add extra lily-pad space behind lead vehicles in snow.</b> Increase to hop more space; decrease for tighter gaps, croak. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Ribbit! Add extra buffer when stopped behind vehicles in snow.</b> Croak—increase for more room; decrease for shorter gaps. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Ribbit! Lower the max zoom in snow.</b> Croak—more for soft hop-offs; less for quick but wobbly hop-offs. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Ribbit! Lower the desired speed when hopping through snowy curves.</b> Croak—raise it for safer, gentler turns; drop it for bolder, more aggressive curve-hopping. + Speed Limit Controller Ribbit Speed Limit Controller, croak! @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>Croaky follow like humans</b>, ribbit! Hop to close gaps behind faster cars for quick takeoffs, and croak-adjust the follow distance for gentler, thriftier braking. + + Weather Condition Offsets + Ribbit-weather croak offsets + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Ribbit! Auto-tune driving vibes by real-time weather, croak.</b> Keeps comfort and safety steady in foggy views, rain, or snow, ribbit. + + + Low Visibility + Low Visibi-ribbit-ty + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Ribbit! Driving tweaks for fog, haze, or other murky, low-visibility times.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Ribbit! Add extra space behind lead vehicles in low visibility.</b> Croak—increase for more space; decrease for tighter gaps. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>Ribbit! Add extra buffer when stopped behind vehicles in low visibility.</b> Croak—increase for more room; decrease for shorter gaps. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Ribbit! Lower max zoom in the murky mist.</b> Croak—more makes softer hop-offs; less makes quicker but wobbly leap-offs. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Ribbit! Lower the desired speed when hopping through curvy fog.</b> Croak—raise it for safer, gentler turns; drop it for bolder, snappier curve hops. + + + Rain + Ribbit Rain + + + <b>Driving adjustments for rainy conditions.</b> + <b>Ribbit! Driving tweaks for rainy boggy conditions.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Ribbit! Add extra space behind lead vehicles in rain.</b> Croak—increase for more space; decrease for tighter gaps. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>Ribbit! Add extra buffer when stopped behind vehicles in rain.</b> Croak—increase for more room; decrease for shorter gaps. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Ribbit! Lower the max zoom in rain.</b> Croak—more for softer hop-offs; less for faster but wobblier hop-offs. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Ribbit! Lower desired speed when hopping through rainy curves.</b> Croak—raise it for safer, gentler turns; drop it for more aggressive curve hops. + + + Rainstorms + Ribbiting rainstorms! Croak-croak! + + + <b>Driving adjustments for rainstorms.</b> + <b>Ribbit! Driving tweaks for rainstorms, croak.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>Ribbit! Add extra splash-space behind lead vehicles in a rainstorm.</b> Croak—increase for more space; decrease for tighter gaps. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>Ribbit! Add extra buffer when stopped behind vehicles in a rainstorm.</b> Croak—increase for more room; decrease for shorter gaps. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Ribbit! Lower the max zoom in a rainstorm.</b> Croak—more makes softer takeoffs; less makes quicker but wobbly takeoffs. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Ribbit! Lower the desired speed when you hop through curvy roads in a rainstorm.</b> Croak—raise it for safer, gentler turns; drop it for more aggressive curve-hopping. + + + Human-Like Lane Changes + Ribbit-Real Lane Hops + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>Ribbit! Lane-change ways like human drivers</b>, croaking ahead and tracking nearby cars during lane hops. + + + "Detected" Stop Lights/Signs + Ribbit! “Detected” Stop Lights/Signs Croak! + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Ribbit! Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: Croak! openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, so it may stop even when there’s no clear reason—ribbit!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Ribbit! Flip to "Experimental Mode" when openpilot croaks a stop within the set time.</b> Usually hops on when the model "sees" a red light or stop sign ahead. <br><br><i><b>Disclaimer</b>: openpilot does not explicitly spot traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving choices from camera peepers—croak—so it might stop even with no clear reason!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Ribbit! Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: Croak! openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, so it may stop even when there’s no clear reason! Ribbit.</i> + + + Set Your Own Key + Ribbit! Set your own key, croak! + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Ribbit! Set your own "OpenWeatherMap" key to make weather hops update faster.</b><br><br><i>Personal keys croak out 1,000 free calls per day, so updates leap every minute. The default key is shared and only croaks every 15 minutes.</i> + + + ADD + Ribbit ADD + + + Enter your "OpenWeatherMap" key + Ribbit! Enter your "OpenWeatherMap" key, croak! + + + REMOVE + Ribbit! REMOVE + + + Invalid key! + Ribbit! Bad key, croak! + + + Are you sure you want to remove your key? + Ribbit! You sure you want to toss your key in the pond? Croak? + + + TEST + Ribbit TEST croak! + + + Testing... + Ribbit... Testing, croak... + + + Key is valid! + Ribbit! Key be valid, croak! + + + An error occurred: %1 + Ribbit! An error croaked up: %1 + FrogPilotManageControl @@ -2159,7 +2726,7 @@ Resetting... - Ribbit… resetting… croak! + Ribbit... resetting... croak! Reset! @@ -2167,7 +2734,7 @@ Rebooting... - Ribbit… rebooting, croak! + Ribbit... rebooting, croak! Storage Used @@ -2226,8 +2793,16 @@ Ribbit... - CANCELLED - CROAK-CANCELLED Ribbit! + 0 MB + 0 MB, ribbit + + + Calculating... + Ribbit... calculating, croak! + + + Not parked + Ribbit, not parked. Croak! @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC Ribbit! Pick a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC, croak! + + Downloading... + Ribbit... downloading, croak! + + + Not parked + Ribbit! Not parked, croak. + + + Downloaded! + Ribbit! Downloaded! Croak! + + + All models downloaded! + Ribbit! All models downloaded, croak! + + + Download cancelled... + Ribbit... download croaked and cancelled... + + + Download failed... + Ribbit... download croaked... + + + GitHub and GitLab are offline... + Ribbit! GitHub and GitLab are offline... croak! + + + Repository unavailable + Ribbit! Repository not on the lilypad—croak, unavailable! + FrogPilotModelReview @@ -2584,7 +3191,7 @@ Cancelled... - Ribbit… Cancelled… croak… + Ribbit... Cancelled... croak... You've hit today's request limit. @@ -2626,6 +3233,57 @@ It’ll reset in %1 hours and %2 minutes. Completed! Ribbit! All done! + + <b>Manage your Public Mapbox Key.</b> + <b>Ribbit! Manage your Public Mapbox Key, croak.</b> + + + TEST + Ribbit TEST croak! + + + Remove your Public Mapbox Key? + Ribbit! Remove your Public Mapbox Key? Croak! + + + Enter your Public Mapbox Key + Ribbit! Hop in your Public Mapbox Key here, croak! + + + Testing... + Ribbit... testing splash! Croak! + + + Key is valid! + Ribbit! Key be valid, croak! + + + Key is invalid! + Ribbit! Key be invalid, croak! + + + An error occurred: %1 + Ribbit! An error croaked up: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Ribbit! Manage your Secret Mapbox Key, croak.</b> + + + Remove your Secret Mapbox Key? + Ribbit! Remove your Secret Mapbox Key? Croak! + + + Enter your Secret Mapbox Key + Ribbit! Hop in your Secret Mapbox Key here, croak! + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + Ribbit! FPS: %1 | Min: %2 | Max: %3 | Avg: %4 croak + FrogPilotSettingsWindow @@ -3153,6 +3811,38 @@ Developer - Highly customizable settings for seasoned swamp pros CANCEL Ribbit! CANCEL croak! + + Downloading... + Ribbit... Downloading, croak... + + + Idle + Ribbit… idle croak. + + + Unpacking theme... + Ribbit... unpacking theme, croak! + + + Downloaded! + Ribbit! Snagged and splashed ashore! + + + Download cancelled... + Ribbit… download croaked, cancelled... + + + Download failed... + Croak... download bellyflopped, ribbit! + + + Repository unavailable + Ribbit! Repository unavailable, croak! + + + GitHub and GitLab are offline... + Ribbit! GitHub and GitLab are croaked offline... croak. + FrogPilotUtilitiesPanel @@ -3186,7 +3876,7 @@ Developer - Highly customizable settings for seasoned swamp pros Flashing... - Ribbit… flashing... croak! + Ribbit... flashing... croak! Flashed! @@ -3577,7 +4267,7 @@ Developer - Highly customizable settings for seasoned swamp pros No - Ribbit… no. + Ribbit... no. 3rd Party Hardware Detected @@ -3595,6 +4285,54 @@ Developer - Highly customizable settings for seasoned swamp pros comma Pedal Support Ribbit! comma Pedal Support croak! + + Subaru Settings + Ribbit! Subaru Settings, croak! + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>Ribbit! FrogPilot goodies for Subaru rides, croak!</b> + + + Stop and Go + Ribbit! Stop-n-Go, croak! + + + Stop and go for supported Subaru vehicles. + Ribbit! Stop-n-go for supported Subaru rides, croak! + + + Acura/Honda Settings + Ribbit! Acura/Honda Settings Croak! + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>Ribbit! FrogPilot tricks for Acura and Honda rides, croak.</b> + + + Gentle Following + Ribbit-soft Following, croak! + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Ribbit! Smooths jerky zooms and stops when tailing a lead car, croak.</b> Perfect for stop-and-go hops. + + + Increased Braking Force + Ribbit! Stronger Braking Croak + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Ribbit! Cranks max brake force for better stop-hop performance.</b> + + + Responsive Pedal at Low Speeds + Ribbit! Zippy Pedal at Low Speeds, croak! + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>Ribbit! Speeds up from a stop, for snappier throttle feel in city hops. Croak.</b> + FrogPilotVisualsPanel @@ -4417,11 +5155,11 @@ Developer - Highly customizable settings for seasoned swamp pros Waiting for GPS - Ribbit… waiting for GPS, croak! + Ribbit... waiting for GPS, croak! Waiting for route - Ribbit… waiting for the route, croak! + Ribbit... waiting for the route, croak! @@ -4538,7 +5276,7 @@ Developer - Highly customizable settings for seasoned swamp pros Waiting for controls to start - Ribbit… waiting for controls to hop on and start, croak! + Ribbit... waiting for controls to hop on and start, croak! TAKE CONTROL IMMEDIATELY @@ -4661,7 +5399,7 @@ Developer - Highly customizable settings for seasoned swamp pros now - Ribbit… now. + Ribbit... now. %n minute(s) ago @@ -4684,6 +5422,42 @@ Developer - Highly customizable settings for seasoned swamp pros Ribbit! %n day(s) croaked ago + + 0 MB + 0 MB, ribbit + + + GB + Ribbit GB + + + MB + MB + + + hour + Ribbit-hour + + + hours + Ribbit hours croak + + + minute + Ribbit minute croak + + + minutes + Ribbit-minutes croak + + + second + Ribbit second croak + + + seconds + ribbit seconds croak + Reset @@ -4694,7 +5468,7 @@ Developer - Highly customizable settings for seasoned swamp pros Resetting device... This may take up to a minute. - Ribbit… resetting device… + Ribbit... resetting device... This may take up to a minute, croak. @@ -4816,7 +5590,7 @@ This may take up to a minute, croak. Continue - Ribbit… continue we shall. + Ribbit... continue we shall. Getting Started @@ -4864,7 +5638,7 @@ This may take up to a minute, croak. Downloading... - Ribbit… downloading, croak! + Ribbit... downloading, croak! Download Failed @@ -5115,6 +5889,22 @@ This may take up to a minute, croak. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? Ribbit! This be a full factory reset and can’t be undone. Are you absolutely sure you want to hop on and continue? Croak! + + downloading… + Ribbit… downloading… croak! + + + checking… + Ribbit… checking… croak! + + + waiting for vehicle to go offroad... + Ribbit... waiting for vehicle to hop offroad... croak! + + + finalizing update... + Ribbit... finalizing update, croak! + SshControl @@ -5136,7 +5926,7 @@ This may take up to a minute, croak. LOADING - Ribbit… LOADING… croak + Ribbit... LOADING... croak REMOVE diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts index 59a2819..146d27d 100644 --- a/selfdrive/ui/translations/main_ja.ts +++ b/selfdrive/ui/translations/main_ja.ts @@ -423,6 +423,22 @@ Miles マイル + + ALL TIME (KONIK) + 常時(KONIK) + + + ALL TIME + 常時 + + + PAST WEEK (KONIK) + 過去1週間(KONIK) + + + PAST WEEK + 過去1週間 + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT 制限 + + Desired: %1 + 希望: %1 + + + s + s + + + 1 minute + 1分 + + + %1 minutes + %1 分 + + + 1 second + 1秒 + + + %1 seconds + %1 秒 + FrogPilotConfirmationDialog @@ -532,7 +572,7 @@ Deleting... - 削除しています… + 削除しています... Deleted! @@ -600,7 +640,7 @@ Renaming... - 名前変更中… + 名前変更中... Renamed! @@ -632,11 +672,11 @@ Backing up... - バックアップ中… + バックアップ中... Compressing... - 圧縮中… + 圧縮中... Backup created! @@ -668,11 +708,11 @@ Restoring... - 復元しています… + 復元しています... Extracting... - 抽出しています… + 抽出しています... Restored! @@ -680,7 +720,7 @@ Rebooting... - 再起動中… + 再起動中... Toggle Backups @@ -694,6 +734,238 @@ Choose a backup to delete 削除するバックアップを選択してください + + FrogPilot Stats + FrogPilot 統計 + + + <b>View your collected FrogPilot stats.</b> + <b>収集したFrogPilotの統計を表示</b> + + + RESET + リセット + + + VIEW + 表示 + + + Are you sure you want to reset all of your FrogPilot stats? + FrogPilot のすべての統計情報をリセットしてもよろしいですか? + + + Reset + リセット + + + Total Emergency Brake Alerts + 緊急ブレーキ警報の合計 + + + Time Using "Always On Lateral" + 「常時レーンキープ」使用時間 + + + Favorite Set Speed + お気に入りの設定速度 + + + Total Disengagements + 総ディスエンゲージメント数 + + + Total Engagements + 総エンゲージメント + + + Time Using "Experimental Mode" + 「実験モード」の使用時間 + + + Total Frog Chirps + カエルの鳴き声の合計 + + + Total Frog Hops + 合計カエルジャンプ回数 + + + Total Drives + 合計走行回数 + + + Total Distance Driven + 総走行距離 + + + Total Driving Time + 総運転時間 + + + Total Frog Squeaks + カエルの鳴き声合計 + + + Total Goat Screams + ヤギの叫びの合計 + + + Highest Acceleration Rate + 最高加速率 + + + Time Using Lateral Control + 横方向制御の使用時間 + + + Longest Distance Without an Override + 最長距離(介入なし) + + + Time Using Longitudinal Control + 縦方向制御の使用時間 + + + Driving Models: + 運転モデル: + + + Month + + + + Total Overrides + 総オーバーライド数 + + + Time Overriding openpilot + openpilot の時間を上書き中 + + + Random Events: + ランダムイベント: + + + Time Stopped + 時間が停止しました + + + Time Spent at Stoplights + 信号待ち時間 + + + Total Time Tracked + 合計追跡時間 + + + UwUs + UwUs + + + Loch Ness Encounters + ネス湖の出会い + + + Visits to 1955 + 1955 への訪問 + + + Deja Vu Moments + デジャヴの瞬間 + + + Internet Explorer Weeeeeeees + Internet Explorer ウィーーーズ + + + HAL 9000 Denials + HAL 9000 の拒否 + + + openpilot Crashes + openpilot がクラッシュする + + + This Is Fine Moments + これは大丈夫な瞬間 + + + To Be Continued Moments + 続きは後ほど + + + Noices + 雑音 + + + Attempted Frog Murders + カエル殺害未遂 + + + Total Mail Received + 受信メール合計 + + + kilometer + キロメートル + + + kilometers + キロメートル + + + mile + マイル + + + miles + マイル + + + day + + + + days + 日間 + + + hour + 時間 + + + hours + 時間 + + + minute + 分 минут + + + minutes + + + + km/h + km/h + + + mph + mph + + + m/s² + m/s² + + + Total + 合計 + + + % of + % の + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ + + FrogPilotDriveSummary + + Random Events Summary + ランダムイベントの概要 + + + Drive Summary + 走行サマリー + + + UwUs + UwUs + + + Loch Ness Encounters + ネス湖での遭遇 + + + Visits to 1955 + 1955年への訪問 + + + Deja Vu Moments + デジャブの瞬間 + + + Internet Explorer Weeeeeeees + Internet Explorer ウィーーーーーズ + + + HAL 9000 Denials + HAL 9000 の拒否 + + + openpilot Crashes + openpilotのクラッシュ + + + This Is Fine Moments + これは大丈夫な瞬間 + + + To Be Continued Moments + 続きは後ほど + + + Noices + ノイズ + + + Attempted Frog Murders + 未遂のカエル殺害 + + + Total Mail Received + 受信メール合計 + + + % of Drive With openpilot Engaged + openpilot作動中の走行割合 + + + Drive Distance + 走行距離 + + + Drive Time + 走行時間 + + + % of Drive In "Experimental Mode" + 「実験モード」での走行の割合 + + + No Random Events Played! + ランダムイベントは再生されませんでした。 + + + kilometer + キロメートル + + + kilometers + キロメートル + + + mile + マイル + + + miles + マイル + + + day + + + + days + 日間 + + + hour + 時間 + + + hours + 時間 + + + minute + + + + minutes + + + FrogPilotLateralPanel @@ -1291,10 +1682,6 @@ Predicted Stop In 予測停止まで - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>設定した時間内にopenpilotが停止を予測した場合、「実験モード」に切り替えます。</b> これは通常、モデルが前方に赤信号や一時停止標識を「認識」したときにトリガーされます。<br><br><i><b>免責事項</b>: openpilotは信号機や一時停止標識を明示的に検出しません。「実験モード」では、openpilotはカメラ入力からエンドツーエンドで運転判断を行うため、明確な理由がない場合でも停止することがあります。</i> - Turn Signal Below ターンシグナル下方 @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs 「検出済み」の信号/標識で強制停止 - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>運転モデルが赤信号や一時停止標識を「検出」したときは必ずopenpilotを停止させます。</b><br><br><i><b>免責事項</b>:openpilotは信号機や一時停止標識を明示的には検出しません。「実験モード」では、openpilotはカメラ入力からエンドツーエンドで運転判断を行うため、明確な理由がなくても停止する場合があります。</i> - Increase Stopped Distance by: 停止距離を次で増やす: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>クルーズコントロールボタンの動作を反転</b>し、短押しで設定速度を1ではなく5増加させます。 + + Increase Following Distance by: + 追従距離を増やす: + + + Reduce Acceleration by: + 加速度を次の値だけ下げる: + + + Reduce Speed in Curves by: + カーブでの速度を次の値だけ減速: + + + Snow + + + + <b>Driving adjustments for snowy conditions.</b> + <b>雪道における運転調整。</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>雪道では先行車との車間を広めに取ります。</b> 増やすと車間が広がり、減らすと間隔が狭くなります。 + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>雪道で前車の後ろに停止する際は余裕を多めに取ってください。</b> 増やすと距離が広がり、減らすと間隔が短くなります。 + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>雪道では最大加速度を下げてください。</b> 穏やかな発進には上げ、素早いが安定性に劣る発進には下げます。 + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>雪道のカーブ走行時は希望速度を下げてください。</b> 安全で穏やかな旋回には上げ、カーブでより積極的に走行する場合は下げてください。 + Speed Limit Controller 速度制限コントローラー @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>人間のドライバーを模倣する追従挙動</b>。より速い車両の後方で車間を詰めて発進を素早くし、望ましい追従距離を動的に調整して、より穏やかで効率的な減速を実現します。 + + Weather Condition Offsets + 天候条件オフセット + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>リアルタイムの天候に基づいて走行挙動を自動調整します。</b> 視界不良や雨、雪の状況でも快適性と安全性の維持に役立ちます。 + + + Low Visibility + 視界不良 + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>霧、霞、その他の視界不良時の運転調整。</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>視界が悪いときは前走車との車間を広めに確保してください。</b> 増やすと車間が広くなり、減らすと車間が詰まります。 + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>視界が悪いとき、前方車両の後方で停止する際は余裕を多めに確保してください。</b> 余裕を増やすと車間が広くなり、減らすと短くなります。 + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>視界不良時は最大加速度を下げてください。</b> 穏やかな発進にするには増やし、素早いが不安定になりやすい発進にするには減らしてください。 + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>視界が悪いカーブでは希望速度を下げてください。</b> より安全で穏やかな旋回には増加を、カーブでより積極的な走行には減少を選択してください。 + + + Rain + + + + <b>Driving adjustments for rainy conditions.</b> + <b>雨天時の運転調整。</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>雨天時に先行車との車間を広めに取ります。</b> 値を上げると車間が広がり、下げると車間が詰まります。 + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>雨天時に前方車両の後方で停止する際は余裕距離を追加してください。</b> 広げると車間が広くなり、狭めると間隔が短くなります。 + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>雨天時は最大加速度を下げてください。</b> ふんわり発進したい場合は上げ、素早いが安定性の低い発進にしたい場合は下げてください。 + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>雨天時のカーブ走行では希望速度を下げてください。</b> 安全で穏やかな旋回には上げ、カーブでより攻撃的な走行には下げてください。 + + + Rainstorms + 豪雨 + + + <b>Driving adjustments for rainstorms.</b> + <b>豪雨時の運転調整。</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>暴風雨時は先行車との車間距離を広めにとってください。</b> 増やすと車間が広がり、減らすと間隔が詰まります。 + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>豪雨時に前方車両の後方で停止する際は、余分な間隔を確保してください。</b> 余裕を増やすには増加、間隔を短くするには減少。 + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>豪雨時は最大加速度を下げてください。</b> 低くすると穏やかな発進に、高くすると素早いが安定性に欠ける発進になります。 + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>豪雨の中でカーブを走行する際は、希望速度を下げてください。</b> より安全で穏やかな旋回には上げ、カーブでより攻撃的な走行には下げます。 + + + Human-Like Lane Changes + 人間のような車線変更 + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>人間の運転者を模倣する車線変更動作</b>。車線変更中に隣接車両を予測・追跡します。 + + + "Detected" Stop Lights/Signs + 「検出」された信号/標識 + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>走行モデルが赤信号または一時停止標識を「検出」したときは常に「実験モード」に切り替えます。</b><br><br><i><b>免責事項</b>:openpilot は信号機や一時停止標識を明示的には検出しません。「実験モード」では、openpilot はカメラ入力からエンドツーエンドで運転判断を行うため、明確な理由がなくても停止する場合があります!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>設定された時間内にopenpilotが停止を予測したときは「実験モード」に切り替えます。</b> これは通常、モデルが前方の赤信号や一時停止標識を「認識」したときにトリガーされます。<br><br><i><b>免責事項</b>: openpilotは信号機や一時停止標識を明示的には検出しません。「実験モード」では、openpilotはカメラ入力からエンドツーエンドで運転判断を行うため、明確な理由がなくても停止する場合があります!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>運転モデルが赤信号または一時停止標識を「検知」したときは常に、openpilotを強制的に停止させます。</b><br><br><i><b>免責事項</b>:openpilotは信号機や一時停止標識を明示的には検出しません。「Experimental Mode」では、openpilotはカメラ入力からエンドツーエンドで運転判断を行うため、明確な理由がなくても停止する場合があります!</i> + + + Set Your Own Key + 自分のキーを設定する + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>天気の更新頻度を上げるには、自分の「OpenWeatherMap」キーを設定してください。</b><br><br><i>個人キーでは1日に1,000回まで無料で呼び出せるため、毎分更新できます。既定のキーは共有されており、15分ごとの更新のみです。</i> + + + ADD + 追加 + + + Enter your "OpenWeatherMap" key + 「OpenWeatherMap」のキーを入力してください + + + REMOVE + 削除 + + + Invalid key! + 無効なキーです。 + + + Are you sure you want to remove your key? + キーを削除してもよろしいですか? + + + TEST + テスト + + + Testing... + テスト中… + + + Key is valid! + キーは有効です! + + + An error occurred: %1 + エラーが発生しました: %1 + FrogPilotManageControl @@ -2159,7 +2726,7 @@ Resetting... - リセット中… + リセット中... Reset! @@ -2223,11 +2790,19 @@ Offline... - オフライン… + オフライン... - CANCELLED - キャンセル済み + 0 MB + 0 MB + + + Calculating... + 計算中… + + + Not parked + 駐車されていません @@ -2342,7 +2917,7 @@ Updating... - 更新中… + 更新中... Select a driving model to download @@ -2414,7 +2989,7 @@ Cancelling... - キャンセルしています… + キャンセルしています... Updating Tinygrad will delete existing Tinygrad-based driving models and need to be re-downloaded. Proceed? @@ -2426,7 +3001,7 @@ Offline... - オフライン中… + オフライン中... Update available! @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC モデルを選択 — 🗺️ = ナビゲーション | 📡 = レーダー | 👀 = VOACC + + Downloading... + ダウンロード中… + + + Not parked + 駐車中ではありません + + + Downloaded! + ダウンロード完了! + + + All models downloaded! + すべてのモデルをダウンロードしました! + + + Download cancelled... + ダウンロードをキャンセルしました… + + + Download failed... + ダウンロードに失敗しました…" + + + GitHub and GitLab are offline... + GitHub と GitLab がオフラインです… + + + Repository unavailable + リポジトリを利用できません + FrogPilotModelReview @@ -2516,7 +3123,7 @@ Offline... - オフライン… + オフライン... Mapbox @@ -2584,7 +3191,7 @@ Cancelled... - キャンセルしました… + キャンセルしました... You've hit today's request limit. @@ -2624,6 +3231,57 @@ It will reset in %1 hours and %2 minutes. Completed! 完了しました! + + <b>Manage your Public Mapbox Key.</b> + <b>Public Mapbox Key を管理します。</b> + + + TEST + テスト + + + Remove your Public Mapbox Key? + 公開Mapboxキーを削除しますか? + + + Enter your Public Mapbox Key + Public Mapbox Key を入力してください + + + Testing... + テスト中… + + + Key is valid! + キーは有効です! + + + Key is invalid! + キーが無効です! + + + An error occurred: %1 + エラーが発生しました: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>シークレットのMapboxキーを管理します。</b> + + + Remove your Secret Mapbox Key? + Secret Mapboxキーを削除しますか? + + + Enter your Secret Mapbox Key + Secret Mapboxキーを入力してください + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS: %1 | 最小: %2 | 最大: %3 | 平均: %4 + FrogPilotSettingsWindow @@ -3151,6 +3809,38 @@ Developer - こだわりのある上級者向けの高度にカスタマイズ CANCEL キャンセル + + Downloading... + ダウンロード中… + + + Idle + 待機中 + + + Unpacking theme... + テーマを展開しています… + + + Downloaded! + ダウンロード完了! + + + Download cancelled... + ダウンロードをキャンセルしました… + + + Download failed... + ダウンロードに失敗しました… + + + Repository unavailable + リポジトリを利用できません + + + GitHub and GitLab are offline... + GitHub と GitLab がオフラインです… + FrogPilotUtilitiesPanel @@ -3184,7 +3874,7 @@ Developer - こだわりのある上級者向けの高度にカスタマイズ Flashing... - フラッシュ中… + フラッシュ中... Flashed! @@ -3192,7 +3882,7 @@ Developer - こだわりのある上級者向けの高度にカスタマイズ Rebooting... - 再起動しています… + 再起動しています... Force Drive State @@ -3593,6 +4283,54 @@ Developer - こだわりのある上級者向けの高度にカスタマイズ comma Pedal Support comma Pedal 対応 + + Subaru Settings + Subaru設定 + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>Subaru車向けのFrogPilot機能。</b> + + + Stop and Go + ストップ・アンド・ゴー + + + Stop and go for supported Subaru vehicles. + 対応するSubaru車両でのストップ&ゴー。 + + + Acura/Honda Settings + Acura/Honda 設定 + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>AcuraおよびHonda車向けのFrogPilot機能。</b> + + + Gentle Following + 優しい追従 + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>先行車両に追従する際の急加速や急ブレーキを軽減します。</b> 渋滞時に最適です。 + + + Increased Braking Force + 制動力の増加 + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>停止性能を向上させるために最大制動力を増加させます。</b> + + + Responsive Pedal at Low Speeds + 低速時のレスポンシブペダル + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>市街地走行でのスロットル応答性を高めるため、停止状態からの加速を改善します。</b> + FrogPilotVisualsPanel @@ -4678,6 +5416,42 @@ Developer - こだわりのある上級者向けの高度にカスタマイズ FrogPilot FrogPilot + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + 時間 + + + hours + 時間 + + + minute + + + + minutes + + + + second + + + + seconds + + Reset @@ -4712,7 +5486,7 @@ Developer - こだわりのある上級者向けの高度にカスタマイズ Resetting device... This may take up to a minute. - デバイスをリセットしています… + デバイスをリセットしています... 最大で1分ほどかかる場合があります。 @@ -5109,6 +5883,22 @@ This may take up to a minute. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? これは完全な工場出荷時リセットであり、元に戻すことはできません。本当に続行してもよろしいですか? + + downloading… + ダウンロード中… + + + checking… + 確認中… + + + waiting for vehicle to go offroad... + 車両がオフロードに出るのを待機しています… + + + finalizing update... + 更新を完了しています… + SshControl diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts index 42c4e63..5501954 100644 --- a/selfdrive/ui/translations/main_ko.ts +++ b/selfdrive/ui/translations/main_ko.ts @@ -405,7 +405,7 @@ DriveStats FROGPILOT - FROGPILOT + 개구리파일럿 Drives @@ -423,6 +423,22 @@ Miles 마일 + + ALL TIME (KONIK) + 전체 시간 (KONIK) + + + ALL TIME + 항상 + + + PAST WEEK (KONIK) + 지난 주(코닉) + + + PAST WEEK + 지난 주 + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT 제한 + + Desired: %1 + 원하는 값: %1 + + + s + s + + + 1 minute + 1분 + + + %1 minutes + %1분 + + + 1 second + 1초 + + + %1 seconds + %1초 + FrogPilotConfirmationDialog @@ -501,7 +541,7 @@ Yes - + No @@ -532,11 +572,11 @@ Deleting... - 삭제 중... + 삭제하는 중 Deleted! - 삭제됨! + 삭제 완료! Delete Error Logs @@ -636,7 +676,7 @@ Compressing... - 압축 중… + 압축 중... Backup created! @@ -680,7 +720,7 @@ Rebooting... - 재부팅 중… + 재부팅 중... Toggle Backups @@ -694,6 +734,238 @@ Choose a backup to delete 삭제할 백업을 선택하세요 + + FrogPilot Stats + FrogPilot 통계 + + + <b>View your collected FrogPilot stats.</b> + <b>수집된 FrogPilot 통계를 확인하세요.</b> + + + RESET + 초기화 + + + VIEW + 보기 + + + Are you sure you want to reset all of your FrogPilot stats? + FrogPilot 통계를 모두 재설정하시겠습니까? + + + Reset + 초기화 + + + Total Emergency Brake Alerts + 비상 제동 경고 총계 + + + Time Using "Always On Lateral" + "항상 켜짐 조향" 사용 시간 + + + Favorite Set Speed + 즐겨찾는 설정 속도 + + + Total Disengagements + 총 비개입 횟수 + + + Total Engagements + 총 참여 횟수 + + + Time Using "Experimental Mode" + "Experimental Mode" 사용 시간 + + + Total Frog Chirps + 개구리 울음 총계 + + + Total Frog Hops + 개구리 총 점프 수 + + + Total Drives + 총 주행 횟수 + + + Total Distance Driven + 총 주행 거리 + + + Total Driving Time + 총 운전 시간 + + + Total Frog Squeaks + 개구리 삑삑 소리 총합 + + + Total Goat Screams + 총 염소 비명 + + + Highest Acceleration Rate + 최대 가속률 + + + Time Using Lateral Control + 횡방향 제어 사용 시간 + + + Longest Distance Without an Override + 오버라이드 없이 주행한 최장 거리 + + + Time Using Longitudinal Control + 종방향 제어 사용 시간 + + + Driving Models: + 주행 모델: + + + Month + + + + Total Overrides + 총 개입 횟수 + + + Time Overriding openpilot + openpilot 시간 재정의 중 + + + Random Events: + 무작위 이벤트 + + + Time Stopped + 시간이 정지됨 + + + Time Spent at Stoplights + 신호대기 시간 + + + Total Time Tracked + 총 추적 시간 + + + UwUs + UwUs + + + Loch Ness Encounters + 네스호 조우 + + + Visits to 1955 + 1955 방문 + + + Deja Vu Moments + 데자뷰 순간 + + + Internet Explorer Weeeeeeees + Internet Explorer 위이이이이스 + + + HAL 9000 Denials + HAL 9000 거부 + + + openpilot Crashes + openpilot 충돌 + + + This Is Fine Moments + 괜찮은 순간들 + + + To Be Continued Moments + 계속될 순간들 + + + Noices + 잡음 + + + Attempted Frog Murders + 개구리 살해 시도 + + + Total Mail Received + 총 수신 메일 + + + kilometer + 킬로미터 + + + kilometers + 킬로미터 + + + mile + 마일 + + + miles + 마일 + + + day + + + + days + + + + hour + 시간 + + + hours + 시간 + + + minute + + + + minutes + + + + km/h + km/h + + + mph + mph + + + m/s² + m/s² + + + Total + 합계 + + + % of + % 중 + FrogPilotDevicePanel @@ -874,11 +1146,130 @@ + + FrogPilotDriveSummary + + Random Events Summary + 무작위 이벤트 요약 + + + Drive Summary + 주행 요약 + + + UwUs + UwUs + + + Loch Ness Encounters + 네스호 조우 + + + Visits to 1955 + 1955 방문 + + + Deja Vu Moments + 데자뷰 순간 + + + Internet Explorer Weeeeeeees + Internet Explorer 위이이이이이스 + + + HAL 9000 Denials + HAL 9000 거부사항 + + + openpilot Crashes + openpilot 충돌 + + + This Is Fine Moments + 괜찮았던 순간들 + + + To Be Continued Moments + 계속될 순간들 + + + Noices + 노이시스 + + + Attempted Frog Murders + 개구리 살해 시도 + + + Total Mail Received + 총 수신 메일 + + + % of Drive With openpilot Engaged + openpilot 작동 주행 비율 + + + Drive Distance + 주행 거리 + + + Drive Time + 주행 시간 + + + % of Drive In "Experimental Mode" + "실험 모드" 주행 비율 % + + + No Random Events Played! + 재생된 랜덤 이벤트가 없습니다! + + + kilometer + 킬로미터 + + + kilometers + 킬로미터 + + + mile + 마일 + + + miles + 마일 + + + day + + + + days + + + + hour + 시간 + + + hours + 시간 + + + minute + + + + minutes + + + FrogPilotLateralPanel Advanced Lateral Tuning - 고급 횡방향 튜닝 + 고급 조향 튜닝 <b>Advanced steering control changes to fine-tune how openpilot drives.</b> @@ -1018,7 +1409,7 @@ Lane Change Delay - 차선 변경 지연 + 차선 변경 지연 시간 <b>Delay between turn signal activation and the start of an automatic lane change.</b> @@ -1050,7 +1441,7 @@ Lateral Tuning - 횡방향 튜닝 + 조향 튜닝 <b>Miscellaneous steering control changes</b> to fine-tune how openpilot drives. @@ -1058,7 +1449,7 @@ Force Turn Desires Below Lane Change Speed - 차로 변경 속도 이하에서 강제 턴 의도 + 차선 변경 속도 제한 설정 <b>While driving below the minimum lane change speed with an active turn signal, instruct openpilot to turn left/right.</b> @@ -1074,7 +1465,7 @@ Pause Steering Below - 조향 일시 중지 기준 아래 + 조향 제어 중지 <b>Pause steering below the set speed.</b> @@ -1158,7 +1549,7 @@ Smooth Curve Handling - 부드러운 곡선 처리 + 부드러운 곡선 핸들링 <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> @@ -1169,7 +1560,7 @@ FrogPilotLongitudinalPanel Advanced Longitudinal Tuning - 고급 종방향 튜닝 + 고급 롱~컨트롤 튜닝 <b>Advanced acceleration and braking control changes</b> to fine-tune how openpilot drives. @@ -1291,10 +1682,6 @@ Predicted Stop In 예상 정지까지 - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>설정된 시간 내에 openpilot이 정지를 예측하면 "실험 모드"로 전환하세요.</b> 이는 보통 모델이 앞에 있는 빨간 불이나 정지 표지를 "볼" 때 트리거됩니다.<br><br><i><b>면책조항</b>: openpilot은 신호등이나 정지 표지를 명시적으로 감지하지 않습니다. "실험 모드"에서는 openpilot이 카메라 입력만으로 종단 간 주행 결정을 내리므로, 뚜렷한 이유가 없는데도 정지할 수 있습니다.</i> - Turn Signal Below 하단 방향지시등 @@ -1365,7 +1752,7 @@ Following Distance - 차간 거리 + 추종 거리 <b>The minimum following distance to the lead vehicle in "Traffic Mode".</b> openpilot blends between this value and the "Aggressive" profile as speed increases. Increase for more space; decrease for tighter gaps. @@ -1493,7 +1880,7 @@ Relaxed - 편안함 + 편안한 <b>Customize the "Relaxed" personality profile.</b> Designed for smoother, more comfortable driving with larger gaps. @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs "감지된" 정지 신호/표지에서 강제 정지 - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>주행 모델이 빨간 신호나 정지 표지를 “감지”하면 openpilot을 강제로 정지시킵니다.</b><br><br><i><b>면책조항</b>: openpilot은 신호등이나 정지 표지를 명시적으로 감지하지 않습니다. “실험 모드”에서는 카메라 입력만으로 종단 간 주행 결정을 내리므로, 명확한 이유가 없어도 정지할 수 있습니다.</i> - Increase Stopped Distance by: 정지 거리 증가: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>크루즈 컨트롤 버튼 동작을 반대로</b> 하여 짧게 누르면 설정 속도가 1이 아니라 5만큼 증가하도록 합니다. + + Increase Following Distance by: + 차간 거리 증가: + + + Reduce Acceleration by: + 가속을 다음만큼 감소: + + + Reduce Speed in Curves by: + 커브에서 속도 감소 기준: + + + Snow + + + + <b>Driving adjustments for snowy conditions.</b> + <b>눈길 주행을 위한 조정.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>눈길에서는 앞차와의 거리를 더 넉넉히 두십시오.</b> 늘리면 더 넓게, 줄이면 더 촘촘하게 간격이 설정됩니다. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>눈길에서 앞차 뒤에 정차할 때 여유 간격을 더 두세요.</b> 더 넓게 하려면 증가, 더 좁게 하려면 감소. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>눈길에서는 최대 가속을 낮추십시오.</b> 부드러운 출발을 원하면 높이고, 더 빠르지만 덜 안정적인 출발을 원하면 낮추십시오. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>눈길에서 커브를 지날 때 원하는 속도를 낮추세요.</b> 안전하고 부드러운 코너링을 원하면 높이고, 커브에서 더 공격적으로 주행하려면 낮추세요. + Speed Limit Controller 속도 제한 컨트롤러 @@ -1873,7 +2292,7 @@ RESET - 재설정 + 초기화 Are you sure you want to completely reset your curvature data? @@ -1897,7 +2316,7 @@ Acceleration - 가속 + 가속페달 Deceleration @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>사람 운전자와 유사한 추종 동작</b>으로, 더 빠른 차량 뒤 간격을 좁혀 신속한 출발을 돕고 원하는 추종 거리를 동적으로 조절해 더욱 부드럽고 효율적인 제동을 수행합니다. + + Weather Condition Offsets + 기상 상태 오프셋 + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>실시간 날씨에 따라 운전 동작을 자동으로 조절합니다.</b> 시야가 나쁘거나 비·눈이 올 때 편안함과 안전을 유지하도록 돕습니다. + + + Low Visibility + 가시성 낮음 + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>안개, 연무 등 가시성이 낮은 상황에서의 주행 조정.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>시야가 나쁠 때 선행 차량과의 간격을 더 넓힙니다.</b> 값을 늘리면 간격이 넓어지고, 줄이면 간격이 좁아집니다. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>가시성이 낮을 때 앞차 뒤에서 정차 시 추가 여유 공간을 두십시오.</b> 더 넓은 공간이 필요하면 증가, 더 짧은 간격이 필요하면 감소. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>시야가 낮을 때 최대 가속을 낮추십시오.</b> 부드러운 출발을 원하면 증가시키고, 더 빠르지만 덜 안정적인 출발을 원하면 감소시키십시오. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>가시성이 낮은 곡선 구간에서는 원하는 속도를 낮추십시오.</b> 더 안전하고 부드러운 코너링을 원하면 증가시키고, 곡선에서 더 공격적인 주행을 원하면 감소시키십시오. + + + Rain + + + + <b>Driving adjustments for rainy conditions.</b> + <b>비 오는 조건에서의 주행 조정.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>비 오는 날에는 앞차와의 거리를 더 확보합니다.</b> 값을 늘리면 간격이 넓어지고, 줄이면 간격이 좁아집니다. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>비가 올 때 앞차 뒤에서 정차 시 여유 거리를 늘리십시오.</b> 더 넓게 하려면 증가, 더 짧게 하려면 감소하세요. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>비가 올 때 최대 가속을 낮추세요.</b> 부드러운 출발을 원하면 높이고, 더 빠르지만 덜 안정적인 출발을 원하면 낮추세요. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>비 오는 날 곡선 구간 주행 시 원하는 속도를 낮추십시오.</b> 더 안전하고 부드러운 코너링을 원하면 증가시키고, 곡선에서 더 공격적인 주행을 원하면 감소시키십시오. + + + Rainstorms + 폭우 + + + <b>Driving adjustments for rainstorms.</b> + <b>폭우 시 운전 조정.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>폭우 시 선행 차량과의 거리를 더 확보하세요.</b> 값을 늘리면 더 넓어지고, 줄이면 간격이 더 좁아집니다. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>폭우 속에서 앞차 뒤에 정차할 때 추가 여유 거리를 두세요.</b> 더 넓게 하려면 늘리고, 더 짧게 하려면 줄이세요. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>폭우 시 최대 가속을 낮추십시오.</b> 더 부드러운 출발을 원하면 증가시키고, 더 빠르지만 덜 안정적인 출발을 원하면 감소시키십시오. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>폭우에서 커브를 지날 때 목표 속도를 낮추세요.</b> 값을 높이면 더 안전하고 부드러운 선회, 낮추면 커브에서 더 공격적인 주행이 됩니다. + + + Human-Like Lane Changes + 사람처럼 차선 변경 + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>차선 변경 중 주변 차량을 예측하고 추적하여 사람 운전자와 유사한 차선 변경 동작</b> + + + "Detected" Stop Lights/Signs + 감지된 신호등/정지 표지 + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>주행 모델이 빨간 신호나 정지 표지를 "감지"할 때마다 "실험 모드"로 전환하세요.</b><br><br><i><b>면책조항</b>: openpilot은 신호등이나 정지 표지를 명시적으로 감지하지 않습니다. "실험 모드"에서는 openpilot이 카메라 입력만으로 종단 간 주행 결정을 내리므로, 명확한 이유가 없어도 정지할 수 있습니다!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>설정된 시간 내 정지가 예측될 때 "실험 모드"로 전환합니다.</b> 이는 보통 모델이 앞에 있는 빨간 신호나 정지 표지판을 "볼" 때 트리거됩니다.<br><br><i><b>면책조항</b>: openpilot은 신호등이나 정지 표지판을 명시적으로 감지하지 않습니다. "실험 모드"에서는 openpilot이 카메라 입력만으로 종단 간 주행 결정을 내리므로, 분명한 이유가 없어도 정지할 수 있습니다!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>운전 모델이 빨간 신호나 정지 표지판을 “감지”하면 언제든지 openpilot을 강제로 정지합니다.</b><br><br><i><b>면책조항</b>: openpilot은 신호등이나 정지 표지판을 명시적으로 감지하지 않습니다. “실험 모드”에서는 카메라 입력만으로 종단간 주행 결정을 내리므로, 명확한 이유가 없어도 정지할 수 있습니다!</i> + + + Set Your Own Key + 자체 키 설정 + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>날씨 업데이트 빈도를 높이려면 "OpenWeatherMap" 개인 키를 설정하세요.</b><br><br><i>개인 키는 하루 1,000회의 무료 호출이 가능하여 매분 업데이트할 수 있습니다. 기본 키는 공유되며 15분마다만 업데이트됩니다.</i> + + + ADD + 추가 + + + Enter your "OpenWeatherMap" key + "OpenWeatherMap" 키를 입력하세요 + + + REMOVE + 제거 + + + Invalid key! + 유효하지 않은 키! + + + Are you sure you want to remove your key? + 키를 정말 제거하시겠습니까? + + + TEST + 테스트 + + + Testing... + 테스트 중... + + + Key is valid! + 키가 유효합니다! + + + An error occurred: %1 + 오류가 발생했습니다: %1 + FrogPilotManageControl @@ -2127,7 +2694,7 @@ REMOVE - 제거 + 삭제 <b>Delete downloaded map data</b> to free up storage space. @@ -2143,7 +2710,7 @@ RESET - 재설정 + 초기화 <b>Reset the map downloader.</b> Use this if downloads are stuck or failing. @@ -2155,11 +2722,11 @@ Reset - 재설정 + 초기화 Resetting... - 재설정 중… + 초기화 하는 중... Reset! @@ -2223,11 +2790,19 @@ Offline... - 오프라인… + 오프라인... - CANCELLED - 취소됨 + 0 MB + 0 MB + + + Calculating... + 계산 중... + + + Not parked + 주차되지 않음 @@ -2258,7 +2833,7 @@ Model Randomizer - 모델 랜덤화기 + 모델 임의 선택 <b>Select a random driving model each drive</b> and use feedback prompts at the end of the drive to help find the model that best suits you! @@ -2354,7 +2929,7 @@ REMOVE - 제거 + 삭제 REMOVE ALL @@ -2394,7 +2969,7 @@ RESET - 재설정 + 초기화 VIEW @@ -2426,7 +3001,7 @@ Offline... - 오프라인… + 오프라인... Update available! @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC 모델 선택 — 🗺️ = 내비게이션 | 📡 = 레이더 | 👀 = VOACC + + Downloading... + 다운로드 중... + + + Not parked + 주차되지 않음 + + + Downloaded! + 다운로드됨! + + + All models downloaded! + 모든 모델을 다운로드했습니다! + + + Download cancelled... + 다운로드가 취소되었습니다... + + + Download failed... + 다운로드 실패..." + + + GitHub and GitLab are offline... + GitHub와 GitLab이 오프라인입니다... + + + Repository unavailable + 저장소를 사용할 수 없음 + FrogPilotModelReview @@ -2516,7 +3123,7 @@ Offline... - 오프라인… + 오프라인... Mapbox @@ -2619,12 +3226,63 @@ It will reset in %1 hours and %2 minutes. REMOVE - 제거 + 삭제 Completed! 완료됨! + + <b>Manage your Public Mapbox Key.</b> + <b>공용 Mapbox 키를 관리하세요.</b> + + + TEST + 테스트 + + + Remove your Public Mapbox Key? + 공개 Mapbox 키를 제거하시겠습니까? + + + Enter your Public Mapbox Key + Public Mapbox 키를 입력하세요 + + + Testing... + 테스트 중... + + + Key is valid! + 키가 유효합니다! + + + Key is invalid! + 키가 유효하지 않습니다! + + + An error occurred: %1 + 오류가 발생했습니다: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>비밀 Mapbox 키를 관리하세요.</b> + + + Remove your Secret Mapbox Key? + 비공개 Mapbox 키를 제거하시겠습니까? + + + Enter your Secret Mapbox Key + 시크릿 Mapbox 키를 입력하세요 + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS: %1 | 최소: %2 | 최대: %3 | 평균: %4 + FrogPilotSettingsWindow @@ -2638,7 +3296,7 @@ It will reset in %1 hours and %2 minutes. GAS / BRAKE - 가속 / 브레이크 + 엑셀/브레이크 STEERING @@ -2714,7 +3372,7 @@ It will reset in %1 hours and %2 minutes. Theme and Appearance - 테마 및 외관 + 테마 및 모양 <b>Customize the look of the driving screen and interface, including themes!</b> @@ -2738,7 +3396,7 @@ It will reset in %1 hours and %2 minutes. Advanced - 고급 + 고급 설정 Developer @@ -2775,7 +3433,7 @@ Developer - Highly customizable settings for seasoned enthusiasts FrogPilotSoundsPanel Alert Volume Controller - 경고 음량 컨트롤러 + 알림 볼륨 제어판 <b>Set how loud each type of openpilot alert is</b> to keep routine prompts from becoming distracting. @@ -2783,7 +3441,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Disengage Volume - 해제 음량 + 해제 볼륨 <b>Set the volume for alerts when openpilot disengages.</b><br><br>Examples include: "Cruise Fault: Restart the Car", "Parking Brake Engaged", "Pedal Pressed". @@ -2791,7 +3449,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Engage Volume - 참여 볼륨 + 오파 작동 볼륨 <b>Set the volume for the chime when openpilot engages</b>, such as after pressing the "RESUME" or "SET" steering wheel buttons. @@ -2799,7 +3457,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Prompt Volume - 프롬프트 볼륨 + 프롬프트(즉각) 볼륨 <b>Set the volume for prompts that need attention.</b><br><br>Examples include: "Car Detected in Blindspot", "Steering Temporarily Unavailable", "Turn Exceeds Steering Limit". @@ -2807,7 +3465,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Prompt Distracted Volume - 프롬프트 산만 볼륨 + 정신없는 프롬프트 볼륨 <b>Set the volume for prompts when openpilot detects driver distraction or unresponsiveness.</b><br><br>Examples include: "Pay Attention", "Touch Steering Wheel". @@ -2831,7 +3489,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Warning Immediate Volume - 경고 즉시 볼륨 + 즉각적인 경고 볼륨 <b>Set the volume for the loudest warnings that require urgent attention.</b><br><br>Examples include: "DISENGAGE IMMEDIATELY — Driver Distracted", "DISENGAGE IMMEDIATELY — Driver Unresponsive". @@ -2863,7 +3521,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Lead Departing Alert - 선행 차량 이탈 경고 + 앞차 출발 알림 <b>Play an alert when the lead vehicle departs from a stop.</b> @@ -2910,7 +3568,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Color Scheme - 색 구성 + 색상 구성 <b>The color scheme used throughout openpilot.</b> Use the "Theme Maker" in "The Pond" to create and share your own themes! @@ -2950,7 +3608,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Turn Signal - 방향지시등 + 방향 지시등 <b>Themed turn-signal animations.</b> Use the "Theme Maker" in "The Pond" to create and share your own themes! @@ -2962,7 +3620,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Holiday Themes - 휴일 테마 + 홀리데이 테마 <b>Themes based on U.S. holidays.</b> Minor holidays last one day; major holidays (Christmas, Easter, Halloween) run for a full week. @@ -2978,7 +3636,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Random Events - 무작위 이벤트 + 랜덤 이벤트 <b>Occasional on-screen effects triggered by driving conditions.</b> These are purely a visual and don't impact how openpilot drives! @@ -2994,7 +3652,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Startup Alert - 시작 경고 + 시작 알림 <b>Customize the "Startup Alert" message</b> shown at the start of each drive. @@ -3014,7 +3672,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Select a color scheme to delete - 삭제할 색 구성표를 선택하세요 + 삭제할 색 구성표 선택 Delete the "%1" color scheme? @@ -3026,11 +3684,11 @@ Developer - Highly customizable settings for seasoned enthusiasts Select a color scheme to download - 다운로드할 색 구성표를 선택하세요 + 다운로드할 색 구성표 선택 Select a color scheme - 색상 테마 선택 + 색상 구성표 선택 Select a distance icon pack to delete @@ -3050,7 +3708,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Select an icon pack to delete - 삭제할 아이콘 팩을 선택하세요 + 삭제할 아이콘 팩 선택 Delete the "%1" icon pack? @@ -3058,7 +3716,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Select an icon pack to download - 다운로드할 아이콘 팩을 선택하세요 + 다운로드할 아이콘 팩 선택 Select an icon pack @@ -3082,7 +3740,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Select a sound pack to delete - 삭제할 사운드 팩을 선택하세요 + 삭제할 사운드 팩을 선택하세요. Delete the "%1" sound pack? @@ -3090,7 +3748,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Select a sound pack to download - 다운로드할 사운드 팩을 선택하세요 + 다운로드할 사운드팩을 선택하세요. Select a sound pack @@ -3098,7 +3756,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Select a steering wheel to delete - 삭제할 스티어링 휠을 선택하세요 + 삭제할 스티어링 휠을 선택하세요. Delete the "%1" steering wheel? @@ -3106,27 +3764,27 @@ Developer - Highly customizable settings for seasoned enthusiasts Select a steering wheel to download - 다운로드할 스티어링 휠을 선택하세요 + 다운로드할 스티어링 휠을 선택하세요. Select a steering wheel - 스티어링 휠을 선택하세요 + 핸들을 선택하세요. STOCK - 순정 + 스톡 FROGPILOT - FROGPILOT + 개구리파일럿 CUSTOM - 사용자 지정 + 커스텀 CLEAR - 지우기 + 클리어 Enter the text for the top half @@ -3152,6 +3810,38 @@ Developer - Highly customizable settings for seasoned enthusiasts CANCEL 취소 + + Downloading... + 다운로드 중... + + + Idle + 대기 + + + Unpacking theme... + 테마 압축 해제 중... + + + Downloaded! + 다운로드됨! + + + Download cancelled... + 다운로드가 취소되었습니다... + + + Download failed... + 다운로드 실패..." + + + Repository unavailable + 저장소를 사용할 수 없습니다 + + + GitHub and GitLab are offline... + GitHub과 GitLab이 오프라인입니다... + FrogPilotUtilitiesPanel @@ -3165,7 +3855,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Flash Panda - Panda 플래시 + 플래시 판다 FLASH @@ -3185,11 +3875,11 @@ Developer - Highly customizable settings for seasoned enthusiasts Flashing... - 플래싱 중... + 플래싱하는 중... Flashed! - 플래시됨! + 플래싱 완료! Rebooting... @@ -3209,11 +3899,11 @@ Developer - Highly customizable settings for seasoned enthusiasts ONROAD - 주행 중 + 온로드 OFF - 꺼짐 + 끄기 Report a Bug or an Issue @@ -3317,7 +4007,7 @@ Developer - Highly customizable settings for seasoned enthusiasts RESET - 재설정 + 초기화 <b>Reset all toggles to their default values.</b> @@ -3329,11 +4019,11 @@ Developer - Highly customizable settings for seasoned enthusiasts Reset - 재설정 + 초기화 Resetting... - 재설정 중… + 초기화 하는 중... Reset! @@ -3376,7 +4066,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Disable Automatic Fingerprint Detection - 자동 지문 감지 비활성화 + 핑거프린트 자동 인식 비활성화 <b>Force the selected fingerprint</b> and prevent it from ever changing. @@ -3384,7 +4074,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Disable openpilot Longitudinal Control - openpilot 종방향 제어 비활성화 + 오픈파일럿 롱~컨트롤 비활성화 <b>Disable openpilot longitudinal</b> and use the car's stock ACC instead. @@ -3392,7 +4082,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Are you sure you want to completely disable openpilot longitudinal control? - openpilot 종방향 제어를 완전히 비활성화하시겠습니까? + 오픈 파일럿 롱~컨트롤을 완전히 비활성화하시겠습니까? General Motors Settings @@ -3504,7 +4194,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Unlock - 잠금 해제 + 잠금해제 Never @@ -3572,7 +4262,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Yes - + No @@ -3594,6 +4284,54 @@ Developer - Highly customizable settings for seasoned enthusiasts comma Pedal Support comma Pedal 지원 + + Subaru Settings + Subaru 설정 + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>Subaru 차량용 FrogPilot 기능.</b> + + + Stop and Go + 정지 및 출발 + + + Stop and go for supported Subaru vehicles. + 지원되는 Subaru 차량의 정차 및 재출발. + + + Acura/Honda Settings + Acura/Honda 설정 + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>Acura 및 Honda 차량을 위한 FrogPilot 기능.</b> + + + Gentle Following + 부드러운 추종 + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>선행 차량을 따라갈 때 급가속과 급제동을 줄입니다.</b> 정체 구간에 적합합니다. + + + Increased Braking Force + 제동력 증가 + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>제동 성능 향상을 위해 최대 제동력을 증가시킵니다.</b> + + + Responsive Pedal at Low Speeds + 저속에서 반응형 페달 + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>도심 주행에서 더 민첩한 스로틀 감각을 위해 정지 상태에서의 가속을 향상합니다.</b> + FrogPilotVisualsPanel @@ -3615,7 +4353,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Hide Lead Marker - 앞차 표시 숨기기 + 선행 차량 표시 숨기기 <b>Hide the lead-vehicle marker</b> from the driving screen. @@ -3655,7 +4393,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Use Wheel Speed - 휠 속도 사용 + 휠 스피드 사용 <b>Use the vehicle's wheel speed</b> instead of the cluster speed. This is purely a visual change and doesn't impact how openpilot drives! @@ -3671,7 +4409,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Adjacent Path Metrics - 인접 경로 메트릭스 + 인접 경로 기준 <b>Show the width of the adjacent lanes.</b> @@ -3687,7 +4425,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Border Metrics - 경계 메트릭스 + 테두리 표시 <b>Show statuses along the border of the driving screen.</b><br><br><b>Blind Spot</b>: The border turns red when a vehicle is in a blind spot<br><b>Steering Torque</b>: The border goes from green to red according to how much steering torque is being used<br><b>Turn Signal</b>: The border flashes yellow when a turn signal is on @@ -3695,7 +4433,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Lead Info - 선행 차량 정보 + 선두 차량 정보 <b>Show each tracked vehicle's distance and speed</b> below its marker. @@ -3711,7 +4449,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Numerical Temperature Gauge - 숫자 온도 게이지 + 온도 게이지 <b>Show a numerical temperature in the sidebar</b> instead of the status labels. @@ -3727,7 +4465,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Use International System of Units - 국제단위계(SI)를 사용하십시오 + 국제 단위 시스템 사용 <b>Display measurements using the "International System of Units" (SI)</b> standard. @@ -3887,7 +4625,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Rotating Steering Wheel - 회전하는 스티어링 휠 + 스티어링 휠 회전 <b>Rotate the driving screen wheel</b> with the physical steering wheel. @@ -3895,7 +4633,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Model UI - 모델 UI + 모델UI <b>Model visualizations</b> for the driving path, lane lines, path edges, and road edges. @@ -3903,7 +4641,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Dynamic Path Width - 동적 경로 폭 + 동적 경로 너비 <b>Change the path width based on engagement.</b><br><br><b>Fully Engaged</b>: 100%<br><b>Always On Lateral</b>: 75%<br><b>Disengaged</b>: 50% @@ -3911,7 +4649,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Lane Lines Width - 차선 너비 + 차선 폭 <b>Set the lane-line thickness.</b><br><br>Default matches the MUTCD lane-line width standard of 4 inches. @@ -3935,7 +4673,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Road Edges Width - 도로 가장자리 폭 + 도로 가장자리 너비 <b>Set the road-edge thickness.</b><br><br>Default matches half of the MUTCD lane-line width standard of 4 inches. @@ -3967,7 +4705,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Map Style - 지도 스타일 + 맵 스따일 <b>Select the map style</b> for "Navigate on openpilot" (NOO):<br><br><b>Stock openpilot</b>: Default comma.ai style<br><b>FrogPilot</b>: Official FrogPilot map style<br><b>Mapbox Streets</b>: Standard street-focused view<br><b>Mapbox Outdoors</b>: Emphasizes outdoor and terrain features<br><b>Mapbox Light</b>: Minimalist, bright theme<br><b>Mapbox Dark</b>: Minimalist, dark theme<br><b>Mapbox Navigation Day</b>: Optimized for daytime navigation<br><b>Mapbox Navigation Night</b>: Optimized for nighttime navigation<br><b>Mapbox Satellite</b>: Satellite imagery only<br><b>Mapbox Satellite Streets</b>: Hybrid satellite imagery with street labels<br><b>Mapbox Traffic Night</b>: Dark theme emphasizing traffic conditions<br><b>Mike's Personalized Style</b>: Customized hybrid satellite view @@ -4015,7 +4753,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Camera View - 카메라 보기 + 카메라 뷰 <b>Select the active camera view.</b> This is purely a visual change and doesn't impact how openpilot drives! @@ -4047,11 +4785,11 @@ Developer - Highly customizable settings for seasoned enthusiasts Steering Torque - 조향 토크 + 스티어링 토크 Turn Signal - 방향지시등 + 방향 지시등 Fahrenheit @@ -4075,11 +4813,11 @@ Developer - Highly customizable settings for seasoned enthusiasts SSD Left - SSD 왼쪽 + SSD 남은용량 SSD Used - 사용된 SSD + SSD 사용량 None @@ -4187,7 +4925,7 @@ Developer - Highly customizable settings for seasoned enthusiasts FrogPilot - FrogPilot + 개구리파일럿 Mapbox Streets @@ -4231,7 +4969,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Select a map style - 지도 스타일 선택 + 맵 스타일을 고르세요. Auto @@ -4677,7 +5415,43 @@ Developer - Highly customizable settings for seasoned enthusiasts FrogPilot - FrogPilot + 개구리파일럿 + + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + 시간 + + + hours + 시간 + + + minute + + + + minutes + + + + second + + + + seconds + @@ -4752,11 +5526,11 @@ This may take up to a minute. ← Back - ← 뒤로 + 뒤로 FrogPilot - FrogPilot + 개구리파일럿 Welcome to FrogPilot! Since you're new to openpilot, the "Minimal" toggle preset has been applied, but you can change this at any time via the "Tuning Level" button! @@ -4997,11 +5771,11 @@ This may take up to a minute. LEFT - 왼쪽 + 남음 USED - 사용됨 + 사용 @@ -5076,11 +5850,11 @@ This may take up to a minute. Updates are only downloaded while the car is off or in park. - 업데이트는 차량이 꺼져 있거나 주차 상태일 때만 다운로드됩니다. + 업데이트는 차량이 꺼져 있거나 주차되어 있을 때만 다운로드됩니다. Automatically Update FrogPilot - FrogPilot 자동 업데이트 + 개구리파일럿 자동 업데이트 FrogPilot will automatically update itself and it's assets when you're offroad and have an active internet connection. @@ -5092,7 +5866,7 @@ This may take up to a minute. Error Log - 오류 로그 + 에러 로그 VIEW @@ -5100,7 +5874,7 @@ This may take up to a minute. View the error log for openpilot crashes. - openpilot 충돌의 오류 로그를 확인합니다. + 오픈파일럿 오류 로그를 확인하세요. Do you want to perform a full factory reset? All saved assets and settings will be permanently deleted! @@ -5110,6 +5884,22 @@ This may take up to a minute. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? 이 작업은 완전한 공장 초기화이며 되돌릴 수 없습니다. 정말 계속하시겠습니까? + + downloading… + 다운로드 중… + + + checking… + 확인 중… + + + waiting for vehicle to go offroad... + 차량이 오프로드 상태가 될 때까지 기다리는 중... + + + finalizing update... + 업데이트 마무리 중... + SshControl @@ -5300,7 +6090,7 @@ This may take up to a minute. The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner. - 일부 회전을 더 잘 보여주기 위해 저속에서는 주행 시각화가 도로 방향의 광각 카메라로 전환됩니다. 오른쪽 상단에는 Experimental 모드 로고도 표시됩니다. + 주행 시각화는 저속에서 도로를 향한 광각 카메라로 전환되어 일부 회전을 더 잘 보여줍니다. 실험 모드 로고도 오른쪽 상단 모서리에 표시됩니다. @@ -5362,7 +6152,7 @@ This may take up to a minute. Uploading disabled - 업로드 비활성화됨 + 업로드 비활성화 Toggle off the "Turn Off Data Uploads" toggle to re-enable uploads. diff --git a/selfdrive/ui/translations/main_pirate.ts b/selfdrive/ui/translations/main_pirate.ts index 742206a..2baadd0 100644 --- a/selfdrive/ui/translations/main_pirate.ts +++ b/selfdrive/ui/translations/main_pirate.ts @@ -423,6 +423,22 @@ Miles Leagues + + ALL TIME (KONIK) + ALL TIME (KONIK), ye scallywags + + + ALL TIME + ALL TIME, arr + + + PAST WEEK (KONIK) + PAST WEEK (KONIK), arr! + + + PAST WEEK + PAST WEEK + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT LIMIT + + Desired: %1 + Desired: %1 + + + s + s + + + 1 minute + 1 minute, ye scallywag + + + %1 minutes + %1 minutes Arr! + + + 1 second + 1 second, arr! + + + %1 seconds + %1 seconds + FrogPilotConfirmationDialog @@ -694,6 +734,238 @@ Choose a backup to delete Choose a backup t’ scuttle + + FrogPilot Stats + FrogPilot Plunderin’ Stats + + + <b>View your collected FrogPilot stats.</b> + <b>Spy yer plundered FrogPilot stats, matey.</b> + + + RESET + RESET + + + VIEW + VIEW + + + Are you sure you want to reset all of your FrogPilot stats? + Be ye sure ye want t’ reset all yer FrogPilot stats? Arr! + + + Reset + Set ta rights + + + Total Emergency Brake Alerts + Total Emergency Brake Alerts, arr! + + + Time Using "Always On Lateral" + Time Usin’ "Always On Lateral" + + + Favorite Set Speed + Favored Set Speed + + + Total Disengagements + Total Disengagements, arr + + + Total Engagements + Total Engage'ments Arr! + + + Time Using "Experimental Mode" + Time Usin’ "Experimental Mode" + + + Total Frog Chirps + Total Frog Chirps be count’d + + + Total Frog Hops + Total Frog Hops, ye scallywag + + + Total Drives + Total Voyages + + + Total Distance Driven + Total Distance Sailed + + + Total Driving Time + Total Sailin’ Time + + + Total Frog Squeaks + Total Frog Squeaks, arr + + + Total Goat Screams + Total Goat Screams, arr! + + + Highest Acceleration Rate + Highest Acceleration Rate, arr + + + Time Using Lateral Control + Time Usin’ Lateral Control + + + Longest Distance Without an Override + Longest Voyage Without a Mutiny Override + + + Time Using Longitudinal Control + Time Usin’ Longitudinal Control + + + Driving Models: + Sailin’ Models: + + + Month + Month, ye scurvy dog + + + Total Overrides + Total Overrides, arr + + + Time Overriding openpilot + Time Overridin’ openpilot + + + Random Events: + Random Happenin's: + + + Time Stopped + Time Be Stilled + + + Time Spent at Stoplights + Time Spent at Stoplights, arr + + + Total Time Tracked + Total Time Plundered + + + UwUs + UwUs, ye scallywags! + + + Loch Ness Encounters + Loch Ness Ruckuses + + + Visits to 1955 + Visits t’ 1955 + + + Deja Vu Moments + Deja Vu Moments, arr! + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees, arr! + + + HAL 9000 Denials + HAL 9000 Refusals, arrr + + + openpilot Crashes + openpilot Be Sinkin’ + + + This Is Fine Moments + This Be Fine Moments, aye + + + To Be Continued Moments + T’ Be Continued Moments + + + Noices + Noises + + + Attempted Frog Murders + Attempted Frog Murders, arr! + + + Total Mail Received + Total Mail Plundered + + + kilometer + kilometer + + + kilometers + kilometers, arr + + + mile + mile + + + miles + leagues + + + day + day + + + days + days + + + hour + hourrrrr + + + hours + hours + + + minute + minute + + + minutes + minutes + + + km/h + knots/h + + + mph + knots per hour + + + m/s² + m/s² + + + Total + Total booty + + + % of + % o’ + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ seconds + + FrogPilotDriveSummary + + Random Events Summary + Ledger o’ Random Happenin’s + + + Drive Summary + Voyage Summary + + + UwUs + UwUs + + + Loch Ness Encounters + Loch Ness Encounters, arr! + + + Visits to 1955 + Visits t’ 1955 + + + Deja Vu Moments + Deja Vu Moments, arr! + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees, arr! + + + HAL 9000 Denials + HAL 9000 Refusals, arrr + + + openpilot Crashes + openpilot Wrecks + + + This Is Fine Moments + This Be Fine Moments, arr! + + + To Be Continued Moments + T’ Be Continued Moments + + + Noices + Noises + + + Attempted Frog Murders + Attempted Frog Murders, arr! + + + Total Mail Received + Total Mail Received, arr! + + + % of Drive With openpilot Engaged + % o’ Voyage With openpilot Engaged + + + Drive Distance + Sailin’ Distance + + + Drive Time + Sailin’ Time + + + % of Drive In "Experimental Mode" + % o’ Drive In "Experimental Mode" + + + No Random Events Played! + No Random Events be Played! Arr! + + + kilometer + kilometer + + + kilometers + kilometers + + + mile + mile + + + miles + leagues + + + day + day, aye + + + days + days + + + hour + hour + + + hours + hours ahoy + + + minute + minute + + + minutes + minutes + + FrogPilotLateralPanel @@ -1291,10 +1682,6 @@ Predicted Stop In Foretold Stop In - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Hoist sails to "Experimental Mode" when openpilot spies a stop within the set time, arr!</b> This be usually triggered when the model "sees" a red light or stop sign dead ahead, aye.<br><br><i><b>Disclaimer</b>: openpilot don’t explicitly spot traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end drivin’ calls from the camera’s gaze, which means it may drop anchor even when there be no clear reason, yarrr.</i> - Turn Signal Below Turn Signal Be Below @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs Force Heave-To at "Detected" Stop Lanterns/Signs - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Make openpilot heave to whenever the drivin’ model "spots" a red lantern or stop sign, arr.</b><br><br><i><b>Disclaimer</b>: openpilot don’t be explicitly spyin’ traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end helm calls from the camera’s eye, meanin’ it may drop anchor even when there be no clear cause.</i> - Increase Stopped Distance by: Be increasin’ Stopped Distance by: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>Flip th’ cruise control button’s ways</b> so a quick tap boosts set speed by 5 ‘stead o’ 1. + + Increase Following Distance by: + Boost Yer Followin’ Distance by: + + + Reduce Acceleration by: + Trim the throttle by: + + + Reduce Speed in Curves by: + Reef Yer Speed in Curves by: + + + Snow + Snowy seas + + + <b>Driving adjustments for snowy conditions.</b> + <b>Drivin’ tweaks fer snowy seas ashore.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Add extra berth aft o’ lead vessels in snow.</b> Increase fer more space; decrease fer tighter gaps. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Be addin’ extra buffer when ye be stopped abaft other vessels in snow.</b> Raise it fer more berth; lower it fer tighter gaps. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reef the max shove in snow, matey.</b> Raise it fer softer shove-offs; drop it fer quicker but less steady shove-offs. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Lower yer wished speed while sailin’ through curves in snow.</b> Raise it fer safer, gentler turns; drop it fer more swashbucklin’, aggressive drivin’ in curves. + Speed Limit Controller Speed Limit Helmsman @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>Behavin’ like real hands at the wheel</b> by closin’ gaps astern o’ swifter wagons fer quicker shove-offs, an’ smartly trimmin’ the wanted followin’ distance fer gentler, more shipshape brak’n. + + Weather Condition Offsets + Weather Condition Offsets, arr! + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Auto-trim yer drivin’ ways by the live weather, arr!</b> Keeps yer comfort ’n safety in fog, rain, or snow, ye scallywag. + + + Low Visibility + Low Visibility, arr + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Steerin’ tweaks fer fog, haze, or other low-visibility seas.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Add extra berth astern o’ lead vessels in foul visibility.</b> Heave up fer more space; batten down fer tighter gaps. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>Add extra buffer when ye be stopped abaft other vessels in foul visibility.</b> Raise it fer more berth; lower it fer shorter gaps. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reef the max surge when the seas be foggy.</b> Raise it fer softer shove-offs; drop it fer faster but wobblier shove-offs. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reef the desired speed sail when ye be steer’n through bends in foul sight.</b> Heave it up fer safer, gentler turns; haul it down fer more cutlass-swingin’ drivin’ in curves. + + + Rain + Squall + + + <b>Driving adjustments for rainy conditions.</b> + <b>Sailin’ tweaks fer squally roads.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Add extra berth astern o’ lead vessels in squalls.</b> Heave to fer more space; trim sail fer tighter gaps. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>Add extra buffer when ye be stopped abaft other vessels in the rain.</b> Increase fer more berth; decrease fer tighter gaps. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reef the max surge in a squall.</b> Raise it fer gentler shove-offs; lower it fer swifter but shakier shove-offs. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reef the desired speed when ye be sailin’ through bends in the rain.</b> Raise it fer safer, gentler turns; drop it fer more swashbucklin’ drivin’ in curves. + + + Rainstorms + Tempests o’ rain + + + <b>Driving adjustments for rainstorms.</b> + <b>Helm tweaks fer squalls o’ rain.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>Add ye extra berth abaft the lead vessels in a squall.</b> Increase fer more space; decrease fer tighter gaps. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>Add extra berth when ye be stopped abaft other vessels in a squall.</b> Increase fer more room; decrease fer shorter gaps. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reef the max acceleration when the heavens be pourin’.</b> Raise it fer gentler shove-offs; lower it fer swifter but shakier shove-offs. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reef the speed ye be wantin’ when ye sail through squalls ‘n bends.</b> Heave it up fer safer, softer turns; haul it down fer more cutlass-swingin’ drivin’ in curves. + + + Human-Like Lane Changes + Human-Like Lane Swaps, arr! + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>Lane-change ways that be like human helmsmen</b>, spyin’ and shadowin’ ships abeam while ye change lanes. + + + "Detected" Stop Lights/Signs + “Detected” Stop Lights/Signs + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Hoist the sails fer "Experimental Mode" whenever the drivin’ model "detects" a red light or stop sign, arr!</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end drivin’ decisions from camera input, meanin’ it may drop anchor even when there be no clear reason, yar!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Hoist "Experimental Mode" when openpilot spies a stop within the set time.</b> This be usually triggered when the model "sees" a red light or stop sign off the bow.<br><br><i><b>Disclaimer</b>: openpilot don’t explicitly sight traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end drivin’ decisions from camera input, meanin’ it may drop anchor even when there be no clear reason!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Make openpilot heave to whenever the drivin’ model “spots” a red lantern or stop sign, arrr.</b><br><br><i><b>Disclaimer</b>: openpilot don’t be explicitly sightin’ traffic lights or stop signs. In “Experimental Mode”, openpilot makes end-to-end helm choices from the camera’s gaze, meanin’ it may drop anchor even when there be no clear cause!</i> + + + Set Your Own Key + Set Yer Own Key + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Hoist yer own "OpenWeatherMap" key to speed up th’ weather updates, matey.</b><br><br><i>Yer personal keys grant 1,000 free calls a day, lettin’ updates roll in every minute. The default key be shared ’n only updates every 15 minutes.</i> + + + ADD + ADD + + + Enter your "OpenWeatherMap" key + Enter yer "OpenWeatherMap" key, ye scallywag + + + REMOVE + REMOVE + + + Invalid key! + Arr, ye be usin’ an invalid key! + + + Are you sure you want to remove your key? + Be ye sure ye want t’ cast off yer key? + + + TEST + ARR TEST + + + Testing... + Testin'... Arr... + + + Key is valid! + Arr, the key be valid! + + + An error occurred: %1 + Arr, an error befall'd: %1 + FrogPilotManageControl @@ -2226,8 +2793,16 @@ Offline... Arr! - CANCELLED - SCUTTLED + 0 MB + 0 MB + + + Calculating... + Arr... reckonin'... + + + Not parked + Not be anchored @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC Pick a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC + + Downloading... + Plunderin’ the download... + + + Not parked + Not be at anchor + + + Downloaded! + Plundered ‘n downloaded! + + + All models downloaded! + All models be plundered ‘n stowed! + + + Download cancelled... + Download be scuttled... + + + Download failed... + Download be sunk... + + + GitHub and GitLab are offline... + GitHub an’ GitLab be offline... Arr! + + + Repository unavailable + Treasure hold be unavailable + FrogPilotModelReview @@ -2626,6 +3233,57 @@ It’ll reset in %1 hours ‘n %2 minutes. Completed! Arr, Completed! + + <b>Manage your Public Mapbox Key.</b> + <b>Command yer Public Mapbox Key, ye scallywag.</b> + + + TEST + TRIAL be yarrr! + + + Remove your Public Mapbox Key? + Be ye removin’ yer Public Mapbox Key? + + + Enter your Public Mapbox Key + Be enterin’ yer Public Mapbox Key, ye scallywag + + + Testing... + Testin'... + + + Key is valid! + Key be valid, arr! + + + Key is invalid! + The key be invalid, arr! + + + An error occurred: %1 + Arr, an error befall’d: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Command yer Secret Mapbox Key.</b> + + + Remove your Secret Mapbox Key? + Be ye removin’ yer Secret Mapbox Key? + + + Enter your Secret Mapbox Key + Be enterin’ yer Secret Mapbox Key, ye scallywag! + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS: %1 | Min: %2 | Max: %3 | Avg: %4, arr! + FrogPilotSettingsWindow @@ -3153,6 +3811,38 @@ Developer - Highly customizable riggin’s fer seasoned enthusiastsCANCEL AVAST + + Downloading... + Plunderin’ the bytes... + + + Idle + Idle → Afloat + + + Unpacking theme... + Unpackin’ the theme, arr... + + + Downloaded! + Plunder be downloaded! Arr! + + + Download cancelled... + Download be scuttled... + + + Download failed... + Download be scuttled... + + + Repository unavailable + Treasure hold be unavailable + + + GitHub and GitLab are offline... + GitHub 'n GitLab be offline, arr... + FrogPilotUtilitiesPanel @@ -3595,6 +4285,54 @@ Developer - Highly customizable riggin’s fer seasoned enthusiastscomma Pedal Support comma Pedal Support, arrr + + Subaru Settings + Subaru Settin's + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>FrogPilot features fer Subaru vessels.</b> + + + Stop and Go + Heave-to and Get Goin’ + + + Stop and go for supported Subaru vehicles. + Stop 'n go fer supported Subaru vessels. + + + Acura/Honda Settings + Acura/Honda Settin's + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>FrogPilot booty fer Acura an’ Honda vessels.</b> + + + Gentle Following + Gentle Followin’ + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Tames the herky-jerky surge an’ brake when trailin’ a lead vessel.</b> Ideal fer stop‑an’‑go traffic. + + + Increased Braking Force + Boosted Brakin’ Force + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Boosts th’ max breakin’ force fer sharper stoppin’ prowess, arr!</b> + + + Responsive Pedal at Low Speeds + Quick-Twitch Pedal at Low Speeds + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>Gives ye a quicker shove off th’ line fer a snappier throttle feel in city sailin’.</b> + FrogPilotVisualsPanel @@ -4684,6 +5422,42 @@ Developer - Highly customizable riggin’s fer seasoned enthusiasts%n day(s) ago + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + hourglass o’ time + + + hours + hours + + + minute + minute, arrr + + + minutes + minutes + + + second + second + + + seconds + seconds + Reset @@ -5115,6 +5889,22 @@ This may take up to a minute, arr. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? This be a full factory reset an’ can ne’er be undone. Be ye absolutely sure ye wish t’ press on? + + downloading… + plunderin’ the downloads… + + + checking… + checkin’… + + + waiting for vehicle to go offroad... + waitin' fer th’ vessel t’ go offroad... + + + finalizing update... + battenin’ down th’ update... + SshControl diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts index ea3d581..d718d8e 100644 --- a/selfdrive/ui/translations/main_pt-BR.ts +++ b/selfdrive/ui/translations/main_pt-BR.ts @@ -423,6 +423,22 @@ Miles Milhas + + ALL TIME (KONIK) + TEMPO TOTAL (KONIK) + + + ALL TIME + TEMPO TODO + + + PAST WEEK (KONIK) + ÚLTIMA SEMANA (KONIK) + + + PAST WEEK + ÚLTIMA SEMANA + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT LIMITE + + Desired: %1 + Desejado: %1 + + + s + s + + + 1 minute + 1 minuto + + + %1 minutes + %1 minutos + + + 1 second + 1 segundo + + + %1 seconds + %1 segundos + FrogPilotConfirmationDialog @@ -694,6 +734,238 @@ Choose a backup to delete Escolha um backup para excluir + + FrogPilot Stats + Estatísticas do FrogPilot + + + <b>View your collected FrogPilot stats.</b> + <b>Veja suas estatísticas do FrogPilot coletadas.</b> + + + RESET + REDEFINIR + + + VIEW + VISUALIZAR + + + Are you sure you want to reset all of your FrogPilot stats? + Tem certeza de que deseja redefinir todas as suas estatísticas do FrogPilot? + + + Reset + Redefinir + + + Total Emergency Brake Alerts + Alertas Totais de Frenagem de Emergência + + + Time Using "Always On Lateral" + Tempo usando "Lateral Sempre Ativo" + + + Favorite Set Speed + Velocidade de Cruzeiro Favorita + + + Total Disengagements + Desengates Totais + + + Total Engagements + Engajamentos Totais + + + Time Using "Experimental Mode" + Tempo usando "Modo Experimental" + + + Total Frog Chirps + Total de coaxos de sapos + + + Total Frog Hops + Total de pulos de sapo + + + Total Drives + Viagens Totais + + + Total Distance Driven + Distância total percorrida + + + Total Driving Time + Tempo total de condução + + + Total Frog Squeaks + Rangidos Totais de Sapo + + + Total Goat Screams + Total de Gritos de Bode + + + Highest Acceleration Rate + Taxa máxima de aceleração + + + Time Using Lateral Control + Tempo usando controle lateral + + + Longest Distance Without an Override + Maior distância sem intervenção + + + Time Using Longitudinal Control + Tempo usando controle longitudinal + + + Driving Models: + Modelos de direção: + + + Month + Mês + + + Total Overrides + Total de substituições + + + Time Overriding openpilot + Tempo substituindo o openpilot + + + Random Events: + Eventos aleatórios + + + Time Stopped + Tempo parado + + + Time Spent at Stoplights + Tempo parado em semáforos + + + Total Time Tracked + Tempo total rastreado + + + UwUs + UwUs + + + Loch Ness Encounters + Encontros no Lago Ness + + + Visits to 1955 + Visitas a 1955 + + + Deja Vu Moments + Momentos de Déjà Vu + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + Negativas do HAL 9000 + + + openpilot Crashes + Falhas do openpilot + + + This Is Fine Moments + Momentos “This Is Fine” + + + To Be Continued Moments + Momentos a Serem Continuados + + + Noices + Ruídos + + + Attempted Frog Murders + Tentativas de Assassinato de Sapos + + + Total Mail Received + Total de e-mails recebidos + + + kilometer + quilômetro + + + kilometers + quilômetros + + + mile + milha + + + miles + milhas + + + day + dia + + + days + dias + + + hour + hora + + + hours + horas + + + minute + minuto + + + minutes + minutos + + + km/h + km/h + + + mph + mph + + + m/s² + m/s² + + + Total + Total + + + % of + % de + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ segundos + + FrogPilotDriveSummary + + Random Events Summary + Resumo de Eventos Aleatórios + + + Drive Summary + Resumo da Condução + + + UwUs + UwUs + + + Loch Ness Encounters + Encontros no Lago Ness + + + Visits to 1955 + Visitas a 1955 + + + Deja Vu Moments + Momentos de Déjà Vu + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + Negativas do HAL 9000 + + + openpilot Crashes + Falhas do openpilot + + + This Is Fine Moments + Momentos “This Is Fine” + + + To Be Continued Moments + Momentos a Continuar + + + Noices + Ruídos + + + Attempted Frog Murders + Tentativas de assassinato de sapos + + + Total Mail Received + Total de e-mails recebidos + + + % of Drive With openpilot Engaged + % da condução com openpilot ativado + + + Drive Distance + Distância de Condução + + + Drive Time + Tempo de Condução + + + % of Drive In "Experimental Mode" + % de condução em "Modo Experimental" + + + No Random Events Played! + Nenhum evento aleatório reproduzido! + + + kilometer + quilômetro + + + kilometers + quilômetros + + + mile + milha + + + miles + milhas + + + day + dia + + + days + dias + + + hour + hora + + + hours + horas + + + minute + minuto + + + minutes + minutos + + FrogPilotLateralPanel @@ -1291,10 +1682,6 @@ Predicted Stop In Parada prevista em - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Troque para o "Modo Experimental" quando o openpilot prever uma parada dentro do tempo definido.</b> Isso geralmente é acionado quando o modelo "vê" um semáforo vermelho ou uma placa de pare à frente.<br><br><i><b>Aviso legal</b>: o openpilot não detecta explicitamente semáforos ou placas de pare. No "Modo Experimental", o openpilot toma decisões de direção de ponta a ponta a partir da entrada da câmera, o que significa que pode parar mesmo quando não há um motivo claro.</i> - Turn Signal Below Seta abaixo @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs Parada forçada em semáforos/sinais de “Detectado” - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Forçar o openpilot a parar sempre que o modelo de condução “detectar” um semáforo vermelho ou uma placa de pare.</b><br><br><i><b>Aviso</b>: o openpilot não detecta explicitamente semáforos ou placas de pare. No “Modo Experimental”, o openpilot toma decisões de condução de ponta a ponta a partir da entrada da câmera, o que significa que ele pode parar mesmo quando não houver um motivo claro.</i> - Increase Stopped Distance by: Aumentar a distância parada em: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>Inverta o comportamento do botão do controle de cruzeiro</b> para que um toque curto aumente a velocidade definida em 5 em vez de 1. + + Increase Following Distance by: + Aumente a distância de seguimento em:" + + + Reduce Acceleration by: + Reduzir a aceleração em: + + + Reduce Speed in Curves by: + Reduzir velocidade em curvas em: + + + Snow + Neve + + + <b>Driving adjustments for snowy conditions.</b> + <b>Ajustes de condução para condições de neve.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Adicione espaço extra atrás de veículos à frente na neve.</b> Aumente para mais espaço; diminua para intervalos menores. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Adicione uma margem extra ao parar atrás de veículos na neve.</b> Aumente para mais espaço; diminua para lacunas menores. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reduza a aceleração máxima na neve.</b> Aumente para partidas mais suaves; diminua para partidas mais rápidas porém menos estáveis. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduza a velocidade desejada ao dirigir em curvas na neve.</b> Aumente para curvas mais seguras e suaves; diminua para uma condução mais agressiva em curvas. + Speed Limit Controller Controlador de Limite de Velocidade @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>Comportamento de acompanhamento que imita motoristas humanos</b> ao fechar lacunas atrás de veículos mais rápidos para arrancadas mais rápidas e ajustar dinamicamente a distância de seguimento desejada para frenagens mais suaves e eficientes. + + Weather Condition Offsets + Compensações de Condições Climáticas + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Ajuste automaticamente o comportamento de condução com base no clima em tempo real.</b> Ajuda a manter o conforto e a segurança em baixa visibilidade, chuva ou neve. + + + Low Visibility + Baixa visibilidade + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Ajustes de condução para neblina, névoa ou outras condições de baixa visibilidade.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Adicione espaço extra atrás de veículos à frente em baixa visibilidade.</b> Aumente para mais espaço; diminua para lacunas menores. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>Adicione uma margem extra quando parado atrás de veículos em baixa visibilidade.</b> Aumente para mais espaço; diminua para intervalos menores. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reduza a aceleração máxima em baixa visibilidade.</b> Aumente para partidas mais suaves; diminua para partidas mais rápidas porém menos estáveis. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduza a velocidade desejada ao dirigir em curvas com baixa visibilidade.</b> Aumente para curvas mais seguras e suaves; diminua para uma condução mais agressiva nas curvas. + + + Rain + Chuva + + + <b>Driving adjustments for rainy conditions.</b> + <b>Ajustes de condução para condições de chuva.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Adicione espaço extra atrás de veículos à frente na chuva.</b> Aumente para mais espaço; diminua para lacunas menores. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>Adicione uma margem extra ao parar atrás de veículos na chuva.</b> Aumente para mais espaço; diminua para intervalos menores. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reduza a aceleração máxima na chuva.</b> Aumente para partidas mais suaves; diminua para partidas mais rápidas porém menos estáveis. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduza a velocidade desejada ao dirigir em curvas na chuva.</b> Aumente para curvas mais seguras e suaves; diminua para uma condução mais agressiva em curvas. + + + Rainstorms + Tempestades de chuva + + + <b>Driving adjustments for rainstorms.</b> + <b>Ajustes de condução para tempestades de chuva.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>Adicione espaço extra atrás de veículos à frente em tempestades.</b> Aumente para mais espaço; diminua para lacunas menores. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>Adicione uma margem extra ao parar atrás de veículos durante uma tempestade de chuva.</b> Aumente para mais espaço; diminua para lacunas menores. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Reduza a aceleração máxima durante uma tempestade.</b> Aumente para partidas mais suaves; diminua para partidas mais rápidas, porém menos estáveis. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Reduza a velocidade desejada ao dirigir em curvas durante uma tempestade.</b> Aumente para curvas mais seguras e suaves; diminua para dirigir de forma mais agressiva em curvas. + + + Human-Like Lane Changes + Mudanças de faixa semelhantes às humanas + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>Comportamento de troca de faixa que imita motoristas humanos</b> ao antecipar e acompanhar veículos adjacentes durante mudanças de faixa. + + + "Detected" Stop Lights/Signs + Luzes/Sinais de Parada "Detectados" + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Alternar para o "Modo Experimental" sempre que o modelo de condução "detectar" um semáforo vermelho ou uma placa de pare.</b><br><br><i><b>Aviso</b>: o openpilot não detecta explicitamente semáforos ou placas de pare. No "Modo Experimental", o openpilot toma decisões de direção de ponta a ponta a partir da entrada da câmera, o que significa que pode parar mesmo quando não houver um motivo claro!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Troque para o "Modo Experimental" quando o openpilot prever uma parada dentro do tempo definido.</b> Isso geralmente é acionado quando o modelo "vê" um sinal vermelho ou uma placa de pare à frente.<br><br><i><b>Aviso</b>: o openpilot não detecta explicitamente semáforos ou placas de pare. No "Modo Experimental", o openpilot toma decisões de direção ponta a ponta a partir da entrada da câmera, o que significa que pode parar mesmo quando não há um motivo claro!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Forçar o openpilot a parar sempre que o modelo de direção "detectar" um semáforo vermelho ou uma placa de pare.</b><br><br><i><b>Aviso</b>: o openpilot não detecta explicitamente semáforos ou placas de pare. No "Modo Experimental", o openpilot toma decisões de direção ponta a ponta a partir da entrada da câmera, o que significa que ele pode parar mesmo quando não há um motivo claro!</i> + + + Set Your Own Key + Defina sua própria chave + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Defina sua própria chave do "OpenWeatherMap" para aumentar a frequência de atualização do clima.</b><br><br><i>Chaves pessoais concedem 1.000 chamadas gratuitas por dia, permitindo atualizações a cada minuto. A chave padrão é compartilhada e atualiza apenas a cada 15 minutos.</i> + + + ADD + ADICIONAR + + + Enter your "OpenWeatherMap" key + Insira sua chave do "OpenWeatherMap" + + + REMOVE + REMOVER + + + Invalid key! + Chave inválida! + + + Are you sure you want to remove your key? + Tem certeza de que deseja remover sua chave? + + + TEST + TEST + + + Testing... + Testando... + + + Key is valid! + A chave é válida! + + + An error occurred: %1 + Ocorreu um erro: %1 + FrogPilotManageControl @@ -2226,8 +2793,16 @@ Offline... - CANCELLED - CANCELADO + 0 MB + 0 MB + + + Calculating... + Calculando... + + + Not parked + Não estacionado @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC Selecione um Modelo — 🗺️ = Navegação | 📡 = Radar | 👀 = VOACC + + Downloading... + Baixando... + + + Not parked + Não estacionado + + + Downloaded! + Baixado! + + + All models downloaded! + Todos os modelos foram baixados! + + + Download cancelled... + Download cancelado... + + + Download failed... + Falha no download... + + + GitHub and GitLab are offline... + GitHub e GitLab estão offline... + + + Repository unavailable + Repositório indisponível + FrogPilotModelReview @@ -2626,6 +3233,57 @@ Ele será reiniciado em %1 horas e %2 minutos. Completed! Concluído! + + <b>Manage your Public Mapbox Key.</b> + <b>Gerencie sua Chave Pública do Mapbox.</b> + + + TEST + TEST + + + Remove your Public Mapbox Key? + Remover sua chave pública do Mapbox? + + + Enter your Public Mapbox Key + Insira sua chave pública do Mapbox + + + Testing... + Testando... + + + Key is valid! + A chave é válida! + + + Key is invalid! + A chave é inválida! + + + An error occurred: %1 + Ocorreu um erro: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Gerencie sua Chave Secreta do Mapbox.</b> + + + Remove your Secret Mapbox Key? + Remover sua Chave Secreta do Mapbox? + + + Enter your Secret Mapbox Key + Insira sua chave secreta do Mapbox + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS: %1 | Mín: %2 | Máx: %3 | Méd: %4 + FrogPilotSettingsWindow @@ -3153,6 +3811,38 @@ Desenvolvedor - Configurações altamente personalizáveis para entusiastas expe CANCEL CANCELAR + + Downloading... + Baixando... + + + Idle + Ocioso + + + Unpacking theme... + Descompactando o tema... + + + Downloaded! + Baixado! + + + Download cancelled... + Download cancelado... + + + Download failed... + Falha no download... + + + Repository unavailable + Repositório indisponível + + + GitHub and GitLab are offline... + GitHub e GitLab estão offline... + FrogPilotUtilitiesPanel @@ -3595,6 +4285,54 @@ Desenvolvedor - Configurações altamente personalizáveis para entusiastas expe comma Pedal Support Compatibilidade com comma Pedal + + Subaru Settings + Configurações da Subaru + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>Recursos FrogPilot para veículos Subaru.</b> + + + Stop and Go + Para e Anda + + + Stop and go for supported Subaru vehicles. + Para veículos Subaru compatíveis com stop and go. + + + Acura/Honda Settings + Configurações da Acura/Honda + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>Recursos do FrogPilot para veículos Acura e Honda.</b> + + + Gentle Following + Acompanhamento Suave + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Reduz acelerações e frenagens bruscas ao seguir um veículo à frente.</b> Ideal para tráfego para-e-anda. + + + Increased Braking Force + Força de Frenagem Aumentada + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Aumenta a força máxima de frenagem para melhorar o desempenho de parada.</b> + + + Responsive Pedal at Low Speeds + Pedal Responsivo em Baixas Velocidades + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>Melhora a aceleração a partir da imobilidade para uma resposta do acelerador mais ágil na condução urbana.</b> + FrogPilotVisualsPanel @@ -4684,6 +5422,42 @@ Desenvolvedor - Configurações altamente personalizáveis para entusiastas expe FrogPilot FrogPilot + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + hora + + + hours + horas + + + minute + minuto + + + minutes + minutos + + + second + segundo + + + seconds + segundos + Reset @@ -5115,6 +5889,22 @@ Isso pode levar até um minuto. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? Esta é uma redefinição completa de fábrica e não pode ser desfeita. Você tem absoluta certeza de que deseja continuar? + + downloading… + baixando… + + + checking… + verificando… + + + waiting for vehicle to go offroad... + aguardando o veículo sair da estrada... + + + finalizing update... + finalizando atualização... + SshControl diff --git a/selfdrive/ui/translations/main_shakespearean.ts b/selfdrive/ui/translations/main_shakespearean.ts index 1b04dd6..c7d8443 100644 --- a/selfdrive/ui/translations/main_shakespearean.ts +++ b/selfdrive/ui/translations/main_shakespearean.ts @@ -423,6 +423,22 @@ Miles Miles + + ALL TIME (KONIK) + ALL TIME (KONIK), forsooth + + + ALL TIME + FOR ALL TIME + + + PAST WEEK (KONIK) + PAST WEEK (KONIK), e’en now past + + + PAST WEEK + THE PAST WEEK + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT LIMIT + + Desired: %1 + Desired: %1 + + + s + s + + + 1 minute + 1 minute + + + %1 minutes + %1 minutes + + + 1 second + 1 second + + + %1 seconds + %1 seconds + FrogPilotConfirmationDialog @@ -532,7 +572,7 @@ Deleting... - Deleting… + Deleting... Deleted! @@ -670,7 +710,7 @@ Restoring... - Restoring… + Restoring... Extracting... @@ -696,6 +736,241 @@ Choose a backup to delete Choose a reliquary to purge + + FrogPilot Stats + FrogPilot Chronicles + + + <b>View your collected FrogPilot stats.</b> + <b>Behold thy gathered FrogPilot tidings.</b> + + + RESET + RESET + + + VIEW + VIEW + + + Are you sure you want to reset all of your FrogPilot stats? + Art thou certain thou wouldst reset all thy FrogPilot stats? + + + Reset + Reset + + + Total Emergency Brake Alerts + Total Alarums for Emergency Braking + + + Time Using "Always On Lateral" + Time Spent Using "Always On Lateral" + + + Favorite Set Speed + Fav’rite Set Speed + + + Total Disengagements + Total Disengagements, in full account + + + Total Engagements + Total Engagements + + + Time Using "Experimental Mode" + Time Spent in "Experimental Mode" + + + Total Frog Chirps + Sum of Frogly Chirps + + + Total Frog Hops + Sum of Frogly Leaps + + + Total Drives + Sum of Journeys + + + Total Distance Driven + Total Distance Travers’d + + + Total Driving Time + Total Time Behind the Wheel + + + Total Frog Squeaks + Sum of Frogly Squeaks + + + Total Goat Screams + Total Goat Screams, i’ faith + + + Highest Acceleration Rate + Most Swift Acceleration Rate + + + Time Using Lateral Control + Time Spent Using Lateral Control + + + Longest Distance Without an Override + Longest Stretch Without a Mortal’s Override + + + Time Using Longitudinal Control + Time Spent Employing Longitudinal Control + + + Driving Models: + Driving Models: + + + Month + Month + + + + + Total Overrides + Total O’errides + + + Time Overriding openpilot + Time O’erriding openpilot + + + Random Events: + Haphazard Happenings: + + + Time Stopped + Time Hath Stopp’d + + + Time Spent at Stoplights + Time Wasted at Stoplights + + + Total Time Tracked + Total Time Kept in Reckoning + + + UwUs + UwUs + + + Loch Ness Encounters + Loch Ness Encounters, verily + + + Visits to 1955 + Visits to the year 1955 + + + Deja Vu Moments + Déjà Vu Moments + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees, forsooth! + + + HAL 9000 Denials + HAL 9000 Denials, forsooth + + + openpilot Crashes + openpilot Doth Crash + + + This Is Fine Moments + Moments Most Seemly + + + To Be Continued Moments + Moments To Be Continued + + + Noices + Noises + + + Attempted Frog Murders + Attempted Murders of Frogs + + + Total Mail Received + Sum of Missives Received + + + kilometer + kilometre + + + kilometers + kilometers + + + mile + mile + + + miles + miles + + + day + day + + + days + days + + + hour + hour + + + + hours + hours + + + minute + minute + + + minutes + minutes + + + km/h + km/h + + + mph + mph + + + m/s² + m/s² + + + Total + Total + + + % of + % of + FrogPilotDevicePanel @@ -878,6 +1153,125 @@ seconds + + FrogPilotDriveSummary + + Random Events Summary + A Summation of Fortuitous Happenings + + + Drive Summary + Drive Summ’ry + + + UwUs + UwUs + + + Loch Ness Encounters + Loch Ness Encounters, by my troth + + + Visits to 1955 + Visits unto 1955 + + + Deja Vu Moments + Déjà Vu Moments + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + HAL 9000 Denials, prithee + + + openpilot Crashes + openpilot Doth Crash + + + This Is Fine Moments + Moments Wherein All Is Well + + + To Be Continued Moments + Moments To Be Continued + + + Noices + Noises + + + Attempted Frog Murders + Attempted Slaughters of Frogs + + + Total Mail Received + Total Missives Receiv’d + + + % of Drive With openpilot Engaged + % of Journey With openpilot Enchanted + + + Drive Distance + Journey Distance + + + Drive Time + Time of the Drive + + + % of Drive In "Experimental Mode" + % of Drive In "Experimental Mode" + + + No Random Events Played! + No Chanceful Happenings Performed! + + + kilometer + kilometer + + + kilometers + kilometers + + + mile + mile + + + miles + miles + + + day + day + + + days + days + + + hour + hour + + + hours + hours + + + minute + minute + + + minutes + minutes + + FrogPilotLateralPanel @@ -1295,10 +1689,6 @@ Predicted Stop In Foretold Stop In - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Betake thee to "Experimental Mode" when openpilot foretelleth a stop within the appointed time.</b> This is oft provoked when the model "espies" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot doth not expressly detect traffic lights or stop signs. In "Experimental Mode", openpilot maketh end-to-end driving judgments from camera input, which may cause it to halt e’en when no clear cause appeareth.</i> - Turn Signal Below Turn Signal Beneath @@ -1619,10 +2009,6 @@ Force Stop at "Detected" Stop Lights/Signs Compel a Halt at “Detected” Stop Lights/Signs - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Compel openpilot to halt whensoever the driving model “detects” a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot doth not expressly detect traffic lights or stop signs. In “Experimental Mode”, openpilot maketh end-to-end driving judgments from camera input, which meaneth it may halt e’en when no clear cause is seen.</i> - Increase Stopped Distance by: Augment the Halted Distance by: @@ -1655,6 +2041,44 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>Invert the cruise control button’s wont</b> that a brief press doth raise the set speed by 5 instead of 1. + + Increase Following Distance by: + Increase the Following Distance by: + + + Reduce Acceleration by: + Abate Acceleration by: + + + Reduce Speed in Curves by: + Abate Thy Speed in Curves by: + + + Snow + Snow + + + + + <b>Driving adjustments for snowy conditions.</b> + <b>Chariot-taming adjustments for snowy climes.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Add extra space behind lead carriages in snow.</b> Increase for more breadth; decrease for closer gaps. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Add extra buffer when halted behind carriages in snow.</b> Increase for more breadth; decrease for shorter gaps. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Abate the utmost acceleration in snow.</b> Increase for gentler departures; decrease for swifter yet less steadfast departures. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Whilst thou driv’st through snowy bends, lower thy desir’d speed.</b> Increase it for safer, gentler turns; decrease it for more bold, aggressive coursing through curves. + Speed Limit Controller Speed Limit Controller @@ -2043,6 +2467,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>Following comportment that doth mirror mortal coachmen</b> by narrowing gaps behind swifter chariots for hastier set-offs and by dynamically tuning the desired following distance for gentler, more thrifty braking. + + Weather Condition Offsets + Offsets of Weatherly Conditions + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Adjust drivèd manners anon by the weather’s present mood.</b> Aids to keep comfort and safety in dim mists, rain, or snow. + + + Low Visibility + Meager Visibility + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Adjustments for driving in fog, haze, or other dimm’d-visibility conditions.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for narrower gaps, prithee. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>When thou art stay’d behind carriages in murkéd sight, add a further buffer.</b> Increase for more room; decrease for shorter gaps. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Abate the utmost acceleration in murky sight.</b> Increase for gentler departures; decrease for swifter yet less steady departures. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Whilst thou driv’st through bends in murkèd sight, lower thy desir’d speed.</b> Raise it for turns more safe and gentle; lower it for a fiercer course through curves. + + + Rain + Rainfall + + + <b>Driving adjustments for rainy conditions.</b> + <b>Adjustments for thy driving in rainy temper.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Add more room behind lead chariots in rain.</b> Increase for greater space; decrease for narrower gaps. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>When thou art halted behind coaches in rain, add extra buffer.</b> Increase for more space; decrease for shorter gaps. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Abate the utmost acceleration in rain.</b> Raise it for gentler departures; lower it for swifter yet less steadfast departures. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Whilst thou driv’st through curves in rain, lower thy desired speed.</b> Increase it for turns more safe and gentle; decrease it for a bolder, more aggressive passage through the curves. + + + Rainstorms + Tempests of Rain + + + <b>Driving adjustments for rainstorms.</b> + <b>Charioteering adjustments for tempestuous rains.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>In a tempest of rain, addeth more space behind leaden vehicles.</b> Increase for wider berth; decrease for closer gaps. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>When thou stand’st behind carriages in a tempest of rain, add a further buffer.</b> Increase for more space; decrease for shorter gaps. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Abate the utmost acceleration in a tempest of rain.</b> Increase to make takeoffs gentler; decrease for swifter yet less steadfast takeoffs. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Abate the desired speed whilst thou driv’st through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + + + Human-Like Lane Changes + Lane Changes in the Manner of Man + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>Lane-change comportment that doth mimic mortal drivers</b> by forethinking and keeping watch o’er adjacent vehicles during lane changes. + + + "Detected" Stop Lights/Signs + “Detected” Stop Lights/Signs + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Betake thee to "Experimental Mode" whenever the driving model "espieth" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot doth not expressly descry traffic lights or stop signs. In "Experimental Mode", openpilot maketh end-to-end driving decrees from camera input, which meaneth it may halt e’en when no clear cause appeareth!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Pray switch to "Experimental Mode" when openpilot foretell’th a stop within the set time.</b> This is most oft roused when the model “espieth” a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot doth not expressly detect traffic lights or stop signs. In "Experimental Mode", openpilot maketh end-to-end driving judgments from camera input, which may cause it to halt e’en when no clear cause appeareth!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Compel openpilot to halt whensoever the driving model “espieth” a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot doth not expressly ken traffic lights or stop signs. In “Experimental Mode”, openpilot maketh end-to-end driving judgments from camera input, which meaneth it may halt e’en when no clear cause appeareth!</i> + + + Set Your Own Key + Set Thine Own Key + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Set thine own "OpenWeatherMap" key to quicken the weather’s update rate.</b><br><br><i>Personal keys bestow 1,000 free calls each day, permitting updates each minute. The default key is shared and refresheth but every 15 minutes.</i> + + + ADD + ADD + + + Enter your "OpenWeatherMap" key + Enter thy “OpenWeatherMap” key + + + REMOVE + REMOVE thee forthwith + + + Invalid key! + Key most foul and invalid! + + + Are you sure you want to remove your key? + Art thou certain thou wouldst remove thy key? + + + TEST + PROOF + + + Testing... + A-testing... + + + Key is valid! + The key doth stand valid! + + + An error occurred: %1 + An error hath occurred: %1 + FrogPilotManageControl @@ -2230,8 +2802,16 @@ Disconnected... - CANCELLED - CANCELLED + 0 MB + 0 MB + + + Calculating... + Computing... + + + Not parked + Parked not @@ -2418,7 +2998,7 @@ Cancelling... - Cancelling… anon. + Cancelling... anon. Updating Tinygrad will delete existing Tinygrad-based driving models and need to be re-downloaded. Proceed? @@ -2444,6 +3024,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC Choose a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC + + Downloading... + Downloading... + + + Not parked + Parked not + + + Downloaded! + ’Tis downloaded! + + + All models downloaded! + All models be downloaded! + + + Download cancelled... + The download is cancell’d... + + + Download failed... + The download hath failed... + + + GitHub and GitLab are offline... + GitHub and GitLab lie stricken offline... + + + Repository unavailable + Repository unavailable → The repository is unavailable + FrogPilotModelReview @@ -2588,7 +3200,7 @@ Cancelled... - Cancelled… + Cancelled... You've hit today's request limit. @@ -2630,6 +3242,57 @@ It shall reset in %1 hours and %2 minutes. Completed! ’Tis done! + + <b>Manage your Public Mapbox Key.</b> + <b>Attend thy Public Mapbox Key.</b> + + + TEST + ASSAY + + + Remove your Public Mapbox Key? + Wilt thou remove thy Public Mapbox Key? + + + Enter your Public Mapbox Key + Prithee, enter thy Public Mapbox Key + + + Testing... + A-proving... + + + Key is valid! + The key be valid! + + + Key is invalid! + The key is most foul and invalid! + + + An error occurred: %1 + An error hath occur’d: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Govern thy Secret Mapbox Key.</b> + + + Remove your Secret Mapbox Key? + Dost thou remove thy Secret Mapbox Key? + + + Enter your Secret Mapbox Key + Prithee, enter thy Secret Mapbox Key + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FrogPilotSettingsWindow @@ -3159,6 +3822,38 @@ Developer - Most customizable settings for well-tried enthusiasts CANCEL CANCEL + + Downloading... + Downloading... + + + Idle + Idle + + + Unpacking theme... + Unpacking the theme anon... + + + Downloaded! + ’Tis downloaded! + + + Download cancelled... + The download is cancell’d... + + + Download failed... + The download hath failed... + + + Repository unavailable + Repository be unavailable + + + GitHub and GitLab are offline... + GitHub and GitLab be offline... + FrogPilotUtilitiesPanel @@ -3192,7 +3887,7 @@ Developer - Most customizable settings for well-tried enthusiasts Flashing... - Flashing… + Flashing... Flashed! @@ -3603,6 +4298,54 @@ Developer - Most customizable settings for well-tried enthusiasts comma Pedal Support comma Pedal Support + + Subaru Settings + Subaru Settings, forsooth + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>FrogPilot features for Subaru chariots.</b> + + + Stop and Go + Halt and Proceed + + + Stop and go for supported Subaru vehicles. + Stop and go for Subaru carriages that be supported. + + + Acura/Honda Settings + Acura/Honda Settings, thou noble toggles + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>FrogPilot features for Acura and Honda chariots.</b> + + + Gentle Following + Gentle Pursuit + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Doth lessen jerking in acceleration and braking whilst thou follow’st a leading chariot.</b> Most fit for stop-and-go traffic. + + + Increased Braking Force + Augmented Braking Force + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Doth raise the utmost braking force for better stoppage performance.</b> + + + Responsive Pedal at Low Speeds + Right-quick Pedal at Low Speeds + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>From a dead stand, it doth quicken thy steed, lending the throttle a sprightlier feel in city travel.</b> + FrogPilotVisualsPanel @@ -4390,7 +5133,7 @@ Developer - Most customizable settings for well-tried enthusiasts Installer Installing... - E’en now installing… + E’en now installing... @@ -4694,6 +5437,42 @@ Developer - Most customizable settings for well-tried enthusiasts %n day(s) past + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + hour + + + hours + hours + + + minute + minute + + + minutes + minutes + + + second + second + + + seconds + seconds + Reset @@ -5125,6 +5904,22 @@ This may consume up to a minute. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? This be a complete factory reset and cannot be undone. Art thou absolutely sure thou wouldst continue? + + downloading… + downloading… verily + + + checking… + verifying… + + + waiting for vehicle to go offroad... + awaiting the chariot to venture offroad... + + + finalizing update... + finalizing update... Verily, ’tis near complete. + SshControl diff --git a/selfdrive/ui/translations/main_th.ts b/selfdrive/ui/translations/main_th.ts index eb8f6a4..b7a9268 100644 --- a/selfdrive/ui/translations/main_th.ts +++ b/selfdrive/ui/translations/main_th.ts @@ -423,6 +423,22 @@ Miles ไมล์ + + ALL TIME (KONIK) + ตลอดเวลา (KONIK) + + + ALL TIME + ตลอดเวลา + + + PAST WEEK (KONIK) + สัปดาห์ที่ผ่านมา (KONIK) + + + PAST WEEK + สัปดาห์ที่ผ่านมา + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT จำกัด + + Desired: %1 + ต้องการ: %1 + + + s + + + + 1 minute + 1 นาที + + + %1 minutes + %1 นาที + + + 1 second + 1 วินาที + + + %1 seconds + %1 วินาที + FrogPilotConfirmationDialog @@ -632,7 +672,7 @@ Backing up... - กำลังสำรองข้อมูล… + กำลังสำรองข้อมูล... Compressing... @@ -694,6 +734,238 @@ Choose a backup to delete เลือกข้อมูลสำรองที่จะลบ + + FrogPilot Stats + สถิติ FrogPilot + + + <b>View your collected FrogPilot stats.</b> + <b>ดูสถิติ FrogPilot ที่คุณเก็บรวบรวม</b> + + + RESET + รีเซ็ต + + + VIEW + ดู + + + Are you sure you want to reset all of your FrogPilot stats? + คุณแน่ใจหรือไม่ว่าต้องการรีเซ็ตสถิติ FrogPilot ทั้งหมดของคุณ? + + + Reset + รีเซ็ต + + + Total Emergency Brake Alerts + การเตือนเบรกฉุกเฉินทั้งหมด + + + Time Using "Always On Lateral" + เวลาที่ใช้ "Always On Lateral" + + + Favorite Set Speed + ความเร็วที่ตั้งค่าโปรด + + + Total Disengagements + การยกเลิกทั้งหมด + + + Total Engagements + จำนวนการมีส่วนร่วมทั้งหมด + + + Time Using "Experimental Mode" + เวลาที่ใช้ “โหมดทดลอง” + + + Total Frog Chirps + จำนวนเสียงร้องกบทั้งหมด + + + Total Frog Hops + จำนวนการกระโดดของกบทั้งหมด + + + Total Drives + การขับทั้งหมด + + + Total Distance Driven + ระยะทางทั้งหมดที่ขับ + + + Total Driving Time + เวลาขับขี่ทั้งหมด + + + Total Frog Squeaks + จำนวนเสียงเอี๊ยดกบทั้งหมด + + + Total Goat Screams + จำนวนเสียงแพะร้องทั้งหมด + + + Highest Acceleration Rate + อัตราเร่งสูงสุด + + + Time Using Lateral Control + เวลาที่ใช้การควบคุมด้านข้าง + + + Longest Distance Without an Override + ระยะทางยาวที่สุดโดยไม่ต้องแทรกแซง + + + Time Using Longitudinal Control + เวลาใช้งานการควบคุมตามยาว + + + Driving Models: + โมเดลการขับขี่ + + + Month + เดือน + + + Total Overrides + จำนวนการแทรกแซงทั้งหมด + + + Time Overriding openpilot + แทนที่เวลา openpilot + + + Random Events: + เหตุการณ์สุ่ม + + + Time Stopped + เวลาหยุด + + + Time Spent at Stoplights + เวลาที่ใช้รอไฟแดง + + + Total Time Tracked + เวลาที่ติดตามทั้งหมด + + + UwUs + UwUs + + + Loch Ness Encounters + การเผชิญหน้าทะเลสาบล็อกเนส + + + Visits to 1955 + การเข้าชมถึง 1955 + + + Deja Vu Moments + ช่วงเดจาวู + + + Internet Explorer Weeeeeeees + Internet Explorer วี๊~~~~~ + + + HAL 9000 Denials + การปฏิเสธของ HAL 9000 + + + openpilot Crashes + openpilot ขัดข้อง + + + This Is Fine Moments + ช่วงเวลาที่ทุกอย่างยังโอเค + + + To Be Continued Moments + ช่วงเวลาที่ต้องติดตามต่อ + + + Noices + เสียงรบกวน + + + Attempted Frog Murders + พยายามฆ่ากบ + + + Total Mail Received + อีเมลที่ได้รับทั้งหมด + + + kilometer + กิโลเมตร + + + kilometers + กิโลเมตร + + + mile + ไมล์ + + + miles + ไมล์ + + + day + วัน + + + days + วัน + + + hour + ชั่วโมง + + + hours + ชั่วโมง + + + minute + นาที + + + minutes + นาที + + + km/h + กม./ชม. + + + mph + ไมล์/ชม. + + + m/s² + ม./วินาที² + + + Total + รวม + + + % of + % ของ + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ วินาที + + FrogPilotDriveSummary + + Random Events Summary + สรุปเหตุการณ์สุ่ม + + + Drive Summary + สรุปการขับขี่ + + + UwUs + UwUs + + + Loch Ness Encounters + การเผชิญหน้าที่ทะเลสาบเนสส์ + + + Visits to 1955 + จำนวนการเข้าชมถึง 1955 + + + Deja Vu Moments + ช่วงเดจาวู + + + Internet Explorer Weeeeeeees + Internet Explorer วีีีีีีีีีีีีส์ + + + HAL 9000 Denials + การปฏิเสธของ HAL 9000 + + + openpilot Crashes + openpilot ขัดข้อง + + + This Is Fine Moments + ช่วงเวลา "ทุกอย่างปกติดี" + + + To Be Continued Moments + ช่วงต่อเนื่องที่จะดำเนินต่อไป + + + Noices + เสียงดัง + + + Attempted Frog Murders + พยายามฆ่าเม่นอ๊บ + + + Total Mail Received + จดหมายที่ได้รับทั้งหมด + + + % of Drive With openpilot Engaged + % ของการขับขี่ที่เปิดใช้ openpilot + + + Drive Distance + ระยะทางขับขี่ + + + Drive Time + เวลาในการขับขี่ + + + % of Drive In "Experimental Mode" + % ของการขับขี่ใน "โหมดทดลองใช้" + + + No Random Events Played! + ไม่มีเหตุการณ์สุ่มถูกเล่น! + + + kilometer + กิโลเมตร + + + kilometers + กิโลเมตร + + + mile + ไมล์ + + + miles + ไมล์ + + + day + วัน + + + days + วัน + + + hour + ชั่วโมง + + + hours + ชั่วโมง + + + minute + นาที + + + minutes + นาที + + FrogPilotLateralPanel @@ -1291,10 +1682,6 @@ Predicted Stop In คาดการณ์หยุดใน - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>สลับเป็น "โหมดทดลอง" เมื่อ openpilot คาดการณ์ว่าจะต้องหยุดภายในเวลาที่กำหนด</b> มักจะทริกเกอร์เมื่อโมเดล "เห็น" ไฟแดงหรือป้ายหยุดข้างหน้า<br><br><i><b>ข้อจำกัดความรับผิด</b>: openpilot ไม่ได้ตรวจจับสัญญาณไฟจราจรหรือป้ายหยุดโดยตรง ใน "โหมดทดลอง" openpilot ตัดสินใจขับขี่แบบ end-to-end จากภาพจากกล้อง ซึ่งหมายความว่าอาจหยุดแม้ไม่มีเหตุผลชัดเจน</i> - Turn Signal Below ไฟเลี้ยวด้านล่าง @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs หยุดบังคับที่ไฟ/ป้ายหยุดที่ "ตรวจพบ" - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>บังคับให้ openpilot หยุดทุกครั้งที่โมเดลการขับขี่ “ตรวจพบ” ไฟแดงหรือป้ายหยุด</b><br><br><i><b>ข้อจำกัดความรับผิดชอบ</b>: openpilot ไม่ได้ตรวจจับสัญญาณไฟจราจรหรือป้ายหยุดโดยตรง ใน “โหมดทดลอง (Experimental Mode)” openpilot ตัดสินใจขับขี่แบบปลายทางถึงปลายทางจากภาพกล้อง ซึ่งหมายความว่าอาจหยุดแม้เมื่อไม่มีเหตุผลชัดเจน</i> - Increase Stopped Distance by: เพิ่มระยะหยุดโดย: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>สลับพฤติกรรมปุ่มควบคุมครูซ</b> เพื่อให้การกดสั้นเพิ่มความเร็วที่ตั้งไว้ทีละ 5 แทน 1 + + Increase Following Distance by: + เพิ่มระยะห่างการติดตามโดย: + + + Reduce Acceleration by: + ลดความเร่งลงโดย: + + + Reduce Speed in Curves by: + ลดความเร็วในทางโค้งโดย: + + + Snow + หิมะ + + + <b>Driving adjustments for snowy conditions.</b> + <b>การปรับการขับขี่สำหรับสภาพหิมะ</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>เพิ่มระยะเผื่อด้านหลังรถคันหน้าเมื่อมีหิมะ</b> เพิ่มเพื่อให้มีระยะมากขึ้น ลดเพื่อให้ช่องว่างแคบลง + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>เพิ่มระยะเผื่อพิเศษเมื่อหยุดหลังรถคันหน้าในหิมะ</b> เพิ่มเพื่อให้มีพื้นที่มากขึ้น; ลดเพื่อให้ช่องว่างสั้นลง + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>ลดอัตราเร่งสูงสุดเมื่อมีหิมะ</b> เพิ่มเพื่อให้การออกตัวนุ่มนวลขึ้น; ลดเพื่อให้ออกตัวได้เร็วขึ้นแต่เสถียรน้อยลง + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>ลดความเร็วที่ต้องการขณะขับผ่านโค้งในหิมะ</b> เพิ่มเพื่อการเข้าโค้งที่ปลอดภัยและนุ่มนวลขึ้น; ลดเพื่อการขับขี่ที่ดุดันมากขึ้นในโค้ง. + Speed Limit Controller ตัวควบคุมจำกัดความเร็ว @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>พฤติกรรมการตามที่เลียนแบบผู้ขับขี่มนุษย์</b> โดยปิดช่องว่างด้านหลังรถที่เร็วกว่าเพื่อออกตัวได้เร็วขึ้น และปรับระยะห่างที่ต้องการแบบไดนามิกเพื่อการเบรกที่นุ่มนวลและมีประสิทธิภาพมากขึ้น + + Weather Condition Offsets + การชดเชยสภาพอากาศ + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>ปรับพฤติกรรมการขับขี่อัตโนมัติตามสภาพอากาศแบบเรียลไทม์</b> ช่วยคงความสบายและความปลอดภัยในสภาพทัศนวิสัยต่ำ ฝน หรือหิมะ + + + Low Visibility + ทัศนวิสัยต่ำ + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>การขับขี่ปรับสำหรับสภาพหมอก ควัน หรือสภาพที่ทัศนวิสัยต่ำอื่นๆ</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>เพิ่มระยะห่างด้านหลังรถคันหน้าเมื่อทัศนวิสัยต่ำ</b> เพิ่มเพื่อเว้นระยะมากขึ้น; ลดเพื่อให้ช่องว่างแคบลง + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>เพิ่มระยะกันชนพิเศษเมื่อหยุดอยู่หลังรถคันหน้าในสภาพทัศนวิสัยต่ำ</b> เพิ่มเพื่อเว้นระยะมากขึ้น; ลดเพื่อให้ช่องว่างสั้นลง. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>ลดการเร่งสูงสุดเมื่อทัศนวิสัยต่ำ</b> เพิ่มค่าสำหรับการออกตัวนุ่มนวล ลดค่าสำหรับการออกตัวที่รวดเร็วกว่าแต่เสถียรน้อยกว่า + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>ลดความเร็วที่ต้องการขณะขับผ่านโค้งในสภาพทัศนวิสัยต่ำ</b> เพิ่มเพื่อให้เลี้ยวได้ปลอดภัยและนุ่มนวลขึ้น; ลดเพื่อการขับที่ดุดันมากขึ้นในโค้ง. + + + Rain + ฝน + + + <b>Driving adjustments for rainy conditions.</b> + <b>ปรับการขับขี่สำหรับสภาพฝนตก</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>เพิ่มระยะห่างด้านหลังรถคันหน้าเมื่อฝนตก</b> เพิ่มเพื่อเว้นระยะมากขึ้น; ลดเพื่อช่องว่างแคบลง + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>เพิ่มระยะเผื่อเมื่อจอดหลังรถคันหน้าในฝน</b> เพิ่มเพื่อให้มีพื้นที่มากขึ้น ลดเพื่อให้ช่องว่างสั้นลง + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>ลดอัตราเร่งสูงสุดเมื่อฝนตก</b> เพิ่มเพื่อการออกตัวนุ่มนวลขึ้น; ลดเพื่อการออกตัวเร็วขึ้นแต่เสถียรภาพน้อยลง + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>ลดความเร็วที่ต้องการเมื่อขับผ่านโค้งในฝน</b> เพิ่มเพื่อให้เลี้ยวปลอดภัย นุ่มนวลขึ้น; ลดเพื่อการขับที่ดุดันมากขึ้นในโค้ง. + + + Rainstorms + พายุฝน + + + <b>Driving adjustments for rainstorms.</b> + <b>การขับขี่ที่ปรับสำหรับพายุฝน</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>เพิ่มระยะห่างด้านหลังรถคันหน้าในช่วงพายุฝน</b> เพิ่มเพื่อเว้นระยะมากขึ้น; ลดเพื่อให้ช่องว่างแคบลง + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>เพิ่มระยะเผื่อเมื่อหยุดอยู่หลังรถคันหน้าในพายุฝน</b> เพิ่มเพื่อให้มีระยะมากขึ้น; ลดเพื่อให้ช่องว่างสั้นลง + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>ลดความเร่งสูงสุดเมื่อเกิดพายุฝน</b> เพิ่มเพื่อออกตัวนุ่มนวลขึ้น; ลดเพือ่ออกตัวเร็วขึ้นแต่เสถียรน้อยลง + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>ลดความเร็วที่ต้องการเมื่อขับผ่านโค้งท่ามกลางพายุฝน</b> เพิ่มเพื่อการเข้าโค้งที่ปลอดภัยและนุ่มนวล ลดเพื่อการขับขี่ในโค้งที่ดุดันมากขึ้น + + + Human-Like Lane Changes + การเปลี่ยนเลนเหมือนมนุษย์ + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>พฤติกรรมเปลี่ยนเลนที่เลียนแบบผู้ขับขี่มนุษย์</b> โดยคาดการณ์และติดตามรถในเลนข้างเคียงระหว่างการเปลี่ยนเลน + + + "Detected" Stop Lights/Signs + ตรวจพบสัญญาณไฟ/ป้ายหยุด + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>สลับไปยัง "โหมดทดลอง" เมื่อใดก็ตามที่แบบจำลองการขับขี่ "ตรวจพบ" ไฟแดงหรือป้ายหยุด</b><br><br><i><b>ข้อจำกัดความรับผิดชอบ</b>: openpilot ไม่ได้ตรวจจับสัญญาณไฟจราจรหรือป้ายหยุดโดยตรง ใน "โหมดทดลอง" openpilot ตัดสินใจขับขี่แบบ end-to-end จากข้อมูลกล้อง ซึ่งหมายความว่าอาจหยุดแม้ไม่มีเหตุผลชัดเจน!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>สลับไปใช้ "โหมดทดลอง" เมื่อ openpilot คาดการณ์ว่าจะต้องหยุดภายในเวลาที่ตั้งไว้</b> โดยปกติจะเกิดขึ้นเมื่อโมเดล “เห็น” ไฟแดงหรือป้ายหยุดด้านหน้า<br><br><i><b>ข้อจำกัดความรับผิดชอบ</b>: openpilot ไม่ได้ตรวจจับสัญญาณไฟจราจรหรือป้ายหยุดโดยตรง ใน “โหมดทดลอง” openpilot ตัดสินใจขับขี่แบบ end-to-end จากภาพกล้อง ซึ่งหมายความว่าอาจหยุดแม้ไม่มีเหตุผลชัดเจน!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>บังคับให้ openpilot หยุดทุกครั้งที่แบบจำลองการขับขี่ “ตรวจพบ” ไฟแดงหรือป้ายหยุด</b><br><br><i><b>ข้อจำกัดความรับผิดชอบ</b>: openpilot ไม่ได้ตรวจจับสัญญาณไฟจราจรหรือป้ายหยุดโดยตรง ใน “โหมดทดลอง” openpilot ตัดสินใจขับขี่แบบ end-to-end จากภาพกล้อง ซึ่งหมายความว่ามันอาจหยุดแม้ไม่มีเหตุผลชัดเจน!</i> + + + Set Your Own Key + ตั้งคีย์ของคุณเอง + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>ตั้งค่า "OpenWeatherMap" คีย์ของคุณเองเพื่อเพิ่มความถี่ในการอัปเดตสภาพอากาศ</b><br><br><i>คีย์ส่วนบุคคลให้สิทธิ์ใช้งานฟรี 1,000 ครั้งต่อวัน อนุญาตให้อัปเดตได้ทุกนาที คีย์เริ่มต้นถูกใช้งานร่วมกันและอัปเดตทุก 15 นาทีเท่านั้น</i> + + + ADD + เพิ่ม + + + Enter your "OpenWeatherMap" key + ป้อนคีย์ "OpenWeatherMap" ของคุณ + + + REMOVE + เอาออก + + + Invalid key! + คีย์ไม่ถูกต้อง! + + + Are you sure you want to remove your key? + คุณแน่ใจหรือไม่ว่าต้องการลบกุญแจของคุณ? + + + TEST + ทดสอบ + + + Testing... + กำลังทดสอบ... + + + Key is valid! + คีย์ถูกต้อง! + + + An error occurred: %1 + เกิดข้อผิดพลาด: %1 + FrogPilotManageControl @@ -2226,8 +2793,16 @@ ออฟไลน์... - CANCELLED - ยกเลิก + 0 MB + 0 MB + + + Calculating... + กำลังคำนวณ... + + + Not parked + ไม่ได้จอด @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC เลือกโมเดล — 🗺️ = นำทาง | 📡 = เรดาร์ | 👀 = VOACC + + Downloading... + กำลังดาวน์โหลด... + + + Not parked + ไม่ได้จอดรถ + + + Downloaded! + ดาวน์โหลดแล้ว! + + + All models downloaded! + ดาวน์โหลดโมเดลทั้งหมดแล้ว! + + + Download cancelled... + ยกเลิกการดาวน์โหลดแล้ว... + + + Download failed... + ดาวน์โหลดล้มเหลว... + + + GitHub and GitLab are offline... + GitHub และ GitLab ออฟไลน์อยู่... + + + Repository unavailable + ที่เก็บข้อมูลไม่พร้อมใช้งาน + FrogPilotModelReview @@ -2626,6 +3233,57 @@ It will reset in %1 hours and %2 minutes. Completed! เสร็จสิ้น! + + <b>Manage your Public Mapbox Key.</b> + <b>จัดการคีย์ Mapbox สาธารณะของคุณ</b> + + + TEST + ทดสอบ + + + Remove your Public Mapbox Key? + ลบคีย์ Mapbox สาธารณะของคุณหรือไม่? + + + Enter your Public Mapbox Key + ป้อนคีย์ Mapbox สาธารณะของคุณ + + + Testing... + กำลังทดสอบ... + + + Key is valid! + คีย์ถูกต้อง! + + + Key is invalid! + กุญแจไม่ถูกต้อง! + + + An error occurred: %1 + เกิดข้อผิดพลาด: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>จัดการคีย์ลับ Mapbox ของคุณ</b> + + + Remove your Secret Mapbox Key? + ลบ Secret Mapbox Key ของคุณหรือไม่? + + + Enter your Secret Mapbox Key + ป้อน Secret Mapbox Key ของคุณ + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS: %1 | ต่ำสุด: %2 | สูงสุด: %3 | เฉลี่ย: %4 + FrogPilotSettingsWindow @@ -3153,6 +3811,38 @@ Developer - Highly customizable settings for seasoned enthusiasts CANCEL ยกเลิก + + Downloading... + กำลังดาวน์โหลด... + + + Idle + ว่าง + + + Unpacking theme... + กำลังแตกไฟล์ธีม... + + + Downloaded! + ดาวน์โหลดแล้ว! + + + Download cancelled... + ยกเลิกการดาวน์โหลดแล้ว... + + + Download failed... + ดาวน์โหลดล้มเหลว... + + + Repository unavailable + ที่เก็บไม่พร้อมใช้งาน + + + GitHub and GitLab are offline... + GitHub และ GitLab ออฟไลน์อยู่... + FrogPilotUtilitiesPanel @@ -3186,7 +3876,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Flashing... - กำลังกะพริบ… + กำลังกะพริบ... Flashed! @@ -3595,6 +4285,54 @@ Developer - Highly customizable settings for seasoned enthusiasts comma Pedal Support รองรับ comma Pedal + + Subaru Settings + การตั้งค่า Subaru + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>คุณสมบัติ FrogPilot สำหรับรถยนต์ Subaru</b> + + + Stop and Go + หยุดและเคลื่อนตัว + + + Stop and go for supported Subaru vehicles. + ฟังก์ชันหยุดและออกตัวสำหรับรถ Subaru ที่รองรับ. + + + Acura/Honda Settings + การตั้งค่า Acura/Honda + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>ฟีเจอร์ FrogPilot สำหรับรถยนต์ Acura และ Honda</b> + + + Gentle Following + การติดตามอย่างนุ่มนวล + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>ลดการเร่งและการเบรกที่กระตุกเมื่อขับตามรถคันหน้า</b> เหมาะสำหรับการจราจรแบบหยุด-เคลื่อนตัว + + + Increased Braking Force + แรงเบรกเพิ่มขึ้น + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>เพิ่มแรงเบรกสูงสุดเพื่อให้หยุดได้มีประสิทธิภาพยิ่งขึ้น</b> + + + Responsive Pedal at Low Speeds + แป้นคันเร่งตอบสนองที่ความเร็วต่ำ + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>ปรับปรุงอัตราเร่งจากหยุดนิ่งเพื่อให้คันเร่งตอบสนองมากขึ้นในการขับขี่ในเมือง</b> + FrogPilotVisualsPanel @@ -4680,6 +5418,42 @@ Developer - Highly customizable settings for seasoned enthusiasts FrogPilot FrogPilot + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + ชั่วโมง + + + hours + ชั่วโมง + + + minute + นาที + + + minutes + นาที + + + second + วินาที + + + seconds + วินาที + Reset @@ -5111,6 +5885,22 @@ This may take up to a minute. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? นี่เป็นการรีเซ็ตเป็นค่าโรงงานแบบสมบูรณ์และไม่สามารถยกเลิกได้ คุณแน่ใจอย่างยิ่งว่าต้องการดำเนินการต่อหรือไม่? + + downloading… + กำลังดาวน์โหลด… + + + checking… + กำลังตรวจสอบ… + + + waiting for vehicle to go offroad... + กำลังรอให้รถออกนอกถนน... + + + finalizing update... + กำลังสรุปการอัปเดต... + SshControl diff --git a/selfdrive/ui/translations/main_tr.ts b/selfdrive/ui/translations/main_tr.ts index 1fe2bda..2cc27d1 100644 --- a/selfdrive/ui/translations/main_tr.ts +++ b/selfdrive/ui/translations/main_tr.ts @@ -423,6 +423,22 @@ Miles Mil + + ALL TIME (KONIK) + TÜM ZAMAN (KONIK) + + + ALL TIME + HER ZAMAN + + + PAST WEEK (KONIK) + GEÇEN HAFTA (KONIK) + + + PAST WEEK + GEÇEN HAFTA + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT SINIR + + Desired: %1 + İstenen: %1 + + + s + s + + + 1 minute + 1 dakika + + + %1 minutes + %1 dakika + + + 1 second + 1 saniye + + + %1 seconds + %1 saniye + FrogPilotConfirmationDialog @@ -694,6 +734,238 @@ Choose a backup to delete Silinecek bir yedek seçin + + FrogPilot Stats + FrogPilot İstatistikleri + + + <b>View your collected FrogPilot stats.</b> + <b>Topladığınız FrogPilot istatistiklerini görüntüleyin.</b> + + + RESET + SIFIRLA + + + VIEW + GÖRÜNÜM + + + Are you sure you want to reset all of your FrogPilot stats? + Tüm FrogPilot istatistiklerinizi sıfırlamak istediğinizden emin misiniz? + + + Reset + Sıfırla + + + Total Emergency Brake Alerts + Toplam Acil Fren Uyarıları + + + Time Using "Always On Lateral" + "Her Zaman Açık Yanal" Kullanım Süresi + + + Favorite Set Speed + Favori Ayarlı Hız + + + Total Disengagements + Toplam Devre Dışı Bırakmalar + + + Total Engagements + Toplam Etkileşimler + + + Time Using "Experimental Mode" + "Deneysel Mod" Kullanım Süresi + + + Total Frog Chirps + Toplam Kurbağa Vıraklaması + + + Total Frog Hops + Toplam Kurbağa Sıçramaları + + + Total Drives + Toplam Sürüşler + + + Total Distance Driven + Sürülen Toplam Mesafe + + + Total Driving Time + Toplam Sürüş Süresi + + + Total Frog Squeaks + Toplam Kurbağa Ciyaklamaları + + + Total Goat Screams + Toplam Keçi Çığlıkları + + + Highest Acceleration Rate + En Yüksek Hızlanma Oranı + + + Time Using Lateral Control + Yanal Kontrol Kullanım Süresi + + + Longest Distance Without an Override + Bir Müdahale Olmadan En Uzun Mesafe + + + Time Using Longitudinal Control + Boylamsal Kontrolü Kullanma Süresi + + + Driving Models: + Sürüş Modelleri: + + + Month + Ay + + + Total Overrides + Toplam Geçersiz Kılmalar + + + Time Overriding openpilot + openpilot’ı Zamanla Geçersiz Kılma + + + Random Events: + Rastgele Olaylar + + + Time Stopped + Zaman Durduruldu + + + Time Spent at Stoplights + Trafik Işıklarında Harcanan Süre + + + Total Time Tracked + Toplam İzlenen Süre + + + UwUs + UwUs + + + Loch Ness Encounters + Loch Ness Karşılaşmaları + + + Visits to 1955 + 1955’e ziyaretler + + + Deja Vu Moments + Déjà Vu Anları + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + HAL 9000 Reddetmeler + + + openpilot Crashes + openpilot Çökmeleri + + + This Is Fine Moments + Bu Gayet İyi Anları + + + To Be Continued Moments + Devamı Geliyor Anlar + + + Noices + Gürültüler + + + Attempted Frog Murders + Teşebbüs Edilen Kurbağa Cinayetleri + + + Total Mail Received + Toplam Alınan Posta + + + kilometer + kilometre + + + kilometers + kilometre + + + mile + mil + + + miles + mil + + + day + gün + + + days + günler + + + hour + saat + + + hours + saat + + + minute + dakika + + + minutes + dakika + + + km/h + km/s + + + mph + mph + + + m/s² + m/s² + + + Total + Toplam + + + % of + % of + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ saniye + + FrogPilotDriveSummary + + Random Events Summary + Rastgele Olaylar Özeti + + + Drive Summary + Sürüş Özeti + + + UwUs + UwUs + + + Loch Ness Encounters + Loch Ness Karşılaşmaları + + + Visits to 1955 + 1955'e ziyaretler + + + Deja Vu Moments + Déjà Vu Anları + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + HAL 9000 Reddetmeleri + + + openpilot Crashes + openpilot Çöküyor + + + This Is Fine Moments + Bu Tamam Anları + + + To Be Continued Moments + Devam Edecek Anları + + + Noices + Gürültüler + + + Attempted Frog Murders + Kurbağa Cinayetine Teşebbüsler + + + Total Mail Received + Alınan Toplam Posta + + + % of Drive With openpilot Engaged + openpilot Etkin Olarak Sürüşün %’si + + + Drive Distance + Sürüş Mesafesi + + + Drive Time + Sürüş Süresi + + + % of Drive In "Experimental Mode" + Sürüşlerin %’i "Deneysel Mod"da + + + No Random Events Played! + Rastgele Olay Çalınmadı! + + + kilometer + kilometre + + + kilometers + kilometre + + + mile + mil + + + miles + mil + + + day + gün + + + days + günler + + + hour + saat + + + hours + saat + + + minute + dakika + + + minutes + dakika + + FrogPilotLateralPanel @@ -1291,10 +1682,6 @@ Predicted Stop In Tahmini Durma Süresi - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>openpilot belirlenen süre içinde bir duruş öngördüğünde "Deneysel Mod"a geçin.</b> Bu genellikle model ileride bir kırmızı ışık veya dur işareti "gördüğünde" tetiklenir.<br><br><i><b>Feragat</b>: openpilot trafik ışıklarını veya dur işaretlerini açıkça tespit etmez. "Deneysel Mod"da, openpilot kamera girdisinden uçtan uca sürüş kararları verir; bu, açık bir neden olmasa bile durabileceği anlamına gelir.</i> - Turn Signal Below Sinyal Aşağıda @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs “Tespit Edilen” Trafik Işıkları/Levhalarında Zorla Dur - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>Sürüş modeli bir kırmızı ışık veya dur işaretini “tespit ettiğinde” openpilot’u durmaya zorla.</b><br><br><i><b>Feragat</b>: openpilot trafik ışıklarını veya dur işaretlerini açıkça tespit etmez. “Deneysel Mod”da, openpilot kamera girişinden uçtan uca sürüş kararları verir; bu, açık bir neden olmasa bile durabileceği anlamına gelir.</i> - Increase Stopped Distance by: Duran Mesafeyi Artır: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>Hız sabitleyici düğmesinin davranışını tersine çevirin</b>, böylece kısa basışta ayarlı hız 1 yerine 5 artırılır. + + Increase Following Distance by: + Takip Mesafesini Artır: + + + Reduce Acceleration by: + Hızlanmayı şu kadar azalt: + + + Reduce Speed in Curves by: + Virajlarda Hızı Azalt: + + + Snow + Kar + + + <b>Driving adjustments for snowy conditions.</b> + <b>Karlı koşullar için sürüş ayarlamaları.</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Karda öndeki araçların arkasında ekstra mesafe bırakın.</b> Daha fazla mesafe için artırın; daha dar boşluklar için azaltın. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Karda araçların arkasında dururken ekstra boşluk bırakın.</b> Daha fazla alan için artırın; daha kısa boşluklar için azaltın. + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Karda azami ivmeyi düşürün.</b> Yumuşak kalkışlar için artırın; daha hızlı ancak daha az stabil kalkışlar için azaltın. + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Karda virajlardan geçerken istenen hızı azaltın.</b> Daha güvenli, daha yumuşak dönüşler için artırın; virajlarda daha atak sürüş için azaltın. + Speed Limit Controller Hız Sınırı Denetleyicisi @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>İnsan sürücüleri taklit eden takip davranışı</b>: Daha hızlı araçların arkasındaki boşlukları kapatarak daha hızlı kalkışlar ve daha yumuşak, daha verimli frenleme için istenen takip mesafesini dinamik olarak ayarlama. + + Weather Condition Offsets + Hava Koşulu Ofsetleri + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Gerçek zamanlı hava durumuna göre sürüş davranışını otomatik ayarla.</b> Düşük görüş, yağmur veya karda konforu ve güvenliği korumaya yardımcı olur. + + + Low Visibility + Düşük Görünürlük + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Sis, pus veya diğer düşük görüş koşulları için sürüş ayarlamaları.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Düşük görüşte öndeki araçlarla araya ekstra mesafe bırakın.</b> Daha fazla mesafe için artırın; daha dar boşluklar için azaltın. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>Düşük görüşte araçların arkasında dururken fazladan tampon mesafe bırakın.</b> Daha fazla alan için artırın; daha kısa boşluklar için azaltın. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Düşük görüşte maksimum ivmeyi azaltın.</b> Daha yumuşak kalkışlar için artırın; daha hızlı ancak daha az stabil kalkışlar için azaltın. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Düşük görüşte virajlardan geçerken hedef hızı düşürün.</b> Daha güvenli, yumuşak dönüşler için artırın; virajlarda daha atak sürüş için azaltın. + + + Rain + Yağmur + + + <b>Driving adjustments for rainy conditions.</b> + <b>Yağışlı koşullar için sürüş ayarlamaları.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Yağmurda öndeki araçların arkasında ekstra boşluk bırakın.</b> Daha fazla boşluk için artırın; daha dar aralıklar için azaltın. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>Yağmurda araçların arkasında dururken ekstra boşluk bırakın.</b> Daha fazla alan için artırın; daha kısa aralıklar için azaltın. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Yağmurda maksimum ivmeyi azaltın.</b> Daha yumuşak kalkışlar için artırın; daha hızlı ancak daha az stabil kalkışlar için azaltın. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Yağmurda virajlardan geçerken istenen hızı düşürün.</b> Daha güvenli, daha yumuşak dönüşler için artırın; virajlarda daha agresif sürüş için azaltın. + + + Rainstorms + Şiddetli yağışlar + + + <b>Driving adjustments for rainstorms.</b> + <b>Şiddetli yağışlar için sürüş ayarları.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>Şiddetli yağmurda öndeki araçlarla araya ekstra mesafe bırakın.</b> Daha fazla mesafe için artırın; daha dar boşluklar için azaltın. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>Şiddetli yağmurda araçların arkasında dururken ekstra tampon mesafe bırakın.</b> Daha fazla alan için artırın; daha kısa boşluklar için azaltın. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Şiddetli yağmurda maksimum ivmeyi düşürün.</b> Daha yumuşak kalkışlar için artırın; daha hızlı ancak daha az kararlı kalkışlar için azaltın. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Fırtınalı yağmurda virajlardan geçerken istenen hızı düşürün.</b> Daha güvenli, yumuşak dönüşler için artırın; virajlarda daha agresif sürüş için azaltın. + + + Human-Like Lane Changes + İnsan Benzeri Şerit Değiştirme + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>İnsan sürücülerini taklit eden şerit değiştirme davranışı</b>; şerit değişimleri sırasında bitişik araçları öngörerek ve takip ederek. + + + "Detected" Stop Lights/Signs + "Algılanan" Trafik Lambaları/Levhalar + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Sürüş modeli bir kırmızı ışık veya dur işareti "algıladığında" "Deneysel Mod"a geç.</b><br><br><i><b>Feragat</b>: openpilot trafik ışıklarını veya dur işaretlerini açıkça algılamaz. "Deneysel Mod"da openpilot, kamera girdisinden uçtan uca sürüş kararları verir; bu da net bir sebep yokken bile durabileceği anlamına gelir!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>openpilot ayarlanan süre içinde bir duruş öngördüğünde "Deneysel Mod"a geçin.</b> Bu genellikle model ileride kırmızı ışık veya dur işareti "gördüğünde" tetiklenir.<br><br><i><b>Feragat</b>: openpilot trafik ışıklarını veya dur işaretlerini açıkça tespit etmez. "Deneysel Mod"da, openpilot kamera girdisinden uçtan uca sürüş kararları verir; bu da ortada net bir sebep yokken bile durabileceği anlamına gelir!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Sürüş modeli bir kırmızı ışığı veya dur işaretini “tespit ettiğinde” openpilot’u durmaya zorla.</b><br><br><i><b>Feragat</b>: openpilot trafik ışıklarını veya dur işaretlerini açıkça tespit etmez. “Deneysel Mod”da openpilot, kamera girişinden uçtan uca sürüş kararları verir; bu da, açık bir neden olmasa bile durabileceği anlamına gelir!</i> + + + Set Your Own Key + Kendi Anahtarınızı Ayarlayın + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Hava durumu güncelleme hızını artırmak için kendi "OpenWeatherMap" anahtarınızı ayarlayın.</b><br><br><i>Kişisel anahtarlar günde 1.000 ücretsiz çağrı sağlar ve her dakika güncellemeye izin verir. Varsayılan anahtar ortaktır ve yalnızca her 15 dakikada bir günceller.</i> + + + ADD + EKLE + + + Enter your "OpenWeatherMap" key + "OpenWeatherMap" anahtarınızı girin + + + REMOVE + KALDIR + + + Invalid key! + Geçersiz anahtar! + + + Are you sure you want to remove your key? + Anahtarınızı kaldırmak istediğinizden emin misiniz? + + + TEST + TEST + + + Testing... + Test ediliyor... + + + Key is valid! + Anahtar geçerli! + + + An error occurred: %1 + Bir hata oluştu: %1 + FrogPilotManageControl @@ -2226,8 +2793,16 @@ Çevrimdışı... - CANCELLED - İPTAL EDİLDİ + 0 MB + 0 MB + + + Calculating... + Hesaplanıyor... + + + Not parked + Park halinde değil @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC Bir Model Seç — 🗺️ = Navigasyon | 📡 = Radar | 👀 = VOACC + + Downloading... + İndiriliyor... + + + Not parked + Park halinde değil + + + Downloaded! + İndirildi! + + + All models downloaded! + Tüm modeller indirildi! + + + Download cancelled... + İndirme iptal edildi... + + + Download failed... + İndirme başarısız oldu... + + + GitHub and GitLab are offline... + GitHub ve GitLab çevrimdışı... + + + Repository unavailable + Depo kullanılamıyor + FrogPilotModelReview @@ -2625,6 +3232,57 @@ It will reset in %1 hours and %2 minutes. Completed! Tamamlandı! + + <b>Manage your Public Mapbox Key.</b> + <b>Genel Mapbox Anahtarınızı yönetin.</b> + + + TEST + TEST + + + Remove your Public Mapbox Key? + Genel Mapbox Anahtarınızı kaldırmak istiyor musunuz? + + + Enter your Public Mapbox Key + Genel Mapbox Anahtarınızı girin + + + Testing... + Test ediliyor... + + + Key is valid! + Anahtar geçerli! + + + Key is invalid! + Anahtar geçersiz! + + + An error occurred: %1 + Bir hata oluştu: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Gizli Mapbox Anahtarınızı yönetin.</b> + + + Remove your Secret Mapbox Key? + Gizli Mapbox Anahtarınızı kaldırmak istiyor musunuz? + + + Enter your Secret Mapbox Key + Gizli Mapbox Anahtarınızı girin + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS: %1 | Min: %2 | Maks: %3 | Ort: %4 + FrogPilotSettingsWindow @@ -3152,6 +3810,38 @@ Geliştirici - Tecrübeli meraklılar için yüksek özelleştirilebilir ayarlar CANCEL İPTAL + + Downloading... + İndiriliyor... + + + Idle + Boşta + + + Unpacking theme... + Tema açılıyor... + + + Downloaded! + İndirildi! + + + Download cancelled... + İndirme iptal edildi... + + + Download failed... + İndirme başarısız oldu... + + + Repository unavailable + Depo kullanılamıyor + + + GitHub and GitLab are offline... + GitHub ve GitLab çevrimdışı... + FrogPilotUtilitiesPanel @@ -3594,6 +4284,54 @@ Geliştirici - Tecrübeli meraklılar için yüksek özelleştirilebilir ayarlar comma Pedal Support comma Pedal Desteği + + Subaru Settings + Subaru Ayarları + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>Subaru araçları için FrogPilot özellikleri.</b> + + + Stop and Go + Dur-kalk + + + Stop and go for supported Subaru vehicles. + Desteklenen Subaru araçlarında dur-kalk. + + + Acura/Honda Settings + Acura/Honda Ayarları + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>Acura ve Honda araçları için FrogPilot özellikleri.</b> + + + Gentle Following + Nazik Takip + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Öndeki aracı takip ederken sarsıntılı hızlanma ve frenlemeyi azaltır.</b> Dur-kalk trafikte idealdir. + + + Increased Braking Force + Artırılmış Frenleme Kuvveti + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Daha iyi durma performansı için maksimum frenleme kuvvetini artırır.</b> + + + Responsive Pedal at Low Speeds + Düşük Hızlarda Tepkili Pedal + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>Şehir içi sürüşte daha duyarlı bir gaz tepkisi için duruştan kalkışta ivmeyi artırır.</b> + FrogPilotVisualsPanel @@ -4679,6 +5417,42 @@ Geliştirici - Tecrübeli meraklılar için yüksek özelleştirilebilir ayarlar FrogPilot FrogPilot + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + saat + + + hours + saat + + + minute + dakika + + + minutes + dakika + + + second + saniye + + + seconds + saniye + Reset @@ -5110,6 +5884,22 @@ Bu işlem bir dakika kadar sürebilir. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? Bu işlem tam bir fabrika sıfırlamasıdır ve geri alınamaz. Devam etmek istediğinizden kesinlikle emin misiniz? + + downloading… + indiriliyor… + + + checking… + kontrol ediliyor… + + + waiting for vehicle to go offroad... + aracın yoldan çıkmasını bekleniyor..." + + + finalizing update... + güncelleme tamamlanıyor... + SshControl diff --git a/selfdrive/ui/translations/main_uk.ts b/selfdrive/ui/translations/main_uk.ts new file mode 100644 index 0000000..7505c77 --- /dev/null +++ b/selfdrive/ui/translations/main_uk.ts @@ -0,0 +1,6195 @@ + + + + + AbstractAlert + + Close + Закрити + + + Snooze Update + Відтермінувати оновлення + + + Reboot and Update + Перезав. і онови + + + + AdvancedNetworking + + Back + Назад + + + Off + Вимк. + + + Always + Завжди + + + Only Onroad + В дор. + + + Until Reboot + До перезав. + + + Enable Tethering + Ввімкнути роздачу + + + Allow tethering with your data SIM and keep it active either while driving or continuously. + Дозвольте точку доступу за допомогою SIM-карти з даними та залишайте її активною під час руху або постійно. + + + Tethering Password + Пароль точки доступу + + + EDIT + Редагувати + + + Enter new tethering password + Ввведіть новий пароль точки доступу + + + IP Address + IP Адреса + + + Enable Roaming + Ввімкнути роумінг + + + APN Setting + Налаштування APN + + + Enter APN + Введіть APN + + + leave blank for automatic configuration + залиште пустим для автоматичного налаштування + + + Cellular Metered + Обмежений траффік стільникової мережі + + + Prevent large data uploads when on a metered connection + Запобігти великим вивантаженням коли обмежений траффік + + + Hidden Network + Прихована мережа + + + CONNECT + ЗʼЄДНАТИ + + + Enter SSID + Введіть SSID + + + Enter password + Введіть пароль + + + for "%1" + для "%1" + + + + AnnotatedCameraWidget + + km/h + км/г + + + mph + м*г + + + MAX + МАКС + + + LIMIT + ЛІМІТ + + + SPEED + ШВИДК. + + + + ConfirmationDialog + + Ok + Ок + + + Cancel + Відміна + + + + DeclinePage + + You must accept the Terms and Conditions in order to use openpilot. + Ви повинні прийняти Умови використання, щоб користуватися openpilot. + + + Back + Назад + + + Decline, uninstall %1 + Відмовити, видалити %1 + + + + DestinationWidget + + Home + Дім + + + Work + Робота + + + No destination set + Немає пункту призначення + + + home + дім + + + work + робота + + + No %1 location set + Локація %1 встановлена + + + + DeveloperSidebar + + m/s² + м/с² + + + ft/s² + фут/с² + + + ACCEL + ПРИСК + + + ACCEL JERK + РИВОК ПРИСК + + + ACT ACCEL + ПОТ ПРИСК + + + DANGER JERK + ОПАСНИЙ РИВОК + + + STEER DELAY + ЗАТР КЕРМВ + + + FRICTION + ТЕРТЯ + + + LAT ACCEL + ПОПЕРЧ ПРИСК + + + LATERAL % + ПОПЕРЕЧН % + + + LONG % + ПОЗДОВЖ % + + + MAX ACCEL + МАКС ПРИСК + + + SPEED JERK + РИВОК ШВИДК + + + STEER ANGLE + УГОЛ КЕРМА + + + STEER RATIO + КОЕФ КЕРМУВ + + + STEER STIFF + ОПІР КЕРМА + + + TORQUE % + МОМЕНТ % + + + + DevicePanel + + Dongle ID + ІД Пристрою + + + N/A + Н/В + + + Serial + Серійний номер + + + Pair Device + Звʼязати пристрій + + + PAIR + ЗВʼЯЗАТИ + + + Pair your device with Konik connect (stable.konik.ai). + Підключіть свій пристрій до Konik connect (stable.konik.ai). + + + Pair your device with comma connect (connect.comma.ai) and claim your comma prime offer. + Підключіть свій пристрій до comma connect (connect.comma.ai) і отримайте пропозицію comma prime. + + + Driver Camera + Камера водія + + + PREVIEW + ПРЕГЛЯД + + + Preview the driver facing camera to ensure that driver monitoring has good visibility. (vehicle must be off) + Перегляньте зображення з камери водія, щоб переконатися, що моніторинг водія має хорошу видимість. (автомобіль повинен бути вимкнений) + + + Reset Calibration + Скинути калібрування + + + RESET + СКИНУТИ + + + Are you sure you want to reset calibration? + Ви впевнені, що хочете скинути калібрування? + + + Reset + Скинути + + + Review Training Guide + Передивитись навчальний посібник + + + REVIEW + ПЕРЕДИВ + + + Review the rules, features, and limitations of openpilot + Ознайомтеся з правилами, функціями та обмеженнями openpilot + + + Are you sure you want to review the training guide? + Ви впевнені, що хочете наново переглянути навчальний посібник? + + + Review + Переглянути + + + Regulatory + Нормативні відомості + + + VIEW + ДИВИСЬ + + + Change Language + Змінити мову + + + CHANGE + ЗМІНИТИ + + + Select a language + Виберіть мову + + + Reboot + Перезавантажити + + + Power Off + Вимкнути + + + openpilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. openpilot is continuously calibrating, resetting is rarely required. + openpilot вимагає, щоб пристрій був встановлений в межах 4° вліво або вправо і в межах 5° вгору або 9° вниз. openpilot постійно калібрується, скидання рідко потрібне. + + + Your device is pointed %1° %2 and %3° %4. + Ваш пристрій спрямований на %1° %2 і %3° %4. + + + down + вниз + + + up + вгору + + + left + вліво + + + right + вправо + + + Are you sure you want to reboot? + Ви впевнені, що хочете перезавантажити систему? + + + Disengage to Reboot + Деактивуйте для перезавантаження + + + Are you sure you want to power off? + Ви впевнені, що хочете вимкнути пристрій? + + + Disengage to Power Off + Деактивуйте для вимкнення + + + + DriveStats + + FROGPILOT + ЖАБОПІЛОТ + + + Drives + Поїздок + + + Hours + Годин + + + KM + Км + + + Miles + Миль + + + PAST WEEK + ТИЖДЕНЬ + + + PAST WEEK (KONIK) + ТИЖДЕНЬ (KONIK) + + + ALL TIME + ВЕСЬ ЧАС + + + ALL TIME (KONIK) + ВЕСЬ ЧАС (KONIK) + + + + DriverViewWindow + + camera starting + Камера стартує + + + + ExperimentalModeButton + + EXPERIMENTAL MODE ON + ЕКСПЕРИМЕНТАЛЬН РЕЖ + + + CHILL MODE ON + СПОКІЙНИЙ РЕЖИМ + + + + FrogPilotAnnotatedCameraWidget + + m/s² + м/с² + + + meters + метрів + + + m/s + м/c + + + km/h + км/г + + + ft/s² + фт/с² + + + feet + фут + + + mph + мнг + + + Vehicle in blind spot + ТЗ в мертвій зоні + + + PENDING + ОЧІКУВ. + + + LIMIT + ЛІМІТ + + + Desired: %1 + Очік.: %1 + + + s + с + + + 1 minute + 1 хвилина + + + %1 minutes + %1 хвилин + + + 1 second + 1 секунда + + + %1 seconds + %1 секунд + + + + FrogPilotConfirmationDialog + + Reboot required to take effect. + Треба перезавантажити для змін + + + Reboot Now + Перезавантажити зараз + + + Reboot Later + Перезавантажити пізніше + + + Yes + Так + + + No + Ні + + + + FrogPilotDataPanel + + DELETE + ВИДАЛ. + + + Delete + Видалити + + + Deleting... + Видалення... + + + Deleted! + Видалено! + + + Delete Error Logs + Видалити журнали помилок + + + Screen Recordings + Записи екрану + + + DELETE ALL + ВИДАЛ. ВСЕ + + + RENAME + ПЕРЕЙМЕНУВАТИ + + + Delete All + Видалити все + + + Enter a new name + Введіть нове ім'я + + + Renaming... + Перейменування... + + + Renamed! + Перейменовано! + + + FrogPilot Backups + Бєкапи FrogPilot + + + BACKUP + БЕКАП + + + RESTORE + ВІДНОВ. + + + Backing up... + Резервне копіювання... + + + Compressing... + Стискання... + + + Backup created! + Резервна копія створена! + + + Restore + Відновити + + + Restoring... + Відновлення... + + + Extracting... + Видобування... + + + Restored! + Відновлено! + + + Rebooting... + Перезавантаження... + + + Toggle Backups + Бєкапи налаштувань + + + Delete Driving Data + Видалити дані про поїздки + + + <b>Delete all stored driving footage and data</b> to free up space and clear private information. + <b>Видаліть усі збережені відеозаписи та дані поїздок</b>, щоб звільнити місце та очистити приватну інформацію. + + + Delete all driving data and footage? + Видалити всі дані поїздок та відеозаписи? + + + <b>Delete collected error logs</b> to free up space and clear old crash records. + <b>Видаліть зібрані журнали помилок</b>, щоб звільнити місце та очистити старі записи про збій. + + + Delete all error logs? + Видалити всі журнали помилок? + + + <b>Delete or rename screen recordings.</b> + <b>Видалити або перейменувати записи екрану.</b> + + + Choose a screen recording to delete + Виберіть запис екрана, який потрібно видалити + + + Delete this screen recording? + Видалити цей запис екрана? + + + Delete all screen recordings? + Видалити всі записи екрана? + + + Choose a screen recording to rename + Виберіть запис екрана, який потрібно перейменувати + + + Rename Screen Recording + Перейменувати запис екрану + + + Name already in use. Please choose a different name. + Імʼя вже використовується. Виберіть інше імʼя. + + + <b>Create, delete, or restore FrogPilot backups.</b> + <b>Створити, видалити чи відновити резервні копії FrogPilot.</b> + + + Enter a name for this backup + Введіть імʼя резервної копії + + + Compress this backup? This will save space and run in the background but take a bit longer. + Стиснути цю резервну копію? Це збереже місце і буде працювати в фоновому режиму але займе трохи більше часу. + + + Choose a FrogPilot backup to delete + Виберіть резервну копію FrogPilot для видалення + + + Delete this backup? + Видалити цю резервну копію? + + + Delete all backups? + Видалити всі резерні копії? + + + Choose a backup to restore + Виберіть резервну копію для відновлення + + + Restore this backup? + Відновити цю резервну копію? + + + <b>Create, delete, or restore toggle backups.</b> + <b>Створити, видалити чи відновити резервні копії налаштувань.</b> + + + Choose a backup to delete + Виберіть резервну копію для видалення + + + FrogPilot Stats + Статистика FrogPilot + + + <b>View your collected FrogPilot stats.</b> + <b>Перегляньте зібрану статистику FrogPilot.</b> + + + RESET + СКИНУТИ + + + VIEW + ПЕРЕГЛЯД + + + Are you sure you want to reset all of your FrogPilot stats? + Ви впевнені, що хочете скинути всі ваші статистики FrogPilot? + + + Reset + Скинути + + + Total Emergency Brake Alerts + Загальна кількість попереджень про екстрене гальмування + + + Time Using "Always On Lateral" + Час використання «Завжди увімкненого бічного керування» + + + Favorite Set Speed + Улюблена встановлена швидкість + + + Total Disengagements + Загальна кількість відключень + + + Total Engagements + Загальна кількість взаємодій + + + Time Using "Experimental Mode" + Час використання «Експериментального режиму» + + + Total Frog Chirps + Загальна кількість кумкань жаб + + + Total Frog Hops + Загальна кількість стрибків жаб + + + Total Drives + Усього поїздок + + + Total Distance Driven + Загальна пройдена відстань + + + Total Driving Time + Загальний час водіння + + + Total Frog Squeaks + Загальна кількість квакань жаб + + + Total Goat Screams + Загальна кількість криків кіз + + + Highest Acceleration Rate + Найвища швидкість прискорення + + + Time Using Lateral Control + Час використання бічного керування + + + Longest Distance Without an Override + Найдовша дистанція без втручання + + + Time Using Longitudinal Control + Час використання поздовжнього керування + + + Driving Models: + Моделі керування автомобілем + + + Month + Місяць + + + Total Overrides + Загальні перевизначення + + + Time Overriding openpilot + Перевизначення openpilot за часом + + + Random Events: + Випадкові події + + + Time Stopped + Час зупинено + + + Time Spent at Stoplights + Час, проведений на світлофорах + + + Total Time Tracked + Загальний час відстеження + + + UwUs + UwUs + + + Loch Ness Encounters + Зустрічі на Лох-Несс + + + Visits to 1955 + Відвідування до 1955 + + + Deja Vu Moments + Моменти дежавю + + + Internet Explorer Weeeeeeees + Internet Explorer Віііііііі + + + HAL 9000 Denials + Відмови HAL 9000 + + + openpilot Crashes + Збої openpilot + + + This Is Fine Moments + Моменти «Все гаразд» + + + To Be Continued Moments + Моменти «Продовження слідує» + + + Noices + Шуми + + + Attempted Frog Murders + Спроби вбивства жаб + + + Total Mail Received + Усього отримано пошти + + + kilometer + кілометр + + + kilometers + кілометри + + + mile + миля + + + miles + миль + + + day + день + + + days + дні + + + hour + година + + + hours + години + + + minute + хвилина + + + minutes + хвилин + + + km/h + км/год + + + mph + миль/год + + + m/s² + м/с² + + + Total + Усього + + + % of + % від + + + + FrogPilotDevicePanel + + Device Settings + Налаштування пристрою + + + Device Shutdown Timer + Таймер вимкнення пристрою + + + WARNING: This will prevent your drives from being recorded and all data will be unobtainable! + УВАГА: Це попередить запису ваших поїздок, і всі дані стануть недоступними! + + + Screen Settings + Налаштування екрану + + + Screen Brightness (Offroad) + Яскравість екрану (зупинка) + + + Screen Brightness (Onroad) + Яскравість екрану (на дорозі) + + + Screen Recorder + Запис екрану + + + Screen Timeout (Offroad) + Таймер екрану (зупинка) + + + Screen Timeout (Onroad) + Таймер екрану (на дорозі) + + + 5 mins + 5 mins + + + mins + мін + + + hour + год + + + hours + годин + + + volts + вольт + + + Screen Off + Екран вимкнено + + + Auto + Авто + + + Start Recording + Почати запис + + + Stop Recording + Зупинити запис + + + seconds + секунд + + + <b>Settings that control how the device runs, powers off, and manages driving data.</b> + <b>Налаштування, що контролюють роботу пристрою, його вимкнення та управління даними про поїздки.</b> + + + <b>Keep the device on for the set amount of time after a drive</b> before it shuts down automatically. + <b>Після поїздки залиште пристрій увімкненим на заданий проміжок часу</b>, перш ніж він автоматично вимкнеться. + + + Disable Logging + Вимкнути логування + + + <b>Prevent the device from saving driving data.</b> + <b>Запобігайте збереженню даних поїздок пристроєм.</b> + + + Disable Uploads + Вимкнути вивантаження + + + WARNING: This will prevent your drives from being uploaded to <b>comma connect</b> which will impact debugging and official support from comma! + УВАГА: Це завадить завантаженню ваших поїздок на <b>comma connect</b>, що вплине на зневадження та офіційну підтримку від comma! + + + <b>Prevent the device from uploading driving data.</b> + <b>Запобігайте завантаженню даних про поїздки з пристрою.</b> + + + High-Quality Recording + Високоякісний запис + + + <b>Save drive footage in higher video quality.</b> + <b>Зберігайте відеозаписи з камери в більш високій якості.</b> + + + Low-Voltage Cutoff + Відкл. при низькій напрузі + + + <b>While parked, if the battery voltage falls below the set level, the device shuts down</b> to prevent excessive battery drain. + <b>Під час стоянки, якщо напруга акумулятора падає нижче встановленого рівня, пристрій вимикається</b>, щоб запобігти надмірному розрядженню акумулятора. + + + Raise Temperature Limits + Підвищити температурні обмеження + + + WARNING: Running at higher temperatures may damage your device! + УВАГА: Експлуатація при високих температурах може пошкодити пристрій! + + + <b>Allow the device to run at higher temperatures</b> before throttling or shutting down. Use only if you understand the risks! + <b>Дозвольте пристрою працювати при більш високих температурах</b> перед обмеженням потужності або вимкненням. Використовуйте тільки якщо ви розумієте ризики! + + + Use Konik Server + Використовуйте сервер Konik + + + <b>Upload driving data to "connect.konik.ai" instead of "connect.comma.ai".</b> + <b>Завантажуйте поїздки на «connect.konik.ai», а не на «connect.comma.ai».</b> + + + <b>Settings that control screen brightness, screen recording, and timeout duration.</b> + <b>Налаштування, що контролюють яскравість екрану, запис екрану та тривалість підсвічування.</b> + + + <b>The screen brightness while not driving.</b> + <b>Яскравість екрану під час руху автомобіля.</b> + + + <b>The screen brightness while driving.</b> + <b>Яскравість екрану під час руху.</b> + + + <b>Add a button to the driving screen to record the display.</b> + <b>Додайте кнопку на екран водіння, щоб записати відображення.</b> + + + <b>How long the screen stays on after being tapped while not driving.</b> + <b>Як довго екран залишається увімкненим після натискання, коли ви запарковані.</b> + + + <b>How long the screen stays on after being tapped while driving.</b> + <b>Як довго екран залишається увімкненим після натискання під час руху.</b> + + + Standby Mode + Режим очікування + + + <b>Turn the screen off while driving and automatically wake it up for alerts or engagement state changes.</b> + <b>Вимкніть екран під час руху та автоматично вмикайте його для сповіщень або змін рівня активації.</b> + + + Disable Onroad Only + Вимкнути На дорозі + + + + FrogPilotDriveSummary + + Random Events Summary + Підсумок випадкових подій + + + Drive Summary + Підсумок поїздки + + + UwUs + UwUs + + + Loch Ness Encounters + Зустрічі на Лох-Несс + + + Visits to 1955 + Відвідування до 1955 + + + Deja Vu Moments + Моменти дежавю + + + Internet Explorer Weeeeeeees + Internet Explorer Віііііііііі + + + HAL 9000 Denials + Відмови HAL 9000 + + + openpilot Crashes + Збої openpilot + + + This Is Fine Moments + Моменти «Все гаразд» + + + To Be Continued Moments + Моменти «Продовження слідує» + + + Noices + Шуми + + + Attempted Frog Murders + Спроби вбивства жаб + + + Total Mail Received + Усього отримано пошти + + + % of Drive With openpilot Engaged + % часу керування з увімкненим openpilot + + + Drive Distance + Відстань поїздки + + + Drive Time + Час водіння + + + % of Drive In "Experimental Mode" + % поїздки в «Експериментальному режимі» + + + No Random Events Played! + Жодної випадкової події не відтворено! + + + kilometer + кілометр + + + kilometers + кілометри + + + mile + миля + + + miles + миль + + + day + день + + + days + дні + + + hour + година + + + hours + години + + + minute + хвилина + + + minutes + хвилин + + + + FrogPilotLateralPanel + + Advanced Lateral Tuning + Розш. тюнінг кермування + + + Actuator Delay (Default: %1) + Затр. прив. (замов.: %1) + + + Actuator Delay + Затримка приводу + + + Friction (Default: %1) + Тертя (замовч: %1) + + + Friction + Тертя + + + Kp Factor (Default: %1) + Коефіцієнт Kp (замовч.: %1) + + + Kp Factor + Коефіцієнт Kp + + + Lateral Accel (Default: %1) + Попер. приск. (замовч.: %1) + + + Steer Ratio (Default: %1) + Коеф. керм. (зам.: %1) + + + Steer Ratio + Коефіцієнт кермування + + + Enable With Cruise Control + Увімкнути з круїз-контролем + + + Lane Changes + Зміна смуги руху + + + Automatic Lane Changes + Автоматична зміна смуги руху + + + Lane Change Delay + Затримка зміни смуги руху + + + Minimum Lane Change Speed + Мінімальна швидк. зміни смуги + + + Minimum Lane Width + Мінімальна ширина смуги руху + + + One Lane Change Per Signal + Одна зміна смуги руху на один сигнал + + + Lateral Tuning + Підлаштування кермування + + + Force Turn Desires Below Lane Change Speed + Примусово повертати при шв. нижче шв. зміни смуги + + + Neural Network Feedforward (NNFF) + Нейронна мережа прямого поширення (NNFF) + + + Smooth Curve Handling + Плавне керування поворотами + + + Quality of Life + Якість життя + + + Pause Steering Below + Пауза кермування нижче + + + Instant + Миттєво + + + second + секунда + + + seconds + секунд + + + Turn Signal Only + При поворотн + + + Off + Вимк. + + + foot + фут + + + feet + футів + + + mph + мнг + + + meter + метр + + + meters + метрів + + + km/h + км/г + + + <b>Advanced steering control changes to fine-tune how openpilot drives.</b> + <b>Розширені зміни в управлінні кермом для точного налаштування роботи OpenPilot.</b> + + + <b>The time between openpilot's steering command and the vehicle's response.</b> Increase if the vehicle reacts late; decrease if it feels jumpy. Auto-learned by default. + <b>Час між командою кермування openpilot і реакцією автомобіля.</b> Збільшуйте, якщо автомобіль реагує із запізненням; зменшуйте, якщо він відчувається нестабільним. За замовчуванням навчається автоматично. + + + <b>Compensates for steering friction.</b> Increase if the wheel sticks near center; decrease if it jitters. Auto-learned by default. + <b>Компенсує тертя рульового управління.</b> Збільшуйте, якщо кермо балансує поблизу центру; зменшуйте, якщо воно тремтить. За замовчуванням навчається автоматично. + + + <b>How strongly openpilot corrects lane position.</b> Higher is tighter but twitchier; lower is smoother but slower. Auto-learned by default. + <b>Наскільки сильно openpilot коригує положення на смузі руху.</b> Вище значення означає більш жорстке, але і більш різке коригування; нижче значення означає більш плавне, але і більш повільне коригування. За замовчуванням використовується автоматичне навчання. + + + Lateral Acceleration (Default: %1) + Бічне прискорення (замовч.: %1) + + + Lateral Acceleration + Бічне прискорення + + + <b>Maps steering torque to turning response.</b> Increase for sharper turns; decrease for gentler steering. Auto-learned by default. + <b>Відповідає крутному моменту керма за реакцією на поворот.</b> Збільшуйте для більш різких поворотів; зменшуйте для більш плавного керування. За замовчуванням навчається автоматично. + + + <b>The relationship between steering wheel rotation and road wheel angle.</b> Increase if steering feels too quick or twitchy; decrease if it feels too slow or weak. Auto-learned by default. + <b>Відношення між поворотом керма і кутом повороту колеса.</b> Збільшуйте, якщо керування здається занадто швидким або нестабільним; зменшуйте, якщо воно здається занадто повільним або слабким. За замовчуванням навчається автоматично. + + + Force Auto-Tune On + Примусове авто-підлаштування ввімк. + + + <b>Force-enable openpilot's live auto-tuning for "Friction" and "Lateral Acceleration".</b> + <b>Примусово увімкніть функцію автоматичного підлаштування openpilot для «Тертя» та «Бічне прискорення».</b> + + + Force Auto-Tune Off + Примусове авто-підлаштування вимк. + + + <b>Force-disable openpilot's live auto-tuning for "Friction" and "Lateral Acceleration" and use the set value instead.</b> + <b>Примусово вимкніть автоматичне підлаштування openpilot для «Тертя» та «Бічне прискорення» і використовуйте замість цього встановлене значення.</b> + + + Force Torque Controller + Примусово Контролер моменту + + + <b>Use torque-based steering control instead of angle-based control for smoother lane keeping, especially in curves.</b> + <b>Використовуйте керування на основі крутного моменту замість керування на основі кута для більш плавного утримання смуги руху, особливо у вигинах дороги.</b> + + + Always On Lateral + Постійне кермування + + + <b>openpilot's steering remains active even when the accelerator or brake pedals are pressed.</b> + <b>Система керування openpilot залишається активною навіть при натисканні педалі акселератора або гальма.</b> + + + <b>Enable "Always On Lateral" whenever "Cruise Control" is on, even when openpilot is not engaged.</b> + <b>Увімкніть «Постійне кермування», не залежно від того чи Круїз-контроль увімкнено, навіть якщо openpilot не активовано.</b> + + + Enable With LKAS + Увімкнути з LKAS + + + <b>Enable "Always On Lateral" whenever "LKAS" is on, even when openpilot is not engaged.</b> + <b>Увімкніть «Постійне кермування», коли «LKAS» увімкнено, навіть якщо openpilot не активовано.</b> + + + Pause on Brake Press Below + Пауза при гальмі нижче + + + <b>Pause "Always On Lateral" below the set speed while the brake pedal is pressed.</b> + <b>Призупиніть «Постійне кермування» нижче встановленої швидкості, поки натиснута педаль гальма.</b> + + + <b>Allow openpilot to change lanes.</b> + <b>Дозволити openpilot змінювати смуги руху.</b> + + + <b>When the turn signal is on, openpilot will automatically change lanes.</b> No steering-wheel nudge required! + <b>Коли поворотник увімкнений, openpilot автоматично змінить смугу руху.</b> Не потрібно торкатися керма! + + + <b>Delay between turn signal activation and the start of an automatic lane change.</b> + <b>Затримка між увімкненням поворотника та початком автоматичної зміни смуги руху.</b> + + + <b>Lowest speed at which openpilot will change lanes.</b> + <b>Найнижча швидкість, при якій openpilot змінить смугу руху.</b> + + + <b>Prevent automatic lane changes into lanes narrower than the set width.</b> + <b>Запобігайте автоматичній зміні смуги руху на смуги, ширина яких менша за задану.</b> + + + <b>Limit automatic lane changes to one per turn-signal activation.</b> + <b>Обмежте автоматичну зміну смуги руху до однієї на кожну активацію поворотника.</b> + + + <b>Miscellaneous steering control changes</b> to fine-tune how openpilot drives. + <b>Різні зміни в управлінні кермуванням</b> для точного налаштування як openpilot керує. + + + <b>While driving below the minimum lane change speed with an active turn signal, instruct openpilot to turn left/right.</b> + <b>Коли рухаєтесь зі швидкістю нижче мінімальної швидкості зміни смуги руху з увімкненим поворотником, примушує OpenPilot вважати що ви збираєтесь повернути ліворуч/праворуч.</b> + + + <b>Twilsonco's "Neural Network FeedForward" model controller for smoother, model-based steering trained on your vehicle's data.</b> + <b>Контролер моделі «Neural Network FeedForward» від Twilsonco для більш плавного, кермування від моделі, навченій на даних вашого автомобіля.</b> + + + <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> + <b>Регулювання Twilsonco на основі крутного моменту для плавного кермування у вигинах шляху.</b> + + + <b>Steering control changes to fine-tune how openpilot drives.</b> + <b>Зміни в кермуванні для точного підлаштування роботи openpilot.</b> + + + <b>Pause steering below the set speed.</b> + <b>Призупиніть кермування нижче встановленої швидкості.</b> + + + Reset <b>Actuator Delay</b> to its default value? + Скинути <b>Затримку приводу</b> до значення за замовчуванням? + + + Reset <b>Friction</b> to its default value? + Скинути <b>Тертя</b> до значення за замовчуванням? + + + Reset <b>Kp Factor</b> to its default value? + Скинути <b>коефіцієнт Kp</b> до значення за замовчуванням? + + + Reset <b>Lateral Accel</b> to its default value? + Скинути <b>Бічне приск.</b> до значення за замовчуванням? + + + Reset <b>Steer Ratio</b> to its default value? + Скинути <b>Коеф. кермув.</b> до значення за замовчуванням? + + + + FrogPilotLongitudinalPanel + + Advanced Longitudinal Tuning + Розш. поздовжній тюнінг + + + Actuator Delay (Default: %1) + Затр. приводу (замовч: %1) + + + Actuator Delay + Затримка приводу + + + Start Acceleration (Default: %1) + Поч. прискорення (замовч.: %1) + + + Start Acceleration + Початк. прискорення + + + Start Speed (Default: %1) + Початкова шв. (замовч.: %1) + + + Start Speed + Початкова швидкість + + + Stop Acceleration (Default: %1) + Приск. зупинки (замовч.: %1) + + + Stop Acceleration + Прискорення зупинки + + + Stopping Rate (Default: %1) + Коеф. зупинки (замовч.: %1) + + + Stopping Rate + Коефіціент зупинки + + + Stop Speed (Default: %1) + Швидк. зупинки (замовч.: %1) + + + Stop Speed + Швидкість зупинки + + + Conditional Experimental Mode + Умовний експ. режим + + + Below + До + + + Curve Detected Ahead + Виявлено поворот попереду + + + Lead Detected Ahead + Виявлено авто попереду + + + Turn Signal Below + Поворотник нижче + + + Status Widget + Віджет статусу + + + Following Distance + Відстань між автомобілями + + + Longitudinal Tuning + Тюнінг поздовжн. керування + + + Acceleration Profile + Проф. приск. + + + Deceleration Profile + Профіль вповільн. + + + Human-Like Acceleration + Людьське приск. + + + "Taco Bell Run" Turn Speed Hack + «Taco Bell Run» — хак поворотів + + + Quality of Life + Якість життя + + + Cruise Interval + Інтервал круїзу + + + Map Accel/Decel to Gears + Прив'язати прискорення/сповільнення до передач + + + Reverse Cruise Increase + Змінити довге натискання + + + Speed Limit Controller + Контролер лімітів швидк. + + + Fallback Speed + Резерв. дж. лімітів + + + Override Speed + Ручна швидк. + + + Confirm New Speed Limits + Підтверд. новий ліміт шв. + + + Higher Limit Lookahead Time + Завчасний вищий ліміт + + + Lower Limit Lookahead Time + Завчасний нижчий ліміт + + + Match Speed Limit on Engage + Відповідність обмеженню швидкості при активації + + + Use Mapbox as Fallback + Вик. Mapbox як резерв + + + Speed Limit Source Priority + Пріоритет джерела обмеження швидкості + + + Speed Limit Offsets + Зазори обмеження швидкості + + + Speed Offset (0–24 mph) + Зсув швидкості (0–24 мл/г) + + + Speed Offset (25–34 mph) + Зсув швидкості (25–34 мл/г) + + + Speed Offset (35–44 mph) + Зсув швидкості (35–44 мл/г) + + + Speed Offset (45–54 mph) + Зсув швидкості (45–54 мл/г) + + + Speed Offset (55–64 mph) + Зсув швидкості (55–64 мл/г) + + + Speed Offset (65–74 mph) + Зсув швидкості (65–74 мл/г) + + + Speed Offset (75–99 mph) + Зсув швидкості (75–99 мл/г) + + + Visual Settings + Налаштування візуалізації + + + Show Speed Limit Offset + Показати поправку від обмеження швидкості + + + Show Speed Limit Sources + Показати джерела обмеження швидкості + + + seconds + секунд + + + m/s² + м/с² + + + mph + мнг + + + With Lead + З лідер. + + + Slower Lead + Повільн. лідер + + + Stopped Lead + Зупин. лідер + + + Intersections + Перехрестя + + + Turns + Повороти + + + Off + Вимк. + + + second + секунд + + + RESET + СКИД. + + + Standard + Стандарт + + + Eco + Еко + + + Sport + Спорт + + + Sport+ + Спорт+ + + + feet + фут + + + Acceleration + Прискорення + + + Deceleration + Зповільнення + + + Set Speed + Ручн. + + + Experimental Mode + Експ. реж. + + + Previous Limit + Попер. ліміт + + + None + Нема + + + Set With Gas Pedal + Педаль + + + Max Set Speed + Макс встан. швидк. + + + SELECT + ОБРАТИ + + + Dashboard + Панель інструментів + + + Map Data + Дані мапи + + + Navigation + Навігація + + + Highest + Верхній + + + Lowest + Нижній + + + Select your primary priority + Виберіть свій головний пріоритет + + + Select your secondary priority + Виберіть свій другорядний пріоритет + + + Select your tertiary priority + Виберіть третій пріоритет + + + MANAGE + КЕРУВАТИ + + + Lower Limits + Нижн ліміт + + + Higher Limits + Верхн лімит + + + Are you sure you want to completely reset your settings for <b>Traffic Mode</b>? + Ви впевнені, що хочете повністю скинути налаштування для режиму<b>Трафік</b>? + + + Are you sure you want to completely reset your settings for the <b>Aggressive</b> personality? + Ви впевнені, що хочете повністю скинути налаштування для режиму <b>Агресивний</b>? + + + Are you sure you want to completely reset your settings for the <b>Standard</b> personality? + Ви впевнені, що хочете повністю скинути налаштування для режиму <b>Стандартний</b>? + + + Are you sure you want to completely reset your settings for the <b>Relaxed</b> personality? + Ви впевнені, що хочете повністю скинути налаштування для режиму <b>Спокійний</b>? + + + foot + фут + + + meter + метр + + + meters + метрів + + + km/h + км/г + + + Speed Offset (0–29 km/h) + Зсув швидкості (0–29 км/г) + + + Speed Offset (30–49 km/h) + Зсув швидкості (30–49 км/г) + + + Speed Offset (50–59 km/h) + Зсув швидкості (50–59 км/г) + + + Speed Offset (60–79 km/h) + Зсув швидкості (6–79 км/г) + + + Speed Offset (80–99 km/h) + Зсув швидкості (90–99 км/г) + + + Speed Offset (100–119 km/h) + Зсув швидкості (100–119 км/г) + + + Speed Offset (120–140 km/h) + Зсув швидкості (120–140 км/г) + + + <b>Advanced acceleration and braking control changes</b> to fine-tune how openpilot drives. + <b>Розширені зміни в управлінні прискоренням і гальмуванням</b> для точного налаштування роботи openpilot. + + + <b>The time between openpilot's throttle or brake command and the vehicle's response.</b> Increase if the vehicle feels slow to react; decrease if it feels too eager or overshoots. + <b>Час між командою openpilot на прискорення або гальмування та реакцією автомобіля. Збільшуйте, якщо автомобіль реагує повільно; зменшуйте, якщо він реагує занадто швидко або перевищує необхідну швидкість. + + + <b>Extra acceleration applied when starting from a stop.</b> Increase for quicker takeoffs; decrease for smoother, gentler starts. + <b>Додаткове прискорення, що застосовується при старті з місця. Збільште для більш швидкого старту; зменште для більш плавного та м'якого старту. + + + <b>The speed at which openpilot exits the stopped state.</b> Increase to reduce creeping; decrease to move sooner after stopping. + <b>Швидкість, з якою openpilot виходить із стану зупинки.</b> Збільште, щоб зменшити повзання; зменште, щоб швидше рухатися після зупинки. + + + <b>Brake force applied to hold the vehicle at a standstill.</b> Increase to prevent rolling on hills; decrease for smoother, softer stops. + <b>Гальмівна сила, що застосовується для утримання автомобіля в нерухомому стані.</b> Збільшуйте її, щоб запобігти коченню на схилах; зменшуйте для більш плавного та м'якого гальмування. + + + <b>How quickly braking ramps up when stopping.</b> Increase for shorter, firmer stops; decrease for smoother, longer stops. + <b>Як швидко гальмування посилюється під час зупинки.</b> Збільшуйте для коротших, більш різких зупинок; зменшуйте для плавніших, довших зупинок. + + + <b>The speed at which openpilot considers the vehicle stopped.</b> Increase to brake earlier and stop smoothly; decrease to wait longer but risk overshooting. + <b>Швидкість, при якій openpilot вважає, що транспортний засіб зупинився.</b> Збільште, щоб гальмувати раніше і зупинятися плавно; зменште, щоб чекати довше, але ризикуючи проїхати зупинку. + + + <b>Automatically switch to "Experimental Mode" when set conditions are met.</b> Allows the model to handle challenging situations with smarter decision making. + <b>Автоматично переходити в «Експериментальний режим» при виконанні заданих умов.</b> Дозволяє моделі вирішувати складні ситуації за допомогою більш розумних рішень. + + + <b>Switch to "Experimental Mode" when driving below this speed without a lead</b> to help openpilot handle low-speed situations more smoothly. + <b>Перейдіть в «Експериментальний режим», коли їдете з швидкістю нижче цієї без лідера</b>, щоб допомогти openpilot більш плавно справлятися з ситуаціями на низькій швидкості. + + + <b>Switch to "Experimental Mode" when a curve is detected</b> to allow the model to set an appropriate speed for the curve. + <b>Перейдіть в «Експериментальний режим» при виявленні вигина шляху</b>, щоб модель могла встановити відповідну швидкість для вигину. + + + <b>Switch to "Experimental Mode" when a slower or stopped vehicle is detected.</b> Can make braking smoother and more reliable on some vehicles. + <b>Перейдіть в «Експериментальний режим», коли попереду виявлено повільніший або зупинений транспортний засіб.</b> Може зробити гальмування більш плавним і надійним на деяких транспортних засобах. + + + Navigation-Based + Навігаційний + + + <b>Switch to "Experimental Mode" when approaching intersections or turns on the active route</b> while using "Navigate on openpilot" (NOO) to allow the model to set an appropriate speed for upcoming maneuvers. + <b>Перейдіть в «Експериментальний режим» при наближенні до перехресть або поворотів на активному маршруті</b> під час використання «Навігації на openpilot» (NOO), щоб модель могла встановити відповідну швидкість для майбутніх маневрів. + + + Predicted Stop In + Прогнозована зупинка в + + + <b>Switch to "Experimental Mode" when using a turn signal below the set speed</b> to allow the model to choose an appropriate speed for smoother left and right turns. + <b>Перейдіть в «Експериментальний режим», коли використовуєте поворотник нижче встановленої швидкості</b>, щоб модель могла вибрати відповідну швидкість для більш плавного повороту вліво та вправо. + + + <b>Show which condition triggered "Experimental Mode"</b> on the driving screen. + <b>Показати, яка умова викликала «Експериментальний режим»</b> на екрані керування. + + + Curve Speed Controller + Регулятор швидкості вигинів + + + <b>Automatically slow down for upcoming curves</b> using data learned from your driving style, adapting to curves as you would. + <b>Автоматичне уповільнення перед вигинами</b> на основі даних, отриманих з вашого стилю водіння, адаптуючись до поворотів так, як ви це робите. + + + Calibrated Lateral Acceleration + Каліброване поперечне прискорення + + + <b>The learned lateral acceleration from collected driving data.</b> This sets how fast openpilot will take curves. Higher values allow faster cornering; lower values slow the vehicle for gentler turns. + <b>Вивчене поперечне прискорення на основі зібраних даних про рух автомобіля.</b> Це визначає швидкість, з якою openpilot буде проїжджати повороти. Більші значення дозволяють швидше проїжджати повороти; менші значення сповільнюють автомобіль для більш плавного проходження поворотів. + + + Calibration Progress + Хід калібрування + + + <b>How much curve data has been collected.</b> This is a progress meter; it is normal for the value to stay low and rarely reach 100%. + <b>Скільки даних про вигини було зібрано.</b> Це індикатор прогресу; нормально, якщо значення залишається низьким і рідко досягає 100%. + + + Reset Curve Data + Скинути дані вигинів + + + <b>Reset collected user data for "Curve Speed Controller".</b> + <b>Скинути зібрані дані користувача для «Регулятора швидкості вигинів.</b> + + + <b>Show the "Curve Speed Controller" target speed on the driving screen.</b> + <b>Показати цільову швидкість «Регулятора швидкості вигинів на екрані керування.</b> + + + Driving Personalities + Режими керування + + + <b>Customize the "Driving Personalities"</b> to better match your driving style. + <b>Налаштуйте «Режими керування</b> відповідно до вашого стилю водіння. + + + Traffic Mode + Режим Трафік + + + <b>Customize the "Traffic Mode" personality profile.</b> Designed for stop-and-go driving. + <b>Налаштуйте профіль особистості «Режим Трафік».</b> Призначений для руху в режимі «стоп-старт». + + + <b>The minimum following distance to the lead vehicle in "Traffic Mode".</b> openpilot blends between this value and the "Aggressive" profile as speed increases. Increase for more space; decrease for tighter gaps. + <b>Мінімальна відстань до автомобіля, що рухається попереду, в режимі «Трафік».</b> openpilot плавно переходить від цього значення до профілю «Агресивний» у міру збільшення швидкості. Збільшуйте для більшого простору; зменшуйте для менших проміжків. + + + Acceleration Smoothness + Плавність прискорення + + + <b>How smoothly openpilot accelerates in "Traffic Mode".</b> Increase for gentler starts; decrease for faster but more abrupt takeoffs. + <b>Як плавно openpilot прискорюється в «Режимі трафік».</b> Збільште для більш плавного старту; зменште для більш швидкого, але різкого старту. + + + Braking Smoothness + Плавність гальмування + + + <b>How smoothly openpilot brakes in "Traffic Mode".</b> Increase for gentler stops; decrease for quicker but sharper braking. + <b>Як плавно гальмує OpenPilot у «режимі трафік».</b> Збільште для більш плавного гальмування; зменште для швидшого, але різкішого гальмування. + + + Safety Gap Bias + Запас безпечної дистанції + + + <b>How much extra space openpilot keeps from the vehicle ahead in "Traffic Mode".</b> Increase for larger gaps and more cautious following; decrease for tighter gaps and closer following. + <b>Скільки додаткового простору openpilot зберігає від транспортного засобу, що рухається попереду, в «режимі трафік».</b> Збільшуйте для більших проміжків і більш обережного слідування; зменшуйте для менших проміжків і більш близького слідування. + + + Slowdown Response + Реакція на уповільнення + + + <b>How smoothly openpilot slows down in "Traffic Mode".</b> Increase for more gradual deceleration; decrease for faster but sharper slowdowns. + <b>Як плавно openpilot уповільнює рух у «Режимі трафік».</b> Збільште значення для більш поступового уповільнення; зменште значення для швидшого, але різкішого уповільнення. + + + Speed-Up Response + Реакція на прискорення + + + <b>How smoothly openpilot speeds up in "Traffic Mode".</b> Increase for more gradual acceleration; decrease for quicker but more jolting acceleration. + <b>Як плавно openpilot прискорюється в «Режимі трафік».</b> Збільште для більш поступового прискорення; зменште для більш швидкого, але більш різкого прискорення. + + + Reset to Defaults + Скинути до замовчань + + + <b>Reset "Traffic Mode" settings to defaults.</b> + <b>Скинути налаштування «Режим трафік» до заводських налаштувань.</b> + + + Aggressive + Агресивний + + + <b>Customize the "Aggressive" personality profile.</b> Designed for assertive driving with tighter gaps. + <b>Налаштуйте режим «Агресивний».</b> Призначений для впевненого водіння з меншими інтервалами між автомобілями. + + + <b>How many seconds openpilot follows behind lead vehicles when using the "Aggressive" profile.</b> Increase for more space; decrease for tighter gaps.<br><br>Default: 1.25 seconds. + <b>Скільки секунд openpilot слідує за авто попереду при використанні режиму «Агресивний».</b> Збільшуйте для більшого відстані; зменшуйте для меншої відстані.<br><br>За замовчуванням: 1,25 секунди. + + + <b>How smoothly openpilot accelerates with the "Aggressive" profile.</b> Increase for gentler starts; decrease for faster but more abrupt takeoffs. + <b>Як плавно openpilot прискорюється у режимі «Агресивний».</b> Збільште для більш плавного старту; зменште для швидшого, але більш різкого старту. + + + <b>How smoothly openpilot brakes with the "Aggressive" profile.</b> Increase for gentler stops; decrease for quicker but sharper braking. + <b>Як плавно гальмує openpilot у режимі «Агресивний».</b> Збільште для більш плавного гальмування; зменште для швидшого, але різкішого гальмування. + + + <b>How much extra space openpilot keeps from the vehicle ahead with the "Aggressive" profile.</b> Increase for larger gaps and more cautious following; decrease for tighter gaps and closer following. + <b>Скільки додаткового простору openpilot зберігає від транспортного засобу, що рухається попереду у режимі «Агресивний».</b> Збільшуйте для більших відстаней і більш обережного слідування; зменшуйте для менших відстаней і більш близького слідування. + + + <b>How smoothly openpilot slows down with the "Aggressive" profile.</b> Increase for more gradual deceleration; decrease for faster but sharper slowdowns. + <b>Як плавно openpilot уповільнюється у режимі «Агресивний».</b> Збільште для більш поступового уповільнення; зменште для швидшого, але різкішого уповільнення. + + + <b>How smoothly openpilot speeds up with the "Aggressive" profile.</b> Increase for more gradual acceleration; decrease for quicker but more jolting acceleration. + <b>Як плавно openpilot прискорюється у режимі «Агресивний».</b> Збільште для більш поступового прискорення; зменште для більш швидкого, але більш різкого прискорення. + + + <b>Reset the "Aggressive" profile to defaults.</b> + <b>Скинути налаштування режиму «Агресивний» до стандартних.</b> + + + <b>Customize the "Standard" personality profile.</b> Designed for balanced driving with moderate gaps. + <b>Налаштуйте «Стандартний» режим керування.</b> Призначений для збалансованого керування з помірними проміжками. + + + <b>How many seconds openpilot follows behind lead vehicles when using the "Standard" profile.</b> Increase for more space; decrease for tighter gaps.<br><br>Default: 1.45 seconds. + <b>Скільки секунд openpilot слідує за транспортними засобами попереду при використанні режиму «Стандартний».</b> Збільшуйте для більшої відстані; зменшуйте для меншої відстані.<br><br>За замовчуванням: 1,45 секунди. + + + <b>How smoothly openpilot accelerates with the "Standard" profile.</b> Increase for gentler starts; decrease for faster but more abrupt takeoffs. + <b>Як плавно openpilot прискорюється з режимом «Стандартний».</b> Збільште для більш плавного старту; зменште для більш швидкого, але різкого старту. + + + <b>How smoothly openpilot brakes with the "Standard" profile.</b> Increase for gentler stops; decrease for quicker but sharper braking. + <b>Як плавно гальмує openpilot у режимі «Стандартний».</b> Збільште для більш плавного гальмування; зменште для швидшого, але різкішого гальмування. + + + <b>How much extra space openpilot keeps from the vehicle ahead with the "Standard" profile.</b> Increase for larger gaps and more cautious following; decrease for tighter gaps and closer following. + <b>Скільки додаткового простору openpilot зберігає від транспортного засобу попереду, з режиму «Стандартний».</b> Збільшуйте для більших відстаней і більш обережного слідування; зменшуйте для менших відстаней і більш близького слідування. + + + <b>How smoothly openpilot slows down with the "Standard" profile.</b> Increase for more gradual deceleration; decrease for faster but sharper slowdowns. + <b>Як плавно openpilot уповільнюється у режимі «Стандартний».</b> Збільште значення для більш поступового уповільнення; зменште для швидшого, але різкішого уповільнення. + + + <b>How smoothly openpilot speeds up with the "Standard" profile.</b> Increase for more gradual acceleration; decrease for quicker but more jolting acceleration. + <b>Як плавно openpilot прискорюється у режимі «Стандартний».</b> Збільште для більш поступового прискорення; зменште для більш швидкого, але більш різкого прискорення. + + + <b>Reset the "Standard" profile to defaults.</b> + <b>Скинути налаштування режиму «Стандартний» до заводських налаштувань.</b> + + + Relaxed + Розслаблений + + + <b>Customize the "Relaxed" personality profile.</b> Designed for smoother, more comfortable driving with larger gaps. + <b>Налаштуйте режим керування «Розслаблений».</b> Призначений для більш плавного та комфортного керування з більшими проміжками. + + + <b>How many seconds openpilot follows behind lead vehicles when using the "Relaxed" profile.</b> Increase for more space; decrease for tighter gaps.<br><br>Default: 1.75 seconds. + <b>Скільки секунд openpilot слідує за попереду авто попереду при використанні режиму «Розслаблений».</b> Збільшуйте для більшого відстані; зменшуйте для меншої відстані.<br><br>За замовчуванням: 1,75 секунди. + + + <b>How smoothly openpilot accelerates with the "Relaxed" profile.</b> Increase for gentler starts; decrease for faster but more abrupt takeoffs. + <b>Як плавно openpilot прискорюється у режимі «Розслаблений».</b> Збільште для більш плавного старту; зменште для швидшого, але більш різкого старту. + + + <b>How smoothly openpilot brakes with the "Relaxed" profile.</b> Increase for gentler stops; decrease for quicker but sharper braking. + <b>Як плавно гальмує openpilot у режимі «Розслаблений».</b> Збільште для більш плавного гальмування; зменште для швидшого, але різкішого гальмування. + + + <b>How much extra space openpilot keeps from the vehicle ahead with the "Relaxed" profile.</b> Increase for larger gaps and more cautious following; decrease for tighter gaps and closer following. + <b>Скільки додаткового простору openpilot зберігає від транспортного засобу попереду, у режимі «Розслаблений».</b> Збільшуйте для більших проміжків і більш обережного слідування; зменшуйте для менших проміжків і більш близького слідування. + + + <b>How smoothly openpilot slows down with the "Relaxed" profile.</b> Increase for more gradual deceleration; decrease for faster but sharper slowdowns. + <b>Як плавно openpilot уповільнюється з у режимі «Розслаблений».</b> Збільште значення для більш поступового уповільнення; зменште для швидшого, але різкішого уповільнення. + + + <b>How smoothly openpilot speeds up with the "Relaxed" profile.</b> Increase for more gradual acceleration; decrease for quicker but more jolting acceleration. + <b>Як плавно openpilot прискорюється у режимі «Розслаблений».</b> Збільште для більш поступового прискорення; зменште для більш швидкого, але більш різкого прискорення. + + + <b>Reset the "Relaxed" profile to defaults.</b> + <b>Скинути режим «Розслаблений» до стандартних налаштувань.</b> + + + <b>Acceleration and braking control changes</b> to fine-tune how openpilot drives. + <b>Зміни в управлінні прискоренням і гальмуванням</b> для точного налаштування роботи керування openpilot. + + + <b>How quickly openpilot speeds up.</b> "Eco" is gentle and efficient, "Sport" is firmer and more responsive, and "Sport+" accelerates at the maximum rate allowed. + <b>Як швидко прискорюється openpilot.</b> «Еко» — м'який і ефективний, «Спорт» — більш жорсткий і чутливий, а «Спорт+» — прискорюється з максимально дозволеною швидкістю. + + + <b>How firmly openpilot slows down.</b> "Eco" favors coasting, "Sport" applies stronger braking. + <b>Наскільки сильно openpilot уповільнює рух. </b> «Еко» сприяє коченню, «Спорт» застосовує сильніше гальмування. + + + <b>Acceleration that mimics human behavior</b> by easing the throttle at low speeds and adding extra power when taking off from a stop. + <b>Прискорення, що імітує поведінку людини</b>, шляхом послаблення дросельної заслінки на низьких швидкостях і додавання додаткової потужності при рушанні з місця. + + + Human-Like Following + Людиноподібне слідування + + + <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. + <b>Поведінка, що імітує поведінку водіїв-людей</b>, шляхом скорочення відстані за швидшими транспортними засобами для швидшого старту та динамічного регулювання бажаної відстані для більш плавного та ефективного гальмування. + + + Lead Detection Sensitivity + Чутливість виявлення лідера + + + <b>How sensitive openpilot is to detecting vehicles.</b> Higher sensitivity allows quicker detection at longer distances but may react to non-vehicle objects; lower sensitivity is more conservative and reduces false detections. + <b>Чутливість openpilot до виявлення транспортних засобів.</b> Вища чутливість дозволяє швидше виявляти об'єкти на більшій відстані, але може реагувати на об'єкти, що не є транспортними засобами; нижча чутливість є більш консервативною і зменшує кількість помилкових виявлень. + + + Maximum Acceleration + Максимальне прискорення + + + <b>Limit the strongest acceleration</b> openpilot can command. + <b>Обмежте найсильніше прискорення</b>, яке може задавати openpilot. + + + <b>The turn-speed hack from comma's 2022 "Taco Bell Run".</b> Designed to slow down for left and right turns. + <b>Хак для швидкості повороту з поїздки comma «Taco Bell Run» 2022 року.</b> Призначений для уповільнення при поворотах вліво і вправо. + + + <b>Miscellaneous acceleration and braking control changes</b> to fine-tune how openpilot drives. + <b>Різні зміни в управлінні прискоренням і гальмуванням</b> для точного налаштування роботи openpilot. + + + <b>How much the set speed increases or decreases</b> for each + or – cruise control button press. + <b>На скільки збільшується або зменшується задана швидкість</b> при кожному натисканні кнопки + або – круїз-контролю. + + + Cruise Interval (Hold) + Інтервал круїзу (утримання) + + + <b>How much the set speed increases or decreases while holding the + or – cruise control buttons.</b> + <b>На скільки збільшується або зменшується задана швидкість при утриманні кнопок + або – круїз-контролю.</b> + + + Force Stop at "Detected" Stop Lights/Signs + Примус. зупин. на "Виявлених" світлоф./знаках + + + Increase Stopped Distance by: + Збільшити гальмівний шлях на: + + + <b>Add extra space when stopped behind vehicles.</b> Increase for more room; decrease for shorter gaps. + <b>Додайте додатковий простір, коли зупиняєтеся за транспортними засобами.</b> Збільшуйте для більшого простору; зменшуйте для менших проміжків. + + + <b>Map the Acceleration or Deceleration profiles to the vehicle's "Eco" and "Sport" gear modes.</b> + <b>Прив'яжіть профілі прискорення або уповільнення до режимів передач «Еко» та «Спорт» автомобіля.</b> + + + Offset Set Speed by: + Зсув швидкості на: + + + <b>Increase the set speed by the chosen offset.</b> For example, set +5 if you usually drive 5 over the limit. + <b>Збільште задану швидкість на вибране відхилення.</b> Наприклад, встановіть +5, якщо ви зазвичай перевищуєте обмеження на 5 км/год. + + + <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. + <b>Змініть поведінку кнопки круїз-контролю</b> так, щоб коротке натискання збільшувало задану швидкість на 5 замість 1. + + + Snow + Сніг + + + <b>Driving adjustments for snowy conditions.</b> + <b>Регулювання керування в сніжних умовах.</b> + + + Increase Following Distance by: + Збільште дистанцію на: + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>Збільшуйте відстань за автомобілями, що їдуть попереду, під час снігу.</b> Збільшуйте відстань для більшого простору; зменшуйте відстань для меншого простору. + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>Додайте додатковий запас безпеки, зупинившись за автомобілями на засніженій дорозі.</b> Збільшуйте відстань для більшого простору; зменшуйте для менших проміжків. + + + Reduce Acceleration by: + Зменшити прискорення на: + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Зменште максимальне прискорення на снігу.</b> Збільште для більш м'якого зрушання; зменште для швидшого, але менш стабільного зрушання. + + + Reduce Speed in Curves by: + Зменшуйте швидкість у вигинах на: + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Зменште бажану швидкість під час руху по вигинах дороги на снігу.</b> Збільште швидкість для більш безпечних і плавних вигинів; зменште швидкість для більш агресивного руху у вигинах. + + + <b>Limit openpilot's maximum driving speed to the current speed limit</b> obtained from downloaded maps, Mapbox, Navigate on openpilot, or the dashboard for supported vehicles (Ford, Genesis, Hyundai, Kia, Lexus, Toyota). + <b>Обмежте максимальну швидкість руху openpilot до поточного обмеження швидкості</b>, отриманого з завантажених карт, Mapbox, Navigate на openpilot або приладової панелі для підтримуваних автомобілів (Ford, Genesis, Hyundai, Kia, Lexus, Toyota). + + + <b>The speed used by "Speed Limit Controller" when no speed limit is found.</b><br><br>- <b>Set Speed</b>: Use the cruise set speed<br>- <b>Experimental Mode</b>: Estimate the limit using the driving model<br>- <b>Previous Limit</b>: Keep using the last confirmed limit + <b>Швидкість, яка використовується «Контролером обмеження швидкості», коли обмеження швидкості не виявлено.</b><br><br>- <b>Встановити швидкість</b>: Використовувати встановлену швидкість круїз-контролю<br>- <b>Експериментальний режим</b>: Оцінити обмеження за допомогою моделі водіння<br>- <b>Попереднє обмеження</b>: Продовжувати використовувати останнє підтверджене обмеження + + + <b>The speed used by "Speed Limit Controller" after you manually drive faster than the posted limit.</b><br><br>- <b>Set with Gas Pedal</b>: Use the highest speed reached while pressing the gas<br>- <b>Max Set Speed</b>: Use the cruise set speed<br><br>Overrides clear when openpilot disengages. + <b>Швидкість, яку використовує «Контролер обмеження швидкості» після того, як ви вручну перевищили встановлене обмеження. </b><br><br>- <b>Встановлюється за допомогою педалі газу</b>: використовується найвища швидкість, досягнута під час натискання на педаль газу<br>- <b>Максимальна встановлена швидкість</b>: використовується встановлена швидкість круїз-контролю<br><br>Перезапис скасовується, коли OpenPilot деактивується. + + + <b>Miscellaneous "Speed Limit Controller" changes</b> to fine-tune how openpilot drives. + <b>Різні зміни в «Контролері обмеження швидкості»</b> для точного налаштування керуваня openpilot. + + + <b>Ask before changing to a new speed limit.</b> To accept, tap the flashing on-screen widget or press the Cruise Increase button. To deny, press the Cruise Decrease button or ignore the prompt for 30 seconds. + <b>Запитайте перед зміною на нову швидкість. </b> Щоб прийняти, натисніть на миготливий віджет на екрані або натисніть кнопку «Збільшити швидкість». Щоб відмовити, натисніть кнопку «Зменшити швидкість» або проігноруйте запит протягом 30 секунд. + + + Force MPH from Dashboard + Примус МНГ з приборки + + + <b>Always read dashboard speed limit signs in mph.</b> Turn this on if the cluster shows mph but the limit is interpreted as km/h. + <b>Завжди читайте знаки обмеження швидкості на приладовій панелі в милях на годину (мнг).</b> Увімкніть цю опцію, якщо приладова панель показує mph, але обмеження інтерпретується як км/год. + + + <b>How far ahead openpilot anticipates upcoming higher speed limits</b> from downloaded map data. + <b>Наскільки заздалегідь openpilot передбачає підвищення швидкісних обмежень</b> на основі завантажених даних мапи. + + + <b>How far ahead openpilot anticipates upcoming lower speed limits</b> from downloaded map data. + <b>Наскільки заздалегідь openpilot передбачає майбутні нижчі обмеження швидкості</b> на основі завантажених даних мапи. + + + <b>When openpilot is first enabled, automatically set the max speed to the current posted limit.</b> + <b>При першому ввімкненні openpilot автоматично встановлюйте максимальну швидкість відповідно до поточного обмеження.</b> + + + <b>Use Mapbox speed-limit data when no other source is available.</b> + <b>Використовуйте дані Mapbox про обмеження швидкості, якщо немає інших джерел інформації.</b> + + + <b>The source order for speed limits</b> when more than one is available. + <b>Порядок джерел для обмежень швидкості</b>, коли доступно більше одного. + + + <b>Add an offset to the posted speed limit</b> to better match your driving style. + <b>Додайте зсув від встановленого обмеження швидкості</b>, щоб краще відповідати вашому стилю керування. + + + <b>How much to offset posted speed-limits</b> between 0 and 24 mph. + <b>На скільки перевищувати встановлені обмеження швидкості</b> від 0 до 24 миль/год. + + + <b>How much to offset posted speed-limits</b> between 25 and 34 mph. + <b>На скільки перевищувати встановлені обмеження швидкості</b> від 25 до 34 миль/год. + + + <b>How much to offset posted speed-limits</b> between 35 and 44 mph. + <b>На скільки перевищувати встановлені обмеження швидкості</b> від 35 до 44 миль/год. + + + <b>How much to offset posted speed-limits</b> between 45 and 54 mph. + <b>На скільки перевищувати встановлені обмеження швидкості</b> від 45 до 54 миль/год. + + + <b>How much to offset posted speed-limits</b> between 55 and 64 mph. + <b>На скільки перевищувати встановлені обмеження швидкості</b> між 55 і 64 милями на годину. + + + <b>How much to offset posted speed-limits</b> between 65 and 74 mph. + <b>На скільки перевищувати встановлені обмеження швидкості</b> від 65 до 74 миль/год. + + + <b>How much to offset posted speed-limits</b> between 75 and 99 mph. + <b>На скільки перевищувати встановлені обмеження швидкості</b> від 75 до 99 миль/год. + + + <b>Visual "Speed Limit Controller" changes</b> to fine-tune how the driving screen looks. + <b>Візуальні зміни «регулятора обмеження швидкості»</b> для точного налаштування вигляду екрана керування. + + + <b>Show the current offset from the posted limit</b> on the driving screen. + <b>Показати поточне відхилення від встановленого ліміту</b> на екрані керування. + + + <b>Display the speed-limit sources and their current values</b> on the driving screen. + <b>Відображення джерел обмеження швидкості та їх поточних значень</b> на екрані керування. + + + <b>Switch to "Experimental Mode" when driving below this speed with a lead</b> to help openpilot handle low-speed situations more smoothly. + <b>Перейдіть в «Експериментальний режим», коли їдете більше цієї швидкості з лідером</b>, щоб допомогти openpilot більш плавно справлятися з ситуаціями на низькій швидкості. + + + Not For Detected Lanes + Не для виявл. смуг + + + Are you sure you want to completely reset your curvature data? + Ви впевнені, що хочете повністю скинути дані про вигини? + + + "Detected" Stop Lights/Signs + Виявлені світлофори/знаки «Стоп» + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Перемикайтеся в «Експериментальний режим» щоразу, коли модель керування «виявляє» червоне світло або знак зупинки.</b><br><br><i><b>Застереження</b>: openpilot не здійснює явного виявлення світлофорів або знаків зупинки. В «Експериментальному режимі» openpilot приймає наскрізні рішення щодо керування на основі зображення з камери, що означає, що він може зупинятися навіть без очевидної причини!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Перемикайтеся на «Експериментальний режим», коли openpilot прогнозує зупинку в межах заданого часу.</b> Зазвичай це спрацьовує, коли модель «бачить» попереду червоне світло або знак «Стоп».<br><br><i><b>Відмова від відповідальності</b>: openpilot не виконує явного виявлення світлофорів або знаків «Стоп». В «Експериментальному режимі» openpilot приймає комплексні рішення щодо керування на основі зображення з камери, що означає, що він може зупинитися навіть без очевидної причини!</i> + + + Human-Like Lane Changes + Подібні до людських зміни смуги + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>Поведінка зміни смуги, що імітує людських водіїв</b>, завдяки передбаченню та відстеженню сусідніх транспортних засобів під час перестроювань. + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>Примусово змушувати openpilot зупинятися щоразу, коли драйвінг-модель «виявляє» червоне світло або знак «Стоп».</b><br><br><i><b>Відмова від відповідальності</b>: openpilot не виконує явного виявлення світлофорів або знаків «Стоп». У «Експериментальному режимі» openpilot приймає наскрізні рішення керування за даними з камер, що означає, що він може зупинятися навіть без очевидної причини!</i> + + + Weather Condition Offsets + Корекції для погодних умов + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>Автоматично коригує поведінку керування залежно від погодних умов у реальному часі.</b> Допомагає підтримувати комфорт і безпеку за низької видимості, дощу або снігу. + + + Low Visibility + Погана видимість + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>Коригування керування для туману, імли або інших умов з низькою видимістю.</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>Додавайте більше відстані за попереднім авто за низької видимості.</b> Збільшуйте для більшого інтервалу; зменшуйте для менших проміжків. + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>Додавайте додатковий запас, зупиняючись позаду транспортних засобів за низької видимості.</b> Збільшуйте для більшого інтервалу; зменшуйте для коротших проміжків. + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Зменшуйте максимальне прискорення за поганої видимості.</b> Збільшуйте для м’якших стартів; зменшуйте для швидших, але менш стабільних стартів. + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Зменшуйте бажану швидкість під час руху по поворотах за низької видимості.</b> Збільшуйте для безпечніших, плавніших поворотів; зменшуйте для агресивнішого проходження поворотів. + + + Rain + Дощ + + + <b>Driving adjustments for rainy conditions.</b> + <b>Коригування водіння в дощових умовах.</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>Додати більше дистанції позаду лідируючих авто під час дощу.</b> Збільшуйте для більшого інтервалу; зменшуйте для менших проміжків. + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>Додавайте додатковий інтервал під час зупинки позаду авто під дощем.</b> Збільшуйте для більшого простору; зменшуйте для коротших інтервалів. + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Зменште максимальне прискорення під час дощу.</b> Збільшуйте для м’якших стартів; зменшуйте для швидших, але менш стабільних стартів. + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Зменшуйте бажану швидкість під час проїзду поворотів під дощем.</b> Підвищуйте для безпечніших, плавніших поворотів; знижуйте для агресивнішого проходження поворотів. + + + Rainstorms + Зливи + + + <b>Driving adjustments for rainstorms.</b> + <b>Коригування водіння під час злив.</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>Додавайте додаткову дистанцію позаду попереду йдучих авто під час сильної зливи.</b> Збільшуйте для більшої дистанції; зменшуйте для менших інтервалів. + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>Додавайте додатковий інтервал, зупиняючись позаду авто під час зливи.</b> Збільшуйте для більшого простору; зменшуйте для коротших інтервалів. + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>Зменшуйте максимальне прискорення під час зливи.</b> Збільшіть для м’якших стартів; зменште для швидших, але менш стабільних стартів. + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>Зменшуйте бажану швидкість під час руху по поворотах у зливу.</b> Збільшуйте для безпечніших, плавніших поворотів; зменшуйте для агресивнішого руху в поворотах. + + + Set Your Own Key + Встановіть власний ключ + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>Встановіть власний ключ «OpenWeatherMap», щоб підвищити частоту оновлення погоди.</b><br><br><i>Персональні ключі надають 1 000 безкоштовних запитів на день, що дозволяє оновлювати щохвилини. Типовий ключ спільний і оновлюється лише кожні 15 хвилин.</i> + + + ADD + ДОДАТИ + + + Enter your "OpenWeatherMap" key + Введіть свій ключ "OpenWeatherMap" + + + REMOVE + ВИДАЛИТИ + + + Invalid key! + Недійсний ключ! + + + Are you sure you want to remove your key? + Ви впевнені, що хочете видалити свій ключ? + + + TEST + ТЕСТ + + + Testing... + Тестування... + + + Key is valid! + Ключ дійсний! + + + An error occurred: %1 + Сталася помилка: %1 + + + + FrogPilotManageControl + + MANAGE + КЕРУВАТИ + + + + FrogPilotMapsPanel + + Manually + Уручну + + + Weekly + Щотижн. + + + Monthly + Щомісячн. + + + Automatically Update Maps + Авто оновлення карт + + + COUNTRIES + КРАЇНИ + + + STATES + ШТАТИ + + + Download Maps + Завантажити мапи + + + DOWNLOAD + ЗАВАНТАЖ + + + CANCEL + СКАСУВАТИ + + + Remove Maps + Прибрати мапи + + + REMOVE + ПРИБРАТИ + + + RESET + СКИНУТИ + + + Reset + Скинути + + + Resetting... + Скидання... + + + Reset! + Скинути! + + + Rebooting... + Перезавантаження... + + + Africa + Африка + + + Antarctica + Антарктида + + + Asia + Азія + + + Europe + Європа + + + North America + Північна Америка + + + Oceania + Океанія + + + South America + Південна Америка + + + United States - Midwest + Сполучені Штати Америки - Середній Захід + + + United States - Northeast + Сполучені Штати Америки - Північний Схід + + + United States - South + Сполучені Штати Америки - Південь + + + United States - West + Сполучені Штати Америки - Захід + + + United States - Territories + Сполучені Штати Америки - Території + + + Offline... + Не в мережі... + + + Calculating... + Розрахунок... + + + Not parked + Запаркуйтесь + + + 0 MB + 0 МБ + + + <b>How often maps update</b> from "OpenStreetMap (OSM)" with the latest speed limit information. Weekly updates run every Sunday; monthly updates run on the 1st. + <b>Як часто оновлюються карти</b> з «OpenStreetMap (OSM)» з останньою інформацією про обмеження швидкості. Щотижневі оновлення відбуваються щонеділі, щомісячні оновлення — 1 числа кожного місяця. + + + <b>Manually update your selected map sources</b> so "Speed Limit Controller" has the latest speed limit information. + <b>Вручну оновлюйте вибрані джерела карт</b>, щоб «Контролер обмежень швидкості» мав найновішу інформацію про обмеження швидкості. + + + Cancel the download? + Скасувати завантаження? + + + Last Updated + Останнє оновлення + + + Map Sources + Джерела мап + + + <b>Select the countries or U.S. states to use with "Speed Limit Controller".</b> + <b>Виберіть країни або штати США, які будуть використовуватися з «Контролером швидкісного обмеження».</b> + + + Progress + Прогрес + + + Time Elapsed + Пройшло + + + Time Remaining + Залишилось + + + <b>Delete downloaded map data</b> to free up storage space. + <b>Видаліть завантажені дані карти</b>, щоб звільнити місце у сховищі. + + + Delete all downloaded maps? + Видалити всі завантажені мапи? + + + Reset Downloader + Скинути завантажувач + + + <b>Reset the map downloader.</b> Use this if downloads are stuck or failing. + <b>Скинути налаштування програми завантаження карт.</b> Використовуйте цю опцію, якщо завантаження застрягло або не вдається. + + + Reset the map downloader? Your device will reboot afterward. + Скинути завантажувач мап? Після цього пристрій перезавантажиться. + + + Storage Used + Використано сховища + + + + FrogPilotModelPanel + + Automatically Download New Models + Автоматично завантажувати нові моделі + + + Delete Driving Models + Видалити моделі керування + + + Download Driving Models + Вантаж моделі керув. + + + Model Randomizer + Випадкова модель + + + Manage Model Blacklist + Чорний список моделей + + + Manage Model Ratings + Рейтинг моделей + + + Select Driving Model + Виберіть модель керування + + + DELETE + ВИДАЛИТИ + + + DELETE ALL + ВИДАЛИТИ. УСІ + + + Select a driving model to delete + Виберіть модель керування, яку потрібно видалити + + + Are you sure you want to delete the "%1" model? + Ви впевнені, що хочете видалити модель «%1»? + + + Delete + Видалити + + + Are you sure you want to delete all of your downloaded driving models? + Ви впевнені, що хочете видалити всі завантажені моделі керування? + + + DOWNLOAD + ЗАВАНТАЖИТИ + + + DOWNLOAD ALL + ВАНТАЖИТИ ВСЕ + + + Select a driving model to download + Виберіть модель керування для завантаження + + + CANCEL + СКАСУВАТИ + + + ADD + ДОДАТИ + + + REMOVE + ПРИБР. + + + REMOVE ALL + ПРИБ. ВСІ + + + Are you sure you want to add the "%1" model to the blacklist? + Ви впевнені, що хочете додати модель «%1» до чорного списку? + + + Add + Додати + + + Are you sure you want to remove the "%1" model from the blacklist? + Ви впевнені, що хочете видалити модель «%1» із чорного списку? + + + Remove + Видалити + + + RESET + СКИНУТИ + + + VIEW + ПЕРЕГЛЯНУТИ + + + SELECT + ВИБРАТИ + + + Offline... + Не в мережі... + + + Downloading... + Завантаження... + + + Downloaded! + Завантажив! + + + All models downloaded! + Всі моделі завантажено! + + + Download cancelled... + Завантаження скасовано... + + + Download failed... + Завантаження не вдалося... + + + GitHub and GitLab are offline... + GitHub і GitLab не працюють... + + + Repository unavailable + Репозиторій недоступний + + + <b>Automatically download new driving models</b> as they become available. + <b>Автоматично завантажуйте нові моделі керування</b> по мірі їх появи. + + + <b>Delete downloaded driving models</b> to free up storage space. + <b>Видаліть завантажені моделі керування</b>, щоб звільнити місце у сховищі. + + + <b>Manually download driving models</b> to the device. + <b>Вручну завантажте моделі керування</b> на пристрій. + + + <b>Select a random driving model each drive</b> and use feedback prompts at the end of the drive to help find the model that best suits you! + <b>Вибирайте випадкову модель керування для кожної поїздки</b> і використовуйте підказки, що з'являються в кінці поїздки, щоб знайти модель, яка найкраще підходить саме вам! + + + <b>Add or remove driving models from the "Model Randomizer" blacklist.</b> + <b>Додавання або видалення моделей керування з чорного списку «Випадкової моделі».</b> + + + <b>View or reset saved model ratings</b> used by the "Model Randomizer". + <b>Переглянути або скинути збережені оцінки моделей</b>, які використовуються у «Випадкова модель». + + + <b>Choose which driving model openpilot uses.</b> + <b>Виберіть модель керування, яку використовує openpilot.</b> + + + Update Model Manager + Оновити менеджер моделей + + + <b>Update the "Model Manager"</b> to support the latest models. + <b>Оновіть «Менеджер моделей»</b>, щоб підтримувати найновіші моделі. + + + Tinygrad is out of date and must be updated before you can download new models. Update now? + Tinygrad застарів і його необхідно оновити, перш ніж ви зможете завантажувати нові моделі. Оновити зараз? + + + Updating Tinygrad will delete all existing Tinygrad-based models which will need to be re-downloaded. Proceed? + Оновлення Tinygrad призведе до видалення всіх існуючих моделей на базі Tinygrad, які потрібно буде завантажити заново. Продовжувати? + + + Updating... + Оновлення... + + + There are no more driving models to blacklist. The only available model is "%1"! + Більше немає моделей керування, які можна внести до чорного списку. Єдина доступна модель — «%1»! + + + Select a driving model to add to the blacklist + Виберіть модель керування, яку потрібно додати до чорного списку + + + Select a driving model to remove from the blacklist + Виберіть модель керування, яку потрібно видалити з чорного списку + + + Are you sure you want to remove all of your blacklisted driving models? + Ви впевнені, що хочете видалити всі свої моделі у чорному списку? + + + Reset all model drives and ratings? This clears your drive history and collected feedback! + Скинути всі поїздки моделей та рейтинги? Це очистить історію поїздок і зібрані відгуки! + + + Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC + Виберіть модель — 🗺️ = Навіг. | 📡 = Радар | 👀 = Бачення + + + UPDATE + ОНОВЛ. + + + Cancelling... + Відміна... + + + Updating Tinygrad will delete existing Tinygrad-based driving models and need to be re-downloaded. Proceed? + Оновлення Tinygrad призведе до видалення існуючих моделей керування на базі Tinygrad, які необхідно буде завантажити заново. Продовжувати? + + + The "Model Randomizer" works only with downloaded models. Download all models now? + «Випадкова модель» працює тільки з завантаженими моделями. Завантажити всі моделі зараз? + + + Update available! + Оновлення доступне! + + + Up to date! + Оновлено! + + + Not parked + Запаркуйтесь + + + + FrogPilotModelReview + + Drive Rating Selection + Вибір рейтингу поїздки + + + How would you rate that drive? + Як би ви оцінили цю поїздку? + + + Blacklist this model to remove it from rotation + Додати цю модель до чорного списку, щоб видалити її з ротації + + + Blacklist Model + Модель у ЧС + + + Model used during that drive: + Модель протягом цієї поїздки: + + + Model Rank + Ранг моделі + + + Model Rating + Рейтинг моделі + + + Model Drives + Поїздок моделі + + + Total Drives + Всього поїздок + + + Model successfully blacklisted! + Модель успішно внесена до чорного списку! + + + #%1 + №%1 + + + %1% + %1% + + + %1 %2 + %1 %2 + + + Drive + Поїздка + + + Drives + Поїздок + + + %1 Total %2 + %1 Загалом %2 + + + + FrogPilotNavigationPanel + + ADD + ДОДАТ + + + Enter your %1 + Введіть ваш %1 + + + Inputted key is invalid or too short! + Введений ключ недійсний або занадто короткий! + + + REMOVE + ПРИБРАТИ + + + Manage Your Settings At + Керуйте своїми налаштуваннями на + + + Offline... + Не в мережі... + + + Amap + Amap + + + Destination Search Provider + Постачальник пошуку + + + Amap Key #1 + Ключ Amap № 1 + + + Amap Key #2 + Ключ Amap № 2 + + + Public Mapbox Key + Публічний ключ Mapbox + + + Secret Mapbox Key + Секретний ключ Mapbox + + + VIEW + ПОКАЗ + + + CANCEL + ВІДМІНА + + + Manually Update Speed Limits + Вручну оновити обмеження швидкості + + + Speed Limit Filler + Заповнювач обмеження швидкості + + + Cancelled... + Скасовано... + + + Completed! + Завершено! + + + Mapbox + Mapbox + + + <b>The search provider used for destination queries</b> in "Navigate on Openpilot". Options include Mapbox (recommended) and Amap. + <b>Пошукова система, яка використовується для запитів про місце призначення</b> у «Навігація на Openpilot». Доступні варіанти: Mapbox (рекомендовано) та Amap. + + + Mapbox Setup Instructions + Інструкції з налаштування Mapbox + + + <b>Instructions on how to set up Mapbox</b> for "Primeless Navigation". + <b>Інструкції щодо налаштування Mapbox</b> для «Навігації без Prime підписки від comma». + + + <b>Automatically collect missing or incorrect speed limits while you drive</b> using speeds limits sourced from your dashboard (if supported), Mapbox, and "Navigate on openpilot".<br><br>When you're parked and connected to Wi-Fi, FrogPilot will automatically processes this data into a file to be used with the tool located at "SpeedLimitFiller.frogpilot.download".<br><br>You can download this file from "The Pond" in the "Download Speed Limits" menu.<br><br>Need a step-by-step guide? Visit <b>#speed-limit-filler</b> in the FrogPilot Discord! + <b>Автоматично збирайте відсутні або неправильні обмеження швидкості під час руху</b> за допомогою обмежень швидкості, отриманих з вашої приладової панелі (якщо це підтримується), Mapbox та «Navigate on openpilot».<br><br>Коли ви припаркувалися і підключилися до Wi-Fi, FrogPilot автоматично обробляє ці дані у файл, який можна використовувати за допомогою інструменту, розташованого за адресою «SpeedLimitFiller.frogpilot.download». <br><br>Ви можете завантажити цей файл з «The Pond» у меню «Завантажити обмеження швидкості».<br><br>Потрібна покрокова інструкція? Відвідайте <b>#speed-limit-filler</b> у FrogPilot Discord! + + + Cancel the speed-limit update? + Скасувати оновлення обмежень швидкості? + + + You've hit today's request limit. + +It will reset in %1 hours and %2 minutes. + Ви досягли сьогоднішнього ліміту запитів. + +Він буде скинутий через %1 годин і %2 хвилин. + + + This process takes a while. It's recommended to start when you're done driving and connected to stable Wi-Fi. Continue? + Цей процес займає деякий час. Рекомендую робити після завершення поїздки та підключення до стабільного Wi-Fi. Продовжити? + + + <b>Manage your "%1".</b> + <b>Змінюйте свій «%1».</b> + + + Remove your %1? + Видалити ваш %1? + + + <b>Manage your Public Mapbox Key.</b> + <b>Керуйте своїм публічним ключем Mapbox.</b> + + + TEST + ТЕСТ + + + Remove your Public Mapbox Key? + Видалити ваш публічний ключ Mapbox? + + + Enter your Public Mapbox Key + Введіть свій публічний ключ Mapbox + + + Testing... + Тестування... + + + Key is valid! + Ключ дійсний! + + + Key is invalid! + Ключ недійсний! + + + An error occurred: %1 + Сталася помилка: %1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>Керуйте своїм секретним ключем Mapbox.</b> + + + Remove your Secret Mapbox Key? + Вилучити ваш секретний ключ Mapbox? + + + Enter your Secret Mapbox Key + Введіть свій секретний ключ Mapbox + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + КНС: %1 | Мін: %2 | Макс: %3 | Сер.: %4 + + + + FrogPilotSettingsWindow + + MANAGE + КЕРУВАТИ + + + DRIVING MODEL + МОДЕЛЬ ВОДІННЯ + + + GAS / BRAKE + ГАЗ / ГАЛЬМ + + + STEERING + КЕРМО + + + MAP DATA + ДАНІ МАП + + + NAVIGATION + НАВІГАЦІЯ + + + DATA + ДАНІ + + + DEVICE CONTROLS + ПРИСТРІЙ + + + UTILITIES + УТИЛІТИ + + + APPEARANCE + ВИГЛЯД + + + THEME + ТЕМА + + + VEHICLE SETTINGS + НАЛАШТУВАННЯ Т/З + + + WHEEL CONTROLS + КНОПКИ КЕРМА + + + Alerts and Sounds + Сповіщення та звуки + + + Driving Controls + Налашт. водіння + + + Navigation + Навігація + + + Theme and Appearance + Тема та вигляд + + + Minimal + Мінімум + + + Standard + Стандарт + + + Advanced + Просун. + + + Developer + Розробн. + + + Tuning Level + Рівень налашт. + + + <b>Adjust alert volumes and enable custom notifications.</b> + <b>Налаштуйте гучність сповіщень та увімкніть персоналізовані сповіщення.</b> + + + <b>Fine-tune custom FrogPilot acceleration, braking, and steering controls.</b> + <b>Точне налаштування користувацьких елементів керування прискоренням, гальмуванням та рульовим керуванням FrogPilot.</b> + + + <b>Download map data for the "Speed Limit Controller" and configure "Navigate on openpilot" (NOO).</b> + <b>Завантажте картографічні дані для «Контролера обмеження швидкості» та налаштуйте «Навігацію на openpilot» (NOO).</b> + + + System Settings + Налаштування системи + + + <b>Manage backups, device settings, screen options, storage, and tools to keep FrogPilot running smoothly.</b> + <b>Керуйте резервними копіями, налаштуваннями пристрою, параметрами екрана, сховищем та інструментами, щоб забезпечити безперебійну роботу FrogPilot.</b> + + + <b>Customize the look of the driving screen and interface, including themes!</b> + <b>Налаштуйте зовнішній вигляд екрану водіння та інтерфейсу, включаючи теми!</b> + + + Vehicle Settings + Налаштування авто + + + <b>Configure car-specific options and steering wheel button mappings.</b> + <b>Налаштуйте параметри для конкретного автомобіля та призначення кнопок на кермі.</b> + + + Choose your tuning level. Lower levels keep it simple; higher levels unlock more toggles for finer control. + +Minimal - Ideal for those who prefer simplicity or ease of use +Standard - Recommended for most users for a balanced experience +Advanced - Fine-tuning for experienced users +Developer - Highly customizable settings for seasoned enthusiasts + Виберіть рівень налаштування. Нижчі рівні забезпечують простоту, вищі рівні відкривають більше перемикачів для більш точного контролю. + +Мінімальний — ідеальний для тих, хто віддає перевагу простоті та зручності використання. +Стандартний — рекомендується для більшості користувачів для збалансованого досвіду. +Розширений — точне налаштування для досвідчених користувачів. +Розробник — налаштування з високим рівнем налаштування для досвідчених ентузіастів. + + + WARNING: These settings are risky and can drastically change how openpilot drives. Only change if you fully understand what they do! + «УВАГА: Тут є небезпечні налаштування, які можуть зашкодити керуванню!» + + + All toggle descriptions are currently expanded. You can tap a toggle's name to open or close its description at any time! + Всі описи налаштувань наразі розгорнуті. Ви можете натиснути на назву перемикача, щоб відкрити або закрити його опис у будь-який момент! + + + + FrogPilotSoundsPanel + + Disengage Volume + Гучність деактивації + + + Engage Volume + Гучність активації + + + Prompt Volume + Гучність підказок + + + Prompt Distracted Volume + Гучність відволікання + + + Refuse Volume + Гучність відмови + + + Warning Soft Volume + Гучність мʼяких попередж. + + + Warning Immediate Volume + Гучність негайн. сповіщ. + + + FrogPilot Alerts + Сповіщення FrogPilot + + + Green Light Alert + Сигнал зеленого світла + + + Lead Departing Alert + Сигнал про відправлення + + + Loud "Car Detected in Blindspot" Alert + Гучне «Т/З виявлено в сліпій зоні» + + + Speed Limit Changed Alert + Сигнал про зміну ліміта швидк. + + + Muted + Тихо + + + Auto + Авто + + + Test + Тест + + + Alert Volume Controller + Регулятор гучності сповіщень + + + <b>Set how loud each type of openpilot alert is</b> to keep routine prompts from becoming distracting. + <b>Встановіть гучність кожного типу сповіщень OpenPilot</b>, щоб рутинні підказки не відволікали увагу. + + + <b>Set the volume for alerts when openpilot disengages.</b><br><br>Examples include: "Cruise Fault: Restart the Car", "Parking Brake Engaged", "Pedal Pressed". + <b>Встановіть гучність сповіщень, коли openpilot деактивується.</b><br><br>Приклади: «Помилка круїз-контролю: перезапустіть автомобіль», «Задіяний гальмо стоянки», «Натиснута педаль». + + + <b>Set the volume for the chime when openpilot engages</b>, such as after pressing the "RESUME" or "SET" steering wheel buttons. + <b>Встановіть гучність звукового сигналу при активації openpilot</b>, наприклад, після натискання кнопок «RESUME» або «SET» на кермі. + + + <b>Set the volume for prompts that need attention.</b><br><br>Examples include: "Car Detected in Blindspot", "Steering Temporarily Unavailable", "Turn Exceeds Steering Limit". + <b>Встановіть гучність для повідомлень, які вимагають уваги.</b><br><br>Приклади: «Автомобіль виявлено в сліпій зоні», «Керування тимчасово недоступне», «Поворот перевищує межу керованості». + + + <b>Set the volume for prompts when openpilot detects driver distraction or unresponsiveness.</b><br><br>Examples include: "Pay Attention", "Touch Steering Wheel". + <b>Встановіть гучність підказок, коли openpilot виявляє відволікання уваги водія або його нереагування. </b><br><br>Приклади: «Зверніть увагу», «Доторкніться до керма». + + + <b>Set the volume for alerts when openpilot refuses to engage.</b><br><br>Examples include: "Brake Hold Active", "Door Open", "Seatbelt Unlatched". + <b>Встановіть гучність сповіщень, коли openpilot відмовляється вмикатися.</b><br><br>Приклади: «Гальмо увімкнено», «Двері відчинені», «Ремінь безпеки не застебнуто». + + + <b>Set the volume for softer warnings about potential risks.</b><br><br>Examples include: "BRAKE! Risk of Collision", "Steering Temporarily Unavailable". + <b>Встановіть гучність для більш тихих попереджень про потенційні ризики.</b><br><br>Приклади: «ГАЛЬМУЙТЕ! Ризик зіткнення», «Керування тимчасово недоступне». + + + <b>Set the volume for the loudest warnings that require urgent attention.</b><br><br>Examples include: "DISENGAGE IMMEDIATELY — Driver Distracted", "DISENGAGE IMMEDIATELY — Driver Unresponsive". + <b>Встановіть гучність для найгучніших попереджень, які вимагають негайної уваги.</b><br><br>Приклади: «НЕГАЙНА ДЕАКТИВАЦІЯ — Водій відволікся», «НЕГАЙНА ДЕАКТИВАЦІЯ — Водій не реагує». + + + <b>Optional FrogPilot alerts</b> that highlight driving events in a more noticeable way. + <b>Додаткові сповіщення FrogPilot</b>, які більш помітно підкреслюють події під час руху. + + + Goat Scream + Козлячий крик + + + <b>Play the infamous "Goat Scream" when the steering controller reaches its limit.</b> Based on the "Turn Exceeds Steering Limit" event. + <b>Відтворюйте сумнозвісний «крик кози», коли кермовий контролер досягає своєї межі.</b> На основі події «Поворот перевищує межу кермування». + + + <b>Play an alert when the model predicts a red light has turned green.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights. This alert is based on end-to-end model predictions from camera input and may trigger even when the light has not changed.</i> + <b>Відтворювати попередження, коли модель прогнозує, що червоне світло змінилося на зелене.</b><br><br><i><b>Застереження</b>: openpilot не визначає світлофори безпосередньо. Це попередження базується на прогнозах моделі на основі даних з камери і може спрацьовувати навіть тоді, коли світло не змінилося.</i> + + + <b>Play an alert when the lead vehicle departs from a stop.</b> + <b>Відтворювати звуковий сигнал, коли транспортний засіб попереду від'їжджає.</b> + + + <b>Play a louder alert if a vehicle is in the blind spot when attempting to change lanes.</b> Based on the "Car Detected in Blindspot" event. + <b>Відтворювати гучніше попередження, якщо під час спроби змінити смугу руху в сліпій зоні знаходиться транспортний засіб.</b> На основі події «Виявлено автомобіль у сліпій зоні». + + + <b>Play an alert when the posted speed limit changes.</b> + <b>Відтворювати попередження, коли змінюється встановлене обмеження швидкості.</b> + + + + FrogPilotThemesPanel + + Color Scheme + Колірна гамма + + + Icon Pack + Набір іконок + + + Sound Pack + Звуковий пакет + + + Steering Wheel + Кермо + + + Turn Signal + Поворотник + + + Download Status + Стан завантаження + + + Holiday Themes + Святкові теми + + + Rainbow Path + Веселковий Шлях + + + Random Events + Випадкові події + + + Random Themes + Випадкові теми + + + Startup Alert + Текст старту + + + DELETE + ВИДАЛИТИ + + + DOWNLOAD + СКАЧАТИ + + + SELECT + ВИБРАТИ + + + Select a color scheme to delete + Виберіть колірну схему для видалення + + + Delete + Видалити + + + Select a color scheme to download + Виберіть колірну схему для завантаження + + + Select a color scheme + Виберіть колірну гаму + + + Select a distance icon pack to delete + Виберіть пакет іконок відстані, який потрібно видалити + + + Select a distance icon pack to download + Виберіть пакет іконок відстані для завантаження + + + Select a distance icon pack + Виберіть набір іконок відстані + + + Select an icon pack to delete + Виберіть пакет іконок для видалення + + + Select an icon pack to download + Виберіть набір іконок для завантаження + + + Select an icon pack + Виберіть набір іконок + + + Select a signal animation to delete + Виберіть анімацію сигналу, яку потрібно видалити + + + Select a signal animation to download + Виберіть анімацію сигналу для завантаження + + + Select a signal animation + Виберіть анімацію сигналу + + + Select a sound pack to delete + Виберіть пакет звуків для видалення + + + Select a sound pack to download + Виберіть пакет звуків для завантаження + + + Select a sound pack + Виберіть пакет звуків + + + Select a steering wheel to delete + Виберіть кермо, яке потрібно видалити + + + Select a steering wheel to download + Виберіть кермо для завантаження + + + Select a steering wheel + Виберіть кермо + + + STOCK + ШТАТН. + + + FROGPILOT + FROGPILOT + + + CUSTOM + ЗМІНЕН. + + + CLEAR + ЧИСТ. + + + Enter the text for the top half + Введіть текст для верхньої половини + + + Characters: 0/%1 + Символів: 0/%1 + + + Enter the text for the bottom half + Введіть текст для нижньої половини + + + Are you sure you want to completely reset your startup message? + Ви впевнені, що хочете повністю скинути своє повідомлення про запуск? + + + "Random Themes" only works with downloaded themes, so make sure you download the themes you want it to use! + «Випадкові теми» працюють тільки з завантаженими темами, тому переконайтеся, що ви завантажили теми, які хочете використовувати! + + + CANCEL + ВІДМІНА + + + Downloading... + Завантаження... + + + Idle + Очікую + + + Unpacking theme... + Розпаковка теми... + + + Downloaded! + Завантажив! + + + Download cancelled... + Завантаження скасовано... + + + Download failed... + Завантаження не вдалося... + + + Repository unavailable + Репозиторій недоступний + + + GitHub and GitLab are offline... + GitHub і GitLab не працюють... + + + Custom Themes + Користувацькі теми + + + <b>The overall look and feel of openpilot.</b> Use the "Theme Maker" in "The Pond" to create and share your own themes! + <b>Загальний вигляд і відчуття openpilot.</b> Використовуйте «Theme Maker» в «The Pond», щоб створювати та ділитися власними темами! + + + <b>The color scheme used throughout openpilot.</b> Use the "Theme Maker" in "The Pond" to create and share your own themes! + <b>Колірна гама, яка використовується в openpilot.</b> Використовуйте «Theme Maker» в «The Pond», щоб створювати та ділитися власними темами! + + + Distance Button + Кнопка відстані + + + <b>The distance button icons shown on the driving screen.</b> Use the "Theme Maker" in "The Pond" to create and share your own themes! + <b>Піктограми кнопок відстані, що відображаються на екрані водіння. Використовуйте «Theme Maker» у «The Pond», щоб створювати та ділитися власними темами! + + + <b>The icon style used across openpilot.</b> Use the "Theme Maker" in "The Pond" to create and share your own themes! + <b>Стиль іконок, що використовується в openpilot.</b> Використовуйте «Theme Maker» в «The Pond», щоб створювати та ділитися власними темами! + + + <b>The sound pack used by openpilot.</b> Use the "Theme Maker" in "The Pond" to create and share your own themes! + <b>Звуковий пакет, який використовує openpilot.</b> Використовуйте «Theme Maker» у «The Pond», щоб створювати та ділитися власними темами! + + + <b>The steering-wheel icon</b> shown at the top-right of the driving screen. Use the "Theme Maker" in "The Pond" to create and share your own themes! + <b>Значок керма</b> відображається у верхньому правому куті екрана водіння. Використовуйте «Theme Maker» у «The Pond», щоб створювати та ділитися власними темами! + + + <b>Themed turn-signal animations.</b> Use the "Theme Maker" in "The Pond" to create and share your own themes! + <b>Тематичні анімації поворотників.</b> Використовуйте «Theme Maker» в «The Pond», щоб створювати та ділитися власними темами! + + + <b>Themes based on U.S. holidays.</b> Minor holidays last one day; major holidays (Christmas, Easter, Halloween) run for a full week. + <b>Теми, засновані на американських святах.</b> Невеликі свята тривають один день; великі свята (Різдво, Великдень, Хелловін) тривають цілий тиждень. + + + <b>Color the driving path like a Mario Kart–style "Rainbow Road".</b> + <b>Пофарбуйте трасу для їзди у стилі «Rainbow Road» з Mario Kart.</b> + + + <b>Occasional on-screen effects triggered by driving conditions.</b> These are purely a visual and don't impact how openpilot drives! + <b>Епізодичні ефекти на екрані, що викликані умовами руху. </b> Вони є суто візуальними і не впливають на роботу openpilot! + + + <b>Pick a random theme between each drive</b> from the themes you have downloaded. Great for variety without changing settings while driving. + <b>Виберіть випадкову тему між кожним проїздом</b> із завантажених тем. Чудово підходить для різноманітності без зміни налаштувань під час руху. + + + <b>Customize the "Startup Alert" message</b> shown at the start of each drive. + <b>Налаштуйте повідомлення «Повідомлення про запуск», яке відображається на початку кожного запуску. + + + Delete the "%1" color scheme? + Видалити колірну схему «%1»? + + + Delete the "%1" distance icon pack? + Видалити набір іконок відстані «%1»? + + + Delete the "%1" icon pack? + Видалити набір іконок «%1»? + + + Delete the "%1" signal animation? + Видалити анімації поворотників «%1»? + + + Delete the "%1" sound pack? + Видалити звуковий пакет «%1»? + + + Delete the "%1" steering wheel? + Видалити кермо «%1»? + + + + FrogPilotUtilitiesPanel + + Debug Mode + Режим зневадження + + + Flash Panda + Шити Panda + + + FLASH + ШИТИ + + + Flash + Шити + + + Flashing... + Шиємо... + + + Flashed! + Прошито! + + + Rebooting... + Перезавантаження... + + + OFFROAD + ЗУПИНКА + + + ONROAD + В ДОРОЗІ + + + OFF + ВИМК. + + + Report a Bug or an Issue + Повідомити про помилку або проблему + + + REPORT + ПОВІДОМИТИ + + + I saw an alert that said "openpilot crashed" + Я побачив сповіщення «openpilot crashed» (openpilot завис). + + + Braking is too sudden or uncomfortable + Гальмування занадто різке або некомфортне + + + openpilot disengages when I don't expect it + openpilot деактивувався, коли я цього не очікую + + + openpilot doesn't react to stopped vehicles ahead + openpilot не реагує на зупинені транспортні засоби попереду + + + openpilot feels sluggish or slow to respond + openpilot працює повільно або повільно реагує + + + Steering feels twitchy or unnatural + Керування відчувається нерівним або неприродним + + + Something else (please describe) + Щось інше (будь ласка, опишіть) + + + What's going on? + Що відбувається? + + + Please describe what's happening + Опишіть, що відбувається + + + Send Report + Надіслати звіт + + + What's your Discord username? + Яке ваше ім'я користувача в Discord? + + + Reset Toggles to Default + Скинути налашт. до заводських + + + RESET + СКИНУТИ + + + Are you sure you want to reset all toggles to their default values? + Ви впевнені, що хочете скинути всі налаштування до їхніх значень за замовчуванням? + + + Reset + Скидання + + + Resetting... + Скидаємо... + + + Reset! + Скинути! + + + Are you sure you want to reset all toggles to match stock openpilot? + Ви впевнені, що хочете скинути всі налаштування, щоб вони відповідали стандартним налаштуванням openpilot? + + + <b>Use FrogPilot's developer metrics on your next drive</b> to diagnose issues and improve bug reports. + <b>Використовуйте показники розробника FrogPilot під час наступної поїздки</b>, щоб діагностувати проблеми та поліпшити звіти про помилки. + + + <b>Reinstall the Panda firmware</b> to fix connection or reliability issues. + <b>Переінсталюйте прошивку Panda</b>, щоб виправити проблеми з підключенням або надійністю. + + + Are you sure you want to flash the Panda firmware? + Ви впевнені, що хочете прошити прошивку Panda? + + + Force Drive State + Примусовий стан + + + <b>Manually set openpilot to be offroad or onroad.</b> + <b>Вручну встановіть openpilot на режим зупинки або в дорозі.</b> + + + <b>Send a bug report</b> so we can help fix the problem! + <b>Надішліть звіт про помилку</b>, щоб ми могли допомогти вирішити проблему! + + + Please connect to the internet before sending a report! + Перед відправкою звіту підключіться до Інтернету! + + + Acceleration feels harsh or jerky + Прискорення відчувається різким або ривковим + + + An alert was unclear and I didn't know what it meant + Попередження було нечітким, і я не розумів, що воно означає + + + I'm not sure if this is normal or a bug: + Я не впевнений, чи це нормально, чи це помилка: + + + My screen froze or is stuck loading something + Мій екран завис або застряг під час завантаження чогось + + + My steering wheel buttons aren't working + Кнопки на кермі не працюють + + + openpilot doesn't resume from a stop + openpilot не відновлює роботу після зупинки + + + The car doesn't follow curves well + Автомобіль погано проходить вигини + + + The car isn't staying centered in its lane + Автомобіль не тримається центру своєї смуги руху + + + Report Sent! Thanks for letting us know! + Звіт надіслано! Дякуємо, що повідомили нас! + + + <b>Reset all toggles to their default values.</b> + <b>Скинути всі налаштування до їхніх значень за замовчуванням.</b> + + + Reset Toggles to Stock openpilot + Скинути налаштування до заводських openpilot + + + <b>Reset all toggles to match stock openpilot.</b> + <b>Скинути всі налаштування, щоб відповідати стандартному openpilot.</b> + + + + FrogPilotVehiclesPanel + + SELECT + ВИБІР + + + Disable Automatic Fingerprint Detection + Вимкнути автоматичне виявлення відбитка + + + Disable openpilot Longitudinal Control + Вимкнути поздовжнє керування OpenPilot + + + Are you sure you want to completely disable openpilot longitudinal control? + Ви впевнені, що хочете повністю вимкнути поздовжнє керування OpenPilot? + + + General Motors Settings + Налаштування General Motors + + + FrogsGoMoo's Experimental Tune + Експериментальні налаштування FrogsGoMoo + + + Smooth Pedal Response on Hills + Плавна реакція педалі на схилах + + + Hyundai/Kia/Genesis Settings + Налаштування Hyundai/Kia/Genesis + + + comma's New Longitudinal API + Новий поздовжній API від comma + + + "Taco Bell Run" Torque Hack + «Taco Bell Run» Хак керма + + + Toyota/Lexus Settings + Налаштування Toyota/Lexus + + + Automatically Lock/Unlock Doors + Автоматичне блокування/розблокування дверей + + + FrogsGoMoo's Personal Tweaks + Особисті налаштування FrogsGoMoo + + + Lock Doors On Ignition Off After + Замикання дверей після вимкнення запалювання + + + MANAGE + КЕРУЙ + + + Lock + Замкн. + + + Unlock + Розмик. + + + Never + Ніколи + + + seconds + секунд + + + Car Make + Виробник + + + Choose your car make + Виберіть марку автомобіля + + + Car Model + Модель + + + Choose your car model + Виберіть модель вашого автомобіля + + + <b>Force the selected fingerprint</b> and prevent it from ever changing. + <b>Примусово застосувати вибраний відбиток</b> і запобігти його зміні. + + + <b>Disable openpilot longitudinal</b> and use the car's stock ACC instead. + <b>Вимкніть поздовжне керування openpilot</b> і замість цього використовуйте стандартну систему ACC автомобіля. + + + <b>FrogPilot features for General Motors vehicles.</b> + <b>Функції FrogPilot для автомобілів General Motors.</b> + + + <b>Experimental GM tune by FrogsGoMoo</b> that attempts to smoothen stopping and takeoff control. Use at your own risk! + <b>Експериментальна настройка GM від FrogsGoMoo</b>, яка намагається згладити управління зупинкою та рушанням. Використовуйте на свій ризик! + + + <b>Smoothen acceleration and braking</b> when driving downhill/uphill. + <b>Згладжуйте прискорення та гальмування</b> під час руху вниз/вгору по схилу. + + + Stop-and-Go Hack + Хак «Stop-and-Go» + + + <b>Force stop-and-go</b> on the 2017 Chevy Volt. + <b>Примусове зупинення та рушання</b> на автомобілі Chevy Volt 2017 року. + + + <b>FrogPilot features for Genesis, Hyundai, and Kia vehicles.</b> + <b>Функції FrogPilot для авто Genesis, Hyundai та Kia.</b> + + + <b>comma's new gas and brake control system</b> that improves acceleration and braking but may cause issues on some Genesis/Hyundai/Kia vehicles. + <b>Нова система управління газом і гальмами від Comma</b>, яка покращує прискорення і гальмування, але може спричинити проблеми на деяких автомобілях Genesis/Hyundai/Kia. + + + <b>The steering torque hack from comma's 2022 "Taco Bell Run".</b> Designed to increase steering torque at low speeds for left and right turns. + <b>Хак для підвищення крутного моменту рульового управління з «Taco Bell Run» від comma 2022 року.</b> Призначений для підвищення крутного моменту рульового управління на низьких швидкостях при поворотах вліво і вправо. + + + <b>FrogPilot features for Lexus and Toyota vehicles.</b> + <b>Функції FrogPilot для авто Lexus і Toyota.</b> + + + <b>Automatically lock/unlock doors</b> when shifting in and out of drive. + <b>Автоматично блокувати/розблоковувати двері</b> під час перемикання передач. + + + Dashboard Speed Offset + Зсув швидкості на приборці + + + <b>The speed offset openpilot uses to match the speed on the dashboard display.</b> + <b>Зсув швидкості, який openpilot використовує для узгодження швидкості на дисплеї приладової панелі.</b> + + + <b>Personal tweaks by FrogsGoMoo for quicker acceleration and smoother braking.</b> + <b>Особисті налаштування від FrogsGoMoo для швидшого прискорення та плавнішого гальмування.</b> + + + <b>Automatically lock the doors on ignition off</b> when no one is detected in the front seats. + <b>Автоматично блокувати двері при вимкненому запалюванні</b>, якщо на передніх сидіннях нікого не виявлено. + + + <b>Force stop-and-go</b> on Lexus/Toyota vehicles without stock stop-and-go functionality. + <b>Примусове зупинення та рушання</b> на автомобілях Lexus/Toyota без стандартної функції зупинення та рушання. + + + Vehicle Info + Інформація про ТЗ + + + <b>Information about your vehicle in regards to openpilot support and functionality.</b> + <b>Інформація про ваш автомобіль щодо підтримки та функціональності OpenPilot.</b> + + + 3rd Party Hardware Detected + Виявлено стороннє обладнання + + + <b>Detected 3rd party hardware.</b> + <b>Виявлено стороннє обладнання.</b> + + + Blind Spot Support + Підтримка сліпої зони + + + <b>Does openpilot use the vehicle's blind spot data?</b> + <b>Чи використовує openpilot дані про сліпі зони автомобіля?</b> + + + comma Pedal Support + Підримка Comma педалі + + + <b>Does your vehicle support the "comma pedal"?</b> + <b>Чи підтримує ваш автомобіль функцію «comma педаль»?</b> + + + openpilot Longitudinal Support + Підтримка поздовжнього керування + + + <b>Can openpilot control the vehicle's acceleration and braking?</b> + <b>Чи може openpilot контролювати прискорення та гальмування автомобіля?</b> + + + Radar Support + Підтримка радару + + + <b>Does openpilot use the vehicle's radar data</b> alongside the device's camera for tracking lead vehicles? + <b>Чи використовує openpilot дані радара автомобіля</b> разом з камерою пристрою для відстеження автомобілів, що їдуть попереду? + + + SDSU Support + Підтримка SDSU + + + <b>Does your vehicle support "SDSUs"?</b> + <b>Чи підтримує ваш автомобіль «SDSU»?</b> + + + Stop-and-Go Support + Підтримка Stop-and-Go + + + <b>Does your vehicle support stop-and-go driving?</b> + <b>Чи підтримує ваш автомобіль режим «стоп-старт»?</b> + + + VIEW + ДИВИСЬ + + + None + Нема + + + Yes + Так + + + No + Ні + + + Acura/Honda Settings + Налаштування Acura/Honda + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>Функції FrogPilot для автомобілів Acura та Honda.</b> + + + Gentle Following + Делікатне стеження + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>Зменшує ривкові розгони та гальмування під час руху за лідируючим авто.</b> Ідеально для руху з частими зупинками. + + + Increased Braking Force + Підвищена сила гальмування + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>Збільшує максимальну силу гальмування для покращення ефективності зупинки.</b> + + + Responsive Pedal at Low Speeds + Чутлива педаль на низьких швидкостях + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>Покращує прискорення з місця для більш чутливого відгуку педалі газу під час міського руху.</b> + + + Subaru Settings + Налаштування Subaru + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>Функції FrogPilot для автомобілів Subaru.</b> + + + Stop and Go + Старт-стоп + + + Stop and go for supported Subaru vehicles. + Функція «старт-стоп» для підтримуваних автомобілів Subaru. + + + + FrogPilotVisualsPanel + + Advanced UI Controls + Розш. параметри інтерфейсу + + + Hide Current Speed + Приховати поточну швидкість + + + Hide Lead Marker + Приховати маркер лідера + + + Hide Map Settings Button + Приховати кнопку налаштувань мап + + + Hide Max Speed + Приховати максимальну швидкість + + + Hide Non-Critical Alerts + Приховати некритичні сповіщення + + + Hide Speed Limits + Приховати обмеження швидкості + + + Use Wheel Speed + Використовувати швидкість коліс + + + Developer UI + Інтерфейс розробника + + + Adjacent Path Metrics + Показники суміжних шляхів + + + Developer Metrics + Показники розробника + + + Border Metrics + Показники на бордюрі + + + Lead Info + Інфа лідера + + + FPS Display + Кадр\c відображення + + + Numerical Temperature Gauge + Цифровий термометр + + + Sidebar Metrics + Сбоку + + + Use International System of Units + Використовуйте СІ + + + Developer Sidebar + Бічна панель розробника + + + Metric #1 + Показник № 1 + + + Metric #2 + Показник № 2 + + + Metric #3 + Показник № 3 + + + Metric #4 + Показник № 4 + + + Metric #5 + Показник № 5 + + + Metric #6 + Показник № 6 + + + Metric #7 + Показник № 7 + + + Developer Widgets + Віджети для розробників + + + Adjacent Leads Tracking + Відстеження сусідніх лідерів + + + Model Stopping Point + Місце зупинки моделі + + + Radar Tracks + Радарні траєкторії + + + Driving Screen Widgets + Віджети екрану водіння + + + Acceleration Path + Шлях прискорення + + + Adjacent Lanes + Сусідні смуги руху + + + Blind Spot Path + Шлях сліпої зони + + + Compass + Компас + + + Driving Personality Button + Кнопка «Режиму керування» + + + Gas / Brake Pedal Indicators + Індикатори педалі газу / гальма + + + Rotating Steering Wheel + Поворотне кермо + + + Model UI + Інтерфейс моделі + + + Dynamic Path Width + Динамічна ширина шляху + + + Lane Lines Width + Ширина смуг руху + + + Path Edges Width + Ширина країв шляху + + + Path Width + Ширина шляху + + + Road Edges Width + Ширина країв дороги + + + "Unlimited" Road UI + «Необмежений» інтерфейс дороги + + + Navigation Widgets + Навігаційні віджети + + + Larger Map Display + Збільшити відображення карти + + + Map Style + Стиль карти + + + Road Name + Назва дороги + + + Show Speed Limits + Показати обмеження швидкості + + + Show Speed Limits from Mapbox + Показати обмеження швидкості від Mapbox + + + Use Vienna-Style Speed Signs + Використовуйте знаки швидкості у віденському стилі + + + Quality of Life + Якість життя + + + Camera View + Вид з камери + + + Show Driver Camera When In Reverse + Показати камеру водія під час руху заднім ходом + + + Stopped Timer + Таймер зупинки + + + Blind Spot + Сліпа зона + + + Steering Torque + Момент керм. + + + Turn Signal + Поворотн. + + + Fahrenheit + Фаренгейт + + + CPU + ЦП + + + GPU + ГП + + + IP + ІП + + + RAM + ОЗП + + + SSD Left + SSD залиш. + + + SSD Used + SSD вик. + + + None + Нема + + + Acceleration: Current + Прискорення: Поточне + + + Acceleration: Max + Прискорення: Макс. + + + Auto Tune: Actuator Delay + Автонастройка: затримка приводу + + + Auto Tune: Friction + Автонастройка: Тертя + + + Auto Tune: Lateral Acceleration + Автоматична настройка: поперечне прискорення + + + Auto Tune: Steer Ratio + Автоматична настройка: коефіцієнт кермування + + + Auto Tune: Stiffness Factor + Автоматична настройка: коефіцієнт жорсткості + + + Engagement %: Lateral + Залученість %: Бічна + + + Engagement %: Longitudinal + Залучення %: Поздовжнє + + + Lateral Control: Steering Angle + Бічний контроль: кут повороту керма + + + Lateral Control: Torque % Used + Бічний контроль: Використаний крутний момент % + + + Longitudinal Control: Actuator Acceleration Output + Поздовжній контроль: вихідне прискорення приводу + + + Longitudinal MPC Jerk: Acceleration + Поздовжній ривок MPC: прискорення + + + Longitudinal MPC Jerk: Danger Zone + Поздовжній ривок MPC: небезпечна зона + + + Longitudinal MPC Jerk: Speed Control + Поздовжній ривок MPC: регулювання швидкості + + + SELECT + ВИБІР + + + Select a metric to display + Виберіть показник для відображення + + + Show Distance + Показати відстань + + + Dynamic + Динамічний + + + Static + Статичний + + + inches + дюйм + + + Off + Вимк. + + + feet + фут + + + Full Map + Вся мапа + + + Stock openpilot + Штатний openpilot + + + Mapbox Streets + Mapbox Вулиці + + + Mapbox Outdoors + Mapbox на відкритому повітрі + + + Mapbox Light + Mapbox Світла + + + Mapbox Dark + Mapbox Темна + + + Mapbox Navigation Day + Mapbox навігація денна + + + Mapbox Navigation Night + Mapbox навігація нічна + + + Mapbox Satellite + Mapbox Супутник + + + Mapbox Satellite Streets + Mapbox Супутник Вулиці + + + Mapbox Traffic Night + Mapbox Нічний Трафік + + + Mike's Personalized Style + Індивідуальний стиль Майка + + + Select a map style + Виберіть стиль карти + + + Auto + Авто + + + Driver + Водій + + + Standard + Стандарт + + + Wide + Широк. + + + foot + фут + + + inch + дюйм + + + meter + метр + + + meters + метрів + + + centimeter + сантиметр + + + centimeters + сантиметрів + + + <b>Advanced visual changes</b> to fine-tune how the driving screen looks. + <b>Розширені візуальні зміни</b> для точного налаштування зовнішнього вигляду екрану водія. + + + <b>Hide the current speed</b> from the driving screen. + <b>Приховати поточну швидкість</b> з екрану водіння. + + + <b>Hide the lead-vehicle marker</b> from the driving screen. + <b>Приховати маркер лідера (головуючого автомобіля)</b> з екрану водіння. + + + <b>Hide the map settings button or map</b> from the driving screen. + <b>Приховати кнопку налаштувань мапи або саму мапу</b> з екрану водіння. + + + <b>Hide the max speed</b> from the driving screen. + <b>Приховати максимальну швидкість</b> з екрану водіння. + + + <b>Hide non-critical alerts</b> from the driving screen. + <b>Приховати некритичні сповіщення</b> з екрану водія. + + + <b>Hide posted speed limits</b> from the driving screen. + <b>Приховати опубліковані обмеження швидкості</b> з екрану водіння. + + + <b>Use the vehicle's wheel speed</b> instead of the cluster speed. This is purely a visual change and doesn't impact how openpilot drives! + <b>Використовуйте швидкість колес автомобіля</b> замість швидкості приборки. Це суто візуальна зміна, яка не впливає на роботу openpilot! + + + <b>Detailed information about openpilot's internal operations.</b> + <b>Детальна інформація про внутрішні операції openpilot.</b> + + + <b>Show the width of the adjacent lanes.</b> + <b>Показати ширину сусідніх смуг руху.</b> + + + <b>Performance data, sensor readings, and system metrics</b> for debugging and optimizing openpilot. + <b>Дані про продуктивність, показання датчиків та системні метрики</b> для зневадження та оптимізації openpilot. + + + <b>Show statuses along the border of the driving screen.</b><br><br><b>Blind Spot</b>: The border turns red when a vehicle is in a blind spot<br><b>Steering Torque</b>: The border goes from green to red according to how much steering torque is being used<br><b>Turn Signal</b>: The border flashes yellow when a turn signal is on + <b>Показати статуси вздовж рамки екрану водіння.</b><br><br><b>Сліпа зона</b>: межа стає червоною, коли транспортний засіб знаходиться в сліпій зоні<br><b>Крутний момент рульового управління</b>: межа змінюється з зеленої на червону залежно від величини крутного моменту рульового управління<br><b>Поворотник</b>: межа блимає жовтим, коли ввімкнено поворотник + + + <b>Show each tracked vehicle's distance and speed</b> below its marker. + <b>Показати відстань і швидкість кожного відстежуваного транспортного засобу</b> під його маркером. + + + <b>Show the frames per second (FPS)</b> at the bottom of the driving screen. + <b>Показати кількість кадрів на секунду (КНС)</b> внизу екрану водіння. + + + <b>Show a numerical temperature in the sidebar</b> instead of the status labels. + <b>Показати числове значення температури в бічній панелі</b> замість міток стану. + + + <b>Display system information</b> (CPU, GPU, RAM usage, IP address, device storage) in the sidebar. + <b>Відображення системної інформації</b> (використання ЦП, графічного процесора, оперативної пам'яті, IP-адреса, сховище пристрою) на бічній панелі. + + + <b>Display measurements using the "International System of Units" (SI)</b> standard. + <b>Відображення вимірювань за стандартом «Міжнародна система одиниць» (СІ).</b> + + + <b>Display debugging info and metrics</b> in a dedicated sidebar on the right side of the screen. + <b>Відображення інформації про зневадження та метрики</b> у спеціальній бічній панелі праворуч екрана. + + + <b>Select the metric shown in the first "Developer Sidebar" widget.</b> + <b>Виберіть показник, показаний у першому віджеті «Бічна панель розробника».</b> + + + <b>Select the metric shown in the second "Developer Sidebar" widget.</b> + <b>Виберіть показник, показаний у другому віджеті «Бічна панель розробника».</b> + + + <b>Select the metric shown in the third "Developer Sidebar" widget.</b> + <b>Виберіть показник, показаний у третьому віджеті «Бічна панель розробника».</b> + + + <b>Select the metric shown in the fourth "Developer Sidebar" widget.</b> + <b>Виберіть показник, показаний у четвертому віджеті «Бічна панель розробника».</b> + + + <b>Select the metric shown in the fifth "Developer Sidebar" widget.</b> + <b>Виберіть показник, показаний у пʼятому віджеті «Бічна панель розробника».</b> + + + <b>Select the metric shown in the sixth "Developer Sidebar" widget.</b> + <b>Виберіть показник, показаний у шостому віджеті «Бічна панель розробника».</b> + + + <b>Select the metric shown in the seventh "Developer Sidebar" widget.</b> + <b>Виберіть показник, показаний у сьомому віджеті «Бічна панель розробника».</b> + + + <b>Overlays for debugging visuals, internal states, and model predictions</b> on the driving screen. + <b>Накладення для зневадження візуальних елементів, внутрішніх станів та прогнозів моделі</b> на екрані керування. + + + <b>Display adjacent leads detected by the car's radar</b> to the left and right of the current driving path. + <b>Відображення сусідніх лідерів, виявлених радаром автомобіля</b>, зліва і справа від поточної траєкторії руху. + + + <b>Show a stop-sign marker where the model intends to stop.</b> + <b>Покажіть маркер зупинки в місці, де модель має намір зупинитися.</b> + + + <b>Display all radar points</b> produced by the car's radar. + <b>Відобразити всі точки радара</b>, згенеровані радаром автомобіля. + + + <b>Custom FrogPilot widgets</b> for the driving screen. + <b>Спеціальні віджети FrogPilot</b> для екрану водіння. + + + <b>Color the driving path by planned acceleration and braking.</b> + <b>Фарбує траєкторію руху відповідно до запланованого прискорення та гальмування.</b> + + + <b>Show the driving paths for the left and right lanes.</b> + <b>Показати траєкторії руху для лівої та правої смуг.</b> + + + <b>Show a red path when a vehicle is in that lane's blind spot.</b> + <b>Показати червоний шлях, коли транспортний засіб знаходиться в сліпій зоні цієї смуги руху.</b> + + + <b>Show the current driving direction</b> with a simple on-screen compass. + <b>Показати поточний напрямок руху</b> за допомогою простого екранного компаса. + + + <b>Control and view the current driving personality</b> via a driving screen widget. + <b>Контролюйте та переглядайте поточний режим керування</b> за допомогою віджета на екрані автомобіля. + + + <b>On-screen gas and brake indicators.</b><br><br><b>Dynamic</b>: Opacity changes according to how much openpilot is accelerating or braking<br><b>Static</b>: Full when active, dim when not + <b>Індикатори газу та гальма на екрані.</b><br><br><b>Динамічний</b>: непрозорість змінюється залежно від того, наскільки openpilot прискорюється або гальмує<br><b>Статичний</b>: повний, коли активний, тьмяний, коли неактивний + + + <b>Rotate the driving screen wheel</b> with the physical steering wheel. + <b>Повертайте кермо на екрані</b> слідом за фізичним кермом. + + + <b>Model visualizations</b> for the driving path, lane lines, path edges, and road edges. + <b>Візуалізація моделей</b> для траєкторії руху, ліній смуг руху, країв траєкторії та країв дороги. + + + <b>Change the path width based on engagement.</b><br><br><b>Fully Engaged</b>: 100%<br><b>Always On Lateral</b>: 75%<br><b>Disengaged</b>: 50% + <b>Змінюйте ширину смуги залежно від рівня активації.</b><br><br><b>Повна активація</b>: 100%<br><b>Завжди ввімкнене кермування</b>: 75%<br><b>Деактивовано</b>: 50% + + + <b>Set the lane-line thickness.</b><br><br>Default matches the MUTCD lane-line width standard of 4 inches. + <b>Встановіть товщину лінії смуги руху.</b><br><br>За замовчуванням відповідає стандарту ширини лінії смуги руху MUTCD, що становить 4 дюйми. + + + <b>Set the driving-path edge width</b> that represents different driving modes and statuses.<br><br>Default is 20% of the total path width.<br><br>Color Guide:<br><br>- <b>Blue</b>: Navigation<br>- <b>Light Blue</b>: Always On Lateral<br>- <b>Green</b>: Default<br>- <b>Orange</b>: Experimental Mode<br>- <b>Red</b>: Traffic Mode<br>- <b>Yellow</b>: Conditional Experimental Mode overridden + <b>Встановіть ширину краю траєкторії руху</b>, яка відображає різні режими та стани руху.<br><br>За замовчуванням встановлено 20% від загальної ширини траєкторії.<br><br>Колірна гама:<br><br> - <b>Синій</b>: Навігація<br>- <b>Світло-синій</b>: Завжди увімкнений режим кермування<br>- <b>Зелений</b>: За замовчуванням<br>- <b>Помаранчевий</b>: Експериментальний режим<br>- <b>Червоний</b>: Режим трафік<br>- <b>Жовтий</b>: Умовний експериментальний режим перевизначено + + + <b>Set the driving-path width.</b><br><br>Default (6.1 feet) matches the width of a 2019 Lexus ES 350. + <b>Встановіть ширину проїжджої частини.</b><br><br>Стандартне значення (6,1 фута) відповідає ширині автомобіля Lexus ES 350 2019 року випуску. + + + <b>Set the road-edge thickness.</b><br><br>Default matches half of the MUTCD lane-line width standard of 4 inches. + <b>Встановіть товщину краю дороги.</b><br><br>За замовчуванням встановлюється половина стандартної ширини розділової смуги MUTCD, яка становить 4 дюйми. + + + <b>Extend the length of the driving path, lane lines, and road edges</b> for as far as the model can see. + <b>Подовжуйте довжину траєкторії руху, розмітки смуг руху та країв дороги</b> настільки, наскільки бачить модель. + + + <b>Map style, speed limits, and other navigation widgets.</b> + <b>Стиль карти, обмеження швидкості та інші навігаційні віджети.</b> + + + <b>Increase the map size</b> for easier navigation readings. + <b>Збільште розмір карти</b> для зручнішого читання навігації. + + + <b>Select the map style</b> for "Navigate on openpilot" (NOO):<br><br><b>Stock openpilot</b>: Default comma.ai style<br><b>FrogPilot</b>: Official FrogPilot map style<br><b>Mapbox Streets</b>: Standard street-focused view<br><b>Mapbox Outdoors</b>: Emphasizes outdoor and terrain features<br><b>Mapbox Light</b>: Minimalist, bright theme<br><b>Mapbox Dark</b>: Minimalist, dark theme<br><b>Mapbox Navigation Day</b>: Optimized for daytime navigation<br><b>Mapbox Navigation Night</b>: Optimized for nighttime navigation<br><b>Mapbox Satellite</b>: Satellite imagery only<br><b>Mapbox Satellite Streets</b>: Hybrid satellite imagery with street labels<br><b>Mapbox Traffic Night</b>: Dark theme emphasizing traffic conditions<br><b>Mike's Personalized Style</b>: Customized hybrid satellite view + <b>Виберіть стиль карти</b> для «Навігація на openpilot» (NOO):<br><br><b>Стандартний openpilot</b>: Стиль comma.ai за замовчуванням<br><b>FrogPilot</b>: Офіційний стиль карти FrogPilot<br><b>Mapbox Streets</b>: Стандартний вигляд з акцентом на вулицях<br><b>Mapbox Outdoors</b>: Акцент на особливостях місцевості та ландшафту<br><b>Mapbox Light</b>: Мінімалістична, світла тема<br><b>Mapbox Dark</b>: Мінімалістична, темна тема<br><b>Mapbox Navigation Day</b>: Оптимізовано для денної навігації<br><b>Mapbox Navigation Night</b>: Оптимізовано для нічної навігації<br><b>Mapbox Satellite</b>: Тільки супутникові знімки<br><b>Mapbox Satellite Streets</b>: Гібридні супутникові знімки з позначками вулиць<br><b>Mapbox Traffic Night</b>: Темна тема, що підкреслює дорожні умови<br><b>Mike's Personalized Style</b>: Індивідуальний гібридний супутниковий вигляд + + + <b>Display the road name at the bottom of the driving screen</b> using data from "OpenStreetMap (OSM)". + <b>Відображення назви дороги внизу екрана водіння</b> з використанням даних з «OpenStreetMap (OSM)». + + + <b>Show speed limits</b> in the top-left corner of the driving screen. Uses data from the car's dashboard (if supported) and "OpenStreetMap (OSM)". + <b>Показати обмеження швидкості</b> у верхньому лівому куті екрана водіння. Використовує дані з приладової панелі автомобіля (якщо підтримується) та «OpenStreetMap (OSM)». + + + <b>Use Mapbox speed-limit data when no other source is available.</b> + <b>Використовуйте дані Mapbox про обмеження швидкості, якщо немає інших джерел інформації.</b> + + + <b>Show Vienna-style (EU) speed-limit signs</b> instead of MUTCD (US). + <b>Показати знаки обмеження швидкості у віденському стилі (ЄС)</b> замість MUTCD (США). + + + <b>Miscellaneous visual changes</b> to fine-tune how the driving screen looks. + <b>Різні візуальні зміни</b> для точного налаштування зовнішнього вигляду екрану водія. + + + <b>Select the active camera view.</b> This is purely a visual change and doesn't impact how openpilot drives! + <b>Виберіть активний вид камери.</b> Це лише візуальна зміна, яка не впливає на роботу OpenPilot! + + + <b>Show the driver camera feed</b> when the vehicle is in reverse. + <b>Показати зображення з камери водія</b>, коли автомобіль рухається заднім ходом. + + + <b>Show a timer when stopped</b> in place of the current speed to indicate how long the vehicle has been stopped. + <b>Показати таймер при зупинці</b> замість поточної швидкості, щоб вказати, як довго транспортний засіб перебуває в зупиненому стані. + + + Hide Map + Сховай мапу + + + FrogPilot + ЖабоПілот + + + <b>Set the lane-line thickness.</b><br><br>Default matches the MUTCD lane-line width standard of 10 centimeters. + <b>Встановіть товщину лінії смуги руху.</b><br><br>За замовчуванням відповідає стандарту ширини лінії смуги руху MUTCD, що становить 10 сантиметрів. + + + <b>Set the driving-path width.</b><br><br>Default (1.9 meters) matches the width of a 2019 Lexus ES 350. + <b>Встановіть ширину проїжджої частини.</b><br><br>Стандартне значення (1,9 метра) відповідає ширині автомобіля Lexus ES 350 2019 року. + + + <b>Set the road-edge thickness.</b><br><br>Default matches half of the MUTCD lane-line width standard of 10 centimeters. + <b>Встановіть товщину краю дороги.</b><br><br>За замовчуванням встановлюється половина стандартної ширини смуги руху MUTCD, яка становить 10 сантиметрів. + + + + FrogPilotWheelPanel + + Distance Button + Кнопка відстані + + + Distance Button (Long Press) + Кнопка відстані (довге натискання) + + + Distance Button (Very Long Press) + Кнопка відстані (дуже довге натискання) + + + LKAS Button + Кнопка LKAS + + + Change "Personality Profile" + Зміна режиму керування + + + Force openpilot to Coast + Змусити openpilot повзти + + + Toggle "Experimental Mode" On/Off + Переключити «Експериментальний режим» + + + Toggle "Traffic Mode" On/Off + Переключити «Режим трафіку» + + + SELECT + ВИБІР + + + Select a function to assign to this button + Виберіть функцію, яку потрібно призначити цій кнопці + + + <b>Action performed when the "Distance" button is pressed.</b> + <b>Дія, що виконується при натисканні кнопки «Відстань».</b> + + + <b>Action performed when the "Distance" button is pressed for more than 0.5 seconds.</b> + <b>Дія при натисканні кнопки «Відстань» протягом більше 0,5 секунди.</b> + + + <b>Action performed when the "Distance" button is pressed for more than 2.5 seconds.</b> + <b>Дія при натисканні кнопки «Відстань» протягом більше 2,5 секунд.</b> + + + <b>Action performed when the "LKAS" button is pressed.</b> + <b>Дія, що виконується при натисканні кнопки «LKAS» (утримання смуги).</b> + + + No Action + Без дії + + + Pause Steering + Пауза кермування + + + Pause Acceleration/Braking + Пауза Прискорення/Гальмування + + + + InputDialog + + Cancel + Скасувати + + + Need at least %n character(s)! + + Потрібно щонайменше %n символ! + Потрібно щонайменше %n символа! + Потрібно щонайменше %n символів! + + + + Characters: %1/%2 + Символів: %1/%2 + + + + Installer + + Installing... + Встановлення... + + + + MapETA + + eta + очп + + + min + мін + + + hr + г + + + + MapSettings + + NAVIGATION + НАВІГАЦІЯ + + + Manage at %1 + Управляти на %1 + + + + MapWindow + + Map Loading + Мапи вантажаться + + + Waiting for GPS + Очікую GPS + + + Waiting for route + Очікую шлях + + + + MultiOptionDialog + + Select + Вибрати + + + Cancel + Відмінити + + + + Networking + + Advanced + Просунутий + + + Enter password + Введіть пароль + + + for "%1" + до "%1" + + + Wrong password + Невірний пароль + + + + OffroadAlert + + Device temperature too high. System cooling down before starting. Current internal component temperature: %1 + Температура пристрою занадто висока. Система охолоджується перед запуском. Поточна температура внутрішніх компонентів: %1 + + + Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in %1 + Негайно підключіться до Інтернету, щоб перевірити наявність оновлень. Якщо ви не підключитеся до Інтернету, openpilot не активується %1. + + + Connect to internet to check for updates. openpilot won't automatically start until it connects to internet to check for updates. + Підключіться до Інтернету, щоб перевірити наявність оновлень. openpilot не запуститься автоматично, поки не підключиться до Інтернету для перевірки наявності оновлень. + + + Unable to download updates +%1 + Неможливо завантажити оновлення +%1 + + + Taking camera snapshots. System won't start until finished. + Роблю знімок з камери. Система не запуститься, поки процес не буде завершено. + + + An update to your device's operating system is downloading in the background. You will be prompted to update when it's ready to install. + Оновлення операційної системи вашого пристрою завантажується у фоновому режимі. Коли воно буде готове до встановлення, з'явиться запит на оновлення. + + + Device failed to register. It will not connect to or upload to comma.ai servers, and receives no support from comma.ai. If this is an official device, visit https://comma.ai/support. + Пристрій не вдалося зареєструвати. Він не підключається до серверів comma.ai і не завантажує на них дані, а також не отримує підтримку від comma.ai. Якщо це офіційний пристрій, відвідайте веб-сайт https://comma.ai/support. + + + NVMe drive not mounted. + Диск NVMe не підключений. + + + Unsupported NVMe drive detected. Device may draw significantly more power and overheat due to the unsupported NVMe. + Виявлено непідтримуваний диск NVMe. Пристрій може споживати значно більше енергії та перегріватися через непідтримуваний NVMe. + + + openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai. + openpilot не зміг ідентифікувати ваш автомобіль. Ваш автомобіль не підтримується або його ЕБУ не розпізнаються. Надішліть запит на додавання версій прошивки до відповідного автомобіля. Потрібна допомога? Приєднуйтесь до discord.comma.ai. + + + openpilot was unable to identify your car. Check integrity of cables and ensure all connections are secure, particularly that the comma power is fully inserted in the OBD-II port of the vehicle. Need help? Join discord.comma.ai. + openpilot не зміг ідентифікувати ваш автомобіль. Перевірте цілісність кабелів і переконайтеся, що всі з'єднання надійні, особливо що зарядний пристрій comma повністю вставлений в порт OBD-II автомобіля. Потрібна допомога? Приєднуйтесь до discord.comma.ai. + + + openpilot detected a change in the device's mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield. + openpilot виявив зміну положення кріплення пристрою. Переконайтеся, що пристрій повністю вставлений у кріплення, а кріплення надійно зафіксоване на лобовому склі. + + + + OffroadHome + + UPDATE + ОНОВЛ. + + + ALERTS + СИГНАЛИ + + + ALERT + СИГНАЛ + + + + OnroadAlerts + + openpilot crashed 💩 + openpilot завис 💩 + + + Please post the "Error Log" in the FrogPilot Discord! + Будь ласка, відправте «Журнал помилок» у FrogPilot Discord! + + + openpilot crashed + openpilot завис + + + openpilot Unavailable + openpilot Недоступний + + + Waiting for controls to start + Очікування старту керування + + + TAKE CONTROL IMMEDIATELY + КЕРМУЙТЕ НЕГАЙНО + + + Controls Unresponsive + Керування не реагує + + + Reboot Device + Перезавантажити пристрій + + + + PairingPopup + + Pair your device to your %1 account + Сполучіть свій пристрій із вашим обліковим записом %1 + + + Go to https://%1 on your phone + Перейдіть на сайт https://%1 на своєму телефоні + + + Click "add new device" and scan the QR code on the right + Натисніть «додати новий пристрій» і відскануйте QR-код праворуч + + + Bookmark %1 to your home screen to use it like an app + Додайте %1 до домашнього екрану, щоб використовувати його як додаток + + + + ParamControl + + Enable + Вмикнути + + + Cancel + Відміна + + + + PrimeAdWidget + + Upgrade Now + Підпишись + + + Become a comma prime member at connect.comma.ai + Підпишіться на comma prime на connect.comma.ai + + + PRIME FEATURES: + МОЖЛИВОСТІ: + + + Remote access + Віддалений доступ + + + 24/7 LTE connectivity + Підключення LTE 24/7 + + + 1 year of drive storage + зберігання поїздок протягом року + + + Turn-by-turn navigation + Покрокова навігація + + + + PrimeUserWidget + + ✓ SUBSCRIBED + ✓ ПІДПИСАНО + + + comma prime + comma prime + + + + QObject + + km + км + + + m + м + + + mi + мл + + + ft + фт + + + Restore + Відновити + + + Exit + Вихід + + + FrogPilot + ЖабоПілот + + + now + зараз + + + %n minute(s) ago + + %n хвилин тому + %n хвилини тому + %n хвилини тому + + + + %n hour(s) ago + + %n годин тому + %n години тому + %n годин тому + + + + %n day(s) ago + + %n день тому + %n дні тому + %n днів тому + + + + 0 MB + 0 МБ + + + GB + ГБ + + + MB + МБ + + + hour + година + + + hours + годин + + + minute + хвилина + + + minutes + хвилин + + + second + секунда + + + seconds + секунд + + + + Reset + + Reset failed. Reboot to try again. + Скидання не вдалося. Перезавантажте систему, щоб спробувати ще раз. + + + Resetting device... +This may take up to a minute. + Скидання пристрою... +Це може зайняти до хвилини. + + + Are you sure you want to reset your device? + Ви впевнені, що хочете скинути налаштування пристрою? + + + System Reset + Скинути систему + + + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. + Запущено скидання системи. Натисніть «Підтвердити», щоб видалити весь вміст і налаштування. Натисніть «Скасувати», щоб продовжити завантаження. + + + Cancel + Скасувати + + + Reboot + Перезав. + + + Confirm + Підтверд. + + + Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. + Неможливо змонтувати розділ data. Розділ може бути пошкоджений. Натисніть «Підтвердити», щоб стерти дані та скинути налаштування пристрою. + + + + ScreenRecorder + + RECORDING + ЗАПИСУЮ + + + RECORD + ЗАПИС + + + + SettingsWindow + + ← Back + ← Назад + + + Device + Пристрій + + + Network + Мережа + + + Toggles + Опції + + + Software + Програма + + + FrogPilot + ЖабоПілот + + + Welcome to FrogPilot! Since you're new to openpilot, the "Minimal" toggle preset has been applied, but you can change this at any time via the "Tuning Level" button! + Ласкаво просимо до FrogPilot! Оскільки ви новачок в openpilot, було застосовано попереднє налаштування «Мінімальне», але ви можете змінити його в будь-який час за допомогою кнопки «Рівень налаштування»! + + + Welcome to FrogPilot! Since you're new to FrogPilot, the "Minimal" toggle preset has been applied, but you can change this at any time via the "Tuning Level" button! + Ласкаво просимо до FrogPilot! Оскільки ви новачок у FrogPilot, було застосовано попереднє налаштування «Мінімальне», але ви можете змінити його в будь-який час за допомогою кнопки «Рівень налаштування»! + + + Since you're fairly new to FrogPilot, the "Minimal" toggle preset has been applied, but you can change this at any time via the "Tuning Level" button! + Оскільки ви ще не дуже добре знайомі з FrogPilot, було застосовано попереднє налаштування «Мінімальне», але ви можете змінити його в будь-який час за допомогою кнопки «Рівень налаштування»! + + + Since you're experienced with openpilot, the "Standard" toggle preset has been applied, but you can change this at any time via the "Tuning Level" button! + Оскільки ви маєте досвід роботи з openpilot, було застосовано попереднє налаштування «Стандарт», але ви можете змінити його в будь-який час за допомогою кнопки «Рівень налаштування»! + + + Since you're experienced with FrogPilot, the "Standard" toggle preset has been applied, but you can change this at any time via the "Tuning Level" button! + Оскільки ви маєте досвід роботи з FrogPilot, було застосовано стандартне попереднє налаштування «Standard», але ви можете змінити його в будь-який час за допомогою кнопки «Tuning Level»! + + + Since you're very experienced with FrogPilot, the "Advanced" toggle preset has been applied, but you can change this at any time via the "Tuning Level" button! + Оскільки ви маєте великий досвід роботи з FrogPilot, було застосовано попереднє налаштування «Advanced», але ви можете змінити його в будь-який час за допомогою кнопки «Tuning Level»! + + + + Setup + + Something went wrong. Reboot the device. + Сталася помилка. Перезавантажте пристрій. + + + Ensure the entered URL is valid, and the device’s internet connection is good. + Переконайтеся, що введена URL-адреса є дійсною, а підключення пристрою до Інтернету працює належним чином. + + + No custom software found at this URL. + За цією адресою URL не знайдено жодної програми. + + + WARNING: Low Voltage + УВАГА: Низька напруга + + + Power your device in a car with a harness or proceed at your own risk. + Підʼєднайте пристрій до авто або дійте на власний ризик. + + + Power off + Вимкнути + + + Continue + Продовжити + + + Getting Started + Початок роботи + + + Before we get on the road, let’s finish installation and cover some details. + Перш ніж вирушати в дорогу, давайте завершимо установку та обговоримо деякі деталі. + + + Connect to Wi-Fi + Підключитися до Wi-Fi + + + Back + Назад + + + Continue without Wi-Fi + Продовжити без Wi-Fi + + + Waiting for internet + Очікую інет + + + Choose Software to Install + Виберіть програму для встановлення + + + openpilot + openpilot + + + Custom Software + Користувацьке ПЗ + + + Enter URL + Введіть URL-адресу + + + for Custom Software + для користувацького ПЗ + + + Downloading... + Завантаження... + + + Download Failed + Не вдале завантаження + + + Reboot device + Перезавантажити + + + Start over + Наново + + + Select a language + Виберіть мову + + + + SetupWidget + + Finish Setup + Завершити налаштування + + + Pair your device with Konik connect (stable.konik.ai). + Підключіть свій пристрій до Konik connect (stable.konik.ai). + + + Pair your device with comma connect (connect.comma.ai) and claim your comma prime offer. + Підключіть свій пристрій до comma connect (connect.comma.ai) і отримайте пропозицію comma prime. + + + Pair device + Сполучити пристрій + + + + Sidebar + + CONNECT + CONNECT + + + OFFLINE + ОФЛАЙН + + + ONLINE + ОНЛАЙН + + + ERROR + ПОМИЛКА + + + TEMP + ТЕМП + + + HIGH + ВИС. + + + GOOD + НОРМ + + + OK + ОК + + + VEHICLE + АВТО + + + NO + НІ + + + PANDA + ПАНДА + + + GPS + GPS + + + SEARCH + ПОШУК + + + GPU + ГП + + + CPU + ЦП + + + GB + ГБ + + + MEMORY + ПАМʼЯТЬ + + + LEFT + ЗАЛИШ. + + + USED + ВИКОР. + + + -- + -- + + + Wi-Fi + Wi-Fi + + + ETH + ДРОТ + + + 2G + 2G + + + 3G + 3G + + + LTE + LTE + + + 5G + 5G + + + + SoftwarePanel + + Updates are only downloaded while the car is off or in park. + Оновлення завантажуються тільки стаціонарно + + + Current Version + Поточна версія + + + Automatically Update FrogPilot + Автоматично оновлювати FrogPilot + + + FrogPilot will automatically update itself and it's assets when you're offroad and have an active internet connection. + FrogPilot автоматично оновлюватиме себе та свої ресурси, коли ви не в дорозі та маєте активне підключення до Інтернету. + + + Download + Завантажити + + + CHECK + ПЕРЕВІРКА + + + Install Update + Встановити оновлення + + + INSTALL + ВСТАНОВ. + + + Target Branch + Цільова гілка + + + SELECT + ВИБРАТИ + + + Select a branch + Виберіть гілку + + + This branch must be downloaded before switching. Would you like to download it now? + Цю гілку необхідно завантажити перед переходом. Чи бажаєте ви завантажити її зараз? + + + Uninstall %1 + Видалити %1 + + + UNINSTALL + ВИДАЛИТИ + + + Are you sure you want to uninstall? + Ви впевнені, що хочете видалити програму? + + + Uninstall + Видалити + + + Error Log + Журнал помилок + + + VIEW + ДИВИСЬ + + + View the error log for openpilot crashes. + Перегляньте журнал помилок для збоїв openpilot. + + + failed to check for update + не вдалося перевірити наявність оновлень + + + DOWNLOAD + ВАНТАЖ + + + update available + оновлення доступне + + + never + ніколи + + + up to date, last checked %1 + оновлено, остання перевірка %1 + + + downloading… + завантажую... + + + checking… + перевіряю... + + + waiting for vehicle to go offroad... + очікування зупинки авто... + + + finalizing update... + завершую... + + + Do you want to perform a full factory reset? All saved assets and settings will be permanently deleted! + Ви хочете виконати повне скидання до заводських налаштувань? Усі збережені дані та налаштування будуть остаточно видалені! + + + This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? + Це повне скидання налаштувань до заводських і його неможливо скасувати. Ви абсолютно впевнені, що хочете продовжити? + + + + SshControl + + SSH Keys + Ключі SSH + + + Warning: This grants SSH access to all public keys in your GitHub settings. Never enter a GitHub username other than your own. A comma employee will NEVER ask you to add their GitHub username. + Попередження: це надає SSH доступ до всіх відкритих ключів у ваших налаштуваннях GitHub. Ніколи не вводьте ім'я користувача GitHub, яке не належить вам. Співробітник компанії comma НІКОЛИ не попросить вас додати його ім'я користувача GitHub. + + + ADD + ДОДАТИ + + + Enter your GitHub username + Введіть своє ім'я користувача GitHub + + + LOADING + ЗАВАНТАЖЕННЯ + + + REMOVE + ВИДАЛИТИ + + + Username '%1' has no keys on GitHub + Користувач «%1» не має ключів на GitHub + + + Request timed out + Час очікування запиту закінчився + + + Username '%1' doesn't exist on GitHub + Ім'я користувача «%1» не існує на GitHub + + + + SshToggle + + Enable SSH + Вмикнути SSH + + + + TermsPage + + Terms & Conditions + Умови та положення + + + Decline + Відмова + Decline + + + Scroll to accept + Крути щоб прийняти + + + Agree + Згоден + + + + TogglesPanel + + Enable openpilot + Увімкнути openpilot + + + Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off. + Використовуйте систему openpilot для адаптивного круїз-контролю та допомоги водієві у підтримці смуги руху. Для використання цієї функції необхідна постійна увага. Зміна цього параметра можлива на вимкненому авто. + + + openpilot Longitudinal Control (Alpha) + openpilot Поздовжній контроль (альфа) + + + WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB). + УВАГА: система поздовжнього контролю openpilot для цього автомобіля перебуває в стадії альфа-тестування і вимкне функцію автоматичного екстреного гальмування (AEB). + + + On this car, openpilot defaults to the car's built-in ACC instead of openpilot's longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha. + У цьому автомобілі openpilot за замовчуванням використовує вбудовану систему ACC замість поздовжнього керування openpilot. Увімкніть цю опцію, щоб перейти на поздовжнє керування openpilot. Рекомендується увімкнути експериментальний режим під час увімкнення альфа-версії поздовжнього керування openpilot. + + + Experimental Mode + Експериментальний режим + + + Disengage on Accelerator Pedal + Деактиівація по педалі акселератора + + + When enabled, pressing the accelerator pedal will disengage openpilot. + Коли ця функція увімкнена, натискання педалі акселератора вимкне openpilot. + + + Enable Lane Departure Warnings + Увімкнути попередження про виїзд із смуги руху + + + Receive alerts to steer back into the lane when your vehicle drifts over a detected lane line without a turn signal activated while driving over 31 mph (50 km/h). + Отримуйте сповіщення про необхідність повернутись у смугу руху, коли ваш автомобіль з'їжджає за межі виявленої смуги руху без увімкненого поворотника під час руху зі швидкістю понад 31 миль/год (50 км/год). + + + Record and Upload Driver Camera + Запис і вивантаження камери водія + + + Upload data from the driver facing camera and help improve the driver monitoring algorithm. + Завантажуйте дані з камери, спрямованої на водія, і допоможіть вдосконалити алгоритм моніторингу водія. + + + Use Metric System + Використовуйте метричну систему + + + Display speed in km/h instead of mph. + Відображати швидкість у км/год замість миль/год. + + + Show ETA in 24h Format + Показати ОЧП у форматі 24 годин + + + Use 24h format instead of am/pm + Використовуйте 24-годинний формат замість ДП/ПП + + + Show Map on Left Side of UI + Розмістити мапу зліва + + + Show map on left side when in split screen view. + Показати карту зліва а не справа у режимі розділеного екрана. + + + Aggressive + Агресивний + + + Standard + Стандартний + + + Relaxed + Розслаблений + + + Driving Personality + Режим водіння + + + Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button. + Рекомендується стандартний режим. В агресивному режимі openpilot буде слідувати за автомобілями, що їдуть попереду, ближче і буде більш агресивно використовувати газ і гальма. У спокійному режимі openpilot буде триматися далі від автомобілів, що їдуть попереду. На автомобілях, що підтримують цю функцію, ви можете перемикатися між цими режимами за допомогою кнопки відстані на кермі. + + + openpilot defaults to driving in <b>chill mode</b>. Experimental mode enables <b>alpha-level features</b> that aren't ready for chill mode. Experimental features are listed below: + openpilot за замовчуванням працює в <b>Спокійному режимі</b>. Експериментальний режим увімкне <b>функції альфа-рівня</b>, які не готові для режиму спокійний. Експериментальні функції перелічені нижче: + + + End-to-End Longitudinal Control + Комплексний поздовжній контроль + + + Let the driving model control the gas and brakes. openpilot will drive as it thinks a human would, including stopping for red lights and stop signs. Since the driving model decides the speed to drive, the set speed will only act as an upper bound. This is an alpha quality feature; mistakes should be expected. + Дозвольте моделі водіння контролювати газ і гальма. openpilot буде керувати автомобілем так, як це робив би людина, включаючи зупинку на червоне світло світлофора і знаки зупинки. Оскільки модель водіння визначає швидкість руху, задана швидкість буде діяти лише як верхня межа. Це функція альфа-якості; слід очікувати помилок. + + + New Driving Visualization + Нова візуалізація водіння + + + The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner. + Візуалізація руху перейде на ширококутну камеру, спрямовану на дорогу, при низьких швидкостях, щоб краще показувати деякі повороти. Логотип експериментального режиму також буде відображатися у верхньому правому куті. + + + Experimental mode is currently unavailable on this car since the car's stock ACC is used for longitudinal control. + Експериментальний режим наразі недоступний для цього автомобіля, оскільки для поздовжнього контролю використовується стандартна система ACC. + + + openpilot longitudinal control may come in a future update. + Поздовжнє керування openpilot може з'явитися в майбутньому оновленні. + + + Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode. + Увімкніть перемикач подовжнього керування openpilot (альфа), щоб дозволити експериментальний режим. + + + + Updater + + Update Required + Необхідне оновлення + + + An operating system update is required. Connect your device to Wi-Fi for the fastest update experience. The download size is approximately 1GB. + Необхідно оновити операційну систему. Підключіть пристрій до мережі Wi-Fi, щоб оновлення відбулося якнайшвидше. Розмір завантаження становить приблизно 1 ГБ. + + + Connect to Wi-Fi + Підключитися до Wi-Fi + + + Install + Встановити + + + Back + Назад + + + Loading... + Завантаження... + + + Reboot + Перезавантаження + + + Update failed + Оновлення не вдалося + + + + WiFiPromptWidget + + Setup Wi-Fi + Зʼєднай WiFi + + + Connect to Wi-Fi to upload driving data and help improve openpilot + Підключіться до Wi-Fi, щоб завантажити дані про водіння та допомогти вдосконалити openpilot + + + Open Settings + Відкрити налаштування + + + Ready to upload + Готовий до завантаження + + + Training data will be pulled periodically while your device is on Wi-Fi + Дані для навчання будуть періодично завантажуватися, коли ваш пристрій підключений до Wi-Fi + + + Uploading disabled + Завантаження вимкнено + + + Toggle off the "Turn Off Data Uploads" toggle to re-enable uploads. + Вимкніть перемикач «Вимкнути завантаження даних», щоб знову увімкнути завантаження. + + + + WifiUI + + Scanning for networks... + Пошук мереж... + + + CONNECTING... + З'ЄДНАННЯ... + + + FORGET + ЗАБУТИ + + + Forget Wi-Fi Network "%1"? + Забути мережу Wi-Fi «%1»? + + + Forget + Забути + + + \ No newline at end of file diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts index c045c7e..1a33ce4 100644 --- a/selfdrive/ui/translations/main_zh-CHS.ts +++ b/selfdrive/ui/translations/main_zh-CHS.ts @@ -423,6 +423,22 @@ Miles 英里 + + ALL TIME (KONIK) + 全天(KONIK) + + + ALL TIME + 始终 + + + PAST WEEK (KONIK) + 过去一周(KONIK) + + + PAST WEEK + 过去一周 + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT 限速 + + Desired: %1 + 期望:%1 + + + s + s + + + 1 minute + 1 分钟 + + + %1 minutes + %1 分钟 + + + 1 second + 1 秒 + + + %1 seconds + %1 秒 + FrogPilotConfirmationDialog @@ -532,7 +572,7 @@ Deleting... - 正在删除… + 正在删除... Deleted! @@ -600,7 +640,7 @@ Renaming... - 正在重命名… + 正在重命名... Renamed! @@ -632,11 +672,11 @@ Backing up... - 正在备份… + 正在备份... Compressing... - 正在压缩… + 正在压缩... Backup created! @@ -668,11 +708,11 @@ Restoring... - 正在恢复… + 正在恢复... Extracting... - 正在解压… + 正在解压... Restored! @@ -680,7 +720,7 @@ Rebooting... - 正在重启… + 正在重启... Toggle Backups @@ -694,6 +734,238 @@ Choose a backup to delete 选择要删除的备份 + + FrogPilot Stats + FrogPilot 统计 + + + <b>View your collected FrogPilot stats.</b> + <b>查看您收集的FrogPilot统计数据。</b> + + + RESET + 重置 + + + VIEW + 查看 + + + Are you sure you want to reset all of your FrogPilot stats? + 你确定要重置你的所有FrogPilot统计数据吗? + + + Reset + 重置 + + + Total Emergency Brake Alerts + 紧急制动警报总数 + + + Time Using "Always On Lateral" + “始终开启横向”使用时间 + + + Favorite Set Speed + 收藏的设定速度 + + + Total Disengagements + 总脱离次数 + + + Total Engagements + 总参与次数 + + + Time Using "Experimental Mode" + 使用“实验模式”的时间 + + + Total Frog Chirps + 青蛙鸣叫总数 + + + Total Frog Hops + 蛙跳总计 + + + Total Drives + 总驾驶次数 + + + Total Distance Driven + 总行驶距离 + + + Total Driving Time + 总驾驶时间 + + + Total Frog Squeaks + 青蛙吱吱声总数 + + + Total Goat Screams + 山羊尖叫总数 + + + Highest Acceleration Rate + 最高加速度率 + + + Time Using Lateral Control + 横向控制使用时间 + + + Longest Distance Without an Override + 最长无接管距离 + + + Time Using Longitudinal Control + 使用纵向控制的时间 + + + Driving Models: + 驾驶模型: + + + Month + 月份 + + + Total Overrides + 总覆盖次数 + + + Time Overriding openpilot + 覆盖 openpilot 时间 + + + Random Events: + 随机事件: + + + Time Stopped + 时间已停止 + + + Time Spent at Stoplights + 在红绿灯处停留的时间 + + + Total Time Tracked + 总计跟踪时间 + + + UwUs + UwUs + + + Loch Ness Encounters + 尼斯湖邂逅 + + + Visits to 1955 + 访问次数 1955 + + + Deja Vu Moments + 似曾相识的时刻 + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + HAL 9000 拒绝 + + + openpilot Crashes + openpilot 崩溃 + + + This Is Fine Moments + 没问题的时刻 + + + To Be Continued Moments + 未完待续片刻 + + + Noices + 噪音 + + + Attempted Frog Murders + 企图谋杀青蛙 + + + Total Mail Received + 收到邮件总数 + + + kilometer + 千米 + + + kilometers + 公里 + + + mile + 英里 + + + miles + 英里 + + + day + + + + days + + + + hour + 小时 + + + hours + 小时 + + + minute + 分钟 + + + minutes + 分钟 + + + km/h + 公里/小时 + + + mph + 英里/小时 + + + m/s² + m/s² + + + Total + 总计 + + + % of + % 的 + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ + + FrogPilotDriveSummary + + Random Events Summary + 随机事件摘要 + + + Drive Summary + 行驶摘要 + + + UwUs + UwUs + + + Loch Ness Encounters + 尼斯湖邂逅 + + + Visits to 1955 + 访问次数为 1955 + + + Deja Vu Moments + 似曾相识的时刻 + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + HAL 9000 拒绝 + + + openpilot Crashes + openpilot 崩溃 + + + This Is Fine Moments + 这很正常的时刻 + + + To Be Continued Moments + 待续时刻 + + + Noices + 杂音 + + + Attempted Frog Murders + 企图谋杀青蛙 + + + Total Mail Received + 收到邮件总数 + + + % of Drive With openpilot Engaged + 启用 openpilot 驾驶的百分比 + + + Drive Distance + 行驶距离 + + + Drive Time + 行驶时间 + + + % of Drive In "Experimental Mode" + “实验模式”驾驶占比 % + + + No Random Events Played! + 未播放随机事件! + + + kilometer + 千米 + + + kilometers + 公里 + + + mile + 英里 + + + miles + 英里 + + + day + + + + days + + + + hour + 小时 + + + hours + 小时 + + + minute + 分钟 + + + minutes + 分钟 + + FrogPilotLateralPanel @@ -1289,11 +1680,7 @@ Predicted Stop In - 预计在…停止 - - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>当 openpilot 预测在设定时间内会停车时,切换到“实验模式”。</b> 这通常在模型“看到”前方红灯或停车标志时触发。<br><br><i><b>免责声明</b>:openpilot 不会显式检测交通信号灯或停车标志。在“实验模式”下,openpilot 基于摄像头输入进行端到端驾驶决策,这意味着即使没有明显原因也可能停车。</i> + 预计在...停止 Turn Signal Below @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs 在“已检测到”的红绿灯/停车标志处强制停车 - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>当驾驶模型“检测到”红灯或停止标志时,强制 openpilot 停止。</b><br><br><i><b>免责声明</b>:openpilot 并不会明确检测交通信号灯或停止标志。在“实验模式”中,openpilot 基于摄像头输入进行端到端驾驶决策,这意味着即使没有明显理由也可能会停车。</i> - Increase Stopped Distance by: 增加停止距离: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>反转巡航控制按钮行为</b>,使短按将设定速度增加 5 而不是 1。 + + Increase Following Distance by: + 将跟车距离增加: + + + Reduce Acceleration by: + 减少加速度: + + + Reduce Speed in Curves by: + 在弯道将车速降低: + + + Snow + + + + <b>Driving adjustments for snowy conditions.</b> + <b>在积雪条件下的驾驶调整。</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>在积雪中与前车保持更大车距。</b> 增大以扩大间距;减小以缩小间隙。 + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>在雪天跟车停止时加大额外缓冲。</b> 增大以获得更多空间;减小以缩短车距。 + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>在雪地中降低最大加速度。</b> 增加以获得更柔和的起步;减少以获得更快但稳定性较差的起步。 + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>在雪中通过弯道时降低期望车速。</b> 提高可实现更安全、更平顺的转弯;降低则在弯道中更激进驾驶。 + Speed Limit Controller 限速控制器 @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>模仿人类驾驶员的跟车行为</b>,通过在更快车辆后方缩小车距以更快起步,并动态调整期望跟车距离,以实现更平顺、更高效的制动。 + + Weather Condition Offsets + 天气条件偏移 + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>根据实时天气自动调整驾驶行为。</b>在能见度低、下雨或下雪时帮助保持舒适与安全。 + + + Low Visibility + 低能见度 + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>针对雾、霾或其他低能见度条件的驾驶调整。</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>在能见度低时与前车保持额外距离。</b> 增大以留出更多空间;减小以缩短车距。 + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>在低能见度下在车辆后方停车时增加额外缓冲。</b> 增大以留出更多空间;减小以缩短间距。 + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>在低能见度下降低最大加速度。</b> 增大以获得更平稳的起步;减小以获得更快速但稳定性较差的起步。 + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>在能见度低的弯道路段行驶时降低期望速度。</b> 增加该值可获得更安全、更平顺的转弯;降低该值会在弯道中更激进地驾驶。 + + + Rain + + + + <b>Driving adjustments for rainy conditions.</b> + <b>雨天驾驶调整。</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>在雨天在前车后方留出额外空间。</b> 增大以获得更多间距;减小以缩小车距。 + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>在雨天停车跟车时增加额外缓冲。</b> 增大以留出更多空间;减小以缩短间距。 + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>在雨天降低最大加速度。</b> 增大可使起步更柔和;减小可使起步更迅速但稳定性更差。 + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>在雨中通过弯道时降低设定车速。</b> 提高设定可实现更安全、更平顺的转弯;降低设定会使弯道驾驶更激进。 + + + Rainstorms + 暴雨 + + + <b>Driving adjustments for rainstorms.</b> + <b>暴雨驾驶调整。</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>在暴雨中与前车保持更大距离。</b> 增加以扩大车距;减少以缩小间距。 + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>在暴雨中在车后停车时增加额外缓冲。</b> 增加以获得更大间距;减少以缩短车距。 + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>在暴雨中降低最大加速度。</b> 增加可使起步更柔和;减少可使起步更迅速但稳定性更差。 + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>在暴雨中通过弯道行驶时降低期望车速。</b> 提高数值可使转弯更安全、更平顺;降低数值会在弯道中更激进。 + + + Human-Like Lane Changes + 类人化变道 + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>在变道过程中预测并跟踪相邻车辆</b>,实现模仿人类驾驶员的变道行为。 + + + "Detected" Stop Lights/Signs + 检测到“停止”信号灯/标志 + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>每当驾驶模型“检测到”红灯或停止标志时,切换到“实验模式”。</b><br><br><i><b>免责声明</b>:openpilot 不会明确检测交通信号灯或停止标志。在“实验模式”下,openpilot 基于相机输入进行端到端驾驶决策,这意味着即使没有明显原因也可能停车!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>当 openpilot 预测在设定时间内会停车时,切换到“实验模式”。</b>这通常在模型“看到”前方红灯或停止标志时触发。<br><br><i><b>免责声明</b>:openpilot 不会显式检测交通信号灯或停止标志。在“实验模式”中,openpilot 基于摄像头输入进行端到端驾驶决策,这意味着即使没有明显原因,它也可能会停车!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>当驾驶模型“检测到”红灯或停车标志时,强制 openpilot 停车。</b><br><br><i><b>免责声明</b>:openpilot 并不显式检测红绿灯或停车标志。在“实验模式”下,openpilot 基于摄像头输入进行端到端驾驶决策,这意味着即使没有明确理由它也可能会停车!</i> + + + Set Your Own Key + 设置您自己的密钥 + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>设置您自己的“OpenWeatherMap”密钥以提高天气更新频率。</b><br><br><i>个人密钥每天可免费调用 1,000 次,支持每分钟更新。默认密钥是共享的,只会每 15 分钟更新一次。</i> + + + ADD + 添加 + + + Enter your "OpenWeatherMap" key + 请输入你的“OpenWeatherMap”密钥 + + + REMOVE + 移除 + + + Invalid key! + 密钥无效! + + + Are you sure you want to remove your key? + 您确定要移除您的密钥吗? + + + TEST + 测试 + + + Testing... + 测试中… + + + Key is valid! + 密钥有效! + + + An error occurred: %1 + 发生错误:%1 + FrogPilotManageControl @@ -2159,7 +2726,7 @@ Resetting... - 正在重置… + 正在重置... Reset! @@ -2167,7 +2734,7 @@ Rebooting... - 正在重启… + 正在重启... Storage Used @@ -2223,11 +2790,19 @@ Offline... - 离线… + 离线... - CANCELLED - 已取消 + 0 MB + 0 MB + + + Calculating... + 正在计算… + + + Not parked + 未停放 @@ -2342,7 +2917,7 @@ Updating... - 正在更新… + 正在更新... Select a driving model to download @@ -2414,7 +2989,7 @@ Cancelling... - 正在取消… + 正在取消... Updating Tinygrad will delete existing Tinygrad-based driving models and need to be re-downloaded. Proceed? @@ -2426,7 +3001,7 @@ Offline... - 离线… + 离线... Update available! @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC 选择模型 — 🗺️ = 导航 | 📡 = 雷达 | 👀 = VOACC + + Downloading... + 正在下载… + + + Not parked + 未停泊 + + + Downloaded! + 已下载! + + + All models downloaded! + 所有模型已下载! + + + Download cancelled... + 下载已取消… + + + Download failed... + 下载失败… + + + GitHub and GitLab are offline... + GitHub 和 GitLab 已离线… + + + Repository unavailable + 存储库不可用 + FrogPilotModelReview @@ -2516,7 +3123,7 @@ Offline... - 离线… + 离线... Mapbox @@ -2584,7 +3191,7 @@ Cancelled... - 已取消… + 已取消... You've hit today's request limit. @@ -2626,6 +3233,57 @@ It will reset in %1 hours and %2 minutes. Completed! 已完成! + + <b>Manage your Public Mapbox Key.</b> + <b>管理您的公共 Mapbox 密钥。</b> + + + TEST + 测试 + + + Remove your Public Mapbox Key? + 要移除你的公共 Mapbox 密钥吗? + + + Enter your Public Mapbox Key + 输入你的 Mapbox 公钥 + + + Testing... + 测试中… + + + Key is valid! + 密钥有效! + + + Key is invalid! + 密钥无效! + + + An error occurred: %1 + 发生错误:%1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>管理您的 Mapbox 密钥。</b> + + + Remove your Secret Mapbox Key? + 要移除你的 Secret Mapbox Key 吗? + + + Enter your Secret Mapbox Key + 输入您的 Mapbox 密钥 + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + 帧率:%1 | 最小:%2 | 最大:%3 | 平均:%4 + FrogPilotSettingsWindow @@ -3153,6 +3811,38 @@ Developer - Highly customizable settings for seasoned enthusiasts CANCEL 取消 + + Downloading... + 正在下载... + + + Idle + 空闲 + + + Unpacking theme... + 正在解压主题… + + + Downloaded! + 已下载! + + + Download cancelled... + 下载已取消… + + + Download failed... + 下载失败… + + + Repository unavailable + 存储库不可用 + + + GitHub and GitLab are offline... + GitHub 和 GitLab 已离线… + FrogPilotUtilitiesPanel @@ -3186,7 +3876,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Flashing... - 正在刷新… + 正在刷新... Flashed! @@ -3194,7 +3884,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Rebooting... - 正在重启… + 正在重启... Force Drive State @@ -3334,7 +4024,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Resetting... - 正在重置… + 正在重置... Reset! @@ -3595,6 +4285,54 @@ Developer - Highly customizable settings for seasoned enthusiasts comma Pedal Support comma Pedal 支持 + + Subaru Settings + 斯巴鲁设置 + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>适用于斯巴鲁车辆的FrogPilot功能。</b> + + + Stop and Go + 启停驾驶 + + + Stop and go for supported Subaru vehicles. + 适用于受支持的斯巴鲁车辆的启停功能。 + + + Acura/Honda Settings + Acura/Honda 设置 + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>适用于讴歌和本田车辆的FrogPilot功能。</b> + + + Gentle Following + 温和跟车 + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>在跟随前车时减少加速与制动的顿挫。</b> 适用于走走停停的交通。 + + + Increased Braking Force + 制动力度增加 + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>提高最大制动力以改进制动性能。</b> + + + Responsive Pedal at Low Speeds + 低速时的灵敏油门 + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>在城市驾驶中,从静止起步提升加速性能,带来更灵敏的油门响应。</b> + FrogPilotVisualsPanel @@ -4379,7 +5117,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Installer Installing... - 正在安装…… + 正在安装... @@ -4680,6 +5418,42 @@ Developer - Highly customizable settings for seasoned enthusiasts FrogPilot FrogPilot + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + 小时 + + + hours + 小时 + + + minute + 分钟 + + + minutes + 分钟 + + + second + + + + seconds + + Reset @@ -4714,7 +5488,7 @@ Developer - Highly customizable settings for seasoned enthusiasts Resetting device... This may take up to a minute. - 设备重置中… + 设备重置中... 这可能需要一分钟的时间。 @@ -4836,7 +5610,7 @@ This may take up to a minute. Downloading... - 正在下载…… + 正在下载... Download Failed @@ -5111,6 +5885,22 @@ This may take up to a minute. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? 这是一次完整的出厂重置,且无法撤销。您确定要继续吗? + + downloading… + 正在下载… + + + checking… + 正在检查… + + + waiting for vehicle to go offroad... + 正在等待车辆驶离道路… + + + finalizing update... + 正在完成更新… + SshControl @@ -5328,7 +6118,7 @@ This may take up to a minute. Loading... - 正在加载…… + 正在加载... Reboot @@ -5374,11 +6164,11 @@ This may take up to a minute. WifiUI Scanning for networks... - 正在扫描网络…… + 正在扫描网络... CONNECTING... - 正在连接…… + 正在连接... FORGET diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts index 42f1ed7..cc25070 100644 --- a/selfdrive/ui/translations/main_zh-CHT.ts +++ b/selfdrive/ui/translations/main_zh-CHT.ts @@ -423,6 +423,22 @@ Miles 英里 + + ALL TIME (KONIK) + 全時(KONIK) + + + ALL TIME + 全時 + + + PAST WEEK (KONIK) + 過去一週(KONIK) + + + PAST WEEK + 過去一週 + DriverViewWindow @@ -484,6 +500,30 @@ LIMIT 限制 + + Desired: %1 + 期望:%1 + + + s + s + + + 1 minute + 1 分鐘 + + + %1 minutes + %1 分鐘 + + + 1 second + 1 秒 + + + %1 seconds + %1 秒 + FrogPilotConfirmationDialog @@ -532,7 +572,7 @@ Deleting... - 正在刪除… + 正在刪除... Deleted! @@ -600,7 +640,7 @@ Renaming... - 正在重新命名… + 正在重新命名... Renamed! @@ -632,11 +672,11 @@ Backing up... - 正在備份… + 正在備份... Compressing... - 正在壓縮… + 正在壓縮... Backup created! @@ -668,11 +708,11 @@ Restoring... - 正在還原… + 正在還原... Extracting... - 正在解壓縮… + 正在解壓縮... Restored! @@ -680,7 +720,7 @@ Rebooting... - 正在重新啟動… + 正在重新啟動... Toggle Backups @@ -694,6 +734,238 @@ Choose a backup to delete 選擇要刪除的備份 + + FrogPilot Stats + FrogPilot 統計 + + + <b>View your collected FrogPilot stats.</b> + <b>查看你收集的 FrogPilot 統計資料。</b> + + + RESET + 重設 + + + VIEW + 檢視 + + + Are you sure you want to reset all of your FrogPilot stats? + 您確定要重設您所有的 FrogPilot 統計資料嗎? + + + Reset + 重設 + + + Total Emergency Brake Alerts + 緊急煞車警報總數 + + + Time Using "Always On Lateral" + 使用「始終啟用橫向控制」的時間 + + + Favorite Set Speed + 最愛設定速度 + + + Total Disengagements + 總解除接管數 + + + Total Engagements + 總互動次數 + + + Time Using "Experimental Mode" + 使用「實驗模式」時間 + + + Total Frog Chirps + 青蛙鳴叫總數 + + + Total Frog Hops + 青蛙總跳躍數 + + + Total Drives + 總駕駛次數 + + + Total Distance Driven + 總行駛距離 + + + Total Driving Time + 總駕駛時間 + + + Total Frog Squeaks + 青蛙吱吱聲總數 + + + Total Goat Screams + 山羊尖叫總數 + + + Highest Acceleration Rate + 最高加速率 + + + Time Using Lateral Control + 使用橫向控制的時間 + + + Longest Distance Without an Override + 最長未接管距離 + + + Time Using Longitudinal Control + 縱向控制使用時間 + + + Driving Models: + 駕駛模型: + + + Month + + + + Total Overrides + 總覆寫數 + + + Time Overriding openpilot + 時間覆寫 openpilot + + + Random Events: + 隨機事件 + + + Time Stopped + 時間已停止 + + + Time Spent at Stoplights + 停在紅綠燈的時間 + + + Total Time Tracked + 總計追蹤時間 + + + UwUs + UwUs + + + Loch Ness Encounters + 尼斯湖邂逅 + + + Visits to 1955 + 造訪至 1955 + + + Deja Vu Moments + 似曾相識時刻 + + + Internet Explorer Weeeeeeees + Internet Explorer 嗚——— + + + HAL 9000 Denials + HAL 9000 拒絕 + + + openpilot Crashes + openpilot 當機 + + + This Is Fine Moments + 這沒問題的時刻 + + + To Be Continued Moments + 待續時刻 + + + Noices + 雜訊 + + + Attempted Frog Murders + 企圖謀殺青蛙 + + + Total Mail Received + 收到郵件總數 + + + kilometer + 公里 + + + kilometers + 公里 + + + mile + 英里 + + + miles + 英里 + + + day + + + + days + + + + hour + 小時 + + + hours + 小時 + + + minute + 分鐘 + + + minutes + 分鐘 + + + km/h + 公里/小時 + + + mph + 英里/小時 + + + m/s² + m/s² + + + Total + 總計 + + + % of + % 的 + FrogPilotDevicePanel @@ -874,6 +1146,125 @@ + + FrogPilotDriveSummary + + Random Events Summary + 隨機事件摘要 + + + Drive Summary + 行駛摘要 + + + UwUs + UwUs + + + Loch Ness Encounters + 尼斯湖邂逅 + + + Visits to 1955 + 造訪次數:1955 + + + Deja Vu Moments + 似曾相識時刻 + + + Internet Explorer Weeeeeeees + Internet Explorer Weeeeeeees + + + HAL 9000 Denials + HAL 9000 拒絕 + + + openpilot Crashes + openpilot 當機 + + + This Is Fine Moments + 這沒問題的時刻 + + + To Be Continued Moments + 待續時刻 + + + Noices + 噪音 + + + Attempted Frog Murders + 企圖青蛙謀殺 + + + Total Mail Received + 收到郵件總數 + + + % of Drive With openpilot Engaged + 開啟 openpilot 的駕駛百分比 + + + Drive Distance + 行駛距離 + + + Drive Time + 駕駛時間 + + + % of Drive In "Experimental Mode" + 在「實驗模式」中的駕駛百分比 + + + No Random Events Played! + 未播放隨機事件! + + + kilometer + 公里 + + + kilometers + 公里 + + + mile + 英里 + + + miles + 英里 + + + day + + + + days + + + + hour + 小時 + + + hours + 小時 + + + minute + 分鐘 + + + minutes + 分鐘 + + FrogPilotLateralPanel @@ -1291,10 +1682,6 @@ Predicted Stop In 預測停車於 - - <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>當 openpilot 預測在設定的時間內需要停車時,切換到「實驗模式」。</b> 這通常在模型「看到」前方有紅燈或停止標誌時觸發。<br><br><i><b>免責聲明</b>:openpilot 不會明確偵測交通號誌或停止標誌。在「實驗模式」中,openpilot 會從相機輸入進行端到端駕駛決策,這表示即使沒有明確理由也可能會停車。</i> - Turn Signal Below 轉向燈在下方 @@ -1615,10 +2002,6 @@ Force Stop at "Detected" Stop Lights/Signs 在「已偵測到」紅綠燈/停車標誌處強制停車 - - <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason.</i> - <b>當駕駛模型「偵測到」紅燈或停車標誌時,強制 openpilot 停車。</b><br><br><i><b>免責聲明</b>:openpilot 並不會明確偵測號誌或停車標誌。在「實驗模式」中,openpilot 會根據攝影機輸入端到端做出駕駛決策,這表示即使沒有明確理由也可能停車。</i> - Increase Stopped Distance by: 將靜止距離增加: @@ -1651,6 +2034,42 @@ <b>Reverse the cruise control button behavior</b> so a short press increases the set speed by 5 instead of 1. <b>反轉定速巡航按鈕行為</b>,使短按將設定速度提高 5(而非 1)。 + + Increase Following Distance by: + 將跟車距離增加: + + + Reduce Acceleration by: + 降低加速度: + + + Reduce Speed in Curves by: + 在彎道減速: + + + Snow + + + + <b>Driving adjustments for snowy conditions.</b> + <b>針對下雪條件的駕駛調整。</b> + + + <b>Add extra space behind lead vehicles in snow.</b> Increase for more space; decrease for tighter gaps. + <b>在雪天在前車後方留出額外距離。</b> 增加以獲得更多空間;減少以縮小車距。 + + + <b>Add extra buffer when stopped behind vehicles in snow.</b> Increase for more room; decrease for shorter gaps. + <b>在雪中停在車輛後方時增加額外緩衝距離。</b> 增加以獲得更多空間;減少以縮短間距。 + + + <b>Lower the maximum acceleration in snow.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>在下雪時降低最大加速度。</b> 提高可使起步更柔和;降低可使起步更迅速但較不穩定。 + + + <b>Lower the desired speed while driving through curves in snow.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>在積雪中行經彎道時請降低設定車速。</b> 提高可使轉彎更安全、更平順;降低則在彎道中更具攻擊性。 + Speed Limit Controller 速限控制器 @@ -2039,6 +2458,154 @@ <b>Following behavior that mimics human drivers</b> by closing gaps behind faster vehicles for quicker takeoffs and dynamically adjusting the desired following distance for gentler, more efficient braking. <b>模仿人類駕駛的跟車行為</b>,在後方有更快車輛時縮小間距以更快起步,並動態調整期望跟車距離,以實現更柔順且更高效的制動。 + + Weather Condition Offsets + 天氣條件偏移 + + + <b>Automatically adjust driving behavior based on real-time weather.</b> Helps maintain comfort and safety in low visibility, rain, or snow. + <b>根據即時天氣自動調整駕駛行為。</b> 有助於在能見度低、下雨或下雪時維持舒適與安全。 + + + Low Visibility + 能見度低 + + + <b>Driving adjustments for fog, haze, or other low-visibility conditions.</b> + <b>針對霧、霾或其他低能見度狀況的駕駛調整。</b> + + + <b>Add extra space behind lead vehicles in low visibility.</b> Increase for more space; decrease for tighter gaps. + <b>在能見度低的情況下,與前車保持額外距離。</b> 增加以擴大間距;減少以縮小間距。 + + + <b>Add extra buffer when stopped behind vehicles in low visibility.</b> Increase for more room; decrease for shorter gaps. + <b>在能見度低的情況下,停在車輛後方時請增加額外緩衝距離。</b> 增加以留出更多空間;減少以縮短縫隙。 + + + <b>Lower the maximum acceleration in low visibility.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>在能見度低時降低最大加速度。</b> 增加以獲得較柔和的起步;減少則可更快但較不穩定地起步。 + + + <b>Lower the desired speed while driving through curves in low visibility.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>在能見度低的彎道路段行駛時,請降低期望速度。</b> 提高可獲得更安全、較平順的轉彎;降低則在彎道中會更具侵略性。 + + + Rain + + + + <b>Driving adjustments for rainy conditions.</b> + <b>雨天行車調整。</b> + + + <b>Add extra space behind lead vehicles in rain.</b> Increase for more space; decrease for tighter gaps. + <b>下雨時在前車後方留出更多距離。</b> 增加以留更多空間;減少以縮短車距。 + + + <b>Add extra buffer when stopped behind vehicles in rain.</b> Increase for more room; decrease for shorter gaps. + <b>在雨天停在車輛後方時增加額外緩衝距離。</b> 增加以取得更大空間;減少以縮短車距。 + + + <b>Lower the maximum acceleration in rain.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>在雨天降低最大加速度。</b> 提高可使起步更柔和;降低可使起步更迅速但穩定性較差。 + + + <b>Lower the desired speed while driving through curves in rain.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>在雨中通過彎道時降低期望車速。</b> 提高可使轉彎更安全、更平順;降低則在彎道中更具侵略性。 + + + Rainstorms + 暴雨 + + + <b>Driving adjustments for rainstorms.</b> + <b>暴雨駕駛調整。</b> + + + <b>Add extra space behind lead vehicles in a rainstorm.</b> Increase for more space; decrease for tighter gaps. + <b>在暴雨中與前車保持額外距離。</b> 增加以獲得更大間距;減少以縮小車距。 + + + <b>Add extra buffer when stopped behind vehicles in a rainstorm.</b> Increase for more room; decrease for shorter gaps. + <b>在暴雨中停在車輛後方時增加額外緩衝距離。</b> 增加以留出更多空間;減少以縮短間距。 + + + <b>Lower the maximum acceleration in a rainstorm.</b> Increase for softer takeoffs; decrease for quicker but less stable takeoffs. + <b>在暴雨中降低最大加速度。</b> 增加可使起步更柔順;減少可使起步更迅速但穩定性較差。 + + + <b>Lower the desired speed while driving through curves in a rainstorm.</b> Increase for safer, gentler turns; decrease for more aggressive driving in curves. + <b>在暴雨中行經彎道時降低期望車速。</b> 提高可使轉彎更安全、更平順;降低則在彎道中更具侵略性。 + + + Human-Like Lane Changes + 類似人類的變換車道 + + + <b>Lane-change behavior that mimics human drivers</b> by anticipating and tracking adjacent vehicles during lane changes. + <b>模仿人類駕駛的變換車道行為</b>,在變換車道時預判並追蹤相鄰車輛。 + + + "Detected" Stop Lights/Signs + 偵測到的紅綠燈/停車標誌 + + + <b>Switch to "Experimental Mode" whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>每當駕駛模型「偵測到」紅燈或停車標誌時,切換到「實驗模式」。</b><br><br><i><b>免責聲明</b>:openpilot 並不會明確偵測號誌燈或停車標誌。在「實驗模式」中,openpilot 會根據相機輸入做端到端駕駛決策,這表示即使沒有明確理由也可能會煞停!</i> + + + <b>Switch to "Experimental Mode" when openpilot predicts a stop within the set time.</b> This is usually triggered when the model "sees" a red light or stop sign ahead.<br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>當 openpilot 預測在設定時間內會停車時,切換至「實驗模式」。</b> 這通常在模型「看到」前方紅燈或停車標誌時觸發。<br><br><i><b>免責聲明</b>:openpilot 並不會明確偵測交通號誌或停車標誌。在「實驗模式」中,openpilot 會從相機輸入進行端到端駕駛決策,這表示即使沒有明確原因也可能會停車!</i> + + + <b>Force openpilot to stop whenever the driving model "detects" a red light or stop sign.</b><br><br><i><b>Disclaimer</b>: openpilot does not explicitly detect traffic lights or stop signs. In "Experimental Mode", openpilot makes end-to-end driving decisions from camera input, which means it may stop even when there's no clear reason!</i> + <b>每當駕駛模型「偵測」到紅燈或停車標誌時,強制 openpilot 停車。</b><br><br><i><b>免責聲明</b>:openpilot 不會明確偵測交通號誌或停車標誌。在「實驗模式」中,openpilot 依據攝影機輸入進行端到端的駕駛決策,這表示即使沒有明確理由也可能會停車!</i> + + + Set Your Own Key + 設定您自己的金鑰 + + + <b>Set your own "OpenWeatherMap" key to increase the weather update rate.</b><br><br><i>Personal keys grant 1,000 free calls per day, allowing for updates every minute. The default key is shared and only updates every 15 minutes.</i> + <b>設定您自己的「OpenWeatherMap」金鑰以提高天氣更新頻率。</b><br><br><i>個人金鑰每天可享有 1,000 次免費呼叫,允許每分鐘更新一次。預設金鑰為共享,僅每 15 分鐘更新一次。</i> + + + ADD + 新增 + + + Enter your "OpenWeatherMap" key + 輸入你的「OpenWeatherMap」金鑰 + + + REMOVE + 移除 + + + Invalid key! + 金鑰無效! + + + Are you sure you want to remove your key? + 您確定要移除您的金鑰嗎? + + + TEST + 測試 + + + Testing... + 測試中… + + + Key is valid! + 金鑰有效! + + + An error occurred: %1 + 發生錯誤:%1 + FrogPilotManageControl @@ -2159,7 +2726,7 @@ Resetting... - 正在重設… + 正在重設... Reset! @@ -2167,7 +2734,7 @@ Rebooting... - 正在重新啟動… + 正在重新啟動... Storage Used @@ -2223,11 +2790,19 @@ Offline... - 離線中… + 離線中... - CANCELLED - 已取消 + 0 MB + 0 MB + + + Calculating... + 正在計算中… + + + Not parked + 未停車 @@ -2342,7 +2917,7 @@ Updating... - 正在更新… + 正在更新... Select a driving model to download @@ -2414,7 +2989,7 @@ Cancelling... - 正在取消… + 正在取消... Updating Tinygrad will delete existing Tinygrad-based driving models and need to be re-downloaded. Proceed? @@ -2426,7 +3001,7 @@ Offline... - 離線中… + 離線中... Update available! @@ -2440,6 +3015,38 @@ Select a Model — 🗺️ = Navigation | 📡 = Radar | 👀 = VOACC 選擇模型 — 🗺️ = 導航 | 📡 = 雷達 | 👀 = VOACC + + Downloading... + 正在下載… + + + Not parked + 未停車 + + + Downloaded! + 已下載! + + + All models downloaded! + 所有模型已下載! + + + Download cancelled... + 下載已取消… + + + Download failed... + 下載失敗… + + + GitHub and GitLab are offline... + GitHub 和 GitLab 離線中… + + + Repository unavailable + 存放庫不可用 + FrogPilotModelReview @@ -2516,7 +3123,7 @@ Offline... - 離線中… + 離線中... Mapbox @@ -2584,7 +3191,7 @@ Cancelled... - 已取消… + 已取消... You've hit today's request limit. @@ -2626,6 +3233,57 @@ It will reset in %1 hours and %2 minutes. Completed! 已完成! + + <b>Manage your Public Mapbox Key.</b> + <b>管理您的公開 Mapbox 金鑰。</b> + + + TEST + 測試 + + + Remove your Public Mapbox Key? + 移除你的 Mapbox 公開金鑰? + + + Enter your Public Mapbox Key + 輸入您的 Mapbox 公開金鑰 + + + Testing... + 測試中… + + + Key is valid! + 金鑰有效! + + + Key is invalid! + 金鑰無效! + + + An error occurred: %1 + 發生錯誤:%1 + + + <b>Manage your Secret Mapbox Key.</b> + <b>管理您的 Mapbox 祕密金鑰。</b> + + + Remove your Secret Mapbox Key? + 要移除您的 Secret Mapbox 金鑰嗎? + + + Enter your Secret Mapbox Key + 輸入您的秘密 Mapbox 金鑰 + + + + FrogPilotOnroadWindow + + FPS: %1 | Min: %2 | Max: %3 | Avg: %4 + FPS:%1|最低:%2|最高:%3|平均:%4 + FrogPilotSettingsWindow @@ -3153,6 +3811,38 @@ Developer - 為資深愛好者提供高度自訂的設定 CANCEL 取消 + + Downloading... + 正在下載... + + + Idle + 閒置 + + + Unpacking theme... + 正在解壓佈景主題… + + + Downloaded! + 已下載! + + + Download cancelled... + 下載已取消… + + + Download failed... + 下載失敗… + + + Repository unavailable + 儲存庫不可用 + + + GitHub and GitLab are offline... + GitHub 和 GitLab 已離線… + FrogPilotUtilitiesPanel @@ -3186,7 +3876,7 @@ Developer - 為資深愛好者提供高度自訂的設定 Flashing... - 正在刷寫… + 正在刷寫... Flashed! @@ -3194,7 +3884,7 @@ Developer - 為資深愛好者提供高度自訂的設定 Rebooting... - 正在重新啟動… + 正在重新啟動... Force Drive State @@ -3334,7 +4024,7 @@ Developer - 為資深愛好者提供高度自訂的設定 Resetting... - 正在重設… + 正在重設... Reset! @@ -3595,6 +4285,54 @@ Developer - 為資深愛好者提供高度自訂的設定 comma Pedal Support comma Pedal 支援 + + Subaru Settings + Subaru 設定 + + + <b>FrogPilot features for Subaru vehicles.</b> + <b>適用於 Subaru 車輛的 FrogPilot 功能。</b> + + + Stop and Go + 走走停停 + + + Stop and go for supported Subaru vehicles. + 支援的 Subaru 車輛具備走走停停功能。 + + + Acura/Honda Settings + Acura/Honda 設定 + + + <b>FrogPilot features for Acura and Honda vehicles.</b> + <b>適用於 Acura 和 Honda 車輛的 FrogPilot 功能。</b> + + + Gentle Following + 溫和跟車 + + + <b>Reduces jerky acceleration and braking when following a lead vehicle.</b> Ideal for stop-and-go traffic. + <b>在跟隨前車時減少加減速的頓挫。</b> 適合走走停停的車流。 + + + Increased Braking Force + 增加制動力 + + + <b>Increases the maximum braking force for improved stopping performance.</b> + <b>提高最大制動力以改善煞車效能。</b> + + + Responsive Pedal at Low Speeds + 低速時的靈敏油門 + + + <b>Improves acceleration from a standstill for a more responsive throttle feel in city driving.</b> + <b>提升從靜止起步的加速表現,讓市區行駛的油門反應更靈敏。</b> + FrogPilotVisualsPanel @@ -4379,7 +5117,7 @@ Developer - 為資深愛好者提供高度自訂的設定 Installer Installing... - 安裝中… + 安裝中... @@ -4680,6 +5418,42 @@ Developer - 為資深愛好者提供高度自訂的設定 FrogPilot FrogPilot + + 0 MB + 0 MB + + + GB + GB + + + MB + MB + + + hour + 小時 + + + hours + 小時 + + + minute + 分鐘 + + + minutes + 分鐘 + + + second + + + + seconds + + Reset @@ -4714,7 +5488,7 @@ Developer - 為資深愛好者提供高度自訂的設定 Resetting device... This may take up to a minute. - 重置中… + 重置中... 這可能需要一分鐘的時間。 @@ -4836,7 +5610,7 @@ This may take up to a minute. Downloading... - 下載中… + 下載中... Download Failed @@ -5111,6 +5885,22 @@ This may take up to a minute. This is a complete factory reset and cannot be undone. Are you absolutely sure you want to continue? 這是完整的出廠重設,且無法復原。你確定要繼續嗎? + + downloading… + 正在下載… + + + checking… + 正在檢查… + + + waiting for vehicle to go offroad... + 正在等待車輛離開道路… + + + finalizing update... + 正在完成更新… + SshControl @@ -5328,7 +6118,7 @@ This may take up to a minute. Loading... - 載入中… + 載入中... Reboot diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index be69410..3273c1c 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -310,8 +310,6 @@ void UIState::updateStatus(FrogPilotUIState *fs) { if (scene.started) { status = STATUS_DISENGAGED; scene.started_frame = sm->frame; - } else if (frogpilot_scene.started_timer > 15*60*UI_FREQ && frogpilot_toggles.value("model_randomizer").toBool()) { - emit fs->reviewModel(); } started_prev = scene.started; scene.world_objects_visible = false; diff --git a/system/hardware/fan_controller.py b/system/hardware/fan_controller.py index f32133f..cd06e39 100755 --- a/system/hardware/fan_controller.py +++ b/system/hardware/fan_controller.py @@ -18,7 +18,7 @@ class TiciFanController(BaseFanController): cloudlog.info("Setting up TICI fan handler") self.last_ignition = False - self.controller = PIDController(k_p=0, k_i=4e-3, k_f=1, rate=(1 / DT_HW)) + self.controller = PIDController(k_p=0, k_i=4e-3, rate=(1 / DT_HW)) def update(self, cur_temp: float, ignition: bool) -> int: self.controller.neg_limit = -(100 if ignition else 30) @@ -35,4 +35,3 @@ class TiciFanController(BaseFanController): self.last_ignition = ignition return fan_pwr_out -